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