26 #include "sion_error_handler.h"    39 #define DFUNCTION "_sion_dup"    50 int _sion_dup( 
int sid, 
int mode, 
int rank, uint64_t key ) {
    51   int        rc = SION_NOT_SUCCESS, new_sid = SION_ID_NOT_VALID;
    55    DPRINTFTS(-1, 
"enter sion_dup");
    56   DPRINTFP((2, DFUNCTION, -1, 
"enter dup sid=%d\n",sid));
    60     return(_sion_errorprint(SION_ID_NOT_VALID,_SION_ERROR_RETURN, DFUNCTION 
": invalid sion_filedesc, returning %d ...\n", sid));
    64     DPRINTFP((8, DFUNCTION, -1, 
"invalid opened\n"));
    65     return(_sion_errorprint_on_rank(SION_ID_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
    66                     DFUNCTION 
"[%2d]: file is not opened in read mode, returning ...", sion_filedesc->
rank));
    69   _sion_print_filedesc(sion_filedesc, 512, 
"_sion_dup_orig ", _SION_DEBUG_PRINT_ALL|_SION_DEBUG_PRINT_RECURSIVE);
    74     return(_sion_errorprint_on_rank(SION_ID_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank, DFUNCTION
"[%2d]: could not duplicate internal data structure, returning ...", sion_filedesc->
rank));
    89   new_filedesc->
sid=new_sid;
    96     DPRINTFP((8, DFUNCTION, -1, 
"file is in state SION_FILESTATE_PAROPEN\n"));
   102     DPRINTFP((8, DFUNCTION, -1, 
"file is in state SION_FILESTATE_SEROPEN\n"));
   104     return(_sion_errorprint_on_rank(SION_ID_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank, 
   105                     DFUNCTION 
"[%2d]: mode not implemented, aborting ...", sion_filedesc->
rank));
   110     DPRINTFP((8, DFUNCTION, -1, 
"file is in state SION_FILESTATE_SEROPENRANK\n"));
   112     return(_sion_errorprint_on_rank(SION_ID_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank, 
   113                     DFUNCTION 
"[%2d]: mode not implemented, aborting ...", sion_filedesc->
rank));
   118     DPRINTFP((8, DFUNCTION, -1, 
"file is in state SION_FILESTATE_PAROPENMAPPEDMASTER\n"));
   123   if (rc!=SION_SUCCESS) {
   124     return(_sion_errorprint_on_rank(SION_ID_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank, 
   125                     DFUNCTION 
"[%2d]: could not duplicate, returning ...", sion_filedesc->
rank));
   139   _sion_print_filedesc(new_filedesc, 512, 
"_sion_dup_clone", _SION_DEBUG_PRINT_ALL|_SION_DEBUG_PRINT_RECURSIVE);
   141   DPRINTFP((2, DFUNCTION, -1, 
"leave dup sid=%d new_sid=%d\n",sid,new_sid));
   142    DPRINTFTS(-1, 
"leave sion_dup");
   149 #define DFUNCTION "_sion_dedup"   156   int rc = SION_SUCCESS;
   157   int filenr, lfile, lrank;
   161    DPRINTFTS(-1, 
"enter sion_dedup");
   162   DPRINTFP((2, DFUNCTION, -1, 
"enter dedup sid=%d\n",sid));
   166     return(_sion_errorprint(SION_ID_NOT_VALID,_SION_ERROR_RETURN, DFUNCTION 
": invalid sion_filedesc, returning %d ...\n", sid));
   170     return(_sion_errorprint_on_rank(SION_NOT_SUCCESS,_SION_ERROR_RETURN,sion_filedesc->
rank, DFUNCTION 
"[%2d]: descriptor is not a duplicate, returning ...", sion_filedesc->
rank));
   175     int numbytes, numfds;
   177     DPRINTFP((2, DFUNCTION, -1, 
"internal data size of sid %2d (%d bytes, %d fds) \n", sid,numbytes, numfds));
   189       lrank=sion_filedesc->
rank; 
   190       sion_filedesc_sub=sion_filedesc->
multifiles[lfile];
   191       if(   (lrank>=0) && (lfile>=0)  
   195     DPRINTFP((2, DFUNCTION, -1, 
"keyvalptr all_keyvalptr[%d] = %x\n",lrank,sion_filedesc->
keyvalptr));
   197       DPRINTFP((2, DFUNCTION, -1, 
"WARNING keyvalptr already set all_keyvalptr[%d] = %x new =%x \n",lrank,
   206     for(filenr=0;filenr<sion_filedesc->
nfiles;filenr++) {
   207       sion_filedesc_sub=sion_filedesc->
multifiles[filenr];
   213       if (sion_filedesc_sub->
fileptr!=NULL) {
   215     sion_filedesc_sub->
fileptr=NULL;
   217       _sion_free_filedesc(sion_filedesc_sub);
   227     _sion_free_filedesc(sion_filedesc);
   228     sion_filedesc = NULL;
   238     _sion_free_filedesc(sion_filedesc);
   239     sion_filedesc = NULL;
   242   DPRINTFP((2, DFUNCTION, -1, 
"leave dedup sid=%d rc=%d\n",sid,rc));
   243    DPRINTFTS(-1, 
"leave sion_dedup");
   251 #define DFUNCTION "_sion_dup_paropen"   258   int rc = SION_SUCCESS;
   260   DPRINTFP((2, DFUNCTION, -1, 
"enter \n"));
   267     return(_sion_errorprint_on_rank(SION_ID_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank, 
   268                     DFUNCTION 
"[%2d]: could not duplicate fileptr, returning ...", sion_filedesc->
rank));
   280   DPRINTFP((2, DFUNCTION, -1, 
"leave rc=%d\n",rc));
   287 #define DFUNCTION "_sion_dup_paropenmappedmaster"   294   int rc = SION_SUCCESS;
   296   int filenr, lfile, lrank;
   298   DPRINTFP((2, DFUNCTION, -1, 
"enter \n"));
   302   lrank=sion_filedesc->
rank; 
   303   sion_filedesc_sub=sion_filedesc->
multifiles[lfile];
   312   DPRINTFP((4, DFUNCTION, -1, 
"store current information lrank=%d lastchunknr=%d\n", lrank,sion_filedesc_sub->
lastchunknr));
   318     DPRINTFP((2, DFUNCTION, -1, 
"keyvalptr all_keyvalptr[%d] = %x\n",lrank,sion_filedesc_sub->
keyvalptr));
   327     return(_sion_errorprint(SION_ID_UNDEF,_SION_ERROR_RETURN,
"cannot allocate filedescriptor structure vector of size %lu (sion_filedesc), aborting ...\n", 
   332   for(filenr=0;filenr<sion_filedesc->
nfiles;filenr++) {
   341       DPRINTFP((2, DFUNCTION, -1, 
" open file for multifiles[%d]\n",filenr));
   345     return(_sion_errorprint_on_rank(SION_ID_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank, DFUNCTION 
   346                     "[%2d]: could not duplicate fileptr, returning ...", sion_filedesc->
rank));
   370   lrank=sion_filedesc->
rank;
   374     DPRINTFP((2, DFUNCTION, -1, 
"set keyvalptr on lfile=%d,lrank=%d to %x\n",lfile,lrank,new_filedesc->
keyvalptr));
   377   DPRINTFP((2, DFUNCTION, -1, 
"leave rc=%d\n",rc));
   385 #define DFUNCTION "_sion_dup_blocksizes"   392   int rc = SION_SUCCESS;
   402     for (i = 0; i <= sion_filedesc->
lastchunknr; i++) {
   414 #define DFUNCTION "_sion_dup_all_ds"   421   int rc = SION_SUCCESS;
   424   DPRINTFP((32, DFUNCTION, sion_filedesc->
rank, 
"ntasks=%d\n", sion_filedesc->
ntasks));
   427   _sion_alloc_filedesc_all_chunksizes(new_filedesc);
   428   _sion_alloc_filedesc_all_globalranks(new_filedesc);
   429   _sion_alloc_filedesc_all_localranks(new_filedesc);
   430   _sion_alloc_filedesc_all_startpointers(new_filedesc);
   435   for(ltask=0;ltask<new_filedesc->
ntasks;ltask++) {
   443     DPRINTFP((32, DFUNCTION, sion_filedesc->
rank, 
"  sel all_*[%d]\n", ltask));
   446   DPRINTFP((32, DFUNCTION, sion_filedesc->
rank, 
"  sel all_blocksizes[0..%d]\n", new_filedesc->
maxchunks * new_filedesc->
ntasks));
   456 #define DFUNCTION "_sion_dup_keyvalptr"   465   DPRINTFP((2, DFUNCTION, -1, 
"enter\n"));
   467   rc=_sion_keyval_dup_dataptr(sion_filedesc,new_filedesc);
   469   DPRINTFP((2, DFUNCTION, -1, 
"leave rc=%d\n",rc));
   476 #define DFUNCTION "_sion_dup_all_keyvalptr"   483   int rc = SION_SUCCESS;
   487   DPRINTFP((32, DFUNCTION, sion_filedesc->
rank, 
"ntasks=%d\n", sion_filedesc->
ntasks));
   490   _sion_alloc_filedesc_all_keyvalptr(new_filedesc);
   494   for(ltask=0;ltask<new_filedesc->
ntasks;ltask++) {
   498       _sion_keyval_dup_dataptr(sion_filedesc,new_filedesc);
   500       DPRINTFP((2, DFUNCTION, -1, 
"keyvalptr all_keyvalptr[%d] = %x\n",ltask,new_filedesc->
keyvalptr));
   503       DPRINTFP((32, DFUNCTION, sion_filedesc->
rank, 
"  duplicated keyvalptr[%d]\n", ltask));
 int _sion_buffer_flush(_sion_filedesc *sion_filedesc)
Flush buffer.
sion_int64 _sion_file_set_position(_sion_fileptr *sion_fileptr, sion_int64 startpointer)
Set new position in file.
_sion_fileptr * _sion_file_open(const char *fname, unsigned int flags, unsigned int addflags)
Create and open a new file for writing.
Sion File Descriptor Structure.
sion_int64 * all_blockcount
#define SION_FILESTATE_SEROPEN
sion_int64 * all_currentpos
sion_int64 * all_globalranks
#define SION_DUP_RANK_KEY
sion_int64 * all_currentblocknr
int _sion_realloc_filedesc_blocklist(_sion_filedesc *sion_filedesc, sion_int32 maxchunks)
Increase the memory used by the internal sion structure for the blocklist.
#define SION_DESCSTATE_DUP_SEL_RANK_KEY
int _sion_dup_all_keyvalptr(_sion_filedesc *sion_filedesc, _sion_filedesc *new_filedesc)
Duplicate the keyvalue data structures of sion_filedesc.
int _sion_vcdtype(int sid)
int _sion_dedup(int sid)
Destroy a duplicated sion file descriptor.
void * _sion_vcdtovcon(int sid)
int _sion_dup_paropen(_sion_filedesc *sion_filedesc, _sion_filedesc *new_filedesc)
Duplicate sion_filedesc if the file is opened in paropen_mapped_master.
int _sion_dup(int sid, int mode, int rank, uint64_t key)
Create a duplicated sion file descriptor.
#define SION_DESCSTATE_DUP_SEL_RANK
#define SION_FILEMODE_READ
int sion_seek(int sid, int rank, int currentblocknr, sion_int64 posinblk)
Function to set the file pointer to a new position.
sion_int64 * all_startpointers
int _sion_file_close(_sion_fileptr *sion_fileptr)
Close file and destroys fileptr structure.
int _sion_newvcd(void *data, int type)
int _sion_dup_keyvalptr(_sion_filedesc *sion_filedesc, _sion_filedesc *new_filedesc)
Duplicate the keyvalue data structure of sion_filedesc.
#define SION_FILESTATE_PAROPEN
int sion_get_sizeof(int sid, int *numbytes, int *numfds)
Function returns size of internal data structure for sid.
int _sion_dup_blocksizes(_sion_filedesc *sion_filedesc, _sion_filedesc *new_filedesc)
Duplicate the blocksizes array of sion_filedesc.
#define SION_FILESTATE_PAROPENMAPPEDMASTER
sion_int32 currentblocknr
int _sion_alloc_filedesc_block_arrays(_sion_filedesc *sion_filedesc)
Allocate memory for the internal sion structure, fields for all chunksizes of all tasks.
#define SION_FILESTATE_SEROPENRANK
int _sion_dup_paropenmappedmaster(_sion_filedesc *sion_filedesc, _sion_filedesc *new_filedesc)
Duplicate sion_filedesc if the file is opened in paropen_mapped_master.
#define SION_FILEDESCRIPTOR
sion_int64 * all_chunksizes
int _sion_print_filedesc(_sion_filedesc *sion_filedesc, int level, char *desc, int flag)
Print the initialized sion file description.
int _sion_freevcd(int sid)
sion_int64 * all_localranks
_sion_filedesc * _sion_dup_filedesc(_sion_filedesc *sion_filedesc)
duplicates a filedesc data structure, not copying/reopen active file pointers
#define SION_DESCSTATE_ORIG
#define SION_FILESTATE_SEROPENMASTER
sion_int64 * all_blocksizes
#define SION_CURRENT_CHUNK
_sion_filedesc ** multifiles
int _sion_dup_all_ds(_sion_filedesc *sion_filedesc, _sion_filedesc *new_filedesc)
Duplicate the all* array of sion_filedesc.