BES: Root Catalog
When we first design Hyrax the BES supported multiple catalogs. At that time the BES had file system based catalog (a.k.a. the catalog called "catalog"), and a catalog implementation for the CEDAR (Coupling, Energetics and Dynamics of Atmospheric Regions).
2 Problem addressed
At the time we designed Hyrax we chose (consciously or not) to ignore the facility of the BES to support multiple catalogs by not making space in the URL scheme for them.
The URL scheme defines a path through a directed graph. And in this graph the Hyrax server presents it holdings. THe OLFS provides a facility to map secondary BES's into the graph based on a path prefix that allows these secondary BES's to be injected into any part of the graph.
However, the system relies entirely on the use of the BES catalog called "catalog" which relies on a filesystem to build it's holdings. Since that time other BES catalogs have been developed (gateway catalog, relational database catalog, etc.) , but there is no simple facility for mapping them into the directed graph of the Hyrax holdings. Each one requires the OLFS be extended to provide a mapping into the graph, and to instruct the BES which catalog to use.
3 Proposed solution
Create a master BES catalog (the catalog called "root" or the "root catalog") which subsumes all of the catalogs in a particular BES. The root catalog should be an extension of the catalog "catalog".
This catalog should behave as follows:
- At it's top level it should reveal to the world the contents of the files system catalog ("catalog") PLUS
- It should inject into the top level catalog a "node" for each of other catalogs in use.
- The name of these child catalog nodes should be the name of the catalog (or be configurable better yet)
- If the child catalog name conflicts with one of the file system holdings then the catalog should take precedence, and the BES should write an error message regarding this to it's logs.
- Access to the child catalogs should be seamless. In other words using the root catalog should allow one to exercise this command:
<bes:setContainer name="catalogContainer" space="root">/data/rdh/CTD</bes:setContainer>
- Which should be setting the container to use the RDH catalog in the above example.