38 #define DFUNCTION "_sion_dup" 49 int _sion_dup(
int sid,
int mode,
int rank, uint64_t key ) {
50 int rc, new_sid = SION_ID_NOT_VALID;
54 DPRINTFTS(-1,
"enter sion_dup");
55 DPRINTFP((2, DFUNCTION, -1,
"enter dup sid=%d\n",sid));
59 return(
_sion_errorprint(SION_ID_NOT_VALID,_SION_ERROR_RETURN, DFUNCTION
": invalid sion_filedesc, returning %d ...\n", sid));
63 DPRINTFP((8, DFUNCTION, -1,
"invalid opened\n"));
64 return(_sion_errorprint_on_rank(SION_ID_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
65 DFUNCTION
"[%2d]: file is not opened in read mode, returning ...", sion_filedesc->
rank));
68 _sion_print_filedesc(sion_filedesc, 512,
"_sion_dup_orig ", _SION_DEBUG_PRINT_ALL|_SION_DEBUG_PRINT_RECURSIVE);
73 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));
88 new_filedesc->
sid=new_sid;
95 DPRINTFP((8, DFUNCTION, -1,
"file is in state SION_FILESTATE_PAROPEN\n"));
101 DPRINTFP((8, DFUNCTION, -1,
"file is in state SION_FILESTATE_SEROPEN\n"));
103 return(_sion_errorprint_on_rank(SION_ID_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
104 DFUNCTION
"[%2d]: mode not implemented, aborting ...", sion_filedesc->
rank));
109 DPRINTFP((8, DFUNCTION, -1,
"file is in state SION_FILESTATE_SEROPENRANK\n"));
111 return(_sion_errorprint_on_rank(SION_ID_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
112 DFUNCTION
"[%2d]: mode not implemented, aborting ...", sion_filedesc->
rank));
117 DPRINTFP((8, DFUNCTION, -1,
"file is in state SION_FILESTATE_PAROPENMAPPEDMASTER\n"));
122 if (rc!=SION_SUCCESS) {
123 return(_sion_errorprint_on_rank(SION_ID_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
124 DFUNCTION
"[%2d]: could not duplicate, returning ...", sion_filedesc->
rank));
138 _sion_print_filedesc(new_filedesc, 512,
"_sion_dup_clone", _SION_DEBUG_PRINT_ALL|_SION_DEBUG_PRINT_RECURSIVE);
140 DPRINTFP((2, DFUNCTION, -1,
"leave dup sid=%d new_sid=%d\n",sid,new_sid));
141 DPRINTFTS(-1,
"leave sion_dup");
148 #define DFUNCTION "_sion_dedup" 155 int rc = SION_SUCCESS;
156 int filenr, lfile, lrank;
160 DPRINTFTS(-1,
"enter sion_dedup");
161 DPRINTFP((2, DFUNCTION, -1,
"enter dedup sid=%d\n",sid));
165 return(
_sion_errorprint(SION_ID_NOT_VALID,_SION_ERROR_RETURN, DFUNCTION
": invalid sion_filedesc, returning %d ...\n", sid));
169 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));
174 int numbytes, numfds;
176 DPRINTFP((2, DFUNCTION, -1,
"internal data size of sid %2d (%d bytes, %d fds) \n", sid,numbytes, numfds));
188 lrank=sion_filedesc->
rank;
189 sion_filedesc_sub=sion_filedesc->
multifiles[lfile];
190 if( (lrank>=0) && (lfile>=0)
194 DPRINTFP((2, DFUNCTION, -1,
"keyvalptr all_keyvalptr[%d] = %x\n",lrank,sion_filedesc->
keyvalptr));
196 DPRINTFP((2, DFUNCTION, -1,
"WARNING keyvalptr already set all_keyvalptr[%d] = %x new =%x \n",lrank,
205 for(filenr=0;filenr<sion_filedesc->
nfiles;filenr++) {
206 sion_filedesc_sub=sion_filedesc->
multifiles[filenr];
212 if (sion_filedesc_sub->
fileptr!=NULL) {
214 sion_filedesc_sub->
fileptr=NULL;
216 _sion_free_filedesc(sion_filedesc_sub);
226 _sion_free_filedesc(sion_filedesc);
227 sion_filedesc = NULL;
237 _sion_free_filedesc(sion_filedesc);
238 sion_filedesc = NULL;
241 DPRINTFP((2, DFUNCTION, -1,
"leave dedup sid=%d rc=%d\n",sid,rc));
242 DPRINTFTS(-1,
"leave sion_dedup");
250 #define DFUNCTION "_sion_dup_paropen" 257 int rc = SION_SUCCESS;
259 DPRINTFP((2, DFUNCTION, -1,
"enter \n"));
266 return(_sion_errorprint_on_rank(SION_ID_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
267 DFUNCTION
"[%2d]: could not duplicate fileptr, returning ...", sion_filedesc->
rank));
279 DPRINTFP((2, DFUNCTION, -1,
"leave rc=%d\n",rc));
286 #define DFUNCTION "_sion_dup_paropenmappedmaster" 293 int rc = SION_SUCCESS;
295 int filenr, lfile, lrank;
297 DPRINTFP((2, DFUNCTION, -1,
"enter \n"));
301 lrank=sion_filedesc->
rank;
302 sion_filedesc_sub=sion_filedesc->
multifiles[lfile];
311 DPRINTFP((4, DFUNCTION, -1,
"store current information lrank=%d lastchunknr=%d\n", lrank,sion_filedesc_sub->
lastchunknr));
317 DPRINTFP((2, DFUNCTION, -1,
"keyvalptr all_keyvalptr[%d] = %x\n",lrank,sion_filedesc_sub->
keyvalptr));
326 return(
_sion_errorprint(SION_ID_UNDEF,_SION_ERROR_RETURN,
"cannot allocate filedescriptor structure vector of size %lu (sion_filedesc), aborting ...\n",
331 for(filenr=0;filenr<sion_filedesc->
nfiles;filenr++) {
340 DPRINTFP((2, DFUNCTION, -1,
" open file for multifiles[%d]\n",filenr));
344 return(_sion_errorprint_on_rank(SION_ID_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank, DFUNCTION
345 "[%2d]: could not duplicate fileptr, returning ...", sion_filedesc->
rank));
369 lrank=sion_filedesc->
rank;
373 DPRINTFP((2, DFUNCTION, -1,
"set keyvalptr on lfile=%d,lrank=%d to %x\n",lfile,lrank,new_filedesc->
keyvalptr));
376 DPRINTFP((2, DFUNCTION, -1,
"leave rc=%d\n",rc));
384 #define DFUNCTION "_sion_dup_blocksizes" 391 int rc = SION_SUCCESS;
401 for (i = 0; i <= sion_filedesc->
lastchunknr; i++) {
413 #define DFUNCTION "_sion_dup_all_ds" 420 int rc = SION_SUCCESS;
423 DPRINTFP((32, DFUNCTION, sion_filedesc->
rank,
"ntasks=%d\n", sion_filedesc->
ntasks));
426 _sion_alloc_filedesc_all_chunksizes(new_filedesc);
427 _sion_alloc_filedesc_all_globalranks(new_filedesc);
428 _sion_alloc_filedesc_all_localranks(new_filedesc);
429 _sion_alloc_filedesc_all_startpointers(new_filedesc);
434 for(ltask=0;ltask<new_filedesc->
ntasks;ltask++) {
442 DPRINTFP((32, DFUNCTION, sion_filedesc->
rank,
" sel all_*[%d]\n", ltask));
445 DPRINTFP((32, DFUNCTION, sion_filedesc->
rank,
" sel all_blocksizes[0..%d]\n", new_filedesc->
maxchunks * new_filedesc->
ntasks));
455 #define DFUNCTION "_sion_dup_keyvalptr" 462 int rc = SION_SUCCESS;
464 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
466 rc=_sion_keyval_dup_dataptr(sion_filedesc,new_filedesc);
468 DPRINTFP((2, DFUNCTION, -1,
"leave rc=%d\n",rc));
475 #define DFUNCTION "_sion_dup_all_keyvalptr" 482 int rc = SION_SUCCESS;
486 DPRINTFP((32, DFUNCTION, sion_filedesc->
rank,
"ntasks=%d\n", sion_filedesc->
ntasks));
489 _sion_alloc_filedesc_all_keyvalptr(new_filedesc);
493 for(ltask=0;ltask<new_filedesc->
ntasks;ltask++) {
497 _sion_keyval_dup_dataptr(sion_filedesc,new_filedesc);
499 DPRINTFP((2, DFUNCTION, -1,
"keyvalptr all_keyvalptr[%d] = %x\n",ltask,new_filedesc->
keyvalptr));
502 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_errorprint(int rc, int level, const char *format,...)
Internal SION error.
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.