bes Updated for version 3.20.10
HDF5RequestHandler.h
Go to the documentation of this file.
1// -*- mode: c++; c-basic-offset:4 -*-
2
3// This file is part of hdf5_handler, a data handler for the OPeNDAP data
4// server.
5
6// Copyright (c) 2002,2003 OPeNDAP, Inc.
7// Author: James Gallagher <jgallagher@opendap.org>
8//
9// This is free software; you can redistribute it and/or modify it under the
10// terms of the GNU Lesser General Public License as published by the Free
11// Software Foundation; either version 2.1 of the License, or (at your
12// option) any later version.
13//
14// This software is distributed in the hope that it will be useful, but
15// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
17// License for more details.
18//
19// You should have received a copy of the GNU Lesser General Public
20// License along with this library; if not, write to the Free Software
21// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22//
23// You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24
25// HDF5RequestHandler.h
26
27#ifndef I_HDF5RequestHandler_H
28#define I_HDF5RequestHandler_H
29
30#include<string>
31#include<map>
32#include<vector>
33#include "BESRequestHandler.h"
34#include "HDF5_DataMemCache.h"
35#include <BESDDSResponse.h>
36#include <BESDataDDSResponse.h>
37#include <hdf5.h>
38
39
40class ObjMemCache; // in bes/dap
41
42namespace libdap {
43
44 class DAS;
45 class DDS;
46 class DMR;
47 class DataDDS;
48
49}
50
57 public:
58 explicit HDF5RequestHandler(const std::string & name);
59 virtual ~HDF5RequestHandler(void);
60
61
62 static bool hdf5_build_das(BESDataHandlerInterface & dhi);
63 static bool hdf5_build_dds(BESDataHandlerInterface & dhi);
64 static bool hdf5_build_data(BESDataHandlerInterface & dhi);
65 static bool hdf5_build_dmr(BESDataHandlerInterface & dhi);
66 static bool hdf5_build_help(BESDataHandlerInterface & dhi);
67 static bool hdf5_build_version(BESDataHandlerInterface & dhi);
68
69 static bool get_usecf() { return _usecf;}
70 static bool get_pass_fileid() { return _pass_fileid;}
71 static bool get_disable_structmeta() { return _disable_structmeta;}
72 static bool get_disable_ecsmeta() { return _disable_ecsmeta;}
73 static bool get_keep_var_leading_underscore() { return _keep_var_leading_underscore;}
74 static bool get_check_name_clashing() { return _check_name_clashing;}
75 static bool get_add_path_attrs() { return _add_path_attrs;}
76 static bool get_drop_long_string() { return _drop_long_string;}
77 static bool get_fillvalue_check() { return _fillvalue_check;}
78 static bool get_check_ignore_obj() { return _check_ignore_obj;}
79 static bool get_force_flatten_coor_attr() { return _flatten_coor_attr;}
80 static bool get_eos5_rm_convention_attr_path() { return _eos5_rm_convention_attr_path;}
81 static bool get_dmr_long_int() { return _dmr_long_int;}
82 static bool get_no_zero_size_fullnameattr() { return _no_zero_size_fullnameattr;}
83 static bool get_enable_coord_attr_add_path() { return _enable_coord_attr_add_path;}
84
85 static bool get_usecfdmr() { return _usecfdmr;}
86
87 // Default Handle dimension key, only valid when the default option is on.
88 static bool get_default_handle_dimension() { return _default_handle_dimension;}
89
90 static void set_dmr_64bit_int(libdap::DMR *dmr) { dmr_int64 = dmr;}
91 static libdap::DMR* get_dmr_64bit_int() {return dmr_int64;}
92
93 // Handling Memory Cache
94 static string get_stp_east_filename() {return _stp_east_filename;}
95 static string get_stp_north_filename() {return _stp_north_filename;}
96
97 // Handling Cache
98 static unsigned int get_mdcache_entries() { return _mdcache_entries;}
99 static unsigned int get_lrdcache_entries() { return _lrdcache_entries;}
100 static unsigned int get_srdcache_entries() { return _srdcache_entries;}
101 static float get_cache_purge_level() { return _cache_purge_level;}
102 //static bool check_dds_cache() {return (dds_cache?true:false);}
103
104 static ObjMemCache* get_lrdata_mem_cache() {return lrdata_mem_cache;}
105 void set_lrdata_mem_cache(ObjMemCache* my_lrdata_mem_cache)
106 {lrdata_mem_cache=my_lrdata_mem_cache;}
107
108 static ObjMemCache* get_srdata_mem_cache() {return srdata_mem_cache;}
109 void set_srdata_mem_cache(ObjMemCache* my_srdata_mem_cache)
110 {srdata_mem_cache=my_srdata_mem_cache;}
111
112 static bool get_common_cache_dirs() { return _common_cache_dirs;}
113 static void get_lrd_cache_dir_list(std::vector<string>& cur_lrd_cache_dir_list)
114 { cur_lrd_cache_dir_list = lrd_cache_dir_list;}
115
116 static void get_lrd_non_cache_dir_list(std::vector<string>& cur_lrd_non_cache_dir_list)
117 { cur_lrd_non_cache_dir_list = lrd_non_cache_dir_list;}
118
119 static void get_lrd_var_cache_file_list(std::vector<string>& cur_lrd_var_cache_file_list)
120 { cur_lrd_var_cache_file_list = lrd_var_cache_file_list;}
121
122
123 // Handling Disk Cache
124 static bool get_use_disk_cache() {return _use_disk_cache;}
125 static string get_disk_cache_dir() { return _disk_cache_dir;}
126 static string get_disk_cachefile_prefix() { return _disk_cachefile_prefix;}
127 static unsigned long long get_disk_cache_size() {return _disk_cache_size;}
128 static bool get_disk_cache_comp_data() { return _disk_cache_comp_data;}
129 static bool get_disk_cache_float_only_comp(){return _disk_cache_float_only_comp_data;}
130 static float get_disk_comp_threshold() {return _disk_cache_comp_threshold;}
131 static unsigned long get_disk_var_size() {return _disk_cache_var_size; }
132
133 static bool get_use_eosgeo_cachefile() {return _use_latlon_disk_cache; }
134 static string get_latlon_disk_cache_dir() { return _latlon_disk_cache_dir;}
135 static string get_latlon_disk_cachefile_prefix() { return _latlon_disk_cachefile_prefix;}
136 static long get_latlon_disk_cache_size() {return _latlon_disk_cache_size;}
137
138 // This handler supports the "not including attributes" in
139 // the data access feature. Attributes are generated only
140 // if necessary. KY 10/30/19
141 virtual void add_attributes(BESDataHandlerInterface &dhi);
142
143 private:
144 // Loads configuration state from TheBESKeys
145 void static load_config();
146
147 //cache variables.
148
149 static unsigned int _mdcache_entries;
150 static unsigned int _lrdcache_entries;
151 static unsigned int _srdcache_entries;
152 static float _cache_purge_level;
153
154 static ObjMemCache *das_cache;
155 static ObjMemCache *dds_cache;
156 static ObjMemCache *datadds_cache;
157 static ObjMemCache *dmr_cache;
158 static ObjMemCache *lrdata_mem_cache;
159 static ObjMemCache *srdata_mem_cache;
160
161 // BES keys
162 static bool _usecf;
163 static bool _pass_fileid;
164 static bool _disable_structmeta;
165 static bool _disable_ecsmeta;
166 static bool _keep_var_leading_underscore;
167 static bool _check_name_clashing;
168 static bool _add_path_attrs;
169 static bool _drop_long_string;
170 static bool _fillvalue_check;
171 static bool _check_ignore_obj;
172 static bool _flatten_coor_attr;
173 static bool _eos5_rm_convention_attr_path;
174 static bool _dmr_long_int;
175 static bool _no_zero_size_fullnameattr;
176 static bool _enable_coord_attr_add_path;
177
178 static bool _usecfdmr;
179
180 // For the default option
181 static bool _default_handle_dimension;
182 static std::string _stp_east_filename;
183 static std::string _stp_north_filename;
184
185 static libdap::DMR *dmr_int64;
186 static bool _use_disk_cache;
187 static std::string _disk_cache_dir;
188 static std::string _disk_cachefile_prefix;
189 static unsigned long long _disk_cache_size;
190 static bool _disk_cache_comp_data;
191 static bool _disk_cache_float_only_comp_data;
192 static float _disk_cache_comp_threshold;
193 static unsigned long _disk_cache_var_size;
194
195
196 static bool _use_disk_meta_cache;
197 static bool _use_disk_dds_cache;
198 static std::string _disk_meta_cache_path;
199
200 static bool _use_latlon_disk_cache;
201 static long _latlon_disk_cache_size;
202 static std::string _latlon_disk_cache_dir;
203 static std::string _latlon_disk_cachefile_prefix;
204
205 static bool _common_cache_dirs;
206 static std::vector<std::string> lrd_cache_dir_list;
207 static std::vector<string> lrd_non_cache_dir_list;
208 static std::vector<string> lrd_var_cache_file_list;
209 static bool obtain_lrd_common_cache_dirs();
210
211 static bool hdf5_build_data_with_IDs(BESDataHandlerInterface &dhi);
212 static bool hdf5_build_dmr_with_IDs(BESDataHandlerInterface &dhi);
213
214 static void get_dds_with_attributes( BESDDSResponse*bdds,BESDataDDSResponse*data_bdds,const std::string &container_name,const std::string &filename, const std::string &dds_cache_fname, const std::string &das_cache_fname,bool dds_from_dc,bool das_from_dc, bool build_data);
215 static void get_dds_without_attributes_datadds(BESDataDDSResponse*data_bdds,const std::string &container_name,const std::string &filename);
216
217 static void read_dds_from_disk_cache(BESDDSResponse* bdds, BESDataDDSResponse* data_bdds,bool build_data,const std::string & container_name,const std::string & h5_fname,
218 const std::string & dds_cache_fname,const std::string &das_cache_fname, hid_t h5_fd, bool das_from_dc);
219
220 static void add_das_to_dds(libdap::DDS *dds,const std::string &container_name, const std::string &filename, const std::string &das_cache_fname,hid_t h5_fd, bool das_from_dc);
221
222 static bool write_dds_to_disk_cache(const std::string& dds_cache_fname,libdap::DDS *dds_ptr);
223
224 static bool write_das_to_disk_cache(const std::string & das_cache_fname, libdap::DAS *das_ptr);
225
226 static bool read_das_from_disk_cache(const std::string & cache_filename,libdap::DAS *das_ptr);
227
228};
229
230#endif
Holds a DDS object within the BES.
Represents an OPeNDAP DataDDS DAP2 data object within the BES.
Structure storing information used by the BES to handle the request.
Represents a specific data type request handler.
An in-memory cache for DapObj (DAS, DDS, ...) objects.
Definition: ObjMemCache.h:84