This source file includes following definitions.
- mca_sharedfp_individual_file_open
- mca_sharedfp_individual_file_close
- mca_sharedfp_individual_insert_headnode
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 
  22 
  23 
  24 #include "ompi_config.h"
  25 #include "sharedfp_individual.h"
  26 
  27 #include "mpi.h"
  28 #include "ompi/constants.h"
  29 #include "ompi/mca/sharedfp/sharedfp.h"
  30 #include "ompi/mca/sharedfp/base/base.h"
  31 #include "ompi/file/file.h"
  32 
  33 
  34 int mca_sharedfp_individual_file_open (struct ompi_communicator_t *comm,
  35                                        const char* filename,
  36                                        int amode,
  37                                        struct opal_info_t *info,
  38                                        ompio_file_t *fh)
  39 {
  40     int err = 0;
  41     char * datafilename;        
  42     char * metadatafilename;    
  43     ompio_file_t * datafilehandle;
  44     ompio_file_t * metadatafilehandle;
  45     mca_sharedfp_individual_header_record* headnode = NULL;
  46     struct mca_sharedfp_base_data_t* sh;
  47     size_t len=0;
  48 
  49     sh = (struct mca_sharedfp_base_data_t*) malloc ( sizeof(struct mca_sharedfp_base_data_t));
  50     if ( NULL == sh ){
  51         opal_output(0, "mca_sharedfp_individual_file_open: Error, unable to malloc "
  52                     "f_sharedfp_ptr struct\n");
  53         return OMPI_ERR_OUT_OF_RESOURCE;
  54     }
  55 
  56 
  57     
  58     sh->global_offset = 0;                      
  59     sh->selected_module_data = NULL;
  60 
  61     
  62     sh->selected_module_data = (mca_sharedfp_individual_header_record *)mca_sharedfp_individual_insert_headnode();
  63 
  64     
  65     
  66     
  67     
  68     if ( mca_sharedfp_individual_verbose ) {
  69        opal_output(ompi_sharedfp_base_framework.framework_output,
  70                 "mca_sharedfp_individual_file_open: open data file.\n");
  71     }
  72 
  73     
  74     len = strlen (filename ) + 64;
  75     datafilename = (char*)malloc( len );
  76     if ( NULL == datafilename ) {
  77         opal_output(0, "mca_sharedfp_individual_file_open: unable to allocate memory\n");
  78         free ( sh );
  79         return OMPI_ERR_OUT_OF_RESOURCE;
  80     }
  81     snprintf(datafilename, len, "%s%s%d",filename,".data.",fh->f_rank);
  82 
  83 
  84     datafilehandle = (ompio_file_t *)malloc(sizeof(ompio_file_t));
  85     if ( NULL == datafilehandle ) {
  86         opal_output(0, "mca_sharedfp_individual_file_open: unable to allocate memory\n");
  87         free ( sh );
  88         free ( datafilename );
  89         return OMPI_ERR_OUT_OF_RESOURCE;
  90     }
  91     err = mca_common_ompio_file_open(MPI_COMM_SELF, datafilename,
  92                                      MPI_MODE_RDWR | MPI_MODE_CREATE | MPI_MODE_DELETE_ON_CLOSE,
  93                                      &(MPI_INFO_NULL->super), datafilehandle, false);
  94     if ( OMPI_SUCCESS != err) {
  95         opal_output(0, "mca_sharedfp_individual_file_open: Error during datafile file open\n");
  96         free (sh);
  97         free (datafilename);
  98         free (datafilehandle);
  99         return err;
 100     }
 101 
 102     
 103     
 104     
 105     
 106     if ( mca_sharedfp_individual_verbose ) {
 107         opal_output(ompi_sharedfp_base_framework.framework_output,
 108                 "mca_sharedfp_individual_file_open: metadata file.\n");
 109     }
 110 
 111     
 112     metadatafilename = (char*) malloc ( len );
 113     if ( NULL == metadatafilename ) {
 114         free (sh);
 115         free (datafilename);
 116         free (datafilehandle);
 117         opal_output(0, "mca_sharedfp_individual_file_open: Error during memory allocation\n");
 118         return OMPI_ERR_OUT_OF_RESOURCE;
 119     }
 120     snprintf ( metadatafilename, len, "%s%s%d", filename, ".metadata.",fh->f_rank);
 121 
 122     metadatafilehandle = (ompio_file_t *)malloc(sizeof(ompio_file_t));
 123     if ( NULL == metadatafilehandle ) {
 124         free (sh);
 125         free (datafilename);
 126         free (datafilehandle);
 127         free (metadatafilename);
 128         opal_output(0, "mca_sharedfp_individual_file_open: Error during memory allocation\n");
 129         return OMPI_ERR_OUT_OF_RESOURCE;
 130     }
 131     err = mca_common_ompio_file_open ( MPI_COMM_SELF,metadatafilename,
 132                                        MPI_MODE_RDWR | MPI_MODE_CREATE | MPI_MODE_DELETE_ON_CLOSE,
 133                                        &(MPI_INFO_NULL->super), metadatafilehandle, false);
 134     if ( OMPI_SUCCESS != err) {
 135         opal_output(0, "mca_sharedfp_individual_file_open: Error during metadatafile file open\n");
 136         free (sh);
 137         free (datafilename);
 138         free (datafilehandle);
 139         free (metadatafilename);
 140         free (metadatafilehandle);
 141         return err;
 142     }
 143 
 144     
 145     headnode = (mca_sharedfp_individual_header_record*)(sh->selected_module_data);
 146     if ( headnode) {
 147         headnode->datafilehandle     = datafilehandle;
 148         headnode->metadatafilehandle = metadatafilehandle;
 149         headnode->datafilename       = datafilename;
 150         headnode->metadatafilename   = metadatafilename;
 151     }
 152 
 153     
 154     fh->f_sharedfp_data = sh;
 155 
 156     return err;
 157 }
 158 
 159 int mca_sharedfp_individual_file_close (ompio_file_t *fh)
 160 {
 161     mca_sharedfp_individual_header_record* headnode = NULL;
 162     struct mca_sharedfp_base_data_t *sh;
 163     int err = OMPI_SUCCESS;
 164 
 165     if ( NULL == fh->f_sharedfp_data ){
 166         return OMPI_SUCCESS;
 167     }
 168     sh = fh->f_sharedfp_data;
 169 
 170     
 171     err = mca_sharedfp_individual_collaborate_data (sh, fh);
 172 
 173     headnode = (mca_sharedfp_individual_header_record*)(sh->selected_module_data);
 174     if (headnode)  {
 175         
 176         if (headnode->datafilehandle)  {
 177             
 178             err = mca_common_ompio_file_close(headnode->datafilehandle);
 179             
 180 
 181 
 182         }
 183         if(headnode->datafilename){
 184             free(headnode->datafilename);
 185         }
 186 
 187         
 188         if (headnode->metadatafilehandle)  {
 189             
 190             err = mca_common_ompio_file_close(headnode->metadatafilehandle);
 191             
 192 
 193 
 194         }
 195         if(headnode->metadatafilename){
 196             free(headnode->metadatafilename);
 197         }
 198     }
 199 
 200     
 201     free(sh);
 202     fh->f_sharedfp_data=NULL;
 203 
 204     return err;
 205 }
 206 
 207 
 208 mca_sharedfp_individual_header_record* mca_sharedfp_individual_insert_headnode ( void )
 209 {
 210     mca_sharedfp_individual_header_record *headnode = NULL;
 211     if ( !headnode )  {
 212         
 213         headnode = (mca_sharedfp_individual_header_record*)malloc(sizeof(mca_sharedfp_individual_header_record));
 214         if (!headnode)
 215             return NULL;
 216     }
 217 
 218     headnode->numofrecords = 0;                 
 219     headnode->numofrecordsonfile = 0;           
 220 
 221     headnode->datafile_offset = 0;
 222     headnode->metadatafile_offset = 0;
 223 
 224     headnode->metafile_start_offset = 0;
 225     headnode->datafile_start_offset = 0;
 226 
 227     headnode->metadatafilehandle = 0;
 228     headnode->datafilehandle     = 0;
 229     headnode->next   = NULL;
 230 
 231     return headnode;
 232 }