20 #include <sys/types.h> 28 #include "sion_error_handler.h" 40 #define DFUNCTION "_sion_keyval_check_env" 41 int _sion_keyval_check_env(
_sion_filedesc *sion_filedesc, sion_int64 file_mode_flags) {
44 sion_int32 keyvalmode_env;
45 sion_int32 keyvalmode_parm;
64 if(file_mode_flags&_SION_FMODE_KEYVAL_META) keyvalmode_parm=
SION_KEYVAL_META;
65 if(file_mode_flags&_SION_FMODE_KEYVAL_HASH) keyvalmode_parm=
SION_KEYVAL_HASH;
66 if(file_mode_flags&_SION_FMODE_KEYVAL_NONE) keyvalmode_parm=
SION_KEYVAL_NONE;
68 DPRINTFP((2, DFUNCTION, -1,
"keyval mode from parameter is=%s\n",
sion_keyval_type_to_str((
int) keyvalmode_parm)));
70 if(file_mode_flags&_SION_FMODE_READ) {
71 DPRINTFP((2, DFUNCTION, -1,
"file is opened for reading\n"));
77 DPRINTFP((2, DFUNCTION, -1,
"file read: parameter is 'unknown' keyvalmode will taken from file ...\n"));
82 DPRINTFP((2, DFUNCTION, -1,
"file read: keyvalmode of file is different to requested keyvalmode from parameter, aborting ...\n"));
83 return(_sion_errorprint(0,_SION_ERROR_RETURN,
"file read: keyvalmode of file is different to requested keyvalmode from parameter, aborting ...\n"));
86 DPRINTFP((2, DFUNCTION, -1,
"file read: keyvalmode of file is different to requested keyvalmode from environment, aborting ...\n"));
87 return(_sion_errorprint(0,_SION_ERROR_RETURN,
"file read: keyvalmode of file is different to requested keyvalmode from env-var, aborting ...\n"));
93 DPRINTFP((2, DFUNCTION, -1,
"file is opened for writing\n"));
107 #define DFUNCTION "_sion_keyval_dup_dataptr" 110 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
113 rc=_sion_keyval_dup_dataptr_inline(sion_filedesc,new_filedesc);
115 return(_sion_errorprint(0,_SION_ERROR_RETURN,
"trying to call sion_keyval_dup_dataptr in inknown keyval mode , aborting ...\n"));
118 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
125 #define DFUNCTION "sion_fwrite_key" 141 size_t sion_fwrite_key(
const void *data, uint64_t key,
size_t size,
size_t nitems,
int sid) {
146 DPRINTFTS(-1,
"enter sion_fwrite_key");
147 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
151 return(_sion_errorprint(0,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
153 if(sion_filedesc->
rank<0) {
154 return(SION_NOT_SUCCESS);
156 DPRINTFP((2, DFUNCTION, -1,
"fwrite_key: key=%d size=%d, nitems=%d\n",(
int) key,(
int) size, (
int) nitems));
161 frc=_sion_store_and_write_key_and_len(sion_filedesc,key,len);
162 if(frc != SION_SUCCESS) {
163 return(_sion_errorprint_on_rank(-1,_SION_ERROR_RETURN,sion_filedesc->
rank,
164 "could not write meta data to file (frc=%d sid=%d) ...", (
int) frc, sid));
168 frc=_sion_write_value(sion_filedesc,data,key,len);
170 return(_sion_errorprint_on_rank(-1,_SION_ERROR_RETURN,sion_filedesc->
rank,
171 "could not write data (%d bytes) to file (frc=%d sid=%d) ...", (
int) len, (
int) frc, sid));
174 rc=(size_t) len / size;
176 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
177 DPRINTFTS(-1,
"leave sion_fwrite_key");
184 #define DFUNCTION "sion_fread_key" 200 size_t sion_fread_key(
void *data, uint64_t key,
size_t size,
size_t nitems,
int sid) {
202 size_t len, datalen=0;
205 DPRINTFTS(-1,
"enter sion_fread_key");
206 DPRINTFP((8, DFUNCTION, -1,
"enter\n"));
210 return(_sion_errorprint(0,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
212 if(sion_filedesc->
rank<0) {
213 return(SION_NOT_SUCCESS);
215 DPRINTFP((32, DFUNCTION, -1,
"fread_key: sid=%d key=%ld size=%d, nitems=%d\n",(
int) sid, (
long) key,(
int) size, (
int) nitems));
220 if (_sion_find_and_read_key_and_len(sion_filedesc,key,len,&datalen) !=
222 DPRINTFP((8, DFUNCTION, -1,
"_sion_find_and_read_key_and_len return NOT SUCCESS\n"));
223 return(SION_NOT_SUCCESS);
227 len = ( (int) datalen/size ) * size;
230 frc=_sion_read_value(sion_filedesc,data,key,len);
232 return(SION_NOT_SUCCESS);
235 rc=(size_t) len / size;
237 DPRINTFP((8, DFUNCTION, -1,
"leave rc=%d\n",(
int) rc));
238 DPRINTFTS(-1,
"leave sion_fread_key");
243 #define DFUNCTION "sion_key_full_scan" 253 size_t rc=SION_NOT_SUCCESS;
256 DPRINTFTS(-1,
"enter sion_key_full_scan");
257 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
261 return(_sion_errorprint(0,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
263 if(sion_filedesc->
rank<0) {
264 return(SION_NOT_SUCCESS);
267 rc=_sion_key_full_scan_inline(sion_filedesc);
269 return(_sion_errorprint(0,_SION_ERROR_RETURN,
"trying to perform full scan of file which is not opened in that mode, aborting ...\n"));
272 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
273 DPRINTFTS(-1,
"leave sion_key_full_scan");
279 #define DFUNCTION "sion_fread_key_iterator_reset" 289 size_t rc=SION_NOT_SUCCESS;
292 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
296 return(_sion_errorprint(0,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
298 if(sion_filedesc->
rank<0) {
299 return(SION_NOT_SUCCESS);
303 rc=_sion_iterator_reset_inline(sion_filedesc);
305 return(_sion_errorprint(0,_SION_ERROR_RETURN,
"trying to reset iterator in keyval mode from file which is not opened in that mode, aborting ...\n"));
308 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
313 #define DFUNCTION "sion_fread_key_iterator_next" 325 size_t rc=SION_NOT_SUCCESS;
328 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
332 return(_sion_errorprint(0,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
334 if(sion_filedesc->
rank<0) {
335 return(SION_NOT_SUCCESS);
338 rc=_sion_iterator_next_inline(sion_filedesc, keyptr, sizeptr);
339 DPRINTFP((2, DFUNCTION, -1,
"sion_fread_key_iterator_next: key=%d size=%d\n",(
int) *keyptr,(
int) *sizeptr));
341 return(_sion_errorprint(0,_SION_ERROR_RETURN,
"trying to forward iterator in keyval mode from file which is not opened in that mode, aborting ...\n"));
344 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
350 #define DFUNCTION "sion_seek_key" 363 int sion_seek_key(
int sid, uint64_t key,
int entrynum, sion_int64 posinentry) {
364 size_t rc=SION_NOT_SUCCESS;
367 DPRINTFTS(-1,
"enter sion_seek_key");
368 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
372 return(_sion_errorprint(0,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
374 if(sion_filedesc->
rank<0) {
375 return(SION_NOT_SUCCESS);
379 return(_sion_errorprint(0,_SION_ERROR_RETURN,
"Error: SION_CURRENT_POS set in sion_search_key, but blovk is not SION_CURRENT_BLOCK, aborting ...\n"));
383 DPRINTFP((2, DFUNCTION, -1,
"sion_seek_key: key=%d entrynum=%d posinentry=%d\n",(
int) key,(
int) entrynum, (
int) posinentry));
384 rc=_sion_seek_key_inline(sion_filedesc, key, entrynum, posinentry);
386 return(_sion_errorprint(0,_SION_ERROR_RETURN,
"trying to search within key in keyval mode from file which is not opened in that mode, aborting ...\n"));
389 DPRINTFP((2, DFUNCTION, -1,
"leave rc=%d\n",rc));
390 DPRINTFTS(-1,
"leave sion_seek_key");
395 #define DFUNCTION "sion_get_keyval_mode" 409 DPRINTFTS(-1,
"enter sion_get_keyval_mode");
410 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
414 return(_sion_errorprint(
SION_KEYVAL_UNKNOWN,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
419 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
420 DPRINTFTS(-1,
"leave sion_get_keyval_mode");
426 #define DFUNCTION "sion_keyval_type_to_str" 427 #define STR_PRT(X) case X: return # X 450 #define DFUNCTION "sion_key_list_iterator_reset" 460 size_t rc=SION_NOT_SUCCESS;
463 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
467 return(_sion_errorprint(0,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
469 if(sion_filedesc->
rank<0) {
470 return(SION_NOT_SUCCESS);
474 rc=_sion_key_list_iterator_reset_inline(sion_filedesc);
476 return(_sion_errorprint(0,_SION_ERROR_RETURN,
"trying to reset iterator in keyval mode from file which is not opened in that mode, aborting ...\n"));
479 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
484 #define DFUNCTION "sion_key_list_iterator_next" 495 size_t rc=SION_NOT_SUCCESS;
498 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
502 return(_sion_errorprint(0,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
504 if(sion_filedesc->
rank<0) {
505 return(SION_NOT_SUCCESS);
508 rc=_sion_key_list_iterator_next_inline(sion_filedesc, keyptr);
509 DPRINTFP((2, DFUNCTION, -1,
"sion_fread_key_iterator_next: key=%d\n",(
int) *keyptr));
511 return(_sion_errorprint(0,_SION_ERROR_RETURN,
"trying to forward iterator in keyval mode from file which is not opened in that mode, aborting ...\n"));
514 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
519 #define DFUNCTION "sion_key_get_stat" 531 size_t rc=SION_NOT_SUCCESS;
534 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
538 return(_sion_errorprint(0,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
540 if(sion_filedesc->
rank<0) {
541 return(SION_NOT_SUCCESS);
544 rc=_sion_key_get_stat_inline(sion_filedesc, key, keystatptr);
545 DPRINTFP((2, DFUNCTION, -1,
"_sion_key_get_stat_inline: key=%d rc=%d\n",(
int) key, rc));
547 return(_sion_errorprint(0,_SION_ERROR_RETURN,
"trying to get stat of key from file which is not opened in that mode, aborting ...\n"));
550 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
559 #define DFUNCTION "_sion_store_and_write_key_and_len" 560 int _sion_store_and_write_key_and_len(
_sion_filedesc *sion_filedesc, uint64_t key,
size_t len) {
562 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
565 rc=_sion_store_and_write_key_and_len_inline(sion_filedesc,key,len);
567 return(_sion_errorprint(0,_SION_ERROR_RETURN,
"trying to write in keyval mode from file which is not opened in that mode, aborting ...\n"));
570 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
575 #define DFUNCTION "_sion_write_value" 576 int _sion_write_value(
_sion_filedesc *sion_filedesc,
const void *data, uint64_t key,
size_t len) {
578 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
581 rc=_sion_write_value_inline(sion_filedesc,data,key,len);
583 return(_sion_errorprint(0,_SION_ERROR_RETURN,
"trying to read in keyval mode from file which is not opened in that mode, aborting ...\n"));
586 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
591 #define DFUNCTION "_sion_find_and_read_key_and_len" 592 int _sion_find_and_read_key_and_len(
_sion_filedesc *sion_filedesc, uint64_t key,
size_t len,
size_t *datalen) {
593 int rc = SION_NOT_SUCCESS;
594 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
597 rc=_sion_find_and_read_key_and_len_inline(sion_filedesc, key, len, datalen);
599 return(_sion_errorprint(0,_SION_ERROR_RETURN,
"trying to read in keyval mode from file which is not opened in that mode, aborting ...\n"));
602 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
607 #define DFUNCTION "_sion_read_value" 608 int _sion_read_value(
_sion_filedesc *sion_filedesc,
void *data, uint64_t key,
size_t len) {
610 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
613 rc=_sion_read_value_inline(sion_filedesc,data,key,len);
615 return(_sion_errorprint(0,_SION_ERROR_RETURN,
"trying to read in keyval mode from file which is not opened in that mode, aborting ...\n"));
618 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
int sion_seek_key(int sid, uint64_t key, int entrynum, sion_int64 posinentry)
Seek to position in key.
int sion_key_list_iterator_next(int sid, uint64_t *keyptr)
Forward to next key.
Sion File Descriptor Structure.
int sion_fread_key_iterator_next(int sid, uint64_t *keyptr, size_t *sizeptr)
Forward to next key.
#define SION_KEYVAL_NOTSET
#define SION_KEYVAL_INLINE
int _sion_vcdtype(int sid)
char * _sion_getenv(const char *name)
char * sion_keyval_type_to_str(int type)
Returns key value mode as string.
#define SION_KEYVAL_UNKNOWN
void * _sion_vcdtovcon(int sid)
int sion_fread_key_iterator_reset(int sid)
Resets key iterator.
int sion_key_list_iterator_reset(int sid)
Resets key iterator.
int sion_get_keyval_mode(int sid)
Return selected mode for key value.
#define SION_FILEDESCRIPTOR
#define SION_CURRENT_BLOCK
int sion_key_full_scan(int sid)
Performs a full scan of all meta data in current file.
size_t sion_fread_key(void *data, uint64_t key, size_t size, size_t nitems, int sid)
Read data for key.
size_t sion_fwrite_key(const void *data, uint64_t key, size_t size, size_t nitems, int sid)
Writes data for key.
int sion_key_get_stat(int sid, uint64_t key, sion_key_stat_t *keystatptr)
get statistics about key