Changeset 8596
- Timestamp:
- 10/26/10 17:03:26 (3 years ago)
- Location:
- branches/Orange-Elaine-Distr-Dir-Branch/src
- Files:
-
- 6 modified
-
client/sysint/acache.c (modified) (5 diffs)
-
client/sysint/client-state-machine.h (modified) (1 diff)
-
client/sysint/initialize.c (modified) (1 diff)
-
client/sysint/sys-mkdir.sm (modified) (6 diffs)
-
common/misc/pint-util.c (modified) (2 diffs)
-
proto/PINT-le-bytefield.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/Orange-Elaine-Distr-Dir-Branch/src/client/sysint/acache.c
r8492 r8596 71 71 PVFS_handle *mirror_dfile_array; 72 72 uint32_t mirror_copies_count; 73 /*74 PVFS_handle *dirent_handle;75 uint32_t dirent_file_count;76 */77 /* distributed directory parameters */78 PVFS_dist_dir_attr dist_dir_attr;79 PVFS_dist_dir_bitmap dist_dir_bitmap;80 PVFS_handle *dirdata_handles;81 73 }; 82 74 … … 457 449 attr->u.meta.dist_size = tmp_static_payload->dist_size; 458 450 } 459 if(tmp_static_payload->mask & PVFS_ATTR_DIR_DISTDIR_ATTR)460 {461 uint32_t tmp_i;462 /* test if num_servers > 0 */463 464 if(attr->u.dir.dist_dir_bitmap)465 {466 free(attr->u.dir.dist_dir_bitmap);467 attr->u.dir.dist_dir_bitmap = NULL;468 }469 if(attr->u.dir.dirdata_handles)470 {471 free(attr->u.dir.dirdata_handles);472 attr->u.dir.dirdata_handles = NULL;473 }474 475 if(tmp_static_payload->dist_dir_attr.num_servers == 0)476 { /* no dirdata servers, for debug */477 gen_mutex_unlock(&acache_mutex);478 return(0); /* ??? not sure */479 }480 481 /* copy dist_dir_attr */482 PINT_dist_dir_attr_copyto(attr->u.dir.dist_dir_attr,483 tmp_static_payload->dist_dir_attr);484 485 attr->u.dir.dist_dir_bitmap =486 malloc(tmp_static_payload->dist_dir_attr.bitmap_size *487 sizeof(PVFS_dist_dir_bitmap_basetype));488 attr->u.dir.dirdata_handles =489 malloc(tmp_static_payload->dist_dir_attr.num_servers *490 sizeof(PVFS_handle));491 if (!attr->u.dir.dist_dir_bitmap || !attr->u.dir.dirdata_handles)492 {493 gen_mutex_unlock(&acache_mutex);494 return(-PVFS_ENOMEM);495 }496 memcpy(attr->u.dir.dist_dir_bitmap,497 tmp_static_payload->dist_dir_bitmap,498 tmp_static_payload->dist_dir_attr.bitmap_size *499 sizeof(PVFS_dist_dir_bitmap_basetype));500 memcpy(attr->u.dir.dirdata_handles,501 tmp_static_payload->dirdata_handles,502 tmp_static_payload->dist_dir_attr.num_servers *503 sizeof(PVFS_handle));504 505 /* !!! change later */506 gossip_debug(GOSSIP_ACACHE_DEBUG, "acache: get_cached_entry(): dirdata_count=%d\n", attr->u.dir.dist_dir_attr.num_servers);507 for (tmp_i=0; tmp_i < attr->u.dir.dist_dir_attr.num_servers; tmp_i++)508 {509 gossip_debug(GOSSIP_ACACHE_DEBUG, " dirdata_handle[%d]=%llu\n", tmp_i, llu(attr->u.dir.dirdata_handles[tmp_i]));510 }511 }512 451 513 452 *attr_status = 0; … … 708 647 tmp_static_payload->dist_size = attr->u.meta.dist_size; 709 648 } 710 if(attr->mask & PVFS_ATTR_DIR_DISTDIR_ATTR)711 {712 uint32_t tmp_i;713 714 if(attr->u.dir.dist_dir_attr.num_servers == 0)715 { /* empty dist-dir structure, not going to store, only in development phase */716 ret = -PVFS_ENOMEM; /* temporarily */717 goto err;718 }719 720 /* change gossip format later */721 gossip_debug(GOSSIP_ACACHE_DEBUG, "acache: update(): dirdata_count=%d\n",722 attr->u.dir.dist_dir_attr.num_servers);723 for (tmp_i=0; tmp_i < attr->u.dir.dist_dir_attr.num_servers; tmp_i++)724 {725 gossip_debug(GOSSIP_ACACHE_DEBUG, " dirdata_handle[%d]=%llu\n", tmp_i, llu(attr->u.dir.dirdata_handles[tmp_i]));726 }727 728 PINT_dist_dir_attr_copyto(tmp_static_payload->dist_dir_attr,729 attr->u.dir.dist_dir_attr);730 731 tmp_static_payload->dist_dir_bitmap =732 malloc(attr->u.dir.dist_dir_attr.bitmap_size *733 sizeof(PVFS_dist_dir_bitmap_basetype));734 tmp_static_payload->dirdata_handles =735 malloc(attr->u.dir.dist_dir_attr.num_servers * sizeof(PVFS_handle));736 if (!tmp_static_payload->dirdata_handles ||737 !tmp_static_payload->dist_dir_bitmap )738 {739 ret = -PVFS_ENOMEM;740 goto err;741 }742 memcpy(tmp_static_payload->dirdata_handles,743 attr->u.dir.dirdata_handles,744 attr->u.dir.dist_dir_attr.num_servers * sizeof(PVFS_handle));745 memcpy(tmp_static_payload->dist_dir_bitmap,746 attr->u.dir.dist_dir_bitmap,747 attr->u.dir.dist_dir_attr.bitmap_size *748 sizeof(PVFS_dist_dir_bitmap_basetype));749 }750 649 } 751 650 … … 816 715 if(tmp_static_payload->mirror_dfile_array) 817 716 free(tmp_static_payload->mirror_dfile_array); 818 if(tmp_static_payload->dist_dir_bitmap)819 free(tmp_static_payload->dist_dir_bitmap);820 if(tmp_static_payload->dirdata_handles)821 free(tmp_static_payload->dirdata_handles);822 717 if(tmp_static_payload->dist) 823 718 PINT_dist_free(tmp_static_payload->dist); … … 918 813 { 919 814 free(tmp_static_payload->mirror_dfile_array); 920 }921 if(tmp_static_payload->dist_dir_bitmap)922 {923 free(tmp_static_payload->dist_dir_bitmap);924 }925 if(tmp_static_payload->dirdata_handles)926 {927 free(tmp_static_payload->dirdata_handles);928 815 } 929 816 if(tmp_static_payload->dist) -
branches/Orange-Elaine-Distr-Dir-Branch/src/client/sysint/client-state-machine.h
r8581 r8596 109 109 int stored_error_code; 110 110 PVFS_handle metafile_handle; 111 112 /* store the dist-dir-struct of the parent directory */113 /* distributed directory parameters */114 PVFS_dist_dir_attr dist_dir_attr;115 PVFS_dist_dir_bitmap dist_dir_bitmap;116 PVFS_handle *dirdata_handles;117 111 118 112 /* keep first */ -
branches/Orange-Elaine-Distr-Dir-Branch/src/client/sysint/initialize.c
r8544 r8596 226 226 if (ret < 0) 227 227 { 228 gossip_lerr("Error initializing namereaddir cache\n");228 gossip_lerr("Error initializing readdir cache\n"); 229 229 goto error_exit; 230 230 } -
branches/Orange-Elaine-Distr-Dir-Branch/src/client/sysint/sys-mkdir.sm
r8508 r8596 424 424 dirdata_server_index = 425 425 PINT_find_dist_dir_bucket(dirdata_hash, 426 &sm_p-> u.mkdir.dist_dir_attr,427 sm_p-> u.mkdir.dist_dir_bitmap);426 &sm_p->getattr.attr.u.dir.dist_dir_attr, 427 sm_p->getattr.attr.u.dir.dist_dir_bitmap); 428 428 gossip_debug(GOSSIP_CLIENT_DEBUG, "mkdir: selecting bucket No.%d from dist_dir_bitmap.\n", 429 429 dirdata_server_index); … … 436 436 llu(sm_p->u.mkdir.metafile_handle), 437 437 llu(sm_p->object_ref.handle), 438 llu(sm_p-> u.mkdir.dirdata_handles[dirdata_server_index]),438 llu(sm_p->getattr.attr.u.dir.dirdata_handles[dirdata_server_index]), 439 439 dirdata_server_index); 440 440 … … 448 448 sm_p->u.mkdir.metafile_handle, 449 449 sm_p->object_ref.handle, 450 sm_p-> u.mkdir.dirdata_handles[dirdata_server_index],450 sm_p->getattr.attr.u.dir.dirdata_handles[dirdata_server_index], 451 451 sm_p->object_ref.fs_id, 452 452 sm_p->hints); … … 455 455 /* send to dirdata server */ 456 456 msg_p->handle = 457 sm_p-> u.mkdir.dirdata_handles[dirdata_server_index];457 sm_p->getattr.attr.u.dir.dirdata_handles[dirdata_server_index]; 458 458 msg_p->retry_flag = PVFS_MSGPAIR_NO_RETRY; 459 459 msg_p->comp_fn = mkdir_crdirent_comp_fn; … … 594 594 } 595 595 596 if(sm_p->u.mkdir.dist_dir_bitmap)597 {598 free(sm_p->u.mkdir.dist_dir_bitmap);599 sm_p->u.mkdir.dist_dir_bitmap = NULL;600 }601 602 if(sm_p->u.mkdir.dirdata_handles)603 {604 free(sm_p->u.mkdir.dirdata_handles);605 sm_p->u.mkdir.dirdata_handles = NULL;606 }607 608 596 PINT_SET_OP_COMPLETE; 609 597 return SM_ACTION_TERMINATE; … … 647 635 /* note that permission checking is left to server even in this case */ 648 636 } 649 650 /* ??? necessary? can we use the sm_p->getattr.attr directly? */651 PINT_dist_dir_attr_copyto(sm_p->u.mkdir.dist_dir_attr, attr->u.dir.dist_dir_attr);652 653 sm_p->u.mkdir.dist_dir_bitmap = malloc(654 sizeof(PVFS_dist_dir_bitmap_basetype) * attr->u.dir.dist_dir_attr.bitmap_size);655 sm_p->u.mkdir.dirdata_handles = malloc(656 sizeof(*attr->u.dir.dirdata_handles) * attr->u.dir.dist_dir_attr.num_servers);657 if (!sm_p->u.mkdir.dist_dir_bitmap ||658 !sm_p->u.mkdir.dirdata_handles)659 {660 return -PVFS_ENOMEM;661 }662 memcpy(sm_p->u.mkdir.dist_dir_bitmap,663 attr->u.dir.dist_dir_bitmap,664 sizeof(PVFS_dist_dir_bitmap_basetype) * attr->u.dir.dist_dir_attr.bitmap_size);665 memcpy(sm_p->u.mkdir.dirdata_handles,666 attr->u.dir.dirdata_handles,667 sizeof(*attr->u.dir.dirdata_handles) * attr->u.dir.dist_dir_attr.num_servers);668 637 669 638 /* Determine the number of dirent files. For now just assume we will use -
branches/Orange-Elaine-Distr-Dir-Branch/src/common/misc/pint-util.c
r8544 r8596 152 152 if (dist_dir_bitmap_size) 153 153 { 154 if (dest->mask & PVFS_ATTR_DIR_DISTDIR_ATTR) 154 if ((dest->mask & PVFS_ATTR_DIR_DISTDIR_ATTR) && 155 dest->u.dir.dist_dir_attr.num_servers > 0) 155 156 { 156 157 if (dest->u.dir.dist_dir_bitmap) … … 369 370 if (attr) 370 371 { 371 if (attr->objtype == PVFS_TYPE_METAFILE) 372 { 373 if (attr->mask & PVFS_ATTR_META_DFILES) 374 { 375 if (attr->u.meta.dfile_array) 376 { 377 free(attr->u.meta.dfile_array); 378 attr->u.meta.dfile_array = NULL; 379 } 380 } 381 if (attr->mask & PVFS_ATTR_META_MIRROR_DFILES) 382 { 383 if (attr->u.meta.mirror_dfile_array) 384 { 385 free(attr->u.meta.mirror_dfile_array); 386 attr->u.meta.mirror_dfile_array = NULL; 387 } 388 } 389 if (attr->mask & PVFS_ATTR_META_DIST) 390 { 391 if (attr->u.meta.dist) 392 { 393 PINT_dist_free(attr->u.meta.dist); 394 attr->u.meta.dist = NULL; 395 } 396 } 397 } 398 else if (attr->objtype == PVFS_TYPE_SYMLINK) 399 { 400 if (attr->mask & PVFS_ATTR_SYMLNK_TARGET) 401 { 402 if ((attr->u.sym.target_path_len > 0) && 372 if (attr->mask & PVFS_ATTR_META_DFILES) 373 { 374 if (attr->u.meta.dfile_array) 375 { 376 free(attr->u.meta.dfile_array); 377 attr->u.meta.dfile_array = NULL; 378 } 379 } 380 if (attr->mask & PVFS_ATTR_META_MIRROR_DFILES) 381 { 382 if (attr->u.meta.mirror_dfile_array) 383 { 384 free(attr->u.meta.mirror_dfile_array); 385 attr->u.meta.mirror_dfile_array = NULL; 386 } 387 } 388 if (attr->mask & PVFS_ATTR_META_DIST) 389 { 390 if (attr->u.meta.dist) 391 { 392 PINT_dist_free(attr->u.meta.dist); 393 attr->u.meta.dist = NULL; 394 } 395 } 396 if (attr->mask & PVFS_ATTR_SYMLNK_TARGET) 397 { 398 if ((attr->u.sym.target_path_len > 0) && 403 399 attr->u.sym.target_path) 404 { 405 free(attr->u.sym.target_path); 406 attr->u.sym.target_path = NULL; 407 } 408 } 409 } 410 else if (attr->objtype == PVFS_TYPE_DIRECTORY) 411 { 412 if (attr->mask & PVFS_ATTR_DIR_HINT) 413 { 414 if (attr->u.dir.hint.dist_name) 415 { 416 free(attr->u.dir.hint.dist_name); 417 attr->u.dir.hint.dist_name = NULL; 418 } 419 if (attr->u.dir.hint.dist_params) 420 { 421 free(attr->u.dir.hint.dist_params); 422 attr->u.dir.hint.dist_params = NULL; 423 } 424 } 425 if (attr->mask & PVFS_ATTR_DIR_DISTDIR_ATTR) 426 { 427 if (attr->u.dir.dist_dir_bitmap) 428 { 429 free(attr->u.dir.dist_dir_bitmap); 430 attr->u.dir.dist_dir_bitmap = NULL; 431 } 432 if (attr->u.dir.dirdata_handles) 433 { 434 free(attr->u.dir.dirdata_handles); 435 attr->u.dir.dirdata_handles = NULL; 436 } 400 { 401 free(attr->u.sym.target_path); 402 attr->u.sym.target_path = NULL; 403 } 404 } 405 if (attr->mask & PVFS_ATTR_DIR_HINT) 406 { 407 if (attr->u.dir.hint.dist_name) 408 { 409 free(attr->u.dir.hint.dist_name); 410 attr->u.dir.hint.dist_name = NULL; 411 } 412 if (attr->u.dir.hint.dist_params) 413 { 414 free(attr->u.dir.hint.dist_params); 415 attr->u.dir.hint.dist_params = NULL; 416 } 417 if (attr->u.dir.dist_dir_bitmap) 418 { 419 free(attr->u.dir.dist_dir_bitmap); 420 attr->u.dir.dist_dir_bitmap = NULL; 421 } 422 if (attr->u.dir.dirdata_handles) 423 { 424 free(attr->u.dir.dirdata_handles); 425 attr->u.dir.dirdata_handles = NULL; 437 426 } 438 427 } -
branches/Orange-Elaine-Distr-Dir-Branch/src/proto/PINT-le-bytefield.c
r8544 r8596 1000 1000 if (resp->u.getattr.attr.mask & PVFS_ATTR_META_DFILES) 1001 1001 decode_free(resp->u.getattr.attr.u.meta.dfile_array); 1002 if ( resp->u.getattr.attr.mask1002 if (resp->u.getattr.attr.mask 1003 1003 & PVFS_ATTR_META_MIRROR_DFILES ) 1004 1004 decode_free 1005 1005 (resp->u.getattr.attr.u.meta.mirror_dfile_array); 1006 if (resp->u.getattr.attr.mask 1007 & PVFS_ATTR_DIR_DISTDIR_ATTR) 1008 { 1009 decode_free 1010 (resp->u.getattr.attr.u.dir.dist_dir_bitmap); 1011 decode_free 1012 (resp->u.getattr.attr.u.dir.dirdata_handles); 1013 } 1006 1014 break; 1007 1015
