10 #define _XOPEN_SOURCE 700 
   15 #include "sion_common.h" 
   16 #include "sion_const.h" 
   17 #include "sion_debug.h" 
   18 #include "sion_enums.h" 
   19 #include "sion_error_handler.h" 
   21 #include "sion_filedesc.h" 
   22 #include "sion_internal.h" 
   23 #include "sion_keyvalue.h" 
   24 #include "sion_keyvalue_inline.h" 
   26 #define DFUNCTION "_sion_keyval_check_env" 
   27 int _sion_keyval_check_env(_sion_filedesc *sion_filedesc, int64_t file_mode_flags)
 
   31   int32_t keyvalmode_env;
 
   32   int32_t keyvalmode_parm;
 
   34   DPRINTFP((2, DFUNCTION, -1, 
"keyval mode is initially set to %s\n", 
sion_keyval_type_to_str((
int)sion_filedesc->keyvalmode)));
 
   38   t = _sion_getenv(
"SION_KEYVALUE_MODE");
 
   40     if (strstr(t, 
"inline")) {
 
   43     if (strstr(t, 
"meta")) {
 
   46     if (strstr(t, 
"hash")) {
 
   49     if (strstr(t, 
"none")) {
 
   52     if (strstr(t, 
"unknown")) {
 
   60   if (file_mode_flags & _SION_FMODE_KEYVAL_INLINE) {
 
   63   if (file_mode_flags & _SION_FMODE_KEYVAL_META) {
 
   66   if (file_mode_flags & _SION_FMODE_KEYVAL_HASH) {
 
   69   if (file_mode_flags & _SION_FMODE_KEYVAL_NONE) {
 
   72   if (file_mode_flags & _SION_FMODE_KEYVAL_UNKNOWN) {
 
   75   DPRINTFP((2, DFUNCTION, -1, 
"keyval mode from parameter is=%s\n", 
sion_keyval_type_to_str((
int)keyvalmode_parm)));
 
   77   if (file_mode_flags & _SION_FMODE_READ) {
 
   78     DPRINTFP((2, DFUNCTION, -1, 
"file is opened for reading\n"));
 
   84       DPRINTFP((2, DFUNCTION, -1, 
"file read: parameter is 'unknown' keyvalmode will taken from file ...\n"));
 
   88       if ((keyvalmode_parm != 
SION_KEYVAL_NOTSET) && (keyvalmode_parm != sion_filedesc->keyvalmode)) {
 
   90           2, DFUNCTION, -1, 
"file read: keyvalmode of file is different to requested keyvalmode from parameter, aborting ...\n"));
 
   91         return _sion_errorprint(0, _SION_ERROR_RETURN,
 
   92           "file read: keyvalmode of file is different to requested keyvalmode from parameter, aborting ...\n");
 
   94       if ((keyvalmode_env != 
SION_KEYVAL_NOTSET) && (keyvalmode_env != sion_filedesc->keyvalmode)) {
 
   95         DPRINTFP((2, DFUNCTION, -1,
 
   96           "file read: keyvalmode of file is different to requested keyvalmode from environment, aborting ...\n"));
 
   97         return _sion_errorprint(0, _SION_ERROR_RETURN,
 
   98           "file read: keyvalmode of file is different to requested keyvalmode from env-var, aborting ...\n");
 
  103     DPRINTFP((2, DFUNCTION, -1, 
"file is opened for writing\n"));
 
  107       sion_filedesc->keyvalmode = keyvalmode_env;
 
  110       sion_filedesc->keyvalmode = keyvalmode_parm;
 
  121   DPRINTFP((2, __func__, -1, 
"keyval mode is initially set to %s\n", 
sion_keyval_type_to_str((
int)sion_filedesc->keyvalmode)));
 
  125   const char *t = _sion_getenv(
"SION_KEYVALUE_MODE");
 
  127     if (strstr(t, 
"inline")) {
 
  130     if (strstr(t, 
"meta")) {
 
  133     if (strstr(t, 
"hash")) {
 
  136     if (strstr(t, 
"none")) {
 
  139     if (strstr(t, 
"unknown")) {
 
  162   DPRINTFP((2, __func__, -1, 
"keyval mode from parameter is=%s\n", 
sion_keyval_type_to_str((
int)keyvalmode_parm)));
 
  165     DPRINTFP((2, __func__, -1, 
"file is opened for reading\n"));
 
  171       DPRINTFP((2, __func__, -1, 
"file read: parameter is 'unknown' keyvalmode will taken from file ...\n"));
 
  175       if ((keyvalmode_parm != 
SION_KEYVAL_NOTSET) && (keyvalmode_parm != sion_filedesc->keyvalmode)) {
 
  177           (2, __func__, -1, 
"file read: keyvalmode of file is different to requested keyvalmode from parameter, aborting ...\n"));
 
  178         return _sion_errorprint(0, _SION_ERROR_RETURN,
 
  179           "file read: keyvalmode of file is different to requested keyvalmode from parameter, aborting ...\n");
 
  181       if ((keyvalmode_env != 
SION_KEYVAL_NOTSET) && (keyvalmode_env != sion_filedesc->keyvalmode)) {
 
  182         DPRINTFP((2, __func__, -1,
 
  183           "file read: keyvalmode of file is different to requested keyvalmode from environment, aborting ...\n"));
 
  184         return _sion_errorprint(0, _SION_ERROR_RETURN,
 
  185           "file read: keyvalmode of file is different to requested keyvalmode from env-var, aborting ...\n");
 
  190     DPRINTFP((2, __func__, -1, 
"file is opened for writing\n"));
 
  194       sion_filedesc->keyvalmode = keyvalmode_env;
 
  197       sion_filedesc->keyvalmode = keyvalmode_parm;
 
  206 #define DFUNCTION "_sion_keyval_dup_dataptr" 
  207 int _sion_keyval_dup_dataptr(_sion_filedesc *sion_filedesc, _sion_filedesc *new_filedesc)
 
  210   DPRINTFP((2, DFUNCTION, -1, 
"enter\n"));
 
  213     rc = _sion_keyval_dup_dataptr_inline(sion_filedesc, new_filedesc);
 
  215     return _sion_errorprint(
 
  216       0, _SION_ERROR_RETURN, 
"trying to call sion_keyval_dup_dataptr in inknown keyval mode , aborting ...\n");
 
  219   DPRINTFP((2, DFUNCTION, -1, 
"leave\n"));
 
  224 #define DFUNCTION "sion_write_key" 
  225 size_t sion_write_key(
const void *data, uint64_t key, 
size_t size, 
size_t nitems, 
int sid)
 
  229   _sion_filedesc *sion_filedesc;
 
  231   DPRINTFTS(-1, 
"enter sion_write_key");
 
  232   DPRINTFP((2, DFUNCTION, -1, 
"enter\n"));
 
  234   if ((sid < 0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR) || !(sion_filedesc = _sion_vcdtovcon(sid))) {
 
  235     return _sion_errorprint(0, _SION_ERROR_RETURN, 
"invalid sion_filedesc, aborting %d ...\n", sid);
 
  237   if (sion_filedesc->rank < 0) { 
 
  238     return SION_NOT_SUCCESS;
 
  240   DPRINTFP((2, DFUNCTION, -1, 
"write_key: key=%d size=%d, nitems=%d\n", (
int)key, (
int)size, (
int)nitems));
 
  245   frc = _sion_store_and_write_key_and_len(sion_filedesc, key, len);
 
  246   if (frc != SION_SUCCESS) {
 
  247     return _sion_errorprint_on_rank(
 
  248       -1, _SION_ERROR_RETURN, sion_filedesc->rank, 
"could not write meta data to file (frc=%d sid=%d) ...", (
int)frc, sid);
 
  252   frc = _sion_write_value(sion_filedesc, data, key, len);
 
  254     return _sion_errorprint_on_rank(-1, _SION_ERROR_RETURN, sion_filedesc->rank,
 
  255       "could not write data (%d bytes) to file (frc=%d sid=%d) ...", (
int)len, (
int)frc, sid);
 
  258   rc = (size_t)len / size;
 
  260   DPRINTFP((2, DFUNCTION, -1, 
"leave\n"));
 
  261   DPRINTFTS(-1, 
"leave sion_write_key");
 
  266 size_t sion_fwrite_key(
const void *data, uint64_t key, 
size_t size, 
size_t nitems, 
int sid)
 
  271 #define DFUNCTION "sion_read_key" 
  272 size_t sion_read_key(
void *data, uint64_t key, 
size_t size, 
size_t nitems, 
int sid)
 
  275   size_t len, datalen = 0;
 
  276   _sion_filedesc *sion_filedesc;
 
  278   DPRINTFTS(-1, 
"enter sion_read_key");
 
  279   DPRINTFP((8, DFUNCTION, -1, 
"enter\n"));
 
  281   if ((sid < 0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR) || !(sion_filedesc = _sion_vcdtovcon(sid))) {
 
  282     return _sion_errorprint(0, _SION_ERROR_RETURN, 
"invalid sion_filedesc, aborting %d ...\n", sid);
 
  284   if (sion_filedesc->rank < 0) { 
 
  285     return SION_NOT_SUCCESS;
 
  287   DPRINTFP((32, DFUNCTION, -1, 
"read_key: sid=%d key=%ld size=%d, nitems=%d\n", (
int)sid, (
long)key, (
int)size, (
int)nitems));
 
  292   if (_sion_find_and_read_key_and_len(sion_filedesc, key, len, &datalen) != SION_SUCCESS) {
 
  293     DPRINTFP((8, DFUNCTION, -1, 
"_sion_find_and_read_key_and_len return NOT SUCCESS\n"));
 
  294     return SION_NOT_SUCCESS;
 
  298   len = ((int)datalen / size) * size;
 
  301   frc = _sion_read_value(sion_filedesc, data, key, len);
 
  303     return SION_NOT_SUCCESS;
 
  306   rc = (size_t)len / size;
 
  308   DPRINTFP((8, DFUNCTION, -1, 
"leave rc=%d\n", (
int)rc));
 
  309   DPRINTFTS(-1, 
"leave sion_read_key");
 
  314 size_t sion_fread_key(
void *data, uint64_t key, 
size_t size, 
size_t nitems, 
int sid)
 
  319 #define DFUNCTION "sion_key_full_scan" 
  322   size_t rc = SION_NOT_SUCCESS;
 
  323   _sion_filedesc *sion_filedesc;
 
  325   DPRINTFTS(-1, 
"enter sion_key_full_scan");
 
  326   DPRINTFP((2, DFUNCTION, -1, 
"enter\n"));
 
  328   if ((sid < 0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR) || !(sion_filedesc = _sion_vcdtovcon(sid))) {
 
  329     return _sion_errorprint(0, _SION_ERROR_RETURN, 
"invalid sion_filedesc, aborting %d ...\n", sid);
 
  331   if (sion_filedesc->rank < 0) { 
 
  332     return SION_NOT_SUCCESS;
 
  335     rc = _sion_key_full_scan_inline(sion_filedesc);
 
  337     return _sion_errorprint(
 
  338       0, _SION_ERROR_RETURN, 
"trying to perform full scan of file which is not opened in that mode, aborting ...\n");
 
  341   DPRINTFP((2, DFUNCTION, -1, 
"leave\n"));
 
  342   DPRINTFTS(-1, 
"leave sion_key_full_scan");
 
  347 #define DFUNCTION "sion_read_key_iterator_reset" 
  350   size_t rc = SION_NOT_SUCCESS;
 
  351   _sion_filedesc *sion_filedesc;
 
  353   DPRINTFP((2, DFUNCTION, -1, 
"enter\n"));
 
  355   if ((sid < 0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR) || !(sion_filedesc = _sion_vcdtovcon(sid))) {
 
  356     return _sion_errorprint(0, _SION_ERROR_RETURN, 
"invalid sion_filedesc, aborting %d ...\n", sid);
 
  358   if (sion_filedesc->rank < 0) { 
 
  359     return SION_NOT_SUCCESS;
 
  363     rc = _sion_iterator_reset_inline(sion_filedesc);
 
  365     return _sion_errorprint(0, _SION_ERROR_RETURN,
 
  366       "trying to reset iterator in keyval mode from file which is not opened in that mode, aborting ...\n");
 
  369   DPRINTFP((2, DFUNCTION, -1, 
"leave\n"));
 
  379 #define DFUNCTION "sion_read_key_iterator_next" 
  382   size_t rc = SION_NOT_SUCCESS;
 
  383   _sion_filedesc *sion_filedesc;
 
  385   DPRINTFP((2, DFUNCTION, -1, 
"enter\n"));
 
  387   if ((sid < 0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR) || !(sion_filedesc = _sion_vcdtovcon(sid))) {
 
  388     return _sion_errorprint(0, _SION_ERROR_RETURN, 
"invalid sion_filedesc, aborting %d ...\n", sid);
 
  390   if (sion_filedesc->rank < 0) { 
 
  391     return SION_NOT_SUCCESS;
 
  394     rc = _sion_iterator_next_inline(sion_filedesc, keyptr, sizeptr);
 
  395     DPRINTFP((2, DFUNCTION, -1, 
"sion_read_key_iterator_next: key=%d size=%d\n", (
int)*keyptr, (
int)*sizeptr));
 
  397     return _sion_errorprint(0, _SION_ERROR_RETURN,
 
  398       "trying to forward iterator in keyval mode from file which is not opened in that mode, aborting ...\n");
 
  401   DPRINTFP((2, DFUNCTION, -1, 
"leave\n"));
 
  411 #define DFUNCTION "sion_seek_key" 
  414   size_t rc = SION_NOT_SUCCESS;
 
  415   _sion_filedesc *sion_filedesc;
 
  417   DPRINTFTS(-1, 
"enter sion_seek_key");
 
  418   DPRINTFP((2, DFUNCTION, -1, 
"enter\n"));
 
  420   if ((sid < 0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR) || !(sion_filedesc = _sion_vcdtovcon(sid))) {
 
  421     return _sion_errorprint(0, _SION_ERROR_RETURN, 
"invalid sion_filedesc, aborting %d ...\n", sid);
 
  423   if (sion_filedesc->rank < 0) { 
 
  424     return SION_NOT_SUCCESS;
 
  428     return _sion_errorprint(0, _SION_ERROR_RETURN,
 
  429       "Error: SION_CURRENT_POS set in sion_search_key, but blovk is not SION_CURRENT_BLOCK, aborting ...\n");
 
  433     DPRINTFP((2, DFUNCTION, -1, 
"sion_seek_key: key=%d entrynum=%d posinentry=%d\n", (
int)key, (
int)entrynum, (
int)posinentry));
 
  434     rc = _sion_seek_key_inline(sion_filedesc, key, entrynum, posinentry);
 
  436     return _sion_errorprint(0, _SION_ERROR_RETURN,
 
  437       "trying to search within key in keyval mode from file which is not opened in that mode, aborting ...\n");
 
  440   DPRINTFP((2, DFUNCTION, -1, 
"leave rc=%d\n", rc));
 
  441   DPRINTFTS(-1, 
"leave sion_seek_key");
 
  446 #define DFUNCTION "sion_get_keyval_mode" 
  451   _sion_filedesc *sion_filedesc;
 
  453   DPRINTFTS(-1, 
"enter sion_get_keyval_mode");
 
  454   DPRINTFP((2, DFUNCTION, -1, 
"enter\n"));
 
  456   if ((sid < 0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR) || !(sion_filedesc = _sion_vcdtovcon(sid))) {
 
  457     return _sion_errorprint(
SION_KEYVAL_UNKNOWN, _SION_ERROR_RETURN, 
"invalid sion_filedesc, aborting %d ...\n", sid);
 
  460   rc = sion_filedesc->keyvalmode;
 
  462   DPRINTFP((2, DFUNCTION, -1, 
"leave\n"));
 
  463   DPRINTFTS(-1, 
"leave sion_get_keyval_mode");
 
  468 #define DFUNCTION "sion_keyval_type_to_str" 
  485 #define DFUNCTION "sion_key_list_iterator_reset" 
  488   size_t rc = SION_NOT_SUCCESS;
 
  489   _sion_filedesc *sion_filedesc;
 
  491   DPRINTFP((2, DFUNCTION, -1, 
"enter\n"));
 
  493   if ((sid < 0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR) || !(sion_filedesc = _sion_vcdtovcon(sid))) {
 
  494     return _sion_errorprint(0, _SION_ERROR_RETURN, 
"invalid sion_filedesc, aborting %d ...\n", sid);
 
  496   if (sion_filedesc->rank < 0) { 
 
  497     return SION_NOT_SUCCESS;
 
  501     rc = _sion_key_list_iterator_reset_inline(sion_filedesc);
 
  503     return _sion_errorprint(0, _SION_ERROR_RETURN,
 
  504       "trying to reset iterator in keyval mode from file which is not opened in that mode, aborting ...\n");
 
  507   DPRINTFP((2, DFUNCTION, -1, 
"leave\n"));
 
  512 #define DFUNCTION "sion_key_list_iterator_next" 
  515   size_t rc = SION_NOT_SUCCESS;
 
  516   _sion_filedesc *sion_filedesc;
 
  518   DPRINTFP((2, DFUNCTION, -1, 
"enter\n"));
 
  520   if ((sid < 0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR) || !(sion_filedesc = _sion_vcdtovcon(sid))) {
 
  521     return _sion_errorprint(0, _SION_ERROR_RETURN, 
"invalid sion_filedesc, aborting %d ...\n", sid);
 
  523   if (sion_filedesc->rank < 0) { 
 
  524     return SION_NOT_SUCCESS;
 
  527     rc = _sion_key_list_iterator_next_inline(sion_filedesc, keyptr);
 
  528     DPRINTFP((2, DFUNCTION, -1, 
"sion_fread_key_iterator_next: key=%d\n", (
int)*keyptr));
 
  530     return _sion_errorprint(0, _SION_ERROR_RETURN,
 
  531       "trying to forward iterator in keyval mode from file which is not opened in that mode, aborting ...\n");
 
  534   DPRINTFP((2, DFUNCTION, -1, 
"leave\n"));
 
  539 #define DFUNCTION "sion_key_get_stat" 
  542   size_t rc = SION_NOT_SUCCESS;
 
  543   _sion_filedesc *sion_filedesc;
 
  545   DPRINTFP((2, DFUNCTION, -1, 
"enter\n"));
 
  547   if ((sid < 0) || (_sion_vcdtype(sid) != SION_FILEDESCRIPTOR) || !(sion_filedesc = _sion_vcdtovcon(sid))) {
 
  548     return _sion_errorprint(0, _SION_ERROR_RETURN, 
"invalid sion_filedesc, aborting %d ...\n", sid);
 
  550   if (sion_filedesc->rank < 0) { 
 
  551     return SION_NOT_SUCCESS;
 
  554     rc = _sion_key_get_stat_inline(sion_filedesc, key, keystatptr);
 
  555     DPRINTFP((2, DFUNCTION, -1, 
"_sion_key_get_stat_inline: key=%d rc=%d\n", (
int)key, rc));
 
  557     return _sion_errorprint(
 
  558       0, _SION_ERROR_RETURN, 
"trying to get stat of key from file which is not opened in that mode, aborting ...\n");
 
  561   DPRINTFP((2, DFUNCTION, -1, 
"leave\n"));
 
  568 #define DFUNCTION "_sion_store_and_write_key_and_len" 
  569 int _sion_store_and_write_key_and_len(_sion_filedesc *sion_filedesc, uint64_t key, 
size_t len)
 
  572   DPRINTFP((2, DFUNCTION, -1, 
"enter\n"));
 
  575     rc = _sion_store_and_write_key_and_len_inline(sion_filedesc, key, len);
 
  577     return _sion_errorprint(
 
  578       0, _SION_ERROR_RETURN, 
"trying to write in keyval mode from file which is not opened in that mode, aborting ...\n");
 
  581   DPRINTFP((2, DFUNCTION, -1, 
"leave\n"));
 
  586 #define DFUNCTION "_sion_write_value" 
  587 int _sion_write_value(_sion_filedesc *sion_filedesc, 
const void *data, uint64_t key, 
size_t len)
 
  590   DPRINTFP((2, DFUNCTION, -1, 
"enter\n"));
 
  593     rc = _sion_write_value_inline(sion_filedesc, data, key, len);
 
  595     return _sion_errorprint(
 
  596       0, _SION_ERROR_RETURN, 
"trying to read in keyval mode from file which is not opened in that mode, aborting ...\n");
 
  599   DPRINTFP((2, DFUNCTION, -1, 
"leave\n"));
 
  604 #define DFUNCTION "_sion_find_and_read_key_and_len" 
  605 int _sion_find_and_read_key_and_len(_sion_filedesc *sion_filedesc, uint64_t key, 
size_t len, 
size_t *datalen)
 
  607   int rc = SION_NOT_SUCCESS;
 
  608   DPRINTFP((2, DFUNCTION, -1, 
"enter\n"));
 
  611     rc = _sion_find_and_read_key_and_len_inline(sion_filedesc, key, len, datalen);
 
  613     return _sion_errorprint(
 
  614       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"));
 
  622 #define DFUNCTION "_sion_read_value" 
  623 int _sion_read_value(_sion_filedesc *sion_filedesc, 
void *data, uint64_t key, 
size_t len)
 
  626   DPRINTFP((2, DFUNCTION, -1, 
"enter\n"));
 
  629     rc = _sion_read_value_inline(sion_filedesc, data, key, len);
 
  631     return _sion_errorprint(
 
  632       0, _SION_ERROR_RETURN, 
"trying to read in keyval mode from file which is not opened in that mode, aborting ...\n");
 
  635   DPRINTFP((2, DFUNCTION, -1, 
"leave\n"));
 
#define SION_KEYVAL_INLINE
use inline records to store key-value
sion_open_mode
specifies for what type of access to open a file
#define SION_KEYVAL_HASH
use hash data structure to store key-value
#define SION_KEYVAL_UNKNOWN
type UNKNOWN
#define SION_KEYVAL_NOTSET
no Key-Value Pairs in Chunks
#define SION_CURRENT_BLOCK
Alias for the current block.
#define SION_CURRENT_POS
Alias for the current position in the current block.
#define SION_KEYVAL_META
use meta data block to store keys/len
sion_keyval_mode
specifies whether to use SIONlib's key-value mechanism for accessing file content and if so in what m...
#define SION_KEYVAL_NONE
no Key-Value Pairs in Chunks
@ SION_OPEN_READ
open the file for reading only
@ SION_KEYVAL_MODE_UNKNOWN
when reading a file, learn appropriate mechanism from file header
@ SION_KEYVAL_MODE_META
not implemented
@ SION_KEYVAL_MODE_NONE
do not use key-value mechanism
@ SION_KEYVAL_MODE_HASH
not implemented
@ SION_KEYVAL_MODE_INLINE
key-value mechanism with inline storage of meta-data
size_t sion_read_key(void *data, uint64_t key, size_t size, size_t nitems, int sid)
Read data for key.
char * sion_keyval_type_to_str(int type)
Returns key value mode as string.
size_t sion_fwrite_key(const void *data, uint64_t key, size_t size, size_t nitems, int sid)
Writes data for key.
size_t sion_write_key(const void *data, uint64_t key, size_t size, size_t nitems, int sid)
Writes data for key.
int sion_get_keyval_mode(int sid)
Return selected mode for key value.
int sion_key_list_iterator_reset(int sid)
Resets key iterator.
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.
int sion_fread_key_iterator_next(int sid, uint64_t *keyptr, size_t *sizeptr)
Forward to next key.
int sion_key_get_stat(int sid, uint64_t key, sion_key_stat_t *keystatptr)
get statistics about key
int sion_seek_key(int sid, uint64_t key, int entrynum, int64_t posinentry)
Seek to position in key.
int sion_fread_key_iterator_reset(int sid)
Resets key iterator.
int sion_key_list_iterator_next(int sid, uint64_t *keyptr)
Forward to next key.
int sion_read_key_iterator_reset(int sid)
Resets key iterator.
int sion_read_key_iterator_next(int sid, uint64_t *keyptr, size_t *sizeptr)
Forward to next key.