Improve logging modules and listing #984
Avoid sorting all modules. Only sort enabled modules. This allows for cycles to exist within all modules, but they are only seen as a problem if they actually enabled.
This commit is contained in:
parent
08be6aca91
commit
b82d4ee2fe
|
@ -308,20 +308,9 @@ public class Main
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
StartLog.debug("Sorting Modules");
|
|
||||||
try
|
|
||||||
{
|
|
||||||
modules.sort();
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
throw new UsageException(ERR_BAD_GRAPH,e);
|
|
||||||
}
|
|
||||||
|
|
||||||
args.setAllModules(modules);
|
args.setAllModules(modules);
|
||||||
List<Module> activeModules = modules.getEnabled();
|
List<Module> activeModules = modules.getEnabled();
|
||||||
|
|
||||||
|
|
||||||
final Version START_VERSION = new Version(StartArgs.VERSION);
|
final Version START_VERSION = new Version(StartArgs.VERSION);
|
||||||
|
|
||||||
for(Module enabled: activeModules)
|
for(Module enabled: activeModules)
|
||||||
|
@ -466,8 +455,9 @@ public class Main
|
||||||
{
|
{
|
||||||
invokeMain(cl, args);
|
invokeMain(cl, args);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Throwable e)
|
||||||
{
|
{
|
||||||
|
e.printStackTrace();
|
||||||
usageExit(e,ERR_INVOKE_MAIN,startupArgs.isTestingModeEnabled());
|
usageExit(e,ERR_INVOKE_MAIN,startupArgs.isTestingModeEnabled());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -168,7 +168,8 @@ public class Modules implements Iterable<Module>
|
||||||
public void dumpEnabled()
|
public void dumpEnabled()
|
||||||
{
|
{
|
||||||
int i=0;
|
int i=0;
|
||||||
for (Module module:getEnabled())
|
List<Module> enabled = getEnabled();
|
||||||
|
for (Module module:enabled)
|
||||||
{
|
{
|
||||||
String name=module.getName();
|
String name=module.getName();
|
||||||
String index=(i++)+")";
|
String index=(i++)+")";
|
||||||
|
@ -240,31 +241,31 @@ public class Modules implements Iterable<Module>
|
||||||
return str.toString();
|
return str.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sort()
|
public List<Module> getEnabled()
|
||||||
{
|
{
|
||||||
|
List<Module> enabled = _modules.stream().filter(m->{return m.isEnabled();}).collect(Collectors.toList());
|
||||||
|
|
||||||
TopologicalSort<Module> sort = new TopologicalSort<>();
|
TopologicalSort<Module> sort = new TopologicalSort<>();
|
||||||
for (Module module: _modules)
|
for (Module module: enabled)
|
||||||
{
|
{
|
||||||
Consumer<String> add = name ->
|
Consumer<String> add = name ->
|
||||||
{
|
{
|
||||||
Module dependency = _names.get(name);
|
Module dependency = _names.get(name);
|
||||||
if (dependency!=null)
|
if (dependency!=null && dependency.isEnabled())
|
||||||
sort.addDependency(module,dependency);
|
sort.addDependency(module,dependency);
|
||||||
|
|
||||||
Set<Module> provided = _provided.get(name);
|
Set<Module> provided = _provided.get(name);
|
||||||
if (provided!=null)
|
if (provided!=null)
|
||||||
provided.forEach(p->sort.addDependency(module,p));
|
for (Module p : provided)
|
||||||
|
if (p.isEnabled())
|
||||||
|
sort.addDependency(module,p);
|
||||||
};
|
};
|
||||||
module.getDepends().forEach(add);
|
module.getDepends().forEach(add);
|
||||||
module.getOptional().forEach(add);
|
module.getOptional().forEach(add);
|
||||||
}
|
}
|
||||||
|
|
||||||
sort.sort(_modules);
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Module> getEnabled()
|
sort.sort(enabled);
|
||||||
{
|
return enabled;
|
||||||
return _modules.stream().filter(m->{return m.isEnabled();}).collect(Collectors.toList());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Enable a module
|
/** Enable a module
|
||||||
|
@ -287,6 +288,12 @@ public class Modules implements Iterable<Module>
|
||||||
{
|
{
|
||||||
StartLog.debug("enable %s from %s transitive=%b",module,enabledFrom,transitive);
|
StartLog.debug("enable %s from %s transitive=%b",module,enabledFrom,transitive);
|
||||||
|
|
||||||
|
if (newlyEnabled.contains(module.getName()))
|
||||||
|
{
|
||||||
|
StartLog.debug("Cycle at %s",module);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Check that this is not already provided by another module!
|
// Check that this is not already provided by another module!
|
||||||
for (String name:module.getProvides())
|
for (String name:module.getProvides())
|
||||||
{
|
{
|
||||||
|
@ -341,7 +348,6 @@ public class Modules implements Iterable<Module>
|
||||||
{
|
{
|
||||||
Path file = _baseHome.getPath("modules/" + dependsOn + ".mod");
|
Path file = _baseHome.getPath("modules/" + dependsOn + ".mod");
|
||||||
registerModule(file).expandProperties(_args.getProperties());
|
registerModule(file).expandProperties(_args.getProperties());
|
||||||
sort();
|
|
||||||
providers = _provided.get(dependsOn);
|
providers = _provided.get(dependsOn);
|
||||||
if (providers==null || providers.isEmpty())
|
if (providers==null || providers.isEmpty())
|
||||||
throw new UsageException("Module %s does not provide %s",_baseHome.toShortForm(file),dependsOn);
|
throw new UsageException("Module %s does not provide %s",_baseHome.toShortForm(file),dependsOn);
|
||||||
|
|
|
@ -81,7 +81,6 @@ Module Management:
|
||||||
Note: this can also be used in the ${jetty.base}/start.ini
|
Note: this can also be used in the ${jetty.base}/start.ini
|
||||||
or ${jetty.base}/start.d/*.ini files.
|
or ${jetty.base}/start.d/*.ini files.
|
||||||
|
|
||||||
--add=<modulename>(,<modulename>)*
|
|
||||||
--add-to-start=<modulename>(,<modulename>)*
|
--add-to-start=<modulename>(,<modulename>)*
|
||||||
Add the modules to the list of modules enabled at start.
|
Add the modules to the list of modules enabled at start.
|
||||||
Transitive dependencies are followed and dependent
|
Transitive dependencies are followed and dependent
|
||||||
|
|
|
@ -62,7 +62,6 @@ public class ModuleGraphWriterTest
|
||||||
|
|
||||||
Modules modules = new Modules(basehome, args);
|
Modules modules = new Modules(basehome, args);
|
||||||
modules.registerAll();
|
modules.registerAll();
|
||||||
modules.sort();
|
|
||||||
|
|
||||||
Path outputFile = basehome.getBasePath("graph.dot");
|
Path outputFile = basehome.getBasePath("graph.dot");
|
||||||
|
|
||||||
|
|
|
@ -168,7 +168,6 @@ public class ModulesTest
|
||||||
// Enable 2 modules
|
// Enable 2 modules
|
||||||
modules.enable("base",TEST_SOURCE);
|
modules.enable("base",TEST_SOURCE);
|
||||||
modules.enable("optional",TEST_SOURCE);
|
modules.enable("optional",TEST_SOURCE);
|
||||||
modules.sort();
|
|
||||||
|
|
||||||
// Collect active module list
|
// Collect active module list
|
||||||
List<Module> active = modules.getEnabled();
|
List<Module> active = modules.getEnabled();
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
-module=root
|
--module=root
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
--create-startd --add=tom
|
--create-startd
|
||||||
|
--add-to-start=tom
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
-module=root
|
--module=root
|
||||||
|
|
Loading…
Reference in New Issue