Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 4.0

...

The below tables (generated from the attached spreadsheet) map out the base attributes and statistics each object type will have:

Excel
outputhtml
file^newConfigAttributesAndStatistics.xls
namenewConfigAttributesAndStatistics.xls
showSheetNametrue
formatCelltrue

Wiki Markup
{excel:file=^newConfigAttributesAndStatistics.xls|output=html|formatCell=true|showSheetName=true}

Overall work plan

  1. Update BDB+Derby message stores to use new configuration storage model, representing ConfiguredObjects in a more generic fashion through storage attributes as JSON rather than specific table columns as at present.
    • Maintain existing store interface for now, use a new layer shared between BDB+Derby to convert existing objects into the JSON format stored by the new store schema, allowing later change of the store interface using the same on-disk format.
    • Update message content and metadata references to queues to use ids rather than names (allowing queues to be renamed).unmigrated-wiki-markup
    • TODO: what about messages for queues that are definied in XML? (Possibly generate UUID based from name (nameUUIDFromBytes(byte\[\] )
  2. Refine store upgrade process using a model whereby the broker automatically performs the upgrades between each store version upon startup (inc multiple upgrades spanning version gaps).
    • Isolate individual upgrade steps, remove version numbers form the tables and have a version table etc (See Robs patch for example)
    • Convert existing messages to use new id-reference to their associated queue.
  3. Complete implementation of new plugin based JMX MBean adaption layer.
    • VirtualHost, Exchange, Queue etc
    • Updating of tests as necesssary and/or creation of new unit tests to replace old system tests where possible.
    • UserManagement, LoggingManagement MBeans still TBC
  4. Extract the Operational Logging from the core broker and define as a plugin listening for configuration events.
  5. (Complete) Definition of the REST management interface
  6. (Complete) Implementation of the REST management interface
  7. Design the desired layout for the new web management UI
  8. Get the basic web management ui running
  9. Make the ui 'pretty'

...

  • Alternate Exchanges: Although the alternate-exchange is listed as an attribute of the Queue and Exchange above, it probably shouldnt be: the 'attribute' for any given Queue or Exchange will simply be the name of its alternate exchange, but this is not somethign we would want to store on the Queue or Exchange in question since we want to be able to rename Exchanges. Additionally, storing the alternate exchange on an object could make recovery difficult as a specific recovery order would be required which may ultimately be impossible to achieve (e.g. there may be exchange-exchange alternate loops). Instead of storing the alternate exchange as an attribute directly, what we really want to do is be able to define a relationship between a given Queue/Exchange and its alternate (not unlike the parent-child relationships ConfiguredObjects will already have). For this we probably want to seperately store an 'alternate' relationship in the store, relating a given Quue/Exchange with its alternate Exchange and which can be applied after creating the ConfiguredObjects during recovery.
  • Wiki MarkupQueues in XML configuration: When doing upgrades (/before we get rid of the configuration file), it is possible there will be queues definied in the configuration file (rather than the store) which have messages. IDs will need made for these queues to allow matching id-referenced message data in the store. We will probably need to use something like a UUID generated from the queue name as the ID, eg using nameUUIDFromBytes(byte\[\] name).
  • User vs Store configuration: The current intension is for the storage of configuration to be through JSON, however this is also the likely avenue to be taken for users being able to extract and replay their configuration in future through the management interfaces. There is a key difference in that user-facing configuration is still likely to use names for Queue/Exchange/VirtualHost etc configuration, whereas the store is going to mainly refer to objects by their ID to allow renaming etc.