20 #include <sys/types.h> 39 #define DFUNCTION "_sion_keyval_check_env" 40 int _sion_keyval_check_env(
_sion_filedesc *sion_filedesc, sion_int64 file_mode_flags) {
43 sion_int32 keyvalmode_env;
44 sion_int32 keyvalmode_parm;
63 if(file_mode_flags&_SION_FMODE_KEYVAL_META) keyvalmode_parm=
SION_KEYVAL_META;
64 if(file_mode_flags&_SION_FMODE_KEYVAL_HASH) keyvalmode_parm=
SION_KEYVAL_HASH;
65 if(file_mode_flags&_SION_FMODE_KEYVAL_NONE) keyvalmode_parm=
SION_KEYVAL_NONE;
67 DPRINTFP((2, DFUNCTION, -1,
"keyval mode from parameter is=%s\n",
sion_keyval_type_to_str((
int) keyvalmode_parm)));
69 if(file_mode_flags&_SION_FMODE_READ) {
70 DPRINTFP((2, DFUNCTION, -1,
"file is opened for reading\n"));
76 DPRINTFP((2, DFUNCTION, -1,
"file read: parameter is 'unknown' keyvalmode will taken from file ...\n"));
81 DPRINTFP((2, DFUNCTION, -1,
"file read: keyvalmode of file is different to requested keyvalmode from parameter, aborting ...\n"));
82 return(
_sion_errorprint(0,_SION_ERROR_RETURN,
"file read: keyvalmode of file is different to requested keyvalmode from parameter, aborting ...\n"));
85 DPRINTFP((2, DFUNCTION, -1,
"file read: keyvalmode of file is different to requested keyvalmode from environment, aborting ...\n"));
86 return(
_sion_errorprint(0,_SION_ERROR_RETURN,
"file read: keyvalmode of file is different to requested keyvalmode from env-var, aborting ...\n"));
92 DPRINTFP((2, DFUNCTION, -1,
"file is opened for writing\n"));
106 #define DFUNCTION "_sion_keyval_dup_dataptr" 109 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
112 rc=_sion_keyval_dup_dataptr_inline(sion_filedesc,new_filedesc);
114 return(
_sion_errorprint(0,_SION_ERROR_RETURN,
"trying to call sion_keyval_dup_dataptr in inknown keyval mode , aborting ...\n"));
117 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
124 #define DFUNCTION "sion_fwrite_key" 140 size_t sion_fwrite_key(
const void *data, uint64_t key,
size_t size,
size_t nitems,
int sid) {
145 DPRINTFTS(-1,
"enter sion_fwrite_key");
146 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
150 return(
_sion_errorprint(0,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
152 if(sion_filedesc->
rank<0) {
153 return(SION_NOT_SUCCESS);
155 DPRINTFP((2, DFUNCTION, -1,
"fwrite_key: key=%d size=%d, nitems=%d\n",(
int) key,(
int) size, (
int) nitems));
160 frc=_sion_store_and_write_key_and_len(sion_filedesc,key,len);
161 if(frc != SION_SUCCESS) {
162 return(_sion_errorprint_on_rank(-1,_SION_ERROR_RETURN,sion_filedesc->
rank,
163 "could not write meta data to file (frc=%d sid=%d) ...", (
int) frc, sid));
167 frc=_sion_write_value(sion_filedesc,data,key,len);
169 return(_sion_errorprint_on_rank(-1,_SION_ERROR_RETURN,sion_filedesc->
rank,
170 "could not write data (%d bytes) to file (frc=%d sid=%d) ...", (
int) len, (
int) frc, sid));
173 rc=(size_t) len / size;
175 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
176 DPRINTFTS(-1,
"leave sion_fwrite_key");
183 #define DFUNCTION "sion_fread_key" 199 size_t sion_fread_key(
void *data, uint64_t key,
size_t size,
size_t nitems,
int sid) {
201 size_t len, datalen=0;
204 DPRINTFTS(-1,
"enter sion_fread_key");
205 DPRINTFP((8, DFUNCTION, -1,
"enter\n"));
209 return(
_sion_errorprint(0,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
211 if(sion_filedesc->
rank<0) {
212 return(SION_NOT_SUCCESS);
214 DPRINTFP((32, DFUNCTION, -1,
"fread_key: sid=%d key=%ld size=%d, nitems=%d\n",(
int) sid, (
long) key,(
int) size, (
int) nitems));
219 if (_sion_find_and_read_key_and_len(sion_filedesc,key,len,&datalen) !=
221 DPRINTFP((8, DFUNCTION, -1,
"_sion_find_and_read_key_and_len return NOT SUCCESS\n"));
222 return(SION_NOT_SUCCESS);
226 len = ( (int) datalen/size ) * size;
229 frc=_sion_read_value(sion_filedesc,data,key,len);
231 return(SION_NOT_SUCCESS);
234 rc=(size_t) len / size;
236 DPRINTFP((8, DFUNCTION, -1,
"leave rc=%d\n",(
int) rc));
237 DPRINTFTS(-1,
"leave sion_fread_key");
242 #define DFUNCTION "sion_key_full_scan" 252 size_t rc=SION_NOT_SUCCESS;
255 DPRINTFTS(-1,
"enter sion_key_full_scan");
256 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
260 return(
_sion_errorprint(0,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
262 if(sion_filedesc->
rank<0) {
263 return(SION_NOT_SUCCESS);
266 rc=_sion_key_full_scan_inline(sion_filedesc);
268 return(
_sion_errorprint(0,_SION_ERROR_RETURN,
"trying to perform full scan of file which is not opened in that mode, aborting ...\n"));
271 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
272 DPRINTFTS(-1,
"leave sion_key_full_scan");
278 #define DFUNCTION "sion_fread_key_iterator_reset" 288 size_t rc=SION_NOT_SUCCESS;
291 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
295 return(
_sion_errorprint(0,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
297 if(sion_filedesc->
rank<0) {
298 return(SION_NOT_SUCCESS);
302 rc=_sion_iterator_reset_inline(sion_filedesc);
304 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"));
307 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
312 #define DFUNCTION "sion_fread_key_iterator_next" 324 size_t rc=SION_NOT_SUCCESS;
327 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
331 return(
_sion_errorprint(0,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
333 if(sion_filedesc->
rank<0) {
334 return(SION_NOT_SUCCESS);
337 rc=_sion_iterator_next_inline(sion_filedesc, keyptr, sizeptr);
338 DPRINTFP((2, DFUNCTION, -1,
"sion_fread_key_iterator_next: key=%d size=%d\n",(
int) *keyptr,(
int) *sizeptr));
340 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"));
343 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
349 #define DFUNCTION "sion_seek_key" 362 int sion_seek_key(
int sid, uint64_t key,
int entrynum, sion_int64 posinentry) {
363 size_t rc=SION_NOT_SUCCESS;
366 DPRINTFTS(-1,
"enter sion_seek_key");
367 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
371 return(
_sion_errorprint(0,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
373 if(sion_filedesc->
rank<0) {
374 return(SION_NOT_SUCCESS);
378 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"));
382 DPRINTFP((2, DFUNCTION, -1,
"sion_seek_key: key=%d entrynum=%d posinentry=%d\n",(
int) key,(
int) entrynum, (
int) posinentry));
383 rc=_sion_seek_key_inline(sion_filedesc, key, entrynum, posinentry);
385 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"));
388 DPRINTFP((2, DFUNCTION, -1,
"leave rc=%d\n",rc));
389 DPRINTFTS(-1,
"leave sion_seek_key");
394 #define DFUNCTION "sion_get_keyval_mode" 408 DPRINTFTS(-1,
"enter sion_get_keyval_mode");
409 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
418 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
419 DPRINTFTS(-1,
"leave sion_get_keyval_mode");
425 #define DFUNCTION "sion_keyval_type_to_str" 426 #define STR_PRT(X) case X: return # X 449 #define DFUNCTION "sion_key_list_iterator_reset" 459 size_t rc=SION_NOT_SUCCESS;
462 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
466 return(
_sion_errorprint(0,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
468 if(sion_filedesc->
rank<0) {
469 return(SION_NOT_SUCCESS);
473 rc=_sion_key_list_iterator_reset_inline(sion_filedesc);
475 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"));
478 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
483 #define DFUNCTION "sion_key_list_iterator_next" 494 size_t rc=SION_NOT_SUCCESS;
497 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
501 return(
_sion_errorprint(0,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
503 if(sion_filedesc->
rank<0) {
504 return(SION_NOT_SUCCESS);
507 rc=_sion_key_list_iterator_next_inline(sion_filedesc, keyptr);
508 DPRINTFP((2, DFUNCTION, -1,
"sion_fread_key_iterator_next: key=%d\n",(
int) *keyptr));
510 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"));
513 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
518 #define DFUNCTION "sion_key_get_stat" 530 size_t rc=SION_NOT_SUCCESS;
533 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
537 return(
_sion_errorprint(0,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
539 if(sion_filedesc->
rank<0) {
540 return(SION_NOT_SUCCESS);
543 rc=_sion_key_get_stat_inline(sion_filedesc, key, keystatptr);
544 DPRINTFP((2, DFUNCTION, -1,
"_sion_key_get_stat_inline: key=%d rc=%d\n",(
int) key, rc));
546 return(
_sion_errorprint(0,_SION_ERROR_RETURN,
"trying to get stat of key from file which is not opened in that mode, aborting ...\n"));
549 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
558 #define DFUNCTION "_sion_store_and_write_key_and_len" 559 int _sion_store_and_write_key_and_len(
_sion_filedesc *sion_filedesc, uint64_t key,
size_t len) {
561 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
564 rc=_sion_store_and_write_key_and_len_inline(sion_filedesc,key,len);
566 return(
_sion_errorprint(0,_SION_ERROR_RETURN,
"trying to write in keyval mode from file which is not opened in that mode, aborting ...\n"));
569 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
574 #define DFUNCTION "_sion_write_value" 575 int _sion_write_value(
_sion_filedesc *sion_filedesc,
const void *data, uint64_t key,
size_t len) {
577 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
580 rc=_sion_write_value_inline(sion_filedesc,data,key,len);
582 return(
_sion_errorprint(0,_SION_ERROR_RETURN,
"trying to read in keyval mode from file which is not opened in that mode, aborting ...\n"));
585 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
590 #define DFUNCTION "_sion_find_and_read_key_and_len" 591 int _sion_find_and_read_key_and_len(
_sion_filedesc *sion_filedesc, uint64_t key,
size_t len,
size_t *datalen) {
592 int rc = SION_NOT_SUCCESS;
593 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
596 rc=_sion_find_and_read_key_and_len_inline(sion_filedesc, key, len, datalen);
598 return(
_sion_errorprint(0,_SION_ERROR_RETURN,
"trying to read in keyval mode from file which is not opened in that mode, aborting ...\n"));
601 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
606 #define DFUNCTION "_sion_read_value" 607 int _sion_read_value(
_sion_filedesc *sion_filedesc,
void *data, uint64_t key,
size_t len) {
609 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
612 rc=_sion_read_value_inline(sion_filedesc,data,key,len);
614 return(
_sion_errorprint(0,_SION_ERROR_RETURN,
"trying to read in keyval mode from file which is not opened in that mode, aborting ...\n"));
617 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_errorprint(int rc, int level, const char *format,...)
Internal SION error.
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