bes Updated for version 3.20.13
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
39class ObjMemCache; // in bes/dap
40
41namespace libdap {
42
43 class DAS;
44 class DDS;
45 class DMR;
46 class DataDDS;
47
48}
49
56 public:
57 explicit HDF5RequestHandler(const std::string & name);
58 ~HDF5RequestHandler(void) override;
59
60 static bool hdf5_build_das(BESDataHandlerInterface & dhi);
61 static bool hdf5_build_dds(BESDataHandlerInterface & dhi);
62 static bool hdf5_build_data(BESDataHandlerInterface & dhi);
63 static bool hdf5_build_dmr(BESDataHandlerInterface & dhi);
64 static bool hdf5_build_help(BESDataHandlerInterface & dhi);
65 static bool hdf5_build_version(BESDataHandlerInterface & dhi);
66
67 static bool get_usecf() { return _usecf;}
68 static bool get_pass_fileid() { return _pass_fileid;}
69 static bool get_disable_structmeta() { return _disable_structmeta;}
70 static bool get_disable_ecsmeta() { return _disable_ecsmeta;}
71 static bool get_keep_var_leading_underscore() { return _keep_var_leading_underscore;}
72 static bool get_check_name_clashing() { return _check_name_clashing;}
73 static bool get_add_path_attrs() { return _add_path_attrs;}
74 static bool get_drop_long_string() { return _drop_long_string;}
75 static bool get_fillvalue_check() { return _fillvalue_check;}
76 static bool get_check_ignore_obj() { return _check_ignore_obj;}
77 static bool get_force_flatten_coor_attr() { return _flatten_coor_attr;}
78 static bool get_eos5_rm_convention_attr_path() { return _eos5_rm_convention_attr_path;}
79 static bool get_dmr_long_int() { return _dmr_long_int;}
80 static bool get_no_zero_size_fullnameattr() { return _no_zero_size_fullnameattr;}
81 static bool get_enable_coord_attr_add_path() { return _enable_coord_attr_add_path;}
82
83 static bool get_usecfdmr() { return _usecfdmr;}
84 static bool get_add_dap4_coverage() { return _add_dap4_coverage;}
85
86 // Default Handle dimension key, only valid when the default option is on.
87 static bool get_default_handle_dimension() { return _default_handle_dimension;}
88
89 static void set_dmr_64bit_int(libdap::DMR *dmr) { dmr_int64 = dmr;}
90 static libdap::DMR* get_dmr_64bit_int() {return dmr_int64;}
91
92 // Handling Memory Cache
93 static string get_stp_east_filename() {return _stp_east_filename;}
94 static string get_stp_north_filename() {return _stp_north_filename;}
95
96 // Handling Cache
97 static unsigned int get_mdcache_entries() { return _mdcache_entries;}
98 static unsigned int get_lrdcache_entries() { return _lrdcache_entries;}
99 static unsigned int get_srdcache_entries() { return _srdcache_entries;}
100 static float get_cache_purge_level() { return _cache_purge_level;}
101 //static bool check_dds_cache() {return (dds_cache?true:false);}
102
103 static ObjMemCache* get_lrdata_mem_cache() {return lrdata_mem_cache;}
104 void set_lrdata_mem_cache(ObjMemCache* my_lrdata_mem_cache)
105 {lrdata_mem_cache=my_lrdata_mem_cache;}
106
107 static ObjMemCache* get_srdata_mem_cache() {return srdata_mem_cache;}
108 void set_srdata_mem_cache(ObjMemCache* my_srdata_mem_cache)
109 {srdata_mem_cache=my_srdata_mem_cache;}
110
111 static bool get_common_cache_dirs() { return _common_cache_dirs;}
112 static void get_lrd_cache_dir_list(std::vector<string>& cur_lrd_cache_dir_list)
113 { cur_lrd_cache_dir_list = lrd_cache_dir_list;}
114
115 static void get_lrd_non_cache_dir_list(std::vector<string>& cur_lrd_non_cache_dir_list)
116 { cur_lrd_non_cache_dir_list = lrd_non_cache_dir_list;}
117
118 static void get_lrd_var_cache_file_list(std::vector<string>& cur_lrd_var_cache_file_list)
119 { cur_lrd_var_cache_file_list = lrd_var_cache_file_list;}
120
121
122 // Handling Disk Cache
123 static bool get_use_disk_cache() {return _use_disk_cache;}
124 static string get_disk_cache_dir() { return _disk_cache_dir;}
125 static string get_disk_cachefile_prefix() { return _disk_cachefile_prefix;}
126 static unsigned long long get_disk_cache_size() {return _disk_cache_size;}
127 static bool get_disk_cache_comp_data() { return _disk_cache_comp_data;}
128 static bool get_disk_cache_float_only_comp(){return _disk_cache_float_only_comp_data;}
129 static float get_disk_comp_threshold() {return _disk_cache_comp_threshold;}
130 static unsigned long get_disk_var_size() {return _disk_cache_var_size; }
131
132 static bool get_use_eosgeo_cachefile() {return _use_latlon_disk_cache; }
133 static string get_latlon_disk_cache_dir() { return _latlon_disk_cache_dir;}
134 static string get_latlon_disk_cachefile_prefix() { return _latlon_disk_cachefile_prefix;}
135 static long get_latlon_disk_cache_size() {return _latlon_disk_cache_size;}
136
137 // jhrg 3/9/22
138 static bool get_escape_utf8_attr() {return _escape_utf8_attr;}
139
140 // This handler supports the "not including attributes" in
141 // the data access feature. Attributes are generated only
142 // if necessary. KY 10/30/19
143 void add_attributes(BESDataHandlerInterface &dhi) override;
144
145 private:
146 // Loads configuration state from TheBESKeys
147 void static load_config();
148
149 //cache variables.
150
151 static unsigned int _mdcache_entries;
152 static unsigned int _lrdcache_entries;
153 static unsigned int _srdcache_entries;
154 static float _cache_purge_level;
155
156 static ObjMemCache *das_cache;
157 static ObjMemCache *dds_cache;
158 static ObjMemCache *datadds_cache;
159 static ObjMemCache *dmr_cache;
160 static ObjMemCache *lrdata_mem_cache;
161 static ObjMemCache *srdata_mem_cache;
162
163 // BES keys
164 static bool _usecf;
165 static bool _pass_fileid;
166 static bool _disable_structmeta;
167 static bool _disable_ecsmeta;
168 static bool _keep_var_leading_underscore;
169 static bool _check_name_clashing;
170 static bool _add_path_attrs;
171 static bool _drop_long_string;
172 static bool _fillvalue_check;
173 static bool _check_ignore_obj;
174 static bool _flatten_coor_attr;
175 static bool _eos5_rm_convention_attr_path;
176 static bool _dmr_long_int;
177 static bool _no_zero_size_fullnameattr;
178 static bool _enable_coord_attr_add_path;
179
180 static bool _usecfdmr;
181 static bool _add_dap4_coverage;
182
183 // For the default option
184 static bool _default_handle_dimension;
185 static std::string _stp_east_filename;
186 static std::string _stp_north_filename;
187
188 static libdap::DMR *dmr_int64;
189 static bool _use_disk_cache;
190 static std::string _disk_cache_dir;
191 static std::string _disk_cachefile_prefix;
192 static unsigned long long _disk_cache_size;
193 static bool _disk_cache_comp_data;
194 static bool _disk_cache_float_only_comp_data;
195 static float _disk_cache_comp_threshold;
196 static unsigned long _disk_cache_var_size;
197
198
199 static bool _use_disk_meta_cache;
200 static bool _use_disk_dds_cache;
201 static std::string _disk_meta_cache_path;
202
203 static bool _use_latlon_disk_cache;
204 static long _latlon_disk_cache_size;
205 static std::string _latlon_disk_cache_dir;
206 static std::string _latlon_disk_cachefile_prefix;
207
208 static bool _common_cache_dirs;
209
210 static bool _escape_utf8_attr; // jhrg 3/9/22
211
212 static std::vector<std::string> lrd_cache_dir_list;
213 static std::vector<string> lrd_non_cache_dir_list;
214 static std::vector<string> lrd_var_cache_file_list;
215 static bool obtain_lrd_common_cache_dirs();
216
217 static bool hdf5_build_data_with_IDs(BESDataHandlerInterface &dhi);
218 static bool hdf5_build_dmr_with_IDs(BESDataHandlerInterface &dhi);
219
220 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);
221 static void get_dds_without_attributes_datadds(BESDataDDSResponse*data_bdds,const std::string &container_name,const std::string &filename);
222
223 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,
224 const std::string & dds_cache_fname,const std::string &das_cache_fname, hid_t h5_fd, bool das_from_dc);
225
226 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);
227
228 static bool write_dds_to_disk_cache(const std::string& dds_cache_fname,libdap::DDS *dds_ptr);
229
230 static bool write_das_to_disk_cache(const std::string & das_cache_fname, libdap::DAS *das_ptr);
231
232 static bool read_das_from_disk_cache(const std::string & cache_filename,libdap::DAS *das_ptr);
233
234};
235
236#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