@@ -2839,7 +2839,6 @@ PDC_Server_update_local_region_storage_loc(region_list_t *region, uint64_t obj_i
2839
2839
2840
2840
perr_t ret_value = SUCCEED ;
2841
2841
pdc_metadata_t * target_meta = NULL ;
2842
- /* pdc_metadata_t *region_meta = NULL; */
2843
2842
region_list_t * region_elt = NULL , * new_region = NULL ;
2844
2843
int update_success = -1 ;
2845
2844
@@ -4101,10 +4100,23 @@ static perr_t
4101
4100
PDC_Server_data_io_from_region_per_file (uint64_t obj_id , struct pdc_region_info * region_info , void * buf ,
4102
4101
size_t unit , REGION_PER_FILE_IO_TYPE io_type )
4103
4102
{
4104
- int ret_value = SUCCEED ;
4105
-
4106
4103
FUNC_ENTER (NULL );
4107
4104
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
+
4108
4120
#ifdef NOAH_DEBUG
4109
4121
LOG_JUST_PRINT ("===============================================\n" );
4110
4122
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
4114
4126
LOG_JUST_PRINT ("\tbuf: %p\n" , buf );
4115
4127
LOG_JUST_PRINT ("\tunit: %zu\n" , unit );
4116
4128
4117
- for (int i = 0 ; i < region_info -> ndim ; i ++ ) {
4129
+ for (i = 0 ; i < region_info -> ndim ; i ++ ) {
4118
4130
printf ("\tregion_info->offset[%d] = %" PRIu64 "\n" , i , region_info -> offset [i ]);
4119
4131
printf ("\tregion_info->size[%d] = %" PRIu64 "\n" , i , region_info -> size [i ]);
4120
4132
}
4121
4133
#endif
4122
4134
4123
4135
// 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 ++ )
4126
4138
num_elements *= region_info -> size [i ];
4127
- }
4128
4139
4129
- if (num_elements == 0 || unit == 0 ) {
4140
+ if (num_elements == 0 || unit == 0 )
4130
4141
PGOTO_ERROR (FAIL , "Requested I/O with 0 size" );
4131
- }
4132
4142
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 )
4135
4145
PGOTO_ERROR (FAIL , "Object metadata not found" );
4136
- }
4137
4146
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 ;
4142
4151
4143
4152
#ifdef NOAH_DEBUG
4144
4153
LOG_JUST_PRINT ("\tobj meta ndim: %d\n" , ndim );
4145
- for (int i = 0 ; i < ndim ; i ++ ) {
4154
+ for (i = 0 ; i < ndim ; i ++ ) {
4146
4155
LOG_JUST_PRINT ("\tobj meta dims[%d] = %" PRIu64 "\n" , i , global_size [i ]);
4147
4156
}
4148
4157
#endif
4149
4158
4150
4159
// 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 -- ) {
4153
4162
flat_offset += offset [i ] * stride ;
4154
4163
stride *= global_size [i ];
4155
4164
}
@@ -4160,8 +4169,8 @@ PDC_Server_data_io_from_region_per_file(uint64_t obj_id, struct pdc_region_info
4160
4169
#endif
4161
4170
4162
4171
// 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 ;
4165
4174
if (region == NULL ) {
4166
4175
region_index = flat_offset / num_elements ;
4167
4176
}
@@ -4176,23 +4185,26 @@ PDC_Server_data_io_from_region_per_file(uint64_t obj_id, struct pdc_region_info
4176
4185
LOG_JUST_PRINT ("\tregion_index: %d\n" , region_index );
4177
4186
#endif
4178
4187
// 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" );
4181
4190
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 " );
4183
4192
}
4184
-
4185
4193
if (region -> region_size_elements == UNITIALIZED_DATA_SERVER_REGION_SIZE_ELEMENTS ) {
4186
4194
region -> region_size_elements = num_elements ;
4187
4195
}
4188
4196
4189
4197
// 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 );
4191
4199
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
+ }
4195
4206
}
4207
+
4196
4208
errno = 0 ;
4197
4209
if (pread (region -> fd , buf_io_ops , region -> region_size_elements * unit , 0 ) !=
4198
4210
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
4201
4213
}
4202
4214
4203
4215
// Allocate indices for iteration
4204
- uint64_t * indices = (uint64_t * )calloc (ndim , sizeof (uint64_t ));
4216
+ indices = (uint64_t * )calloc (ndim , sizeof (uint64_t ));
4205
4217
if (indices == NULL ) {
4206
4218
PGOTO_ERROR (FAIL , "calloc failed for indices" );
4207
4219
}
4208
4220
4209
- for (uint64_t count = 0 ; count < num_elements ; count ++ ) {
4221
+ for (count = 0 ; count < num_elements ; count ++ ) {
4210
4222
// 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 -- ) {
4214
4226
flat_index += (offset [i ] + indices [i ]) * temp_stride ;
4215
4227
temp_stride *= global_size [i ];
4216
4228
}
4217
4229
4218
4230
// Determine region
4219
- uint64_t new_region_index = flat_index / region -> region_size_elements ;
4231
+ new_region_index = flat_index / region -> region_size_elements ;
4220
4232
if (new_region_index != region_index ) {
4221
- uint64_t old_region_size = region -> region_size_elements ;
4233
+ old_region_size = region -> region_size_elements ;
4222
4234
if (region ) {
4223
4235
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" );
4225
4238
region -> fd = -1 ;
4226
4239
}
4227
4240
#ifdef NOAH_DEBUG
@@ -4230,7 +4243,8 @@ PDC_Server_data_io_from_region_per_file(uint64_t obj_id, struct pdc_region_info
4230
4243
LOG_JUST_PRINT ("\tflat index: %d\n" , flat_index );
4231
4244
#endif
4232
4245
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" );
4234
4248
4235
4249
errno = 0 ;
4236
4250
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
4255
4269
PGOTO_ERROR (FAIL , "Region not properly initialized" );
4256
4270
}
4257
4271
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 ;
4261
4275
4262
4276
if (io_type == REGION_PER_FILE_IO_TYPE_READ ) {
4263
4277
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
4267
4281
}
4268
4282
4269
4283
// Advance indices
4270
- for (int d = ndim - 1 ; d >= 0 ; d -- ) {
4284
+ for (d = ndim - 1 ; d >= 0 ; d -- ) {
4271
4285
indices [d ]++ ;
4272
4286
if (indices [d ] < region_info -> size [d ]) {
4273
4287
break ;
@@ -4280,9 +4294,12 @@ PDC_Server_data_io_from_region_per_file(uint64_t obj_id, struct pdc_region_info
4280
4294
4281
4295
done :
4282
4296
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" );
4285
4301
region -> fd = -1 ;
4302
+
4286
4303
}
4287
4304
if (indices )
4288
4305
indices = PDC_free (indices );
@@ -4315,6 +4332,8 @@ PDC_Server_data_read_from_region_per_file(uint64_t obj_id, struct pdc_region_inf
4315
4332
perr_t
4316
4333
PDC_Server_data_write_out (uint64_t obj_id , struct pdc_region_info * region_info , void * buf , size_t unit )
4317
4334
{
4335
+ abort ();
4336
+
4318
4337
FUNC_ENTER (NULL );
4319
4338
4320
4339
perr_t ret_value = SUCCEED ;
@@ -4655,7 +4674,9 @@ PDC_Server_data_write_out(uint64_t obj_id, struct pdc_region_info *region_info,
4655
4674
4656
4675
perr_t
4657
4676
PDC_Server_data_read_from (uint64_t obj_id , struct pdc_region_info * region_info , void * buf , size_t unit )
4658
- {
4677
+ {
4678
+ abort ();
4679
+
4659
4680
FUNC_ENTER (NULL );
4660
4681
4661
4682
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
5105
5126
* \param in[IN] input with type accumulate_storage_meta_t
5106
5127
*
5107
5128
* \return Non-negative on success/Negative on failure
5108
-
5109
5129
*/
5110
5130
static perr_t
5111
5131
PDC_Server_accumulate_storage_meta_then_read (storage_meta_query_one_name_args_t * in )
0 commit comments