@@ -2839,7 +2839,6 @@ PDC_Server_update_local_region_storage_loc(region_list_t *region, uint64_t obj_i
28392839
28402840 perr_t ret_value = SUCCEED ;
28412841 pdc_metadata_t * target_meta = NULL ;
2842- /* pdc_metadata_t *region_meta = NULL; */
28432842 region_list_t * region_elt = NULL , * new_region = NULL ;
28442843 int update_success = -1 ;
28452844
@@ -4101,10 +4100,23 @@ static perr_t
41014100PDC_Server_data_io_from_region_per_file (uint64_t obj_id , struct pdc_region_info * region_info , void * buf ,
41024101 size_t unit , REGION_PER_FILE_IO_TYPE io_type )
41034102{
4104- int ret_value = SUCCEED ;
4105-
41064103 FUNC_ENTER (NULL );
41074104
4105+ perr_t ret_value = SUCCEED ;
4106+ uint64_t * indices = NULL ;
4107+ pdc_metadata_t * obj_meta = NULL ;
4108+ data_server_region_t * region = NULL ;
4109+ uint64_t * global_size = NULL ;
4110+ uint64_t * offset = NULL ;
4111+ uint8_t * buf_io_ops = NULL ;
4112+ void * target_buf = NULL ;
4113+ uint64_t flat_offset , stride , num_elements ,
4114+ region_index , region_num_elements , count ,
4115+ new_region_index , old_region_size , flat_index ,
4116+ temp_stride , offset_region ;
4117+ off_t file_offset ;
4118+ int ndim , i , d ;
4119+
41084120#ifdef NOAH_DEBUG
41094121 LOG_JUST_PRINT ("===============================================\n" );
41104122 LOG_JUST_PRINT ("IO (%s) called with parameters:\n" ,
@@ -4114,42 +4126,39 @@ PDC_Server_data_io_from_region_per_file(uint64_t obj_id, struct pdc_region_info
41144126 LOG_JUST_PRINT ("\tbuf: %p\n" , buf );
41154127 LOG_JUST_PRINT ("\tunit: %zu\n" , unit );
41164128
4117- for (int i = 0 ; i < region_info -> ndim ; i ++ ) {
4129+ for (i = 0 ; i < region_info -> ndim ; i ++ ) {
41184130 printf ("\tregion_info->offset[%d] = %" PRIu64 "\n" , i , region_info -> offset [i ]);
41194131 printf ("\tregion_info->size[%d] = %" PRIu64 "\n" , i , region_info -> size [i ]);
41204132 }
41214133#endif
41224134
41234135 // Compute total number of elements
4124- uint64_t num_elements = 1 ;
4125- for (int i = 0 ; i < region_info -> ndim ; i ++ ) {
4136+ num_elements = 1 ;
4137+ for (i = 0 ; i < region_info -> ndim ; i ++ )
41264138 num_elements *= region_info -> size [i ];
4127- }
41284139
4129- if (num_elements == 0 || unit == 0 ) {
4140+ if (num_elements == 0 || unit == 0 )
41304141 PGOTO_ERROR (FAIL , "Requested I/O with 0 size" );
4131- }
41324142
4133- pdc_metadata_t * obj_meta = PDC_Server_get_obj_metadata (obj_id );
4134- if (obj_meta == NULL ) {
4143+ obj_meta = PDC_Server_get_obj_metadata (obj_id );
4144+ if (obj_meta == NULL )
41354145 PGOTO_ERROR (FAIL , "Object metadata not found" );
4136- }
41374146
4138- data_server_region_t * region = PDC_Server_get_obj_region (obj_id );
4139- uint64_t * global_size = obj_meta -> dims ;
4140- uint64_t * offset = region_info -> offset ;
4141- int ndim = region_info -> ndim ;
4147+ region = PDC_Server_get_obj_region (obj_id );
4148+ global_size = obj_meta -> dims ;
4149+ offset = region_info -> offset ;
4150+ ndim = region_info -> ndim ;
41424151
41434152#ifdef NOAH_DEBUG
41444153 LOG_JUST_PRINT ("\tobj meta ndim: %d\n" , ndim );
4145- for (int i = 0 ; i < ndim ; i ++ ) {
4154+ for (i = 0 ; i < ndim ; i ++ ) {
41464155 LOG_JUST_PRINT ("\tobj meta dims[%d] = %" PRIu64 "\n" , i , global_size [i ]);
41474156 }
41484157#endif
41494158
41504159 // Compute flat offset from global start
4151- uint64_t flat_offset = 0 , stride = 1 ;
4152- for (int i = ndim - 1 ; i >= 0 ; i -- ) {
4160+ flat_offset = 0 , stride = 1 ;
4161+ for (i = ndim - 1 ; i >= 0 ; i -- ) {
41534162 flat_offset += offset [i ] * stride ;
41544163 stride *= global_size [i ];
41554164 }
@@ -4160,8 +4169,8 @@ PDC_Server_data_io_from_region_per_file(uint64_t obj_id, struct pdc_region_info
41604169#endif
41614170
41624171 // Determine initial region index
4163- uint64_t region_index = 0 ;
4164- uint64_t region_num_elements ;
4172+ region_index = 0 ;
4173+ region_num_elements = 0 ;
41654174 if (region == NULL ) {
41664175 region_index = flat_offset / num_elements ;
41674176 }
@@ -4176,23 +4185,26 @@ PDC_Server_data_io_from_region_per_file(uint64_t obj_id, struct pdc_region_info
41764185 LOG_JUST_PRINT ("\tregion_index: %d\n" , region_index );
41774186#endif
41784187 // Register the initial region
4179- PDC_Server_register_obj_region_by_pointer (& region , obj_id , 0 , region_index );
4180-
4188+ if ( PDC_Server_register_obj_region_by_pointer (& region , obj_id , 0 , region_index ) != SUCCEED )
4189+ PGOTO_ERROR ( FAIL , "Failed to PDC_Server_register_obj_region_by_pointer" );
41814190 if (region == NULL ) {
4182- PGOTO_ERROR (FAIL , "Failed to register obj_region by pointer " );
4191+ PGOTO_ERROR (FAIL , "Failed to PDC_Server_register_obj_region_by_pointer " );
41834192 }
4184-
41854193 if (region -> region_size_elements == UNITIALIZED_DATA_SERVER_REGION_SIZE_ELEMENTS ) {
41864194 region -> region_size_elements = num_elements ;
41874195 }
41884196
41894197 // Used to buffer I/O operations
4190- uint8_t * buf_io_ops = (uint8_t * )malloc (region -> region_size_elements * unit );
4198+ buf_io_ops = (uint8_t * )PDC_malloc (region -> region_size_elements * unit );
41914199 errno = 0 ;
4192- if (ftruncate (region -> fd , region -> region_size_elements * unit ) != 0 ) {
4193- LOG_ERROR ("Error: %s\n" , strerror (errno ));
4194- PGOTO_ERROR (FAIL , "Failed to tfruncate" );
4200+ struct stat st ;
4201+ if (fstat (region -> fd , & st ) == 0 && st .st_size < region -> region_size_elements * unit ) {
4202+ if (ftruncate (region -> fd , region -> region_size_elements * unit ) != 0 ) {
4203+ LOG_ERROR ("Error: %s\n" , strerror (errno ));
4204+ PGOTO_ERROR (FAIL , "Failed to ftruncate" );
4205+ }
41954206 }
4207+
41964208 errno = 0 ;
41974209 if (pread (region -> fd , buf_io_ops , region -> region_size_elements * unit , 0 ) !=
41984210 region -> region_size_elements * unit ) {
@@ -4201,27 +4213,28 @@ PDC_Server_data_io_from_region_per_file(uint64_t obj_id, struct pdc_region_info
42014213 }
42024214
42034215 // Allocate indices for iteration
4204- uint64_t * indices = (uint64_t * )calloc (ndim , sizeof (uint64_t ));
4216+ indices = (uint64_t * )calloc (ndim , sizeof (uint64_t ));
42054217 if (indices == NULL ) {
42064218 PGOTO_ERROR (FAIL , "calloc failed for indices" );
42074219 }
42084220
4209- for (uint64_t count = 0 ; count < num_elements ; count ++ ) {
4221+ for (count = 0 ; count < num_elements ; count ++ ) {
42104222 // Compute flat index
4211- uint64_t flat_index = 0 ;
4212- uint64_t temp_stride = 1 ;
4213- for (int i = ndim - 1 ; i >= 0 ; i -- ) {
4223+ flat_index = 0 ;
4224+ temp_stride = 1 ;
4225+ for (i = ndim - 1 ; i >= 0 ; i -- ) {
42144226 flat_index += (offset [i ] + indices [i ]) * temp_stride ;
42154227 temp_stride *= global_size [i ];
42164228 }
42174229
42184230 // Determine region
4219- uint64_t new_region_index = flat_index / region -> region_size_elements ;
4231+ new_region_index = flat_index / region -> region_size_elements ;
42204232 if (new_region_index != region_index ) {
4221- uint64_t old_region_size = region -> region_size_elements ;
4233+ old_region_size = region -> region_size_elements ;
42224234 if (region ) {
42234235 pwrite (region -> fd , buf_io_ops , region -> region_size_elements * unit , 0 );
4224- PDC_Server_unregister_obj_region_by_pointer (region , 0 );
4236+ if (PDC_Server_unregister_obj_region_by_pointer (region , 0 ) != SUCCEED )
4237+ PGOTO_ERROR (FAIL , "Failed to PDC_Server_unregister_obj_region_by_pointer" );
42254238 region -> fd = -1 ;
42264239 }
42274240#ifdef NOAH_DEBUG
@@ -4230,7 +4243,8 @@ PDC_Server_data_io_from_region_per_file(uint64_t obj_id, struct pdc_region_info
42304243 LOG_JUST_PRINT ("\tflat index: %d\n" , flat_index );
42314244#endif
42324245 region_index = new_region_index ;
4233- PDC_Server_register_obj_region_by_pointer (& region , obj_id , 0 , region_index );
4246+ if (PDC_Server_register_obj_region_by_pointer (& region , obj_id , 0 , region_index ) != SUCCEED )
4247+ PGOTO_ERROR (FAIL , "Failed to PDC_Server_register_obj_region_by_pointer" );
42344248
42354249 errno = 0 ;
42364250 if (ftruncate (region -> fd , region -> region_size_elements * unit ) != 0 ) {
@@ -4255,9 +4269,9 @@ PDC_Server_data_io_from_region_per_file(uint64_t obj_id, struct pdc_region_info
42554269 PGOTO_ERROR (FAIL , "Region not properly initialized" );
42564270 }
42574271
4258- uint64_t offset_region = flat_index % region -> region_size_elements ;
4259- void * target_buf = (char * )buf + (count * unit );
4260- off_t file_offset = offset_region * unit ;
4272+ offset_region = flat_index % region -> region_size_elements ;
4273+ target_buf = (char * )buf + (count * unit );
4274+ file_offset = offset_region * unit ;
42614275
42624276 if (io_type == REGION_PER_FILE_IO_TYPE_READ ) {
42634277 memcpy (target_buf , & (buf_io_ops [file_offset ]), unit );
@@ -4267,7 +4281,7 @@ PDC_Server_data_io_from_region_per_file(uint64_t obj_id, struct pdc_region_info
42674281 }
42684282
42694283 // Advance indices
4270- for (int d = ndim - 1 ; d >= 0 ; d -- ) {
4284+ for (d = ndim - 1 ; d >= 0 ; d -- ) {
42714285 indices [d ]++ ;
42724286 if (indices [d ] < region_info -> size [d ]) {
42734287 break ;
@@ -4280,9 +4294,12 @@ PDC_Server_data_io_from_region_per_file(uint64_t obj_id, struct pdc_region_info
42804294
42814295done :
42824296 if (region ) {
4283- pwrite (region -> fd , buf_io_ops , region -> region_size_elements * unit , 0 );
4284- PDC_Server_unregister_obj_region_by_pointer (region , 0 );
4297+ if (io_type == REGION_PER_FILE_IO_TYPE_WRITE )
4298+ pwrite (region -> fd , buf_io_ops , region -> region_size_elements * unit , 0 );
4299+ if (PDC_Server_unregister_obj_region_by_pointer (region , 0 ) != SUCCEED )
4300+ PGOTO_ERROR (FAIL , "Failed to PDC_Server_unregister_obj_region_by_pointer" );
42854301 region -> fd = -1 ;
4302+
42864303 }
42874304 if (indices )
42884305 indices = PDC_free (indices );
@@ -4315,6 +4332,8 @@ PDC_Server_data_read_from_region_per_file(uint64_t obj_id, struct pdc_region_inf
43154332perr_t
43164333PDC_Server_data_write_out (uint64_t obj_id , struct pdc_region_info * region_info , void * buf , size_t unit )
43174334{
4335+ abort ();
4336+
43184337 FUNC_ENTER (NULL );
43194338
43204339 perr_t ret_value = SUCCEED ;
@@ -4655,7 +4674,9 @@ PDC_Server_data_write_out(uint64_t obj_id, struct pdc_region_info *region_info,
46554674
46564675perr_t
46574676PDC_Server_data_read_from (uint64_t obj_id , struct pdc_region_info * region_info , void * buf , size_t unit )
4658- {
4677+ {
4678+ abort ();
4679+
46594680 FUNC_ENTER (NULL );
46604681
46614682 perr_t ret_value = SUCCEED ;
@@ -5105,7 +5126,6 @@ PDC_Server_get_all_storage_meta_with_one_name(storage_meta_query_one_name_args_t
51055126 * \param in[IN] input with type accumulate_storage_meta_t
51065127 *
51075128 * \return Non-negative on success/Negative on failure
5108-
51095129 */
51105130static perr_t
51115131PDC_Server_accumulate_storage_meta_then_read (storage_meta_query_one_name_args_t * in )
0 commit comments