Changeset 8660
- Timestamp:
- 12/13/10 16:17:00 (2 years ago)
- Location:
- branches/Orange-Elaine-Distr-Dir-Branch/src
- Files:
-
- 7 modified
-
client/sysint/client-state-machine.h (modified) (1 diff)
-
client/sysint/sys-getattr.sm (modified) (12 diffs)
-
client/sysint/sys-readdir.sm (modified) (1 diff)
-
common/misc/dist-dir-utils.c (modified) (1 diff)
-
common/misc/dist-dir-utils.h (modified) (1 diff)
-
common/misc/pint-util.c (modified) (1 diff)
-
server/mkdir.sm (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/Orange-Elaine-Distr-Dir-Branch/src/client/sysint/client-state-machine.h
r8640 r8660 477 477 * now only used with sys-readdir.sm */ 478 478 int keep_size_array; 479 int *active_dirdata_index; 479 480 480 481 PVFS_size * size_array; -
branches/Orange-Elaine-Distr-Dir-Branch/src/client/sysint/sys-getattr.sm
r8640 r8660 25 25 #include "pvfs2-internal.h" 26 26 #include "pvfs2-types-debug.h" 27 #include "dist-dir-utils.h" 27 28 28 29 /* pvfs2_client_getattr_sm … … 705 706 { 706 707 uint32_t dirent_file_count_i; 708 int tmp_i; 709 unsigned char *c; 707 710 708 711 /* dirent_count will be collected later */ … … 711 714 "dfile_count = %d " 712 715 "dist_name_len = %d " 713 "dist_params_len = %d ", 714 /* "dirent_count = %llu ", */ 716 "dist_params_len = %d\n ", 715 717 attr, 716 718 attr->u.dir.hint.dfile_count, 717 719 attr->u.dir.hint.dist_name_len, 718 720 attr->u.dir.hint.dist_params_len); 719 /* llu(attr->u.dir.dirent_count) */720 721 721 722 if(attr->mask & PVFS_ATTR_DIR_DISTDIR_ATTR) 722 723 { 724 725 gossip_debug(GOSSIP_CLIENT_DEBUG, 726 "sys-getattr: dist-dir-attr " 727 "with tree_height=%d, num_servers=%d, bitmap_size=%d, " 728 "split_size=%d, server_no=%d and branch_level=%d\n", 729 attr->u.dir.dist_dir_attr.tree_height, 730 attr->u.dir.dist_dir_attr.num_servers, 731 attr->u.dir.dist_dir_attr.bitmap_size, 732 attr->u.dir.dist_dir_attr.split_size, 733 attr->u.dir.dist_dir_attr.server_no, 734 attr->u.dir.dist_dir_attr.branch_level); 735 736 /* gossip bitmap */ 723 737 gossip_debug(GOSSIP_CLIENT_DEBUG, 724 "dirdata_server_count = %d\n", 725 attr->u.dir.dist_dir_attr.num_servers); 726 727 /* !!! change more later */ 738 "sys-getattr: dist_dir_bitmap as:\n"); 739 for(tmp_i = attr->u.dir.dist_dir_attr.bitmap_size - 1; 740 tmp_i >= 0 ; tmp_i--) 741 { 742 c = (unsigned char *)(attr->u.dir.dist_dir_bitmap + tmp_i); 743 gossip_debug(GOSSIP_MKDIR_DEBUG, 744 " i=%d : %02x %02x %02x %02x\n", 745 tmp_i, c[3], c[2], c[1], c[0]); 746 } 747 gossip_debug(GOSSIP_CLIENT_DEBUG, "\n"); 748 749 /* gossip dirdata handles */ 750 gossip_debug(GOSSIP_CLIENT_DEBUG, 751 "sys-getattr: dirdata_handles as:\n"); 728 752 for (dirent_file_count_i = 0; 729 753 dirent_file_count_i < … … 1237 1261 PVFS_object_attr *attr = NULL; 1238 1262 PINT_sm_msgpair_state *msg_p = NULL; 1263 int tmp_index, cur_index; 1239 1264 1240 1265 js_p->error_code = 0; … … 1249 1274 attr->u.dir.dist_dir_attr.num_servers); 1250 1275 1276 sm_p->getattr.active_dirdata_index = (int *)malloc( 1277 sizeof(*sm_p->getattr.active_dirdata_index) * 1278 attr->u.dir.dist_dir_attr.num_servers); 1279 1280 if(!sm_p->getattr.active_dirdata_index) 1281 { 1282 js_p->error_code = -PVFS_ENOMEM; 1283 return SM_ACTION_COMPLETE; 1284 } 1285 1286 1287 /* find out active dirdata handles */ 1288 tmp_index = 0; 1289 for(i=0; i<attr->u.dir.dist_dir_attr.num_servers; i++) 1290 { 1291 if(PINT_is_dist_dir_bucket_active(&attr->u.dir.dist_dir_attr, 1292 attr->u.dir.dist_dir_bitmap, i)) 1293 { 1294 sm_p->getattr.active_dirdata_index[tmp_index] = i; 1295 tmp_index++; 1296 } 1297 } 1298 assert(tmp_index > 0); 1299 1251 1300 /* initialize msgpair array */ 1252 1301 ret = PINT_msgpairarray_init(&sm_p->msgarray_op, 1253 attr->u.dir.dist_dir_attr.num_servers);1302 tmp_index); 1254 1303 if(ret != 0) 1255 1304 { … … 1261 1310 foreach_msgpair(&sm_p->msgarray_op, msg_p, i) 1262 1311 { 1312 cur_index = sm_p->getattr.active_dirdata_index[i]; 1263 1313 1264 1314 gossip_debug(GOSSIP_CLIENT_DEBUG, 1265 "getattr: posting dirdata getattr[%d] (%lld,%d)\n", 1266 i, llu(attr->u.dir.dirdata_handles[i]), 1315 "getattr: posting dirdata getattr[%d] ([%d]:%lld,%d)\n", 1316 i, cur_index, 1317 llu(attr->u.dir.dirdata_handles[cur_index]), 1267 1318 sm_p->getattr.object_ref.fs_id); 1268 1319 … … 1271 1322 *sm_p->cred_p, 1272 1323 sm_p->getattr.object_ref.fs_id, 1273 attr->u.dir.dirdata_handles[ i],1324 attr->u.dir.dirdata_handles[cur_index], 1274 1325 PVFS_ATTR_COMMON_ALL|PVFS_ATTR_DIR_DIRENT_COUNT, /* only interested in timestamp and dirent_count */ 1275 1326 sm_p->hints); … … 1277 1328 /* fill in msgpair structure components */ 1278 1329 msg_p->fs_id = sm_p->getattr.object_ref.fs_id; 1279 msg_p->handle = attr->u.dir.dirdata_handles[ i];1330 msg_p->handle = attr->u.dir.dirdata_handles[cur_index]; 1280 1331 msg_p->retry_flag = PVFS_MSGPAIR_RETRY; 1281 1332 msg_p->comp_fn = getattr_dirdata_getattr_comp_fn; … … 1305 1356 PVFS_object_attr *attr_p = NULL; 1306 1357 PVFS_object_attr *resp_attr_p = NULL; 1358 int cur_index; 1307 1359 1308 1360 gossip_debug(GOSSIP_GETATTR_DEBUG, … … 1320 1372 attr_p = &sm_p->getattr.attr; 1321 1373 resp_attr_p = &resp_p->u.getattr.attr; 1374 cur_index = sm_p->getattr.active_dirdata_index[index]; 1322 1375 1323 1376 assert(resp_attr_p->objtype == PVFS_TYPE_DIRDATA); 1324 1377 /* also assert timestamp? */ 1325 1378 assert(resp_attr_p->mask & PVFS_ATTR_DIR_DIRENT_COUNT); 1326 1327 gossip_debug(GOSSIP_CLIENT_DEBUG, "dirdata getattr[%d] returns attrs: " 1379 assert( (cur_index >= 0) && 1380 (cur_index < attr_p->u.dir.dist_dir_attr.num_servers)); 1381 1382 gossip_debug(GOSSIP_CLIENT_DEBUG, "dirdata getattr[%d] (#[%d]) returns attrs: " 1328 1383 "[dirent_count=%llu, atime = %llu, mtime = %llu, ctime = %llu]\n", 1329 index, 1384 index, cur_index, 1330 1385 llu(resp_attr_p->u.dir.dirent_count), 1331 1386 llu(resp_attr_p->atime), … … 1334 1389 1335 1390 /* update timestamp and dirent_count */ 1336 sm_p->getattr.size_array[ index] = resp_attr_p->u.dir.dirent_count;1391 sm_p->getattr.size_array[cur_index] = resp_attr_p->u.dir.dirent_count; 1337 1392 attr_p->u.dir.dirent_count += resp_attr_p->u.dir.dirent_count; 1338 1393 if(attr_p->atime < resp_attr_p->atime) … … 1367 1422 /* cleanup tree request */ 1368 1423 PINT_msgpairarray_destroy(&sm_p->msgarray_op); 1424 1425 if(sm_p->getattr.active_dirdata_index) 1426 { 1427 free(sm_p->getattr.active_dirdata_index); 1428 } 1369 1429 1370 1430 return SM_ACTION_COMPLETE; -
branches/Orange-Elaine-Distr-Dir-Branch/src/client/sysint/sys-readdir.sm
r8656 r8660 297 297 { 298 298 readdir_reentry = 1; 299 300 #if 0301 /* update dirdata_index, the comp_fn is not updating the dirdata_index */302 sm_p->u.readdir.dirdata_index +=303 (sm_p->u.readdir.num_dirdata_needed - 1);304 gossip_debug(GOSSIP_READDIR_DEBUG, "readdir: "305 "re-entering msg_array_setup! update dirdata_index to %d !\n",306 sm_p->u.readdir.dirdata_index);307 #endif308 299 } 309 300 -
branches/Orange-Elaine-Distr-Dir-Branch/src/common/misc/dist-dir-utils.c
r8480 r8660 137 137 } 138 138 139 /* functions to test whether a dirdata server is active or not. 140 * will return 0 if server_no is out of bound or server is inactive. 141 */ 142 int PINT_is_dist_dir_bucket_active( 143 const PVFS_dist_dir_attr *dist_dir_attr_p, 144 const PVFS_dist_dir_bitmap bitmap, 145 const int server_no) 146 { 147 if((server_no < 0) || 148 (server_no >= dist_dir_attr_p->num_servers)) 149 { 150 return 0; 151 } 152 153 if(TST_BIT(bitmap, server_no)) 154 { 155 return 1; 156 } 157 else 158 { 159 return 0; 160 } 161 162 } 139 163 140 164 /* -
branches/Orange-Elaine-Distr-Dir-Branch/src/common/misc/dist-dir-utils.h
r8480 r8660 44 44 const int server_no, 45 45 const int pre_dsg_num_server); 46 int PINT_is_dist_dir_bucket_active( 47 const PVFS_dist_dir_attr *dist_dir_attr_p, 48 const PVFS_dist_dir_bitmap bitmap, 49 const int server_no); 46 50 int PINT_find_dist_dir_bucket( 47 51 const PVFS_dist_dir_hash_type hash, -
branches/Orange-Elaine-Distr-Dir-Branch/src/common/misc/pint-util.c
r8596 r8660 415 415 attr->u.dir.hint.dist_params = NULL; 416 416 } 417 } 418 if (attr->mask & PVFS_ATTR_DIR_DISTDIR_ATTR) 419 { 417 420 if (attr->u.dir.dist_dir_bitmap) 418 421 { -
branches/Orange-Elaine-Distr-Dir-Branch/src/server/mkdir.sm
r8648 r8660 42 42 { 43 43 run mkdir_create_dist_dir_struct; 44 success => select_dirdata_servers;45 default => err_msg;46 }47 48 state select_dirdata_servers49 {50 run mkdir_select_dirdata_servers;51 44 success => create_local_dirdata_dspace; 52 45 default => err_msg; … … 251 244 num_total_dirdata_servers; 252 245 253 /* TODO:if received >0, use; else use config_file value,*/246 /* if received >0, use; else use config_file value,*/ 254 247 if(s_op->req->u.mkdir.num_dirent_files_req > 0) 255 248 { … … 323 316 return SM_ACTION_COMPLETE; 324 317 } 325 326 327 static PINT_sm_action mkdir_select_dirdata_servers(328 struct PINT_smcb *smcb, job_status_s *js_p)329 {330 /*331 struct PINT_server_op *s_op = PINT_sm_frame(smcb, PINT_FRAME_CURRENT);332 PVFS_object_attr *attr;333 */334 335 /* not selecting servers now, suppose has dirdata on every metadata server */336 337 /******** if use the function in create.sm to get server list:338 *339 int PINT_cached_config_get_server_list(340 PVFS_fs_id fs_id,341 PINT_dist *dist,342 int num_dfiles_req,343 PVFS_sys_layout *layout,344 const char ***server_names,345 int *server_count)346 347 1. need to provide dist & layout348 2. server_count might be different from num_dfiles_req, then better put create dist-dir-struct after the servers selection function.349 350 ****************/351 352 353 return SM_ACTION_COMPLETE;354 355 }356 357 318 358 319
