25#ifndef _global_metadata_cache_h
26#define _global_metadata_cache_h
32#include "BESFileLockingCache.h"
33#include "BESInternalFatalError.h"
34#include "BESContainer.h"
39#define XML_BASE_MISSING_MEANS_OMIT_ATTRIBUTE 1
89class GlobalMetadataStore:
public BESFileLockingCache {
91 bool d_use_local_time;
92 std::string d_ledger_name;
93 std::string d_xml_base;
95 static bool d_enabled;
96 static GlobalMetadataStore *d_instance;
101 static void delete_instance() {
106 friend class DmrppMetadataStore;
107 friend class DmrppMetadataStoreTest;
108 friend class GlobalMetadataStoreTest;
111 std::string d_ledger_entry;
114 std::string
get_hash(
const std::string &name);
132 struct StreamDAP :
public std::unary_function<libdap::DapObj*, void> {
136 StreamDAP() : d_dds(0), d_dmr(0) {
139 StreamDAP(libdap::DDS *dds) : d_dds(dds), d_dmr(0) { }
140 StreamDAP(libdap::DMR *dmr) : d_dds(0), d_dmr(dmr) { }
142 virtual void operator()(std::ostream &os) = 0;
146 struct StreamDDS :
public StreamDAP {
147 StreamDDS(libdap::DDS *dds) : StreamDAP(dds) { }
148 StreamDDS(libdap::DMR *dmr) : StreamDAP(dmr) { }
154 struct StreamDAS :
public StreamDAP {
155 StreamDAS(libdap::DDS *dds) : StreamDAP(dds) { }
156 StreamDAS(libdap::DMR *dmr) : StreamDAP(dmr) { }
162 struct StreamDMR :
public StreamDAP {
163 StreamDMR(libdap::DDS *dds) : StreamDAP(dds) { }
164 StreamDMR(libdap::DMR *dmr) : StreamDAP(dmr) { }
172 const std::string &object_name);
176 const std::string &xml_base,
const std::string &object_name);
178 bool remove_response_helper(
const std::string& name,
const std::string &suffix,
const std::string &object_name);
181 static void insert_xml_base(
int fd, std::ostream &os,
const std::string &xml_base);
193 struct MDSReadLock :
public std::unary_function<std::string, bool> {
196 GlobalMetadataStore *mds;
197 MDSReadLock() : name(
""), locked(
false), mds(0) { }
198 MDSReadLock(
const std::string n,
bool l, GlobalMetadataStore *store): name(n), locked(l), mds(store) { }
200 if (locked) mds->unlock_and_close(name);
204 virtual bool operator()() {
return locked; }
207 virtual void clearLock() {
208 if (locked) mds->unlock_and_close(name);
225 GlobalMetadataStore(
const std::string &cache_dir,
const std::string &prefix,
unsigned long long size);
228 static std::string get_cache_dir_from_config();
229 static std::string get_cache_prefix_from_config();
230 static unsigned long get_cache_size_from_config();
233 static GlobalMetadataStore *
get_instance(
const std::string &cache_dir,
const std::string &prefix,
234 unsigned long long size);
237 virtual ~GlobalMetadataStore()
241 virtual bool add_responses(libdap::DDS *dds,
const std::string &name);
242 virtual bool add_responses(libdap::DMR *dmr,
const std::string &name);
247 virtual MDSReadLock
is_dmr_available(
const std::string &realName,
const std::string &relativeName,
const std::string &fileType);
258 virtual bool is_available_helper(
const std::string &realName,
const std::string &relativeName,
const std::string &fileType,
const std::string &suffix);
260 virtual time_t
get_cache_lmt(
const std::string &fileName,
const std::string &suffix);
275 virtual void parse_das_from_mds(libdap::DAS*das,
const std::string &name);
A container is something that holds data. E.G., a netcdf file or a database entry.
exception thrown if an internal error is found and is fatal to the BES