SIONlib  1.7.1
Scalable I/O library for parallel access to task-local files
sion_filedesc.c
Go to the documentation of this file.
1 /****************************************************************************
2 ** SIONLIB http://www.fz-juelich.de/jsc/sionlib **
3 *****************************************************************************
4 ** Copyright (c) 2008-2016 **
5 ** Forschungszentrum Juelich, Juelich Supercomputing Centre **
6 ** **
7 ** See the file COPYRIGHT in the package base directory for details **
8 ****************************************************************************/
9 
14 #include <stdlib.h>
15 #include <stdio.h>
16 #include <string.h>
17 #include <time.h>
18 #include <assert.h>
19 
20 #include "sion.h"
21 #include "sion_debug.h"
22 #include "sion_error_handler.h"
23 #include "sion_internal.h"
24 #include "sion_filedesc.h"
25 #include "sion_keyvalue_keymngr.h"
26 
27 
28 #define DFUNCTION "_sion_init_filedesc"
29 
36 {
37 
38  int rc = SION_SUCCESS;
39 
40  if (sion_filedesc == NULL) {
41  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN, DFUNCTION ": cannot initalized, data structure is not allocated, aborting ...\n"));
42  }
43  sion_filedesc->fileptr = NULL;
44  sion_filedesc->fname = NULL;
45  sion_filedesc->sid = -1;
46  sion_filedesc->rank = -1;
47  sion_filedesc->lrank = -1;
48  sion_filedesc->globalrank = -1;
49  sion_filedesc->ntasks = -1;
50  sion_filedesc->state = SION_FILESTATE_UNKNOWN;
51  sion_filedesc->mode = SION_FILEMODE_UNKNOWN;
52  sion_filedesc->dup_mode = SION_DESCSTATE_ORIG;
53  sion_filedesc->dup_sel_rank = 0;
54  sion_filedesc->dup_sel_key = 0;
55  sion_filedesc->endianness = -1;
56  sion_filedesc->swapbytes = 0;
57  sion_filedesc->fileversion = SION_FILEFORMAT_VERSION;
58  sion_filedesc->filesionversion = 1000 * SION_MAIN_VERSION + SION_SUB_VERSION;
59  sion_filedesc->filesionpatchlevel = SION_SUB_VERSION;
60  sion_filedesc->fsblksize = -1; /* fs block size */
61  sion_filedesc->lastchunknr = -1; /* number of current block */
62  sion_filedesc->maxchunks = -1;
63  sion_filedesc->maxusedchunks = -1;
64 
65  sion_filedesc->startpos = -1;
66  sion_filedesc->chunksize = -1;
67  sion_filedesc->chunksize_req = -1;
68  sion_filedesc->blocksizes = NULL; /* vector of written bytes in each block for current task */
69 
70  sion_filedesc->globalskip = -1; /* number of bytes to skip to next block of same processor */
71  sion_filedesc->end_of_header = -1;
72  sion_filedesc->start_of_varheader = -1;
73  sion_filedesc->start_of_data = -1;
74 
75  sion_filedesc->all_chunksizes = NULL; /* only used if sion is opened from a single task for read */
76  sion_filedesc->all_globalranks = NULL; /* only used if sion is opened from a single task for read */
77  sion_filedesc->all_localranks = NULL; /* only used if sion is opened in mapped mode */
78  sion_filedesc->all_startpointers = NULL; /* only used if sion is opened from a single task for read */
79 
80  sion_filedesc->all_currentpos = NULL; /* only used if sion is opened from a single task for write */
81  sion_filedesc->all_currentblocknr = NULL; /* only used if sion is opened from a single task for write */
82 
83  sion_filedesc->all_coll_collector = NULL; /* only used on rank 0 if usecoll=1 */
84  sion_filedesc->all_coll_collsize = NULL; /* only used on rank 0 if usecoll=1 */
85  sion_filedesc->all_coll_capability = NULL; /* only used on rank 0 if usecoll=1 */
86 
87  sion_filedesc->all_blockcount = NULL; /* size, only used if sion is opened from a single task for read */
88  sion_filedesc->all_blocksizes = NULL; /* size*maxchunks, only used if sion is opened from a single task for read */
89 
90  sion_filedesc->currentpos = -1; /* only used if opened for one rank, reading */
91  sion_filedesc->currentblocknr = -1; /* only used if opened for one rank, reading */
92  sion_filedesc->debug = -1; /* 0 or 1 for debugging */
93 
94  sion_filedesc->nfiles = -1;
95  sion_filedesc->filenumber = -1;
96  sion_filedesc->mapping_size = -1;
97  sion_filedesc->mapping = NULL;
98 
99  sion_filedesc->ntotaltasksinfile = -1;
100  sion_filedesc->nlocaltasksinfile = -1;
101  sion_filedesc->filemanagedbytask = -1;
102 
103  sion_filedesc->ntasks = -1;
104 
105  sion_filedesc->multifiles = NULL;
106 
107  sion_filedesc->flag1 = _SION_FLAG1_NONE;
108  sion_filedesc->flag2 = _SION_FLAG2_NONE;
109  sion_filedesc->prefix = NULL;
110  sion_filedesc->newfname = NULL;
111 
112  sion_filedesc->dataptr = NULL;
113  sion_filedesc->keyvalptr = NULL;
114 
115  sion_filedesc->keyvalmode = SION_KEYVAL_NONE;
116  sion_filedesc->keyvalptr = NULL;
117  sion_filedesc->all_keyvalptr = NULL;
118 
119  sion_filedesc->fpbuffer = NULL;
120  sion_filedesc->fpbuffer_size = -1;
121 
122  sion_filedesc->usecache = 0;
123  sion_filedesc->cachesize = -1;
124  sion_filedesc->cacheid = -1;
125  if(SION_CACHE_FNLEN>0) {
126  sion_filedesc->cachefn[0]='\0';
127  }
128  sion_filedesc->cachemode = SION_CACHE_UNKNOWN;
129  sion_filedesc->cacheptr = NULL;
130 
131  sion_filedesc->usebuffer = 0;
132  sion_filedesc->buffer = NULL;
133  sion_filedesc->buffer_size = -1;
134  sion_filedesc->buffer_ptr = 0;
135 
136  sion_filedesc->compress = 0;
137 
138 
139  sion_filedesc->usecoll = 0;
140  sion_filedesc->collsize = -1;
141  sion_filedesc->collector = -1;
142  sion_filedesc->coll_capability = SION_CAPABILITY_FULL;
143  sion_filedesc->colldebug = 0;
144  sion_filedesc->collcmdused = 0;
145  sion_filedesc->fileptr_exported = 0;
146  sion_filedesc->collmergemode = 0;
147 
148  sion_filedesc->usebuddy = 0;
149  sion_filedesc->buddylevel = 0;
150  sion_filedesc->buddynr = 0;
151  sion_filedesc->buddies = NULL;
152 
153  sion_filedesc->usehints = 0;
154  sion_filedesc->hinttype = SION_HINTS_TYPE_UNKNOWN;
155 
156  return (rc);
157 }
158 #undef DFUNCTION
159 
160 
161 #define DFUNCTION "_sion_alloc_filedesc"
162 
167 {
168  _sion_filedesc *sion_filedesc;
169 
170  sion_filedesc = (_sion_filedesc *) malloc(sizeof(_sion_filedesc));
171  if (sion_filedesc == NULL) {
172  _sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,"cannot allocate filedescriptor structure of size %lu (sion_filedesc), aborting ...\n", (unsigned long) sizeof(sion_filedesc));
173  return(NULL);
174  }
175 
176  return(sion_filedesc);
177 }
178 #undef DFUNCTION
179 
180 
181 #define DFUNCTION "_sion_realloc_filedesc_blocklist"
182 
189 int _sion_realloc_filedesc_blocklist(_sion_filedesc *sion_filedesc, sion_int32 maxchunks)
190 {
191  int rc = SION_SUCCESS;
192  int i;
193  if (sion_filedesc->maxchunks <= 0) {
194  sion_filedesc->blocksizes = (sion_int64 *) malloc(maxchunks * sizeof(sion_int64));
195  if (sion_filedesc->blocksizes == NULL) {
196  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN, DFUNCTION ": cannot allocate temporary memory of size %lu (sion_blocksizes), aborting ...\n",
197  (unsigned long) maxchunks * sizeof(sion_int64)));
198  }
199  for (i = 0; i < maxchunks; i++)
200  sion_filedesc->blocksizes[i] = 0; /* init */
201  sion_filedesc->maxchunks = maxchunks;
202  DPRINTFP((2, DFUNCTION, -1, " alloc for %d chunks\n", maxchunks ));
203  }
204  else {
205  if (sion_filedesc->maxchunks <= maxchunks) {
206  sion_filedesc->blocksizes = (sion_int64 *) realloc(sion_filedesc->blocksizes, maxchunks * sizeof(sion_int64));
207  for (i = sion_filedesc->maxchunks; i < maxchunks; i++)
208  sion_filedesc->blocksizes[i] = 0; /* init */
209  DPRINTFP((2, DFUNCTION, -1, " realloc from %d to %d chunks\n", sion_filedesc->maxchunks, maxchunks ));
210  sion_filedesc->maxchunks = maxchunks;
211  }
212  else {
213  fprintf(stderr, "allocate temporary memory of size %zu (sion_blocksizes) not necessary (allocated size %zu) ...\n",
214  (size_t) maxchunks * sizeof(sion_int64), (size_t) sion_filedesc->maxchunks * sizeof(sion_int64));
215  DPRINTFP((2, DFUNCTION, -1, "allocate temporary memory of size %zu (sion_blocksizes) not necessary (allocated size %zu) ...\n",
216  (size_t) maxchunks * sizeof(sion_int64), (size_t) sion_filedesc->maxchunks * sizeof(sion_int64) ));
217  }
218  }
219  return (rc);
220 }
221 #undef DFUNCTION
222 
223 
224 #define DFUNCTION "_sion_alloc_filedesc_all_chunksizes"
225 int _sion_alloc_filedesc_all_chunksizes(_sion_filedesc *sion_filedesc)
226 {
227  int i, rc = SION_SUCCESS;
228  sion_int64 *p;
229 
230  if (sion_filedesc->ntasks<0) {
231  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN, DFUNCTION ": cannot allocate internal arrays ntasks<0, aborting ...\n"));
232  }
233 
234  DPRINTFP((2, DFUNCTION, -1, "enter alloc arrays size=%d (%lu bytes)\n", sion_filedesc->ntasks, (unsigned long) sion_filedesc->ntasks * sizeof(sion_int64)));
235  sion_filedesc->all_chunksizes = p = (sion_int64 *) malloc(sion_filedesc->ntasks * sizeof(sion_int64));
236  if (sion_filedesc->all_chunksizes == NULL) {
237  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN, DFUNCTION ": cannot allocate temporary memory of size %lu (sion_chunksizes), aborting ...\n",
238  (unsigned long) sion_filedesc->ntasks * sizeof(sion_int64)));
239  }
240  for (i = 0; i < sion_filedesc->ntasks; i++) p[i] = -1;
241  return(rc);
242 }
243 #undef DFUNCTION
244 
245 #define DFUNCTION "_sion_alloc_filedesc_all_startpointers"
246 int _sion_alloc_filedesc_all_startpointers(_sion_filedesc *sion_filedesc)
247 {
248  int i, rc = SION_SUCCESS;
249  sion_int64 *p;
250 
251  if (sion_filedesc->ntasks<0) {
252  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN, DFUNCTION ": cannot allocate internal arrays ntasks<0, aborting ...\n"));
253  }
254  sion_filedesc->all_startpointers = p = (sion_int64 *) malloc(sion_filedesc->ntasks * sizeof(sion_int64));
255  if (sion_filedesc->all_startpointers == NULL) {
256  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN, DFUNCTION ": cannot allocate temporary memory of size %lu (sion_all_startpointers), aborting ...\n",
257  (unsigned long) sion_filedesc->ntasks * sizeof(sion_int64)));
258  }
259  for (i = 0; i < sion_filedesc->ntasks; i++) p[i] = -1;
260 
261  return(rc);
262 }
263 #undef DFUNCTION
264 
265 #define DFUNCTION "_sion_alloc_filedesc_all_globalranks"
266 int _sion_alloc_filedesc_all_globalranks(_sion_filedesc *sion_filedesc)
267 {
268  int i, rc = SION_SUCCESS;
269  sion_int64 *p;
270 
271  if (sion_filedesc->ntasks<0) {
272  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN, DFUNCTION ": cannot allocate internal arrays ntasks<0, aborting ...\n"));
273  }
274  sion_filedesc->all_globalranks = p = (sion_int64 *) malloc(sion_filedesc->ntasks * sizeof(sion_int64));
275  if (sion_filedesc->all_globalranks == NULL) {
276  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN, DFUNCTION ": cannot allocate temporary memory of size %lu (sion_all_globalranks), aborting ...\n",
277  (unsigned long) sion_filedesc->ntasks * sizeof(sion_int64)));
278  }
279  for (i = 0; i < sion_filedesc->ntasks; i++) p[i] = -1;
280 
281  return(rc);
282 }
283 #undef DFUNCTION
284 
285 #define DFUNCTION "_sion_alloc_filedesc_all_localranks"
286 int _sion_alloc_filedesc_all_localranks(_sion_filedesc *sion_filedesc)
287 {
288  int i, rc = SION_SUCCESS;
289  sion_int64 *p;
290 
291  if (sion_filedesc->ntasks<0) {
292  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN, DFUNCTION ": cannot allocate internal arrays ntasks<0, aborting ...\n"));
293  }
294  sion_filedesc->all_localranks = p = (sion_int64 *) malloc(sion_filedesc->ntasks * sizeof(sion_int64));
295  if (sion_filedesc->all_localranks == NULL) {
296  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN, DFUNCTION ": cannot allocate temporary memory of size %lu (sion_all_localranks), aborting ...\n",
297  (unsigned long) sion_filedesc->ntasks * sizeof(sion_int64)));
298  }
299  for (i = 0; i < sion_filedesc->ntasks; i++) p[i] = -1;
300 
301  return(rc);
302 }
303 #undef DFUNCTION
304 
305 #define DFUNCTION "_sion_alloc_filedesc_all_keyvalptr"
306 int _sion_alloc_filedesc_all_keyvalptr(_sion_filedesc *sion_filedesc)
307 {
308  int i, rc = SION_SUCCESS;
309  void **p;
310 
311  if (sion_filedesc->ntasks<0) {
312  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN, DFUNCTION ": cannot allocate internal arrays ntasks<0, aborting ...\n"));
313  }
314 
315  DPRINTFP((2, DFUNCTION, -1, "enter alloc arrays size=%d (%lu bytes)\n", sion_filedesc->ntasks, (unsigned long) sion_filedesc->ntasks * sizeof(sion_int64)));
316  sion_filedesc->all_keyvalptr = p = (void *) malloc(sion_filedesc->ntasks * sizeof(void *));
317  if (sion_filedesc->all_keyvalptr == NULL) {
318  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN, DFUNCTION ": cannot allocate temporary memory of size %lu (sion_all_keyvalptr), aborting ...\n",
319  (unsigned long) sion_filedesc->ntasks * sizeof(sion_int64)));
320  }
321  for (i = 0; i < sion_filedesc->ntasks; i++) p[i] = NULL;
322  return(rc);
323 }
324 #undef DFUNCTION
325 
326 
327 #define DFUNCTION "_sion_alloc_filedesc_arrays"
328 
335 {
336  DPRINTFP((2, DFUNCTION, -1, "enter alloc arrays size=%d (%lu bytes)\n", sion_filedesc->ntasks, (unsigned long) sion_filedesc->ntasks * sizeof(sion_int64)));
337 
338  _sion_alloc_filedesc_all_chunksizes(sion_filedesc);
339  _sion_alloc_filedesc_all_startpointers(sion_filedesc);
340  _sion_alloc_filedesc_all_globalranks(sion_filedesc);
341 
342  DPRINTFP((2, DFUNCTION, -1, "leave alloc arrays size=%d\n", sion_filedesc->ntasks));
343  return (1);
344 }
345 #undef DFUNCTION
346 
347 
348 #define DFUNCTION "_sion_free_filedesc_all_chunksizes"
349 int _sion_free_filedesc_all_chunksizes(_sion_filedesc *sion_filedesc)
350 {
351  DPRINTFP((2, DFUNCTION, -1, "enter free arrays\n"));
352  if (sion_filedesc->all_chunksizes != NULL) {
353  free(sion_filedesc->all_chunksizes);
354  sion_filedesc->all_chunksizes=NULL;
355  }
356  DPRINTFP((2, DFUNCTION, -1, "leave free arrays\n"));
357  return (1);
358 }
359 #undef DFUNCTION
360 
361 #define DFUNCTION "_sion_free_filedesc_all_globalranks"
362 int _sion_free_filedesc_all_globalranks(_sion_filedesc *sion_filedesc)
363 {
364  DPRINTFP((2, DFUNCTION, -1, "enter free arrays\n"));
365  if (sion_filedesc->all_globalranks != NULL) {
366  free(sion_filedesc->all_globalranks);
367  sion_filedesc->all_globalranks=NULL;
368  }
369  DPRINTFP((2, DFUNCTION, -1, "leave free arrays\n"));
370  return (1);
371 }
372 #undef DFUNCTION
373 
374 #define DFUNCTION "_sion_free_filedesc_all_startpointers"
375 int _sion_free_filedesc_all_startpointers(_sion_filedesc *sion_filedesc)
376 {
377  DPRINTFP((2, DFUNCTION, -1, "enter free arrays\n"));
378  if (sion_filedesc->all_startpointers != NULL) {
379  free(sion_filedesc->all_startpointers);
380  sion_filedesc->all_startpointers=NULL;
381  }
382  DPRINTFP((2, DFUNCTION, -1, "leave free arrays\n"));
383  return (1);
384 }
385 #undef DFUNCTION
386 
387 #define DFUNCTION "_sion_free_filedesc_all_localranks"
388 int _sion_free_filedesc_all_localranks(_sion_filedesc *sion_filedesc)
389 {
390  DPRINTFP((2, DFUNCTION, -1, "enter free arrays\n"));
391  if (sion_filedesc->all_localranks != NULL) {
392  free(sion_filedesc->all_localranks);
393  sion_filedesc->all_localranks=NULL;
394  }
395  DPRINTFP((2, DFUNCTION, -1, "leave free arrays\n"));
396  return (1);
397 }
398 #undef DFUNCTION
399 
400 #define DFUNCTION "_sion_free_filedesc_all_keyvalptr"
401 int _sion_free_filedesc_all_keyvalptr(_sion_filedesc *sion_filedesc)
402 {
403  int tasknr = 0;
404  DPRINTFP((2, DFUNCTION, -1, "enter free arrays\n"));
405  if (sion_filedesc->all_keyvalptr != NULL) {
406  for(tasknr=0;tasknr<sion_filedesc->ntasks;tasknr++) {
407  if (sion_filedesc->all_keyvalptr[tasknr]) {
408  DPRINTFP((2, DFUNCTION, -1, "free now KEYVALPTR all_keyvalptr[%d] = %x\n",tasknr,sion_filedesc->all_keyvalptr[tasknr]));
409  _sion_keyvalue_keymngr_destroy((_sion_keyvalue_keymngr **)&(sion_filedesc->all_keyvalptr[tasknr]));
410  }
411  }
412  free(sion_filedesc->all_keyvalptr);
413  sion_filedesc->all_keyvalptr=NULL;
414  }
415  DPRINTFP((2, DFUNCTION, -1, "leave free arrays\n"));
416  return (1);
417 }
418 #undef DFUNCTION
419 
420 #define DFUNCTION "_sion_free_filedesc_arrays"
421 
428 {
429 
430  _sion_free_filedesc_all_chunksizes(sion_filedesc);
431  _sion_free_filedesc_all_globalranks(sion_filedesc);
432  _sion_free_filedesc_all_startpointers(sion_filedesc);
433  return (1);
434 }
435 #undef DFUNCTION
436 
437 
438 #define DFUNCTION "_sion_alloc_filedesc_coll_arrays"
439 
446 {
447  int i;
448  sion_int32 *p;
449 
450  if (sion_filedesc->ntasks<0) {
451  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN, DFUNCTION ": cannot allocate internal arrays ntasks<0, aborting ...\n"));
452  }
453 
454  DPRINTFP((2, DFUNCTION, -1, "enter alloc arrays size=%d (%lu bytes)\n", sion_filedesc->ntasks, (unsigned long) sion_filedesc->ntasks * sizeof(sion_int32)));
455  sion_filedesc->all_coll_collsize = p = (sion_int32 *) malloc(sion_filedesc->ntasks * sizeof(sion_int32));
456  if (sion_filedesc->all_coll_collsize == NULL) {
457  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN, DFUNCTION ": cannot allocate temporary memory of size %lu (sion_all_collsize), aborting ...\n",
458  (unsigned long) sion_filedesc->ntasks * sizeof(sion_int32)));
459  }
460  for (i = 0; i < sion_filedesc->ntasks; i++) p[i] = -1;
461 
462  DPRINTFP((2, DFUNCTION, -1, "enter alloc arrays size=%d (%lu bytes)\n", sion_filedesc->ntasks, (unsigned long) sion_filedesc->ntasks * sizeof(sion_int32)));
463  sion_filedesc->all_coll_collector = p = (sion_int32 *) malloc(sion_filedesc->ntasks * sizeof(sion_int32));
464  if (sion_filedesc->all_coll_collector == NULL) {
465  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN, DFUNCTION ": cannot allocate temporary memory of size %lu (sion_all_collector), aborting ...\n",
466  (unsigned long) sion_filedesc->ntasks * sizeof(sion_int32)));
467  }
468  for (i = 0; i < sion_filedesc->ntasks; i++) p[i] = -1;
469 
470  DPRINTFP((2, DFUNCTION, -1, "enter alloc arrays size=%d (%lu bytes)\n", sion_filedesc->ntasks, (unsigned long) sion_filedesc->ntasks * sizeof(sion_int32)));
471  sion_filedesc->all_coll_capability = p = (sion_int32 *) malloc(sion_filedesc->ntasks * sizeof(sion_int32));
472  if (sion_filedesc->all_coll_capability == NULL) {
473  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN, DFUNCTION ": cannot allocate temporary memory of size %lu (sion_all_capability), aborting ...\n",
474  (unsigned long) sion_filedesc->ntasks * sizeof(sion_int32)));
475  }
476  for (i = 0; i < sion_filedesc->ntasks; i++) p[i] = -1;
477 
478 
479  DPRINTFP((2, DFUNCTION, -1, "leave alloc arrays size=%d\n", sion_filedesc->ntasks));
480  return (1);
481 }
482 #undef DFUNCTION
483 
484 
485 #define DFUNCTION "_sion_free_filedesc_coll_arrays"
486 
493 {
494 
495  DPRINTFP((2, DFUNCTION, -1, "enter free arrays\n"));
496  if (sion_filedesc->all_coll_collsize != NULL) {
497  free(sion_filedesc->all_coll_collsize);
498  sion_filedesc->all_coll_collsize=NULL;
499  }
500  if (sion_filedesc->all_coll_collector != NULL) {
501  free(sion_filedesc->all_coll_collector);
502  sion_filedesc->all_coll_collector=NULL;
503  }
504  if (sion_filedesc->all_coll_capability != NULL) {
505  free(sion_filedesc->all_coll_capability);
506  sion_filedesc->all_coll_capability=NULL;
507  }
508  DPRINTFP((2, DFUNCTION, -1, "leave free arrays\n"));
509  return (1);
510 }
511 #undef DFUNCTION
512 
513 #define DFUNCTION "_sion_alloc_filedesc_block_arrays"
514 
521 {
522  int i;
523  sion_int64 *p;
524 
525  DPRINTFP((2, DFUNCTION, -1, "enter alloc locations size=%d, maxblocks=%d\n", sion_filedesc->ntasks, sion_filedesc->maxchunks));
526  sion_filedesc->all_blockcount = p = (sion_int64 *) malloc(sion_filedesc->ntasks * sizeof(sion_int64));
527  if (sion_filedesc->all_blockcount == NULL) {
528  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN, DFUNCTION ": cannot allocate temporary memory of size %lu (sion_blockcount), aborting ...\n",
529  (unsigned long) sion_filedesc->ntasks * sizeof(sion_int64)));
530  }
531  for (i = 0; i < sion_filedesc->ntasks; i++) p[i] = -1;
532 
533  sion_filedesc->all_currentpos = p = (sion_int64 *) malloc(sion_filedesc->ntasks * sizeof(sion_int64));
534  if (sion_filedesc->all_currentpos == NULL) {
535  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN, DFUNCTION ": cannot allocate temporary memory of size %lu (sion_currentpos), aborting ...\n",
536  (unsigned long) sion_filedesc->ntasks * sizeof(sion_int64)));
537  }
538  for (i = 0; i < sion_filedesc->ntasks; i++) p[i] = -1;
539 
540  sion_filedesc->all_currentblocknr = p = (sion_int64 *) malloc(sion_filedesc->ntasks * sizeof(sion_int64));
541  if (sion_filedesc->all_currentblocknr == NULL) {
542  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN, DFUNCTION ": cannot allocate temporary memory of size %lu (sion_currentblocknr), aborting ...\n",
543  (unsigned long) sion_filedesc->ntasks * sizeof(sion_int64)));
544  }
545  for (i = 0; i < sion_filedesc->ntasks; i++) p[i] = -1;
546 
547  sion_filedesc->all_blocksizes = p = (sion_int64 *) malloc(sion_filedesc->maxchunks * sion_filedesc->ntasks * sizeof(sion_int64));
548  if (sion_filedesc->all_blocksizes == NULL) {
549  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN, DFUNCTION ": cannot allocate temporary memory of size %lu (sion_blocksizes), aborting ...\n",
550  (unsigned long) sion_filedesc->ntasks * sizeof(sion_int64)));
551  }
552  for (i = 0; i < sion_filedesc->maxchunks * sion_filedesc->ntasks; i++) p[i] = -1;
553 
554 
555  DPRINTFP((2, DFUNCTION, -1, "leave alloc locations size=%d, maxblocks=%d\n", sion_filedesc->ntasks, sion_filedesc->maxchunks));
556  return (1);
557 }
558 #undef DFUNCTION
559 
560 
561 #define DFUNCTION "_sion_alloc_filedesc_block_arrays_only"
562 
569 {
570  int i;
571  sion_int64 *p;
572 
573  DPRINTFP((2, DFUNCTION, -1, "enter alloc locations size=%d, maxblocks=%d\n", sion_filedesc->ntasks, sion_filedesc->maxchunks));
574  sion_filedesc->all_blockcount = p = (sion_int64 *) malloc(sion_filedesc->ntasks * sizeof(sion_int64));
575  if (sion_filedesc->all_blockcount == NULL) {
576  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN, DFUNCTION ": cannot allocate temporary memory of size %lu (sion_blockcount), aborting ...\n",
577  (unsigned long) sion_filedesc->ntasks * sizeof(sion_int64)));
578  }
579  for (i = 0; i < sion_filedesc->ntasks; i++) p[i] = -1;
580 
581  sion_filedesc->all_blocksizes = p = (sion_int64 *) malloc(sion_filedesc->maxchunks * sion_filedesc->ntasks * sizeof(sion_int64));
582  if (sion_filedesc->all_blocksizes == NULL) {
583  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN, DFUNCTION ": cannot allocate temporary memory of size %lu (sion_blocksizes), aborting ...\n",
584  (unsigned long) sion_filedesc->ntasks * sizeof(sion_int64)));
585  }
586  for (i = 0; i < sion_filedesc->maxchunks * sion_filedesc->ntasks; i++) p[i] = -1;
587 
588  DPRINTFP((2, DFUNCTION, -1, "leave alloc locations size=%d, maxblocks=%d\n", sion_filedesc->ntasks, sion_filedesc->maxchunks));
589  return (1);
590 }
591 #undef DFUNCTION
592 
593 #define DFUNCTION "_sion_free_filedesc"
594 int _sion_free_filedesc(_sion_filedesc *sion_filedesc)
595 {
596 
597  int rc = SION_SUCCESS;
598 
599  if (sion_filedesc == NULL) {
600  return (0);
601  }
602 
603  if (sion_filedesc->fname)
604  free(sion_filedesc->fname);
605  if (sion_filedesc->blocksizes)
606  free(sion_filedesc->blocksizes);
607  if (sion_filedesc->all_chunksizes)
608  free(sion_filedesc->all_chunksizes);
609  if (sion_filedesc->all_globalranks)
610  free(sion_filedesc->all_globalranks);
611  if (sion_filedesc->all_localranks)
612  free(sion_filedesc->all_localranks);
613  if (sion_filedesc->all_startpointers)
614  free(sion_filedesc->all_startpointers);
615  if (sion_filedesc->all_currentpos)
616  free(sion_filedesc->all_currentpos);
617  if (sion_filedesc->all_currentblocknr)
618  free(sion_filedesc->all_currentblocknr);
619  if (sion_filedesc->all_blockcount)
620  free(sion_filedesc->all_blockcount);
621  if (sion_filedesc->all_blocksizes)
622  free(sion_filedesc->all_blocksizes);
623  if (sion_filedesc->all_coll_collsize)
624  free(sion_filedesc->all_coll_collsize);
625  if (sion_filedesc->all_coll_collector)
626  free(sion_filedesc->all_coll_collector);
627  if (sion_filedesc->all_keyvalptr)
628  _sion_free_filedesc_all_keyvalptr(sion_filedesc);
629  if (sion_filedesc->keyvalptr)
630  _sion_keyvalue_keymngr_destroy((_sion_keyvalue_keymngr **)&(sion_filedesc->keyvalptr));
631  if (sion_filedesc->prefix)
632  free(sion_filedesc->prefix);
633  if (sion_filedesc->newfname)
634  free(sion_filedesc->newfname);
635  if (sion_filedesc->mapping)
636  free(sion_filedesc->mapping);
637  /* is only a payload pointer, memory should not freed here */
638  /* if (sion_filedesc->dataptr) */
639  /* free(sion_filedesc->dataptr); */
640  if (sion_filedesc->fpbuffer)
641  free(sion_filedesc->fpbuffer);
642  if (sion_filedesc->buffer)
643  free(sion_filedesc->buffer);
644 
645  free(sion_filedesc);
646 
647  return (rc);
648 }
649 #undef DFUNCTION
650 
651 #define DFUNCTION "_sion_print_filedesc"
652 
656 int _sion_print_filedesc(_sion_filedesc *sion_filedesc, int level, char *desc, int flag)
657 {
658 
659  int rc = SION_SUCCESS;
660  int i;
661 
662  if (sion_filedesc == NULL) {
663  return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN, DFUNCTION ": cannot print, data structure is not allocated, aborting ...\n"));
664  }
665 
666  DPRINTFP((level, desc, sion_filedesc->rank, "DUMP: sion_filedesc\n"));
667  DPRINTFP((level, desc, sion_filedesc->rank, "-------------------\n"));
668 
669  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%x\n", "fileptr", sion_filedesc->fileptr));
670  if(sion_filedesc->fileptr) {
671  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d %s\n", "fileptr->flags", sion_filedesc->fileptr->flags,_sion_get_fileptr_desc(sion_filedesc->fileptr)));
672  }
673  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%s\n", "fname", sion_filedesc->fname));
674  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "sid", sion_filedesc->sid));
675  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "rank", sion_filedesc->rank));
676  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "globalrank", sion_filedesc->globalrank));
677  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "ntasks", sion_filedesc->ntasks));
678  if(sion_filedesc->state==SION_FILESTATE_PAROPEN) DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d (SION_FILESTATE_PAROPEN)\n", "state", sion_filedesc->state));
679  else if(sion_filedesc->state==SION_FILESTATE_SEROPEN) DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d (SION_FILESTATE_SEROPEN)\n", "state", sion_filedesc->state));
680  else if(sion_filedesc->state==SION_FILESTATE_SEROPENRANK) DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d (SION_FILESTATE_SEROPENRANK)\n", "state", sion_filedesc->state));
681  else if(sion_filedesc->state==SION_FILESTATE_SEROPENMASTER)DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d (SION_FILESTATE_SEROPENMASTER)\n", "state", sion_filedesc->state));
682  else if(sion_filedesc->state==SION_FILESTATE_CLOSE) DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d (SION_FILESTATE_CLOSE)\n", "state", sion_filedesc->state));
683  else if(sion_filedesc->state==SION_FILESTATE_PAROPENMAPPED) DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d (SION_FILESTATE_PAROPENMAPPED)\n", "state", sion_filedesc->state));
684  else if(sion_filedesc->state==SION_FILESTATE_PAROPENMAPPEDMANAGED)DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d (SION_FILESTATE_PAROPENMAPPEDMANAGED)\n", "state", sion_filedesc->state));
685  else if(sion_filedesc->state==SION_FILESTATE_PAROPENMAPPEDMASTER) DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d (SION_FILESTATE_PAROPENMAPPEDMASTER)\n", "state", sion_filedesc->state));
686  else DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d (unknown)\n", "state", sion_filedesc->state));
687  if(sion_filedesc->mode==SION_FILEMODE_WRITE) DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d (SION_FILEMODE_WRITE)\n", "mode", sion_filedesc->mode));
688  else if(sion_filedesc->mode==SION_FILEMODE_READ) DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d (SION_FILEMODE_READ)\n", "mode", sion_filedesc->mode));
689  else DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d (unknown)\n", "mode", sion_filedesc->mode));
690  if(sion_filedesc->dup_mode==SION_DESCSTATE_ORIG) DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d (SION_DESCSTATE_ORIG)\n", "dup", sion_filedesc->dup_mode));
691  else if(sion_filedesc->dup_mode==SION_DESCSTATE_DUP) DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d (SION_DESCSTATE_DUP)\n", "dup", sion_filedesc->dup_mode));
692  else if(sion_filedesc->dup_mode==SION_DESCSTATE_DUP_SEL_RANK) DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d (SION_DESCSTATE_DUP_SEL_RANK)\n", "dup", sion_filedesc->dup_mode));
693  else if(sion_filedesc->dup_mode==SION_DESCSTATE_DUP_SEL_RANK_KEY) DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d (SION_DESCSTATE_DUP_SEL_RANK_KEY)\n", "dup", sion_filedesc->dup_mode));
694  else DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d (unknown)\n", "dup", sion_filedesc->dup_mode));
695  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "endianness", sion_filedesc->endianness));
696  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "swapbytes", sion_filedesc->swapbytes));
697  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "fileversion", sion_filedesc->fileversion));
698  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "filesionversion", sion_filedesc->filesionversion));
699  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "filesionpatchlevel", sion_filedesc->filesionpatchlevel));
700  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "fsblksize", sion_filedesc->fsblksize));
701  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "lastchunknr", sion_filedesc->lastchunknr));
702  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "maxchunks", sion_filedesc->maxchunks));
703  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "maxusedchunks", sion_filedesc->maxusedchunks));
704 
705  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "currentpos", sion_filedesc->currentpos));
706  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "currentblocknr", sion_filedesc->currentblocknr));
707 
708  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%lld\n", "startpos", sion_filedesc->startpos));
709  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%lld\n", "chunksize", sion_filedesc->chunksize));
710  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%lld\n", "chunksize_req", sion_filedesc->chunksize_req));
711  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%lld\n", "globalskip", sion_filedesc->globalskip));
712  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%lld\n", "end_of_header", sion_filedesc->end_of_header));
713  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%lld\n", "start_of_varheader", sion_filedesc->start_of_varheader));
714  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%lld\n", "start_of_data", sion_filedesc->start_of_data));
715 
716  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "nfiles", sion_filedesc->nfiles));
717  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "filenumber", sion_filedesc->filenumber));
718  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=\"%s\"\n", "prefix", sion_filedesc->prefix));
719  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=\"%s\"\n", "newfname", sion_filedesc->newfname));
720  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%x\n", "fpbuffer", sion_filedesc->fpbuffer));
721  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "fpbuffer_size", sion_filedesc->fpbuffer_size));
722  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%x\n", "buffer", sion_filedesc->buffer));
723  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "buffer_size", sion_filedesc->buffer_size));
724  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "buffer_ptr", sion_filedesc->buffer_ptr));
725 
726  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "compress", sion_filedesc->compress));
727 
728  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "usecache", sion_filedesc->usecache));
729  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "cachesize", sion_filedesc->cachesize));
730 
731  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "usecoll", sion_filedesc->usecoll));
732  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "collsize", sion_filedesc->collsize));
733  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "collector", sion_filedesc->collector));
734  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "colldebug", sion_filedesc->colldebug));
735  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "collcmdused", sion_filedesc->collcmdused));
736  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "collmergemode", sion_filedesc->collmergemode));
737  if(sion_filedesc->coll_capability==SION_CAPABILITY_FULL) DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%s\n", "coll_capability", "FULL"));
738  if(sion_filedesc->coll_capability==SION_CAPABILITY_ONLY_SENDER) DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%s\n", "coll_capability", "ONLY_SENDER"));
739  if(sion_filedesc->coll_capability==SION_CAPABILITY_NONE) DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%s\n", "coll_capability", "NONE"));
740 
741  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "fileptr_exported", sion_filedesc->fileptr_exported));
742 
743  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "usebuddy", sion_filedesc->usebuddy));
744  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "buddylevel", sion_filedesc->buddylevel));
745  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "buddynr", sion_filedesc->buddynr));
746  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%x\n", "buddies", sion_filedesc->buddies));
747 
748  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "usehints", sion_filedesc->usehints));
749  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "hinttype", sion_filedesc->hinttype));
750 
751 
752  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "lrank", sion_filedesc->lrank));
753  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "nlocaltasksinfile", sion_filedesc->nlocaltasksinfile));
754  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "ntotaltasksinfile", sion_filedesc->ntotaltasksinfile));
755  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%d\n", "filemanagedbytask", sion_filedesc->filemanagedbytask));
756 
757 
758  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%x\n", "dataptr", sion_filedesc->dataptr));
759 
760  if(sion_filedesc->keyvalmode==SION_KEYVAL_NONE) DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%s\n", "keyvalmode", "NONE"));
761  if(sion_filedesc->keyvalmode==SION_KEYVAL_INLINE) DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%s\n", "keyvalmode", "INLINE"));
762  if(sion_filedesc->keyvalmode==SION_KEYVAL_UNKNOWN) DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%s\n", "keyvalmode", "UNKNOWN"));
763  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%x\n", "keyvalptr", sion_filedesc->keyvalptr));
764  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s=%x\n", "all_keyvalptr", sion_filedesc->all_keyvalptr));
765 
766  /* if (sion_filedesc->nfiles > 1) */
767  /* for(i=0;i<sion_filedesc->nfiles;i++) */
768  /* DPRINTFP(( level,desc,sion_filedesc->rank,"D: file[%d]=%s\n", i, sion_filedesc->files[i])); */
769 
770 
771  if(sion_filedesc->blocksizes !=NULL) {
772  int maxprintblocks=sion_filedesc->lastchunknr;
773  if (maxprintblocks>20) maxprintblocks=20;
774  for (i = 0; i <= maxprintblocks; i++) {
775  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s[%4d]=%lld\n", "blocksizes", i, sion_filedesc->blocksizes[i]));
776  }
777  if(maxprintblocks<sion_filedesc->lastchunknr) {
778  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s[....]=...\n", "blocksizes"));
779  }
780 
781  }
782 
783  if( (sion_filedesc->state==SION_FILESTATE_SEROPENMASTER) || (sion_filedesc->state==SION_FILESTATE_PAROPENMAPPEDMASTER) ) {
784  for (i = 0; i < sion_filedesc->nfiles; i++) {
785  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s[%4d]=%s\n", "file:", i, sion_filedesc->multifiles[i]->fname));
786  }
787  }
788 
789  if (flag&_SION_DEBUG_PRINT_ALL) {
790 
791  if(sion_filedesc->all_chunksizes !=NULL) {
792  for (i = 0; i < sion_filedesc->ntasks; i++) {
793  DPRINTFP((2048, desc, sion_filedesc->rank, "D: %-20s[%4d]=%lld\n", "all_chunksizes", i, sion_filedesc->all_chunksizes[i]));
794  }
795  }
796 
797  if(sion_filedesc->all_globalranks !=NULL) {
798  for (i = 0; i < sion_filedesc->ntasks; i++) {
799  DPRINTFP((2048, desc, sion_filedesc->rank, "D: %-20s[%4d]=%lld\n", "all_globalranks", i, sion_filedesc->all_globalranks[i]));
800  }
801  }
802 
803  if(sion_filedesc->all_localranks !=NULL) {
804  for (i = 0; i < sion_filedesc->ntasks; i++) {
805  DPRINTFP((2048, desc, sion_filedesc->rank, "D: %-20s[%4d]=%lld\n", "all_localranks", i, sion_filedesc->all_localranks[i]));
806  }
807  }
808 
809  if(sion_filedesc->all_startpointers !=NULL) {
810  for (i = 0; i < sion_filedesc->ntasks; i++) {
811  DPRINTFP((2048, desc, sion_filedesc->rank, "D: %-20s[%4d]=%lld\n", "all_startpointers", i, sion_filedesc->all_startpointers[i]));
812  }
813  }
814 
815  if(sion_filedesc->all_currentpos !=NULL) {
816  for (i = 0; i < sion_filedesc->ntasks; i++) {
817  DPRINTFP((2048, desc, sion_filedesc->rank, "D: %-20s[%4d]=%lld\n", "all_currentpos", i, sion_filedesc->all_currentpos[i]));
818  }
819  }
820 
821  if(sion_filedesc->all_currentblocknr !=NULL) {
822  for (i = 0; i < sion_filedesc->ntasks; i++) {
823  DPRINTFP((2048, desc, sion_filedesc->rank, "D: %-20s[%4d]=%lld\n", "all_currentblocknr", i, sion_filedesc->all_currentblocknr[i]));
824  }
825  }
826 
827  if(sion_filedesc->all_blockcount !=NULL) {
828  for (i = 0; i < sion_filedesc->ntasks; i++) {
829  DPRINTFP((2048, desc, sion_filedesc->rank, "D: %-20s[%4d]=%lld\n", "all_blockcount", i, sion_filedesc->all_blockcount[i]));
830  }
831  }
832 
833  if((sion_filedesc->all_blocksizes != NULL) && (sion_filedesc->all_blockcount != NULL)) {
834  for (i = 0; i < sion_filedesc->ntasks; i++) {
835  int b;
836  int maxprintblocks=sion_filedesc->all_blockcount[i];
837  if (maxprintblocks>20) maxprintblocks=20;
838  for (b = 0; b < maxprintblocks ; b++) {
839  DPRINTFP((2048, desc, sion_filedesc->rank, "D: %-20s[%4d][%d]=%lld\n", "all_blocksizes", i, b,
840  sion_filedesc->all_blocksizes[b*sion_filedesc->ntasks+i]));
841  }
842  if(maxprintblocks<sion_filedesc->all_blockcount[i]) {
843  DPRINTFP((level, desc, sion_filedesc->rank, "D: %-20s[%4d][..]=...\n", "all_blocksizes", i));
844  }
845  }
846  }
847  }
848 
849  if( (sion_filedesc->state==SION_FILESTATE_SEROPENMASTER) || (sion_filedesc->state==SION_FILESTATE_PAROPENMAPPEDMASTER) ) {
850  if (flag&_SION_DEBUG_PRINT_RECURSIVE) {
851  for (i = 0; i < sion_filedesc->nfiles; i++) {
852  DPRINTFP((level, desc, sion_filedesc->rank, "\n"));
853  DPRINTFP((level, desc, sion_filedesc->rank, "*** DUMP of multifile[%d] ***\n",i));
854  _sion_print_filedesc(sion_filedesc->multifiles[i], level, desc, flag&~(_SION_DEBUG_PRINT_RECURSIVE));
855  }
856  }
857  }
858 
859  return (rc);
860 }
861 #undef DFUNCTION
862 
863 #define DFUNCTION "_sion_get_size_of_filedesc"
864 
870 int _sion_get_size_of_filedesc(_sion_filedesc *sion_filedesc, int *numbytes, int *numfds)
871 {
872  int rc=SION_SUCCESS;
873  int bytes=0, fds=0, help_bytes, help_fds, i;
874 
875  if(sion_filedesc==NULL) return(bytes);
876 
877  DPRINTFP((2, DFUNCTION, -1, "start sid=%d nfiles=%d ntasks=%d maxchunks=%d mapping_size=%d\n", sion_filedesc->sid,
878  sion_filedesc->nfiles,sion_filedesc->ntasks,sion_filedesc->maxchunks,sion_filedesc->mapping_size));
879 
880  help_bytes=sizeof(_sion_filedesc);
881  DPRINTFP((512, DFUNCTION, -1, " sizeof(sion_filedesc)= %5d\n", help_bytes));
882  bytes+=help_bytes;
883 
884  if( (sion_filedesc->blocksizes!=NULL) ) {
885  help_bytes=sion_filedesc->maxchunks*sizeof(sion_filedesc->blocksizes[0]);
886  DPRINTFP((512, DFUNCTION, -1, " sizeof blocksizes= %5d\n", help_bytes));
887  bytes+=help_bytes;
888  }
889 
890  if( (sion_filedesc->all_chunksizes!=NULL) ) {
891  help_bytes=sion_filedesc->ntasks*sizeof(sion_filedesc->all_chunksizes[0]);
892  DPRINTFP((512, DFUNCTION, -1, " sizeof all_chunksizes= %5d\n", help_bytes));
893  bytes+=help_bytes;
894  }
895 
896  if( (sion_filedesc->all_globalranks!=NULL) ) {
897  help_bytes=sion_filedesc->ntasks*sizeof(sion_filedesc->all_globalranks[0]);
898  DPRINTFP((512, DFUNCTION, -1, " sizeof all_globalranks= %5d\n", help_bytes));
899  bytes+=help_bytes;
900  }
901 
902  if( (sion_filedesc->state!=SION_FILESTATE_SEROPENMASTER) && (sion_filedesc->state!=SION_FILESTATE_PAROPENMAPPEDMASTER) ) {
903  if(sion_filedesc->fileptr!=NULL) {
904  fds++;
905  }
906  }
907 
908  if( (sion_filedesc->all_localranks!=NULL) ) {
909  help_bytes=sion_filedesc->ntasks*sizeof(sion_filedesc->all_localranks[0]);
910  DPRINTFP((512, DFUNCTION, -1, " sizeof all_localranks= %5d\n", help_bytes));
911  bytes+=help_bytes;
912  }
913 
914  if( (sion_filedesc->all_startpointers!=NULL) ) {
915  help_bytes=sion_filedesc->ntasks*sizeof(sion_filedesc->all_startpointers[0]);
916  DPRINTFP((512, DFUNCTION, -1, " sizeof all_startpointers= %5d\n", help_bytes));
917  bytes+=help_bytes;
918  }
919 
920  if( (sion_filedesc->all_currentpos!=NULL) ) {
921  help_bytes=sion_filedesc->ntasks*sizeof(sion_filedesc->all_currentpos[0]);
922  DPRINTFP((512, DFUNCTION, -1, " sizeof all_currentpos= %5d\n", help_bytes));
923  bytes+=help_bytes;
924  }
925 
926  if( (sion_filedesc->all_currentblocknr!=NULL) ) {
927  help_bytes=sion_filedesc->ntasks*sizeof(sion_filedesc->all_currentblocknr[0]);
928  DPRINTFP((512, DFUNCTION, -1, " sizeof all_currentblocknr= %5d\n", help_bytes));
929  bytes+=help_bytes;
930  }
931 
932  if( (sion_filedesc->all_coll_collector!=NULL) ) {
933  help_bytes=sion_filedesc->ntasks*sizeof(sion_filedesc->all_coll_collector[0]);
934  DPRINTFP((512, DFUNCTION, -1, " sizeof all_coll_collector= %5d\n", help_bytes));
935  bytes+=help_bytes;
936  }
937 
938  if( (sion_filedesc->all_coll_collsize!=NULL) ) {
939  help_bytes=sion_filedesc->ntasks*sizeof(sion_filedesc->all_coll_collsize[0]);
940  DPRINTFP((512, DFUNCTION, -1, " sizeof all_coll_collsize= %5d\n", help_bytes));
941  bytes+=help_bytes;
942  }
943 
944  if( (sion_filedesc->all_blockcount!=NULL) ) {
945  help_bytes=sion_filedesc->ntasks*sizeof(sion_filedesc->all_blockcount[0]);
946  DPRINTFP((512, DFUNCTION, -1, " sizeof all_blockcount= %5d\n", help_bytes));
947  bytes+=help_bytes;
948  }
949 
950  if( (sion_filedesc->all_blocksizes!=NULL) ) {
951  help_bytes=sion_filedesc->maxchunks * sion_filedesc->ntasks*sizeof(sion_filedesc->all_blocksizes[0]);
952  DPRINTFP((512, DFUNCTION, -1, " sizeof all_blocksizes= %5d\n", help_bytes));
953  bytes+=help_bytes;
954  }
955 
956  if( (sion_filedesc->mapping!=NULL) ) {
957  help_bytes=sion_filedesc->mapping_size * 2 * sizeof(sion_filedesc->mapping[0]);
958  DPRINTFP((512, DFUNCTION, -1, " sizeof mapping= %5d\n", help_bytes));
959  bytes+=help_bytes;
960  }
961 
962  if( (sion_filedesc->prefix!=NULL) ) {
963  help_bytes=strlen(sion_filedesc->prefix);
964  DPRINTFP((512, DFUNCTION, -1, " sizeof prefix= %5d\n", help_bytes));
965  bytes+=help_bytes;
966  }
967 
968  if( (sion_filedesc->newfname!=NULL) ) {
969  help_bytes=strlen(sion_filedesc->newfname);
970  DPRINTFP((512, DFUNCTION, -1, " sizeof newfname= %5d\n", help_bytes));
971  bytes+=help_bytes;
972  }
973 
974  if( (sion_filedesc->fpbuffer!=NULL) ) {
975  help_bytes=sion_filedesc->fpbuffer_size;
976  DPRINTFP((512, DFUNCTION, -1, " sizeof fpbuffer= %5d\n", help_bytes));
977  bytes+=help_bytes;
978  }
979 
980  if( (sion_filedesc->buffer!=NULL) ) {
981  help_bytes=sion_filedesc->buffer_size;
982  DPRINTFP((512, DFUNCTION, -1, " sizeof buffer= %5d\n", help_bytes));
983  bytes+=help_bytes;
984  }
985 
986 
987  if( (sion_filedesc->state==SION_FILESTATE_PAROPEN) || (sion_filedesc->state==SION_FILESTATE_SEROPENRANK) ) {
988  if( (sion_filedesc->keyvalptr!=NULL) ) {
989  help_bytes=_sion_keyvalue_keymngr_key_get_sizeof(sion_filedesc->keyvalptr);
990  DPRINTFP((512, DFUNCTION, -1, " sizeof keyvalptr= %5d\n", help_bytes));
991  bytes+=help_bytes;
992  }
993  }
994 
995  if( (sion_filedesc->state==SION_FILESTATE_SEROPEN) || (sion_filedesc->state==SION_FILESTATE_SEROPENMASTER)
997  || (sion_filedesc->state==SION_FILESTATE_PAROPENMAPPED) ) {
998 
999  if( (sion_filedesc->all_keyvalptr!=NULL) ) {
1000  for (i = 0; i < sion_filedesc->ntasks; i++) {
1001  if(sion_filedesc->all_keyvalptr[i]!=NULL) {
1002  help_bytes=_sion_keyvalue_keymngr_key_get_sizeof(sion_filedesc->all_keyvalptr[i]);
1003  DPRINTFP((512, DFUNCTION, -1, " sizeof all_keyvalptr[%d]= %5d\n", i, help_bytes));
1004  bytes+=help_bytes;
1005  }
1006  }
1007  }
1008  }
1009 
1010  if( (sion_filedesc->state==SION_FILESTATE_SEROPENMASTER) || (sion_filedesc->state==SION_FILESTATE_PAROPENMAPPEDMASTER) ) {
1011 
1012  help_bytes=sion_filedesc->nfiles*sizeof(sion_filedesc->multifiles[0]);
1013  DPRINTFP((512, DFUNCTION, -1, " sizeof multifiles= %5d\n", help_bytes));
1014  bytes+=help_bytes;
1015 
1016  for (i = 0; i < sion_filedesc->nfiles; i++) {
1017 
1018  rc=_sion_get_size_of_filedesc(sion_filedesc->multifiles[i], &help_bytes, &help_fds);
1019  DPRINTFP((512, DFUNCTION, -1, " sizeof multifile[%d]= %5d + %1d\n", i, help_bytes, help_fds));
1020  bytes+=help_bytes;
1021  fds+=help_fds;
1022  }
1023  }
1024 
1025  *numbytes=bytes;*numfds=fds;
1026  DPRINTFP((2, DFUNCTION, -1, "leave total_size =%5d + %d fds\n", bytes, fds));
1027 
1028  return(rc);
1029 }
1030 #undef DFUNCTION
1031 
1032 #define DFUNCTION "_sion_dup_filedesc"
1033 
1039 {
1040  _sion_filedesc *new_fd=NULL;
1041 
1042  if (sion_filedesc == NULL) {
1043  _sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,"cannot allocate filedescriptor structure (sion_filedesc), aborting ...\n");
1044  return(NULL);
1045  }
1046  new_fd=_sion_alloc_filedesc();
1047 
1048  new_fd->dup_mode = SION_DESCSTATE_DUP;
1049 
1050  /* values which will not be copied */
1051  new_fd->fileptr = NULL;
1052  new_fd->sid = -1;
1053  new_fd->dataptr = NULL; /* not needed in a dup fd */
1054  new_fd->keyvalptr = NULL; /* not needed in a dup fd */
1055  new_fd->usecoll = 0;
1056  new_fd->maxchunks = -1;
1057 
1058  /* copy scalar values */
1059  new_fd->fname = strdup(sion_filedesc->fname);
1060  new_fd->rank = sion_filedesc->rank;
1061  new_fd->lrank = sion_filedesc->lrank;
1062  new_fd->globalrank = sion_filedesc->globalrank;
1063 
1064  new_fd->ntasks = sion_filedesc->ntasks;
1065  new_fd->state = sion_filedesc->state;
1066  new_fd->mode = sion_filedesc->mode;
1067  new_fd->endianness = sion_filedesc->endianness;
1068  new_fd->swapbytes = sion_filedesc->swapbytes;
1069  new_fd->fileversion = sion_filedesc->fileversion;
1070  new_fd->filesionversion = sion_filedesc->filesionversion;
1071  new_fd->filesionpatchlevel = sion_filedesc->filesionpatchlevel;
1072  new_fd->fsblksize = sion_filedesc->fsblksize;
1073  new_fd->lastchunknr = sion_filedesc->lastchunknr;
1074  new_fd->maxusedchunks = sion_filedesc->maxusedchunks;
1075  new_fd->startpos = sion_filedesc->startpos;
1076  new_fd->chunksize = sion_filedesc->chunksize;
1077  new_fd->chunksize_req = sion_filedesc->chunksize_req;
1078 
1079  new_fd->globalskip = sion_filedesc->globalskip;
1080  new_fd->end_of_header = sion_filedesc->end_of_header;
1081  new_fd->start_of_varheader = sion_filedesc->start_of_varheader;
1082  new_fd->start_of_data = sion_filedesc->start_of_data;
1083 
1084  new_fd->currentpos = sion_filedesc->currentpos;
1085  new_fd->currentblocknr = sion_filedesc->currentblocknr;
1086  new_fd->debug = sion_filedesc->debug;
1087 
1088  new_fd->nfiles = sion_filedesc->nfiles;
1089  new_fd->filenumber = sion_filedesc->filenumber;
1090  new_fd->mapping_size = sion_filedesc->mapping_size;
1091 
1092  new_fd->ntotaltasksinfile = sion_filedesc->ntotaltasksinfile;
1093  new_fd->nlocaltasksinfile = sion_filedesc->nlocaltasksinfile;
1094  new_fd->filemanagedbytask = sion_filedesc->filemanagedbytask;
1095 
1096  new_fd->ntasks = sion_filedesc->ntasks;
1097  new_fd->flag1 = sion_filedesc->flag1;
1098  new_fd->flag2 = sion_filedesc->flag2;
1099  new_fd->fpbuffer_size = sion_filedesc->fpbuffer_size;
1100 
1101  new_fd->usecache = sion_filedesc->usecache;
1102  new_fd->cachesize = sion_filedesc->cachesize;
1103  new_fd->cacheid = sion_filedesc->cacheid;
1104  strcpy(new_fd->cachefn,sion_filedesc->cachefn);
1105 
1106  new_fd->cachemode = sion_filedesc->cachemode;
1107  new_fd->usebuffer = sion_filedesc->usebuffer;
1108  new_fd->buffer_size = sion_filedesc->buffer_size;
1109  new_fd->buffer_ptr = sion_filedesc->buffer_ptr;
1110  new_fd->compress = sion_filedesc->compress;
1111  new_fd->keyvalmode = sion_filedesc->keyvalmode;
1112 
1113  new_fd->collsize = sion_filedesc->collsize;
1114  new_fd->coll_capability = sion_filedesc->coll_capability;
1115  new_fd->collector = sion_filedesc->collector;
1116  new_fd->colldebug = sion_filedesc->colldebug;
1117  new_fd->collcmdused = sion_filedesc->collcmdused;
1118  new_fd->usebuddy = sion_filedesc->usebuddy;
1119  new_fd->buddylevel = sion_filedesc->buddylevel;
1120  new_fd->buddynr = sion_filedesc->buddynr;
1121  new_fd->buddies = sion_filedesc->buddies;
1122  new_fd->usehints = sion_filedesc->usehints;
1123  new_fd->hinttype = sion_filedesc->hinttype;
1124  new_fd->fileptr_exported = sion_filedesc->fileptr_exported;
1125  new_fd->collmergemode = sion_filedesc->collmergemode;
1126 
1127  new_fd->prefix=NULL;
1128  if(sion_filedesc->prefix) new_fd->prefix = strdup(sion_filedesc->prefix);
1129  new_fd->newfname=NULL;
1130  if(sion_filedesc->newfname) new_fd->newfname = strdup(sion_filedesc->newfname);
1131 
1132  new_fd->blocksizes = NULL; /* vector of written bytes in each block for current task */
1133  new_fd->all_chunksizes = NULL; /* only used if sion is opened from a single task for read */
1134  new_fd->all_globalranks = NULL; /* only used if sion is opened from a single task for read */
1135  new_fd->all_localranks = NULL; /* only used if sion is opened in mapped mode */
1136  new_fd->all_startpointers = NULL; /* only used if sion is opened from a single task for read */
1137 
1138  new_fd->all_currentpos = NULL; /* only used if sion is opened from a single task for write */
1139  new_fd->all_currentblocknr = NULL; /* only used if sion is opened from a single task for write */
1140 
1141  new_fd->all_coll_collector = NULL; /* only used on rank 0 if usecoll=1 */
1142  new_fd->all_coll_collsize = NULL; /* only used on rank 0 if usecoll=1 */
1143 
1144  new_fd->all_blockcount = NULL; /* size, only used if sion is opened from a single task for read */
1145  new_fd->all_blocksizes = NULL; /* size*maxchunks, only used if sion is opened from a single task for read */
1146 
1147  new_fd->all_keyvalptr = NULL;
1148 
1149  new_fd->mapping = NULL;
1150  new_fd->multifiles = NULL;
1151 
1152  new_fd->fpbuffer = NULL;
1153  new_fd->cacheptr = NULL;
1154  new_fd->buffer = NULL;
1155 
1156  return (new_fd);
1157 }
1158 #undef DFUNCTION
sion_int32 filemanagedbytask
_sion_filedesc * _sion_alloc_filedesc()
Allocates memory for internal sion structure.
Sion File Descriptor Structure.
Definition: sion_filedesc.h:77
#define _SION_FLAG1_NONE
Definition: sion_filedesc.h:17
sion_int64 * all_blockcount
#define SION_FILESTATE_SEROPEN
Definition: sion_filedesc.h:25
sion_int64 * all_currentpos
sion_int32 filesionpatchlevel
sion_int64 * all_globalranks
#define _SION_FLAG2_NONE
Definition: sion_filedesc.h:18
#define SION_KEYVAL_INLINE
Definition: sion_const.h:81
#define SION_CAPABILITY_FULL
Definition: sion_filedesc.h:50
int _sion_alloc_filedesc_arrays(_sion_filedesc *sion_filedesc)
Allocate memory for the internal sion arrays.
int _sion_get_size_of_filedesc(_sion_filedesc *sion_filedesc, int *numbytes, int *numfds)
get size of internal data structure sion_filedesc
int _sion_free_filedesc_arrays(_sion_filedesc *sion_filedesc)
free memory for the internal sion arrays
sion_int64 * all_currentblocknr
int _sion_alloc_filedesc_block_arrays_only(_sion_filedesc *sion_filedesc)
Allocate memory for the internal sion structure, fields for all chunksizes of all tasks.
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
Definition: sion_filedesc.h:44
sion_int32 * all_coll_collector
sion_int32 fileptr_exported
#define SION_KEYVAL_NONE
Definition: sion_const.h:80
#define SION_KEYVAL_UNKNOWN
Definition: sion_const.h:84
sion_int32 * all_coll_capability
#define SION_CAPABILITY_NONE
Definition: sion_filedesc.h:52
#define SION_DESCSTATE_DUP_SEL_RANK
Definition: sion_filedesc.h:43
#define SION_CAPABILITY_ONLY_SENDER
Definition: sion_filedesc.h:51
#define SION_FILEMODE_READ
Definition: sion_filedesc.h:33
char * _sion_get_fileptr_desc(_sion_fileptr *sion_fileptr)
Definition: sion_file.c:1470
sion_int64 * all_startpointers
#define SION_CACHE_UNKNOWN
Definition: sion_filedesc.h:38
#define SION_FILESTATE_PAROPENMAPPEDMANAGED
Definition: sion_filedesc.h:29
char cachefn[SION_CACHE_FNLEN]
#define SION_FILEMODE_UNKNOWN
Definition: sion_filedesc.h:32
#define SION_FILESTATE_PAROPEN
Definition: sion_filedesc.h:24
#define SION_CACHE_FNLEN
Definition: sion_filedesc.h:39
int _sion_free_filedesc_coll_arrays(_sion_filedesc *sion_filedesc)
free memory for the internal sion arrays
sion_int32 coll_capability
sion_int32 fpbuffer_size
Definition: sion_filedesc.h:86
sion_int64 * blocksizes
Definition: sion_filedesc.h:98
#define SION_FILESTATE_PAROPENMAPPEDMASTER
Definition: sion_filedesc.h:28
sion_int32 currentblocknr
Definition: sion_filedesc.h:95
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
Definition: sion_filedesc.h:26
sion_int64 * all_chunksizes
int _sion_print_filedesc(_sion_filedesc *sion_filedesc, int level, char *desc, int flag)
Print the initialized sion file description.
#define SION_DESCSTATE_DUP
Definition: sion_filedesc.h:42
#define SION_FILESTATE_CLOSE
Definition: sion_filedesc.h:31
sion_int64 * all_localranks
int _sion_alloc_filedesc_coll_arrays(_sion_filedesc *sion_filedesc)
Allocate memory for the internal sion arrays.
int _sion_init_filedesc(_sion_filedesc *sion_filedesc)
Initialize the sion file description.
Definition: sion_filedesc.c:35
#define SION_FILEMODE_WRITE
Definition: sion_filedesc.h:34
_sion_filedesc * _sion_dup_filedesc(_sion_filedesc *sion_filedesc)
duplicates a filedesc data structure, not copying/reopen active file pointers
#define SION_FILESTATE_UNKNOWN
Definition: sion_filedesc.h:23
sion_int32 filesionversion
sion_int32 * all_coll_collsize
sion_int64 start_of_varheader
#define SION_DESCSTATE_ORIG
Definition: sion_filedesc.h:41
#define SION_FILESTATE_SEROPENMASTER
Definition: sion_filedesc.h:27
sion_int64 * all_blocksizes
sion_int32 ntotaltasksinfile
struct _sion_filedesc_struct _sion_filedesc
SION File Descriptor Alias.
Definition: sion_filedesc.h:62
sion_int32 nlocaltasksinfile
#define SION_HINTS_TYPE_UNKNOWN
Definition: sion_filedesc.h:46
_sion_filedesc ** multifiles
_sion_fileptr * fileptr
Definition: sion_filedesc.h:80
#define SION_FILESTATE_PAROPENMAPPED
Definition: sion_filedesc.h:30