This section describes some aspects of troubleshooting ONOS, with respect to its multi-bundle/OSGi aspects.
Bundle Internals
As mentioned in ONOS : An Overview, ONOS is a multi-module project managed as OSGi bundles by Karaf.
Each bundle is represented by a Maven project with its own POM file, and each project may implement zero or more services. The bundles describe dependencies via:
- POM files - interdependencies between various projects, used by Maven during the build process
- annotations (e.g.
@Reference
) within the code - interdependencies between various services, used by Karaf to resolve module dependencies during system startup
Notably, both prohibit circular references, and the POM file hierarchy, the cross-linking of projects not indicated to be dependencies.
Symptoms and Causes
The following result in failed dependency resolution and builds, and/or the failure to load modules at runtime:
- Not adhering to the dependencies indicated in the POM file(s)
- Circular annotation references among services
- Misconfiguration e.g. circular dependency references in the POM file(s)
We focus on the first two, as these are more common as programmatic errors.