wiki:CMDI 1.2/Lifecycle management/Summary

Version 3 (modified by Twan Goosen, 10 years ago) (diff)

solution

This page is a subpage of CMDI 1.2

Lifecycle Management in CMDI 1.2: Executive summary

This page provides an executive summary of the issue and proposed solution fully described in CMDI 1.2/Lifecycle management.

Issue description

Once published, a component gets 'frozen' so that all instantiations can rely on it not changing and thus are guaranteed to retain their validity. Also, after a certain 'cooling down' period, published components cannot be removed from the public space (except by administrators). This leads to issues when changes in the domain or new insights need to be incorporated in the component. One can create a new component based on an existing one, extend it and finally make it public. But as a versioning mechanism this has a number of limitations:

  • There is no reliable way to find out who is instantiating specific components, so the users are unknown and cannot simply be informed
  • The old component cannot be deleted, so new users might accidentally start using the old one
  • All of this is very informal, and requires a lot of work with few guarantees

A formal way of deprecating components and specifying versioning information would solve these issues. In such a workflow, the owner of a component can:

  1. Create a new component (e.g. by copying the existing component as a basis)
  2. Edit until satisfied
  3. Publish into public space
  4. Deprecate the 'precursor' component
  5. Designate the new component as 'successor' to the old one

This information needs to be communicated to the client that request the deprecated component, and remove it from the public list. Clients should of course still be able to use the deprecated component since it is not always possible to upgrade.

Description of proposed solution

The component specification needs to be extended with a number of header elements that contain the versioning information. The header elements to be added are described in the following subsections. In addition to these extensions to the component model, the infrastructure needs to be adapted to implement a workflow for changing lifecycle statuses and the consequences of such changes. More specifically, the CMDI Component Registry will have to manage the status of each component and discourage users (both metadata modellers and creators) from using components or profiles that carry a non-production (i.e. development or deprecated) state. Details of the required changes are given below.

Status header

/CMD_ComponentSpec/Header/Status

This mandatory element indicates the status of the component at time of retrieval. It has exactly one value out of the following:

  • development (may still be edited by owner(s); only listed if marked for review)
  • production (should be listed publicly, read-only to everyone)
  • deprecated (no longer in public listing, queryable and read-only to everyone)

Implications for the infrastructure: Only the following status changed should be allowed: developmentproduction and productiondeprecated.

Status comment header (optional)

/CMD_ComponentSpec/Header/StatusComment

This optional element offers a place for the owner of the component to store information regarding the reason for deprecation or succession.

Successor header (optional)

/CMD_ComponentSpec/Header/Successor

This optional element points to the direct successor of the component. It indicates a succession relation and is only meaningful if the values of /CMD_ComponentSpec/Header/Status is deprecated. The value should be the full URI of the successor component. Only a single successor can be specified. The successor relation thus is a 1:1 relation.

Implications for the infrastructure: Succession is a transitive relation. The status of the final component in a successor chain should be production. Users should be warned when deprecating a component without specifying a successor component.

Derived from header (optional)

/CMD_ComponentSpec/Header/DerivedFrom

This optional element points to the component from which the specified component was derived. This information gets stored at the moment a component is created (i.e. generally this will happen automatically in the Component Registry). No structural inheritance or even similarity is implied. This element is intended to be used for the construction of 'derivation trees' for metadata modelers to navigate, e.g. inside the Component Registry. Only a single component can be specified here.

Note that the derived-from relation is not the inverse of the successor relation.


Infrastructure: Component Registry

Status filtering

The browsing mode of the Component Registry, as well as the REST service through which the list of components and profiles can be requested, needs to be filterable. Currently, there is a switch between private and public components. With the proposed set of status values, this needs to be revisited. A suitable paradigm seems to consist of two main views: components visible by the logged in user and components visible to the public; there may be an overlap. Then the following filter toggles are available for the latter view, both OFF by default:

  • development components marked for review
  • deprecated components
Usage warnings

The default filter settings described above are the first and most important step in discouraging users to use non-production components. In addition, warnings can be given at two stages:

  • visually but non-obtrusive in the listing (e.g. warning icons on rows that represents the deprecated or development components)
  • through a modal dialogue when a user actively decides to include such a component (through 'edit as new' or by dragging it into a component being edited). Should be checked recursively, i.e. also give warning whenever the the selected component contains deprecated components.
  • visually in single component view (e.g. warning icon (same as in listing) beside any deprecated sub-components in the lower pane of CR)
Automatic 'derived from'

When a component is created by selecting an existing component and clicking 'edit as new', the DerivedFrom header value should automatically be populated with the ID of the original component. However it should be possible for the user to remove this or put another ID in place (but this should clearly be an advanced option!).

Owner/user notifications

The following automatic notifications would be nice to have:

  • Notification of component owners when a component referenced (either directly or indirectly) in one of their components becomes deprecated
  • Notification of component owners when a derivative of one of their components is created
  • Notification of component subscribers when any of the subscribed components become deprecated

RSS and e-mail can be used as means of notification/subscription.


Tools: metadata editing

Deprecated versions of profiles should not be advertised to the user (e.g. should not appear in the profiles list in Arbil) but there should be no restriction in using them (i.e. the can still be added by their schema URL) and existing metadata will be untouched. The metadata editor however could indicate the deprecated status of used profiles, including (non-obtrusive) notifications about the status of the profile the metadata being worked on is based on. For example, the icon shown for the metadata documents could reflect the state of the profile. Similarly, the list of active profiles in Arbil could mark those profiles in the list that are marked as deprecated. In case a successor is available, the editor should notify the user about that as well and ideally offer to load that profile instead (or in addition). Automatic upgrading to the new version should not happen, but assisting the user in attempting a migration could be considered (here the user should be warned about potential implications on the semantics of the existing values as a result!).


Tools: search & catalogue tools

Search tools that explicitly distinguish between profiles in the user interface could apply clustering with respect to different versions of the same profile (traversing the succession chain). In those cases where profile names are shown, it could make sense to show the status of the profile (e.g. under development, deprecated) if this is considered to be of interest to the user.