bes Updated for version 3.21.1
The Backend Server (BES) is the lower two tiers of the Hyrax data server
Todo List
Class bes::GlobalMetadataStore
Add support for storing binary DDS and DMR objects. This will require modifications to libdap so that we can 'serialize' those and additions to some of the handlers so that they can record extra information used by their specializations of those objects.
Member bes::GlobalMetadataStore::get_dds_object (const std::string &name)
If/When the DDS can be serialized, we should be able to replace this implementation with something far better - and something that can include information in specialized BaseTypes and DDS classes.
Member BESCatalog::reference_catalog ()
Revisit the reference counting behavior - maybe there's a better way to manage these catalogs?
Member BESCatalogList::num_catalogs () const
Change this to include the default!
Member BESContainerStorageVolatile::BESContainerStorageVolatile (const std::string &n)
Remove the non-BESCatalog file system stuff in this class and combine it with BESContainerStorageCatalog.
Member BESDDSResponse::get_ce ()

Remove use of this method - there is no reason code cannot create its own ConstraintEvaluator.

Member BESDefineResponseHandler::execute (BESDataHandlerInterface &dhi)
Roll this command's execute() method into the XMLDefineCommand::parse_request() method using the NullResponseObject.
Member BESFileContainer::release ()
Call this in the dtor? jhrg 7/25/18
Member BESXMLDefineCommand::prep_request ()
This could just as easily be done at the end of the parse_request() method. Unless we want to support the behavior that <define> could come before <setContainer> in the request document. That is, this method is called by XMLInterface::execute_data_request_plan(), after all the elements have been parsed. jhrg 2/11/18
Class BESXMLSetContainerCommand
This command can be shortened like the setContexts command to use the NullResponseHandler since it does not normally return data to the BES's client (i.e., it's response handler uses the SilentInfo response object).
Member dmrpp::SuperChunk::add_chunk (std::shared_ptr< Chunk > candidate_chunk)

Should candidate_chunk be passed by reference? Maybe calls to this method should use move()? jhrg 5/7/22

Should this only be called when d_chunks is not empty? jhrg 5/7/22

Class HDF5DDS
Change DataDDS to DDS if we can... Doing that will enable the handler to use this to close the library using this class. That is not strictly needed, but it would make both the DDS and DataDDS responses work the same way.
Class HDF5DMR
Change DataDMR to DMR if we can... Doing that will enable the handler to use this to close the library using this class. That is not strictly needed, but it would make both the DMR and DataDMR responses work the same way.
Member ngap::NgapApi::signed_url_is_expired (const http::url &signed_url)
Remove this since it is only used by tests and duplicates http::url::is_expired(). jhrg 10/18/23