Support of persistent storage of bundles
Currently, we have only half-baked support for bundle storage. If we accept a bundle, we basically only ensure it stays in memory forever... (Though, restart of the application will delete it silently as we do not have persistent storage.) Also, we do not have a "backlog" for bundles which cannot be routed currently. Rather, for bundles in custody, we do infinite retries for routing in the bundle processor, simply pumping up the CPU usage in most cases.
We should implement persistent storage, allow to select the storage type for bundles and aim for keeping a bundle pointer in memory for the least possible amount of time. For that, we need a good API telling the storage manager when it is able to free the in-memory bundle data structure. We should somehow ensure that a bundle only has one "owner" at a time. When the "owner" becomes the storage manager, it may free the bundle. Besides, the storage manager will take care of the retention constraints and offer the ability to scan the list of bundles periodically for any non-routed bundles, allowing to re-route them. The storage backend should also support a simple, yet powerful, way to store routing information. We should decide whether to store data regarding past routing decisions or simply re-route all bundles in storage on a restart of the application.
Our current goal is to implement persistent storage as a special kind of CLA. The persistent storage of routing information should be achieved by the Bundle Dispatcher Module handling that information. (Upon restart, uD3TN should be re-configured appropriately.)