QDP++
qdp_db_imp.h
Go to the documentation of this file.
1// -*- C++ -*-
5
6#ifndef QDP_DB_IMP_H
7#define QDP_DB_IMP_H
8
9#include "qdp_layout.h"
10#include "ConfDataStoreDB.h"
11
12namespace QDP
13{
20
24 const int db_cachesize = 50*1024*1024;
25
29 const int db_pagesize = 64*1024;
30
31 //--------------------------------------------------------------------------------
33
37 template<typename K, typename D>
39 {
40 public:
45 {
46 // Initialize default values
48 {
49 db.setCacheSize(db_cachesize);
50// db.enablePageMove(); // Disable!
51 db.setMaxNumberConfigs(1);
52 }
53 }
54
59 {
60 close();
61 }
62
70 virtual void setCacheSize (const unsigned int size)
71 {
73 db.setCacheSize(size);
74 }
75
76
84 virtual void setCacheSizeMB (const unsigned int size)
85 {
87 db.setCacheSizeMB(size);
88 }
89
90
100 virtual void setPageSize (const unsigned int size)
101 {
102 if (Layout::primaryNode())
103 db.setPageSize(size);
104 }
105
106
115 virtual void setNumberBuckets (const unsigned int num)
116 {
117 if (Layout::primaryNode())
118 db.setNumberBuckets(num);
119 }
120
121
128 virtual void enablePageMove (void)
129 {
130 if (Layout::primaryNode())
131 db.enablePageMove();
132 }
133
134 virtual void disablePageMove (void)
135 {
136 if (Layout::primaryNode())
137 db.disablePageMove();
138 }
139
143 virtual void setMaxUserInfoLen (unsigned int len)
144 {
145 if (Layout::primaryNode())
146 db.setMaxUserInfoLen(len);
147 }
148
149 virtual unsigned int getMaxUserInfoLen (void) const
150 {
151 unsigned int ret = 0;
152 if (Layout::primaryNode())
153 ret = db.getMaxUserInfoLen();
154
156 return ret;
157 }
158
162 virtual void setMaxNumberConfigs (unsigned int num)
163 {
164 if (Layout::primaryNode())
165 db.setMaxNumberConfigs(num);
166 }
167
168 virtual unsigned int getMaxNumberConfigs (void) const
169 {
170 unsigned int ret = 0;
171 if (Layout::primaryNode())
172 ret = db.getMaxNumberConfigs();
173
175 return ret;
176 }
177
178
182 virtual bool fileExists (const std::string& file) const
183 {
184 bool ret = false;
185 if (Layout::primaryNode())
186 ret = db.fileExists(file);
187
189 return ret;
190 }
191
192
203 virtual void open (const std::string& file, int open_flags, int mode)
204 {
205 int ret = 0;
206 if (Layout::primaryNode())
207 ret = db.open(file, open_flags, mode);
208
210 if (ret != 0)
211 {
212 QDPIO::cerr << "Cannot open db file= " << file << std::endl;
213 QDP_abort(1);
214 }
215 }
216
217
218 virtual void close (void)
219 {
220 int ret = 0;
221 if (Layout::primaryNode())
222 ret = db.close();
223
225 if (ret != 0)
226 {
227 QDPIO::cerr << "Error closing db file" << std::endl;
228 QDP_abort(1);
229 }
230 }
231
237 bool exist(const K& key)
238 {
239 bool ret = true;
240 if (Layout::primaryNode())
241 ret = db.exist(key);
242
244
245 return ret;
246 }
247
248
257 void insert (const K& key, const D& data)
258 {
259 int ret = 0;
260 if (Layout::primaryNode())
261 ret = db.insert(key, data);
262
264 if (ret != 0)
265 {
266 QDPIO::cerr << __func__ << ": error inserting into db" << std::endl;
267 QDP_abort(1);
268 }
269 }
270
271
279 void insertBinary (const std::string& key, const std::string& data)
280 {
281 int ret = 0;
282 if (Layout::primaryNode())
283 ret = db.insertBinary(key, data);
284
286 if (ret != 0)
287 {
288 QDPIO::cerr << __func__ << ": error in db" << std::endl;
289 QDP_abort(1);
290 }
291 }
292
293
300 int get (const K& key, D& data)
301 {
302 int ret = 0;
303 if (Layout::primaryNode())
304 ret = db.get(key, data);
305 else
306 notImplemented();
307
309 return ret;
310 }
311
312
320 int getBinary (const std::string& key, std::string& data)
321 {
322 int ret = 0;
323 if (Layout::primaryNode())
324 ret = db.getBinary(key, data);
325 else
326 notImplemented();
327
329 return ret;
330 }
331
337 virtual void keys (std::vector<K>& keys_)
338 {
339 if (Layout::primaryNode())
340 db.keys(keys_);
341 else
342 notImplemented();
343 }
344
351 virtual void keysAndData (std::vector<K>& keys_, std::vector<D>& values_)
352 {
353 if (Layout::primaryNode())
354 db.keysAndData(keys_, values_);
355 else
356 notImplemented();
357 }
358
359
366 virtual void binaryKeysAndData (std::vector<std::string> keys_,
367 std::vector<std::string> values_)
368 {
369 if (Layout::primaryNode())
370 db.binaryKeysAndData(keys_, values_);
371 else
372 notImplemented();
373 }
374
378 virtual void flush (void)
379 {
380 if (Layout::primaryNode())
381 db.flush();
382 }
383
389 virtual std::string storageName (void) const
390 {
391 std::string ret;
392 if (Layout::primaryNode())
393 ret = db.storageName();
394
396 return ret;
397 }
398
399
406 virtual void insertUserdata (const std::string& user_data)
407 {
408 int ret = 0;
409 if (Layout::primaryNode())
410 ret = db.insertUserdata(user_data);
411
413 if (ret != 0)
414 {
415 QDPIO::cerr << __func__ << ": error inserting user data into db" << std::endl;
416 QDP_abort(1);
417 }
418 }
419
426 virtual void getUserdata (std::string& user_data)
427 {
428 int ret = 0;
429 if (Layout::primaryNode())
430 ret = db.getUserdata(user_data);
431 /*
432 else
433 notImplemented();
434 */
435
437 if (ret != 0)
438 {
439 QDPIO::cerr << __func__ << ": error getting user data from db" << std::endl;
440 QDP_abort(1);
441 }
442
444 }
445
446
447 private:
448 void notImplemented() const
449 {
450 QDP_error_exit("FILEDB read routines do not work (yet) in parallel - only single node");
451 }
452
453 FILEDB::ConfDataStoreDB<K,D> db;
454 };
455
456
457} // namespace QDP
458
459#endif
virtual void close(void)
Definition qdp_db_imp.h:218
virtual unsigned int getMaxNumberConfigs(void) const
Definition qdp_db_imp.h:168
void insert(const K &key, const D &data)
Definition qdp_db_imp.h:257
virtual void enablePageMove(void)
Definition qdp_db_imp.h:128
bool exist(const K &key)
Definition qdp_db_imp.h:237
int get(const K &key, D &data)
Definition qdp_db_imp.h:300
virtual void setCacheSizeMB(const unsigned int size)
Definition qdp_db_imp.h:84
const int db_pagesize
Definition qdp_db_imp.h:29
virtual void setPageSize(const unsigned int size)
Definition qdp_db_imp.h:100
virtual void binaryKeysAndData(std::vector< std::string > keys_, std::vector< std::string > values_)
Definition qdp_db_imp.h:366
virtual void setMaxNumberConfigs(unsigned int num)
Definition qdp_db_imp.h:162
const int db_cachesize
Fake cache and page sizes.
Definition qdp_db_imp.h:24
virtual void insertUserdata(const std::string &user_data)
Definition qdp_db_imp.h:406
virtual void keysAndData(std::vector< K > &keys_, std::vector< D > &values_)
Definition qdp_db_imp.h:351
virtual void setCacheSize(const unsigned int size)
Definition qdp_db_imp.h:70
int getBinary(const std::string &key, std::string &data)
Definition qdp_db_imp.h:320
void insertBinary(const std::string &key, const std::string &data)
Definition qdp_db_imp.h:279
virtual void getUserdata(std::string &user_data)
Definition qdp_db_imp.h:426
virtual void keys(std::vector< K > &keys_)
Definition qdp_db_imp.h:337
virtual bool fileExists(const std::string &file) const
Definition qdp_db_imp.h:182
virtual void disablePageMove(void)
Definition qdp_db_imp.h:134
virtual unsigned int getMaxUserInfoLen(void) const
Definition qdp_db_imp.h:149
virtual void flush(void)
Definition qdp_db_imp.h:378
virtual void open(const std::string &file, int open_flags, int mode)
Definition qdp_db_imp.h:203
virtual std::string storageName(void) const
Definition qdp_db_imp.h:389
virtual void setNumberBuckets(const unsigned int num)
Definition qdp_db_imp.h:115
virtual void setMaxUserInfoLen(unsigned int len)
Definition qdp_db_imp.h:143
bool primaryNode()
Returns whether this is the primary node.
StandardOutputStream cerr
Definition qdp_stdio.cc:22
void broadcast(T &dest)
Broadcast from primary node to all other nodes.
void broadcast_str(std::string &result)
Broadcast a string from primary node to all other nodes.
Yet another random number generator.
void QDP_error_exit(const char *format,...)
Simple error display and abort routine.
Definition qdp_util.cc:93
void QDP_abort(int status)
Panic button.
Lattice layout.