Changeset 8480
- Timestamp:
- 08/22/10 20:10:19 (3 years ago)
- Location:
- branches/Orange-Elaine-Distr-Dir-Branch
- Files:
-
- 1 added
- 22 modified
-
Makefile.in (modified) (1 diff)
-
include/pvfs2-types.h (modified) (2 diffs)
-
include/pvfs2.h (added)
-
src/client/sysint/acache.c (modified) (7 diffs)
-
src/client/sysint/client-state-machine.h (modified) (1 diff)
-
src/client/sysint/mgmt-create-dirent.sm (modified) (1 diff)
-
src/client/sysint/mgmt-remove-dirent.sm (modified) (1 diff)
-
src/client/sysint/sys-create.sm (modified) (2 diffs)
-
src/client/sysint/sys-getattr.sm (modified) (4 diffs)
-
src/client/sysint/sys-mkdir.sm (modified) (7 diffs)
-
src/client/sysint/sys-readdir.sm (modified) (2 diffs)
-
src/client/sysint/sys-remove.sm (modified) (3 diffs)
-
src/client/sysint/sys-rename.sm (modified) (1 diff)
-
src/client/sysint/sys-symlink.sm (modified) (1 diff)
-
src/common/misc/dist-dir-utils.c (modified) (1 diff)
-
src/common/misc/dist-dir-utils.h (modified) (2 diffs)
-
src/common/misc/pint-util.c (modified) (3 diffs)
-
src/proto/pvfs2-attr.h (modified) (3 diffs)
-
src/proto/pvfs2-req-proto.h (modified) (1 diff)
-
src/server/get-attr.sm (modified) (10 diffs)
-
src/server/mkdir.sm (modified) (12 diffs)
-
src/server/pvfs2-server.c (modified) (1 diff)
-
src/server/pvfs2-server.h (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/Orange-Elaine-Distr-Dir-Branch/Makefile.in
r8259 r8480 313 313 SERVERCFLAGS += -D__STATIC_FLOWPROTO_BMI_CACHE__ 314 314 315 SERVERLIBS = -lpvfs2-server @LIBS@ @DB_LIB@ -lpthread 315 SERVERLIBS = -lpvfs2-server @LIBS@ @DB_LIB@ -lpthread -lm 316 316 317 317 ifdef NEEDS_LIBRT -
branches/Orange-Elaine-Distr-Dir-Branch/include/pvfs2-types.h
r8478 r8480 510 510 int32_t tree_height; /* ceil(log2(num_servers)) */ 511 511 int32_t num_servers; /* total number of servers */ 512 int32_t bitmap_size; /* number of bytes of the bitmap tree stored under the key DIST_DIR_BITMAP, 513 should be a multiple of 4*/ 512 int32_t bitmap_size; /* number of PVFS_dist_dir_bitmap_basetype stored under the key DIST_DIR_BITMAP */ 514 513 int32_t split_size; /* maximum number of entries before a split */ 515 514 … … 518 517 int32_t branch_level; /* level of branching on this server */ 519 518 } PVFS_dist_dir_attr; 520 521 /* bitmap type */ 519 endecode_fields_6( 520 PVFS_dist_dir_attr, 521 int32_t, tree_height, 522 int32_t, num_servers, 523 int32_t, bitmap_size, 524 int32_t, split_size, 525 int32_t, server_no, 526 int32_t, branch_level); 527 522 528 typedef uint32_t PVFS_dist_dir_bitmap_basetype; 523 typedef uint32_t *PVFS_dist_dir_bitmap;529 typedef uint32_t *PVFS_dist_dir_bitmap; 524 530 typedef uint64_t PVFS_dist_dir_hash_type; 525 531 526 532 #define encode_PVFS_dist_dir_bitmap_basetype encode_uint32_t 533 #define decode_PVFS_dist_dir_bitmap_basetype decode_uint32_t 534 #define encode_PVFS_dist_dir_hash_type encode_uint64_t 535 #define decode_PVFS_dist_dir_hash_type decode_uint64_t 527 536 528 537 /** Predefined server parameters that can be manipulated at run-time -
branches/Orange-Elaine-Distr-Dir-Branch/src/client/sysint/acache.c
r8418 r8480 15 15 #include "gossip.h" 16 16 #include "pvfs2-internal.h" 17 #include "dist-dir-utils.h" 17 18 18 19 /** \file … … 70 71 PVFS_handle *mirror_dfile_array; 71 72 uint32_t mirror_copies_count; 73 /* 72 74 PVFS_handle *dirent_handle; 73 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; 74 81 }; 75 82 … … 369 376 370 377 #if 0 371 gossip_debug(GOSSIP_ACACHE_DEBUG, "acache: 372 status=%d, attr_status=%d, size_status=%d\n", 378 gossip_debug(GOSSIP_ACACHE_DEBUG, "acache: status=%d, attr_status=%d, size_status=%d\n", 373 379 status, tmp_payload->attr_status, tmp_payload->size_status); 374 380 #endif … … 454 460 { 455 461 uint32_t tmp_i; 456 457 if(attr->u.dir.dirent_handle) 458 free(attr->u.dir.dirent_handle); 459 attr->u.dir.dirent_handle = 460 malloc(tmp_static_payload->dirent_file_count*sizeof(PVFS_handle)); 461 if (!attr->u.dir.dirent_handle) 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) 462 492 { 463 493 gen_mutex_unlock(&acache_mutex); 464 494 return(-PVFS_ENOMEM); 465 495 } 466 memcpy(attr->u.dir.dirent_handle, 467 tmp_static_payload->dirent_handle, 468 tmp_static_payload->dirent_file_count*sizeof(PVFS_handle)); 469 attr->u.dir.dirent_file_count = tmp_static_payload->dirent_file_count; 470 gossip_debug(GOSSIP_ACACHE_DEBUG, "acache: get_cached_entry(): dirent_file_count=%d\n", attr->u.dir.dirent_file_count); 471 for (tmp_i=0; tmp_i < attr->u.dir.dirent_file_count; tmp_i++) 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++) 472 508 { 473 gossip_debug(GOSSIP_ACACHE_DEBUG, " dir ent_handle[%d]=%llu\n", tmp_i, llu(attr->u.dir.dirent_handle[tmp_i]));509 gossip_debug(GOSSIP_ACACHE_DEBUG, " dirdata_handle[%d]=%llu\n", tmp_i, llu(attr->u.dir.dirdata_handles[tmp_i])); 474 510 } 475 511 } … … 676 712 uint32_t tmp_i; 677 713 678 gossip_debug(GOSSIP_ACACHE_DEBUG, "acache: update(): dirent_file_count=%d\n", attr->u.dir.dirent_file_count); 679 for (tmp_i=0; tmp_i < attr->u.dir.dirent_file_count; tmp_i++) 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++) 680 724 { 681 gossip_debug(GOSSIP_ACACHE_DEBUG, " dir ent_handle[%d]=%llu\n", tmp_i, llu(attr->u.dir.dirent_handle[tmp_i]));725 gossip_debug(GOSSIP_ACACHE_DEBUG, " dirdata_handle[%d]=%llu\n", tmp_i, llu(attr->u.dir.dirdata_handles[tmp_i])); 682 726 } 683 727 684 tmp_static_payload->dirent_handle = 685 malloc(attr->u.dir.dirent_file_count * sizeof(PVFS_handle)); 686 if (!tmp_static_payload->dirent_handle) 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 ) 687 738 { 688 739 ret = -PVFS_ENOMEM; 689 740 goto err; 690 741 } 691 memcpy(tmp_static_payload->dirent_handle 692 ,attr->u.dir.dirent_handle 693 ,attr->u.dir.dirent_file_count * sizeof(PVFS_handle)); 694 tmp_static_payload->dirent_file_count = 695 attr->u.dir.dirent_file_count; 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)); 696 749 } 697 750 } … … 763 816 if(tmp_static_payload->mirror_dfile_array) 764 817 free(tmp_static_payload->mirror_dfile_array); 765 if(tmp_static_payload->dirent_handle) 766 free(tmp_static_payload->dirent_handle); 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); 767 822 if(tmp_static_payload->dist) 768 823 PINT_dist_free(tmp_static_payload->dist); … … 864 919 free(tmp_static_payload->mirror_dfile_array); 865 920 } 866 if(tmp_static_payload->dirent_handle) 867 { 868 free(tmp_static_payload->dirent_handle); 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); 869 928 } 870 929 if(tmp_static_payload->dist) -
branches/Orange-Elaine-Distr-Dir-Branch/src/client/sysint/client-state-machine.h
r8478 r8480 109 109 int stored_error_code; 110 110 PVFS_handle metafile_handle; 111 int dirent_file_count; 112 PVFS_handle *dirent_handle; 113 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 118 /* keep first */ 114 119 PINT_dist *dist; 115 120 PVFS_sys_layout layout; -
branches/Orange-Elaine-Distr-Dir-Branch/src/client/sysint/mgmt-create-dirent.sm
r8418 r8480 207 207 sm_p->u.mgmt_create_dirent.entry_handle, 208 208 sm_p->parent_ref.handle, 209 sm_p->getattr.attr.u.dir.dir ent_handle[0],209 sm_p->getattr.attr.u.dir.dirdata_handles[0], 210 210 sm_p->parent_ref.fs_id, 211 211 sm_p->hints); -
branches/Orange-Elaine-Distr-Dir-Branch/src/client/sysint/mgmt-remove-dirent.sm
r8418 r8480 196 196 sm_p->parent_ref.fs_id, 197 197 sm_p->parent_ref.handle, 198 sm_p->getattr.attr.u.dir.dir ent_handle[0],198 sm_p->getattr.attr.u.dir.dirdata_handles[0], 199 199 sm_p->u.mgmt_remove_dirent.entry, 200 200 sm_p->hints); -
branches/Orange-Elaine-Distr-Dir-Branch/src/client/sysint/sys-create.sm
r8418 r8480 676 676 /* note that permission checking is left to server even in this case */ 677 677 } 678 /* !!! change more later */ 678 679 gossip_debug(GOSSIP_CLIENT_DEBUG, "create_parent_getattr: [%p] " 679 "dir ent_file_count = %d "680 "dirdata_server_count = %d " 680 681 "dfile_count = %d " 681 682 "dist_name_len = %d " 682 683 "dist_params_len = %d\n", 683 684 attr, 684 attr->u.dir.di rent_file_count,685 attr->u.dir.dist_dir_attr.num_servers, 685 686 attr->u.dir.hint.dfile_count, 686 687 attr->u.dir.hint.dist_name_len, 687 688 attr->u.dir.hint.dist_params_len); 688 689 689 for (tmp_i = 0; tmp_i < attr->u.dir.dirent_file_count; tmp_i++) 690 /* !!! change more later */ 691 for (tmp_i = 0; tmp_i < attr->u.dir.dist_dir_attr.num_servers; tmp_i++) 690 692 { 691 693 gossip_debug(GOSSIP_CLIENT_DEBUG, 692 " dir ent_handle[%d] = %llu\n",693 tmp_i, llu(attr->u.dir.dir ent_handle[tmp_i]));694 " dirdata_handle[%d] = %llu\n", 695 tmp_i, llu(attr->u.dir.dirdata_handles[tmp_i])); 694 696 } 695 697 698 /* !!! need to talk to Elaine and revise this part, what to store in u.create */ 696 699 sm_p->u.create.dirent_handle = malloc( 697 sizeof(*attr->u.dir.dir ent_handle) * attr->u.dir.dirent_file_count);700 sizeof(*attr->u.dir.dirdata_handles) * attr->u.dir.dist_dir_attr.num_servers); 698 701 if (!sm_p->u.create.dirent_handle) 699 702 { … … 701 704 } 702 705 memcpy(sm_p->u.create.dirent_handle, 703 attr->u.dir.dir ent_handle,704 sizeof(*attr->u.dir.dir ent_handle) * attr->u.dir.dirent_file_count);705 sm_p->u.create.dirent_file_count = attr->u.dir.di rent_file_count;706 attr->u.dir.dirdata_handles, 707 sizeof(*attr->u.dir.dirdata_handles) * attr->u.dir.dist_dir_attr.num_servers); 708 sm_p->u.create.dirent_file_count = attr->u.dir.dist_dir_attr.num_servers; 706 709 707 710 current_dist = sm_p->u.create.dist; -
branches/Orange-Elaine-Distr-Dir-Branch/src/client/sysint/sys-getattr.sm
r8478 r8480 636 636 uint32_t dirent_file_count_i; 637 637 638 /* !!! change more later */ 638 639 gossip_debug(GOSSIP_CLIENT_DEBUG, 639 640 "getattr comp_fn [%p] " … … 642 643 "dist_params_len = %d " 643 644 "dirent_count = %llu " 644 "dir ent_file_count = %d\n",645 "dirdata_server_count = %d\n", 645 646 attr, 646 647 attr->u.dir.hint.dfile_count, … … 648 649 attr->u.dir.hint.dist_params_len, 649 650 llu(attr->u.dir.dirent_count), 650 attr->u.dir.di rent_file_count);651 attr->u.dir.dist_dir_attr.num_servers); 651 652 /* 652 653 gossip_debug(GOSSIP_CLIENT_DEBUG, … … 655 656 */ 656 657 658 /* !!! change more later */ 657 659 for (dirent_file_count_i = 0; 658 dirent_file_count_i < attr->u.dir.di rent_file_count;660 dirent_file_count_i < attr->u.dir.dist_dir_attr.num_servers; 659 661 dirent_file_count_i++) { 660 662 gossip_debug(GOSSIP_CLIENT_DEBUG, 661 " dir ent_handle[%d] = %llu\n",663 " dirdata_handle[%d] = %llu\n", 662 664 dirent_file_count_i, 663 llu(attr->u.dir.dir ent_handle[dirent_file_count_i]));665 llu(attr->u.dir.dirdata_handles[dirent_file_count_i])); 664 666 } 665 667 -
branches/Orange-Elaine-Distr-Dir-Branch/src/client/sysint/sys-mkdir.sm
r8478 r8480 28 28 #include "pvfs2-internal.h" 29 29 #include "pvfs2-dist-simple-stripe.h" 30 #include "dist-dir-utils.h" 30 31 31 32 extern job_context_id pint_client_sm_context; … … 415 416 416 417 /* TODO: Need to find the correct dirent_handle */ 418 /* !!! change later */ 417 419 gossip_debug(GOSSIP_CLIENT_DEBUG, "hooking dirent %s (%llu) under " 418 420 "parent handle %llu, dirent_handle %llu\n", … … 420 422 llu(sm_p->u.mkdir.metafile_handle), 421 423 llu(sm_p->object_ref.handle), 422 llu(sm_p->u.mkdir.dir ent_handle[0]));424 llu(sm_p->u.mkdir.dirdata_handles[0])); 423 425 424 426 PINT_msgpair_init(&sm_p->msgarray_op); … … 431 433 sm_p->u.mkdir.metafile_handle, 432 434 sm_p->object_ref.handle, 433 sm_p->u.mkdir.dir ent_handle[0],435 sm_p->u.mkdir.dirdata_handles[0], 434 436 sm_p->object_ref.fs_id, 435 437 sm_p->hints); … … 575 577 } 576 578 577 if(sm_p->u.mkdir.dirent_handle) 578 { 579 free(sm_p->u.mkdir.dirent_handle); 580 sm_p->u.mkdir.dirent_handle = NULL; 579 if(sm_p->u.mkdir.dist_dir_bitmap) 580 { 581 free(sm_p->u.mkdir.dist_dir_bitmap); 582 sm_p->u.mkdir.dist_dir_bitmap = NULL; 583 } 584 585 if(sm_p->u.mkdir.dirdata_handles) 586 { 587 free(sm_p->u.mkdir.dirdata_handles); 588 sm_p->u.mkdir.dirdata_handles = NULL; 581 589 } 582 590 … … 601 609 assert(attr); 602 610 611 /* !!! change later */ 603 612 gossip_debug(GOSSIP_CLIENT_DEBUG, 604 "parent owner: %d, group: %d, perms: %d, dir ent_file_count: %d\n",613 "parent owner: %d, group: %d, perms: %d, dirdata_server_count: %d\n", 605 614 (int)attr->owner, (int)attr->group, (int)attr->perms, 606 attr->u.dir.di rent_file_count);607 for (i = 0; i < attr->u.dir.di rent_file_count; i++)615 attr->u.dir.dist_dir_attr.num_servers); 616 for (i = 0; i < attr->u.dir.dist_dir_attr.num_servers; i++) 608 617 { 609 618 gossip_debug(GOSSIP_CLIENT_DEBUG, 610 " dir ent_handle[%d] = %llu\n",611 i, llu(attr->u.dir.dir ent_handle[i]));619 " dirdata_handle[%d] = %llu\n", 620 i, llu(attr->u.dir.dirdata_handles[i])); 612 621 } 613 622 … … 622 631 } 623 632 624 sm_p->u.mkdir.dirent_handle = malloc( 625 sizeof(*attr->u.dir.dirent_handle) * attr->u.dir.dirent_file_count); 626 if (!sm_p->u.mkdir.dirent_handle) 633 PINT_dist_dir_attr_copyto(sm_p->u.mkdir.dist_dir_attr, attr->u.dir.dist_dir_attr); 634 635 sm_p->u.mkdir.dist_dir_bitmap = malloc( 636 sizeof(PVFS_dist_dir_bitmap_basetype) * attr->u.dir.dist_dir_attr.bitmap_size); 637 sm_p->u.mkdir.dirdata_handles = malloc( 638 sizeof(*attr->u.dir.dirdata_handles) * attr->u.dir.dist_dir_attr.num_servers); 639 if (!sm_p->u.mkdir.dist_dir_bitmap || 640 !sm_p->u.mkdir.dirdata_handles) 627 641 { 628 642 return -PVFS_ENOMEM; 629 643 } 630 memcpy(sm_p->u.mkdir.dirent_handle, 631 attr->u.dir.dirent_handle, 632 sizeof(*attr->u.dir.dirent_handle) * attr->u.dir.dirent_file_count); 633 sm_p->u.mkdir.dirent_file_count = attr->u.dir.dirent_file_count; 644 memcpy(sm_p->u.mkdir.dist_dir_bitmap, 645 attr->u.dir.dist_dir_bitmap, 646 sizeof(PVFS_dist_dir_bitmap_basetype) * attr->u.dir.dist_dir_attr.bitmap_size); 647 memcpy(sm_p->u.mkdir.dirdata_handles, 648 attr->u.dir.dirdata_handles, 649 sizeof(*attr->u.dir.dirdata_handles) * attr->u.dir.dist_dir_attr.num_servers); 634 650 635 651 /* Determine the number of dirent files. For now just assume we will use -
branches/Orange-Elaine-Distr-Dir-Branch/src/client/sysint/sys-readdir.sm
r8418 r8480 244 244 GOSSIP_READDIR_DEBUG, "%llu|%llu|%d | token is %llu | limit is %d\n", 245 245 llu(sm_p->object_ref.handle), 246 llu(sm_p->getattr.attr.u.dir.dir ent_handle[0]),246 llu(sm_p->getattr.attr.u.dir.dirdata_handles[0]), 247 247 sm_p->object_ref.fs_id, 248 248 llu(sm_p->readdir.pos_token), … … 257 257 sm_p->object_ref.fs_id, 258 258 sm_p->object_ref.handle, 259 sm_p->getattr.attr.u.dir.dir ent_handle[0],259 sm_p->getattr.attr.u.dir.dirdata_handles[0], 260 260 sm_p->u.readdir.pos_token, 261 261 sm_p->u.readdir.dirent_limit, -
branches/Orange-Elaine-Distr-Dir-Branch/src/client/sysint/sys-remove.sm
r8418 r8480 306 306 sm_p->parent_ref.fs_id, 307 307 sm_p->parent_ref.handle, 308 sm_p->getattr.attr.u.dir.dir ent_handle[0],308 sm_p->getattr.attr.u.dir.dirdata_handles[0], 309 309 sm_p->u.remove.object_name, 310 310 sm_p->hints); … … 373 373 374 374 /* TODO: Need to find the correct dirent_handle */ 375 gossip_debug(GOSSIP_CLIENT_DEBUG, "dir ent_handle: %llu\n",376 llu(attr->u.dir.dir ent_handle[0]));375 gossip_debug(GOSSIP_CLIENT_DEBUG, "dirdata_handle: %llu\n", 376 llu(attr->u.dir.dirdata_handles[0])); 377 377 378 378 PINT_msgpair_init(&sm_p->msgarray_op); … … 385 385 sm_p->object_ref.handle, 386 386 sm_p->parent_ref.handle, 387 attr->u.dir.dir ent_handle[0],387 attr->u.dir.dirdata_handles[0], 388 388 sm_p->parent_ref.fs_id, 389 389 sm_p->hints); -
branches/Orange-Elaine-Distr-Dir-Branch/src/client/sysint/sys-rename.sm
r8418 r8480 414 414 /* TODO: Need to find the correct dirent_handle */ 415 415 sm_p->u.rename.dirent_handle[index] = 416 resp_p->u.lookup_path.attr_array[0].u.dir.dir ent_handle[0];416 resp_p->u.lookup_path.attr_array[0].u.dir.dirdata_handles[0]; 417 417 418 418 if (index == 0) -
branches/Orange-Elaine-Distr-Dir-Branch/src/client/sysint/sys-symlink.sm
r8418 r8480 432 432 sm_p->u.sym.symlink_handle, 433 433 sm_p->object_ref.handle, 434 sm_p->getattr.attr.u.dir.dir ent_handle[0],434 sm_p->getattr.attr.u.dir.dirdata_handles[0], 435 435 sm_p->object_ref.fs_id, 436 436 sm_p->hints); -
branches/Orange-Elaine-Distr-Dir-Branch/src/common/misc/dist-dir-utils.c
r8464 r8480 268 268 } 269 269 270 271 272 /* set server_no field and update branch_level if necessary */ 273 int PINT_dist_dir_set_serverno(const int server_no, 274 PVFS_dist_dir_attr *ddattr, 275 PVFS_dist_dir_bitmap ddbitmap) 276 { 277 assert(ddattr != NULL && 278 ddbitmap != NULL && 279 server_no >= -1 && 280 server_no < ddattr->num_servers); 281 282 ddattr->server_no = server_no; 283 284 ddattr->branch_level = dist_dir_calc_branch_level(ddattr, ddbitmap); 285 286 return 0; 287 } 288 270 289 /* 271 290 * Local variables: -
branches/Orange-Elaine-Distr-Dir-Branch/src/common/misc/dist-dir-utils.h
r8461 r8480 38 38 #define PVFS_DIST_DIR_MAX_ENTRIES 16000 39 39 40 /* set a fixed value for testing */41 #define PVFS_DIST_DIR_DEFAULT_TOTAL_DIRDATA_NUM 442 #define PVFS_DIST_DIR_DEFAULT_INITIAL_DIRDATA_NUM 443 44 45 static double my_log2(const double n);46 static int dist_dir_calc_branch_level(47 const PVFS_dist_dir_attr *dist_dir_attr,48 const PVFS_dist_dir_bitmap bitmap);49 40 int PINT_init_dist_dir_state( 50 41 PVFS_dist_dir_attr *dist_dir_attr, … … 66 57 const PVFS_dist_dir_bitmap from_dir_bitmap); 67 58 PVFS_dist_dir_hash_type PINT_encrypt_dirdata(const char *const name); 59 int PINT_dist_dir_set_serverno(const int server_no, 60 PVFS_dist_dir_attr *ddattr, 61 PVFS_dist_dir_bitmap ddbitmap); 68 62 69 63 #define PINT_dist_dir_attr_copyto(to_attr, from_attr) \ 64 do { \ 65 to_attr.tree_height = from_attr.tree_height; \ 66 to_attr.num_servers = from_attr.num_servers; \ 67 to_attr.bitmap_size = from_attr.bitmap_size; \ 68 to_attr.split_size = from_attr.split_size; \ 69 to_attr.server_no = from_attr.server_no; \ 70 to_attr.branch_level = from_attr.branch_level; \ 71 } while(0) 72 70 73 71 74 -
branches/Orange-Elaine-Distr-Dir-Branch/src/common/misc/pint-util.c
r8478 r8480 26 26 #include <src/common/misc/pvfs2-internal.h> /* lld(), llu() */ 27 27 #include "pvfs2-req-proto.h" 28 #include "dist-dir-utils.h" 28 29 29 30 void PINT_time_mark(PINT_time_marker *out_marker) … … 129 130 if (src->mask & PVFS_ATTR_DIR_DIRENT_FILES) 130 131 { 132 PINT_dist_dir_attr_copyto(dest->u.dir.dist_dir_attr, src->u.dir.dist_dir_attr); 133 dest->u.dir.dist_dir_bitmap = src->u.dir.dist_dir_bitmap; 134 dest->u.dir.dirdata_handles = src->u.dir.dirdata_handles; 135 136 /* 131 137 dest->u.dir.dirent_file_count = src->u.dir.dirent_file_count; 132 138 dest->u.dir.dirent_handle = src->u.dir.dirent_handle; 139 */ 133 140 /* 134 141 PVFS_size dirent_file_array_size = src->u.dir.dirent_file_count * … … 385 392 if (attr->mask & PVFS_ATTR_DIR_DIRENT_FILES) 386 393 { 387 if (attr->u.dir.dirent_handle) 388 { 389 free(attr->u.dir.dirent_handle); 390 attr->u.dir.dirent_handle = NULL; 394 if (attr->u.dir.dist_dir_bitmap) 395 { 396 free(attr->u.dir.dist_dir_bitmap); 397 attr->u.dir.dist_dir_bitmap = NULL; 398 } 399 if (attr->u.dir.dirdata_handles) 400 { 401 free(attr->u.dir.dirdata_handles); 402 attr->u.dir.dirdata_handles = NULL; 391 403 } 392 404 } -
branches/Orange-Elaine-Distr-Dir-Branch/src/proto/pvfs2-attr.h
r8418 r8480 185 185 { 186 186 /* list of files to hold directory entries */ 187 PVFS_handle *dirent_handle; 188 uint32_t dirent_file_count; 187 /* 188 PVFS_handle *dirent_handle; 189 uint32_t dirent_file_count; 190 */ 189 191 PVFS_size dirent_count; 190 192 PVFS_directory_hint hint; 193 194 /* distributed directory parameters */ 195 PVFS_dist_dir_attr dist_dir_attr; 196 PVFS_dist_dir_bitmap dist_dir_bitmap; 197 PVFS_handle *dirdata_handles; 191 198 }; 192 199 typedef struct PVFS_directory_attr_s PVFS_directory_attr; … … 194 201 #ifdef __PINT_REQPROTO_ENCODE_FUNCS_C 195 202 #define encode_PVFS_directory_attr(pptr, x) do { \ 196 int dirent_files_i;\ 197 encode_uint32_t(pptr, &(x)->dirent_file_count);\ 198 for (dirent_files_i=0; dirent_files_i<(x)->dirent_file_count; dirent_files_i++)\ 199 encode_PVFS_handle(pptr, &(x)->dirent_handle[dirent_files_i]);\ 200 encode_skip4(pptr,);\ 203 int index_i;\ 201 204 encode_PVFS_size(pptr, &(x)->dirent_count);\ 202 205 encode_PVFS_directory_hint(pptr, &(x)->hint);\ 206 encode_PVFS_dist_dir_attr(pptr, &(x)->dist_dir_attr);\ 207 for (index_i=0; index_i<(x)->dist_dir_attr.bitmap_size; index_i++)\ 208 encode_PVFS_dist_dir_bitmap_basetype(pptr, &(x)->dist_dir_bitmap[index_i]);\ 209 encode_skip4(pptr,);\ 210 for (index_i=0; index_i<(x)->dist_dir_attr.num_servers; index_i++)\ 211 encode_PVFS_handle(pptr, &(x)->dirdata_handles[index_i]);\ 203 212 } while(0) 204 213 … … 211 220 212 221 #define decode_PVFS_directory_attr(pptr, x) do { \ 213 int dirent_files_i;\ 214 decode_uint32_t(pptr, &(x)->dirent_file_count);\ 215 (x)->dirent_handle = decode_malloc((x)->dirent_file_count \ 216 * sizeof(*(x)->dirent_handle));\ 217 for (dirent_files_i=0; dirent_files_i<(x)->dirent_file_count; dirent_files_i++)\ 218 { \ 219 decode_PVFS_handle(pptr, &(x)->dirent_handle[dirent_files_i]);\ 220 } \ 221 decode_skip4(pptr,);\ 222 int index_i;\ 222 223 decode_PVFS_size(pptr, &(x)->dirent_count);\ 223 224 decode_PVFS_directory_hint(pptr, &(x)->hint);\ 225 decode_PVFS_dist_dir_attr(pptr, &(x)->dist_dir_attr);\ 226 (x)->dist_dir_bitmap = decode_malloc((x)->dist_dir_attr.bitmap_size * \ 227 sizeof(PVFS_dist_dir_bitmap_basetype));\ 228 for(index_i=0; index_i<(x)->dist_dir_attr.bitmap_size; index_i++)\ 229 decode_PVFS_dist_dir_bitmap_basetype(pptr, &(x)->dist_dir_bitmap[index_i]);\ 230 decode_skip4(pptr,);\ 231 (x)->dirdata_handles = decode_malloc((x)->dist_dir_attr.num_servers * \ 232 sizeof(*(x)->dirdata_handles));\ 233 for(index_i=0; index_i<(x)->dist_dir_attr.num_servers; index_i++)\ 234 decode_PVFS_handle(pptr, &(x)->dirdata_handles[index_i]);\ 224 235 } while(0) 225 236 #endif -
branches/Orange-Elaine-Distr-Dir-Branch/src/proto/pvfs2-req-proto.h
r8478 r8480 749 749 */ 750 750 PVFS_handle_extent_array handle_extent_array; 751 752 /* NOTE: not using these now, may add these fields upon discussion */ 753 /* distributed directory request parameters */ 754 /* 755 uint32_t num_total_dirdata_servers; 756 uint32_t num_initial_dirdata_servers; 757 */ 758 759 /* assume all num_dirent_files are active */ 751 760 int32_t num_dirent_files_req; 752 761 /* NOTE: leave layout as final field so that we can deal with encoding -
branches/Orange-Elaine-Distr-Dir-Branch/src/server/get-attr.sm
r8478 r8480 65 65 STATE_SYMLINK => read_symlink_target; 66 66 STATE_METAFILE => read_metafile_hint; 67 STATE_DIR => get_ num_dirdata_handles;67 STATE_DIR => get_dist_dir_attr; 68 68 default => setup_resp; 69 69 } … … 155 155 } 156 156 157 state get_num_dirdata_handles 158 { 159 run getattr_get_num_dirdata_handles; 160 default => get_dirdata_handles; 161 /* 162 success => get_dirdata_handles; 163 default => setup_resp; 164 */ 165 } 166 167 state get_dirdata_handles 168 { 169 run getattr_get_dirdata_handles; 157 state get_dist_dir_attr 158 { 159 run getattr_get_dist_dir_attr; 160 default => get_bitmap_and_dirdata_handles; 161 } 162 163 state get_bitmap_and_dirdata_handles 164 { 165 run getattr_get_bitmap_and_dirdata_handles; 170 166 success => get_dirent_count; 171 167 default => setup_resp; … … 1414 1410 uint32_t dirent_file_count_i; 1415 1411 1412 /* !!! may change later */ 1416 1413 gossip_debug(GOSSIP_GETATTR_DEBUG, " server returning " 1417 1414 "dirent_count = %llu " 1418 "dir ent_file_count = %d "1415 "dirdata_servers_count = %d " 1419 1416 "dfile_count = %d " 1420 1417 "dist_name_len = %d " 1421 1418 "dist_params_len = %d\n", 1422 1419 llu(resp_attr->u.dir.dirent_count), 1423 resp_attr->u.dir.di rent_file_count,1420 resp_attr->u.dir.dist_dir_attr.num_servers, 1424 1421 resp_attr->u.dir.hint.dfile_count, 1425 1422 resp_attr->u.dir.hint.dist_name_len, 1426 1423 resp_attr->u.dir.hint.dist_params_len); 1424 /* !!! gossip bitmap */ 1427 1425 for (dirent_file_count_i = 0; 1428 dirent_file_count_i < resp_attr->u.dir.di rent_file_count;1426 dirent_file_count_i < resp_attr->u.dir.dist_dir_attr.num_servers; 1429 1427 dirent_file_count_i++) { 1430 1428 gossip_debug(GOSSIP_GETATTR_DEBUG, 1431 " dir ent_handle[%d] = %lld\n",1429 " dirdata_handle[%d] = %lld\n", 1432 1430 dirent_file_count_i, 1433 lld(resp_attr->u.dir.dir ent_handle[dirent_file_count_i]));1431 lld(resp_attr->u.dir.dirdata_handles[dirent_file_count_i])); 1434 1432 } 1435 1433 … … 1483 1481 s_op->u.getattr.mirror_dfile_status_array = NULL; 1484 1482 } 1485 if (s_op->resp.u.getattr.attr.objtype == PVFS_TYPE_DIRECTORY && 1486 s_op->u.getattr.dirent_handle) 1487 { 1488 free(s_op->u.getattr.dirent_handle); 1489 s_op->u.getattr.dirent_handle = NULL; 1483 if (s_op->resp.u.getattr.attr.objtype == PVFS_TYPE_DIRECTORY) 1484 { 1485 if(s_op->resp.u.getattr.attr.u.dir.dist_dir_bitmap) 1486 { 1487 free(s_op->resp.u.getattr.attr.u.dir.dist_dir_bitmap); 1488 s_op->resp.u.getattr.attr.u.dir.dist_dir_bitmap = NULL; 1489 } 1490 if(s_op->resp.u.getattr.attr.u.dir.dirdata_handles) 1491 { 1492 free(s_op->resp.u.getattr.attr.u.dir.dirdata_handles); 1493 s_op->resp.u.getattr.attr.u.dir.dirdata_handles = NULL; 1494 } 1490 1495 } 1491 1496 if(s_op->free_val) … … 1564 1569 } 1565 1570 1566 static PINT_sm_action getattr_get_ num_dirdata_handles(1571 static PINT_sm_action getattr_get_dist_dir_attr( 1567 1572 struct PINT_smcb *smcb, job_status_s *js_p) 1568 1573 { … … 1571 1576 job_id_t tmp_id; 1572 1577 1573 s_op->key.buffer = Trove_Common_Keys[ NUM_DIR_ENT_KEYS].key;1574 s_op->key.buffer_sz = Trove_Common_Keys[ NUM_DIR_ENT_KEYS].size;1578 s_op->key.buffer = Trove_Common_Keys[DIST_DIR_ATTR_KEY].key; 1579 s_op->key.buffer_sz = Trove_Common_Keys[DIST_DIR_ATTR_KEY].size; 1575 1580 if(s_op->free_val) 1576 1581 { 1577 1582 free(s_op->val.buffer); 1578 1583 } 1579 s_op->u.getattr.num_dirent_handles = 0; 1580 s_op->val.buffer = &s_op->u.getattr.num_dirent_handles; 1581 s_op->val.buffer_sz = sizeof(int32_t); 1584 s_op->val.buffer = &s_op->resp.u.getattr.attr.u.dir.dist_dir_attr; 1585 s_op->val.buffer_sz = sizeof(PVFS_dist_dir_attr); 1582 1586 s_op->free_val = 0; 1583 1587 … … 1597 1601 } 1598 1602 1599 static PINT_sm_action getattr_get_ dirdata_handles(1603 static PINT_sm_action getattr_get_bitmap_and_dirdata_handles( 1600 1604 struct PINT_smcb *smcb, job_status_s *js_p) 1601 1605 { … … 1603 1607 int ret; 1604 1608 job_id_t tmp_id; 1605 1606 gossip_debug(GOSSIP_GETATTR_DEBUG, "getattr: num_dirent_handles: %d\n", 1607 s_op->u.getattr.num_dirent_handles); 1609 PVFS_object_attr *attr; 1610 int keyval_count; 1611 1612 attr = &s_op->resp.u.getattr.attr; 1613 1608 1614 if(js_p->error_code == -TROVE_ENOENT) 1609 1615 { 1610 gossip_debug(GOSSIP_GETATTR_DEBUG, "getattr: setting num_dirent_handles to 1\n"); 1611 s_op->u.getattr.num_dirent_handles = 1; 1612 } 1613 s_op->key.buffer = Trove_Common_Keys[DIR_ENT_KEY].key; 1614 s_op->key.buffer_sz = Trove_Common_Keys[DIR_ENT_KEY].size; 1615 if(s_op->free_val) 1616 { 1617 free(s_op->val.buffer); 1618 } 1619 s_op->u.getattr.dirent_handle = 1620 (PVFS_handle *) calloc(s_op->u.getattr.num_dirent_handles, 1621 sizeof(PVFS_handle)); 1622 if (! s_op->u.getattr.dirent_handle) { 1616 gossip_debug(GOSSIP_GETATTR_DEBUG, "getattr: no DIST_DIR_ATTR key present!!\n"); 1617 attr->u.dir.dist_dir_bitmap = NULL; 1618 attr->u.dir.dirdata_handles = NULL; 1619 return SM_ACTION_COMPLETE; 1620 } 1621 1622 assert(attr->u.dir.dist_dir_attr.num_servers > 0 && 1623 attr->u.dir.dist_dir_attr.bitmap_size > 0); 1624 1625 gossip_debug(GOSSIP_GETATTR_DEBUG, 1626 "getattr: get dist-dir-attr for dir meta handle %llu " 1627 "with tree_height=%d, num_servers=%d, bitmap_size=%d, " 1628 "split_size=%d, server_no=%d and branch_level=%d\n", 1629 llu(s_op->u.getattr.handle), 1630 attr->u.dir.dist_dir_attr.tree_height, 1631 attr->u.dir.dist_dir_attr.num_servers, 1632 attr->u.dir.dist_dir_attr.bitmap_size, 1633 attr->u.dir.dist_dir_attr.split_size, 1634 attr->u.dir.dist_dir_attr.server_no, 1635 attr->u.dir.dist_dir_attr.branch_level); 1636 1637 /* allocate space for bitmap and dirdata handles */ 1638 attr->u.dir.dist_dir_bitmap = 1639 malloc(attr->u.dir.dist_dir_attr.bitmap_size * 1640 sizeof(PVFS_dist_dir_bitmap_basetype)); 1641 attr->u.dir.dirdata_handles = 1642 malloc(attr->u.dir.dist_dir_attr.num_servers * 1643 sizeof(PVFS_handle)); 1644 if(!attr->u.dir.dist_dir_bitmap || 1645 !attr->u.dir.dirdata_handles) 1646 { 1623 1647 js_p->error_code = -PVFS_ENOMEM; 1624 1648 return SM_ACTION_COMPLETE; 1625 1649 } 1626 s_op->val.buffer = s_op->u.getattr.dirent_handle; 1627 s_op->val.buffer_sz = s_op->u.getattr.num_dirent_handles * sizeof(PVFS_handle); 1628 s_op->free_val = 0; 1650 1651 1652 /* total 2 keyvals, DIST_DIRDATA_BITMAP, DIST_DIRDATA_HANDLES */ 1653 keyval_count = 2; 1654 1655 s_op->key_a = malloc(sizeof(PVFS_ds_keyval) * keyval_count); 1656 if(!s_op->key_a) 1657 { 1658 js_p->error_code = -PVFS_ENOMEM; 1659 return SM_ACTION_COMPLETE; 1660 } 1661 1662 s_op->val_a = malloc(sizeof(PVFS_ds_keyval) * keyval_count); 1663 if(!s_op->val_a) 1664 { 1665 free(s_op->key_a); 1666 js_p->error_code = -PVFS_ENOMEM; 1667 return SM_ACTION_COMPLETE; 1668 } 1669 memset(s_op->val_a, 0, sizeof(PVFS_ds_keyval) * keyval_count); 1670 1671 s_op->key_a[0].buffer = Trove_Common_Keys[DIST_DIRDATA_BITMAP_KEY].key; 1672 s_op->key_a[0].buffer_sz = Trove_Common_Keys[DIST_DIRDATA_BITMAP_KEY].size; 1673 1674 s_op->val_a[0].buffer_sz = 1675 attr->u.dir.dist_dir_attr.bitmap_size * 1676 sizeof(PVFS_dist_dir_bitmap_basetype); 1677 s_op->val_a[0].buffer = attr->u.dir.dist_dir_bitmap; 1678 1679 s_op->key_a[1].buffer = Trove_Common_Keys[DIST_DIRDATA_HANDLES_KEY].key; 1680 s_op->key_a[1].buffer_sz = Trove_Common_Keys[DIST_DIRDATA_HANDLES_KEY].size; 1681 1682 s_op->val_a[1].buffer = attr->u.dir.dirdata_handles; 1683 s_op->val_a[1].buffer_sz = attr->u.dir.dist_dir_attr.num_servers * 1684 sizeof(PVFS_handle); 1629 1685 1630 1686 js_p->error_code = 0; 1631 ret = job_trove_keyval_read (1687 ret = job_trove_keyval_read_list( 1632 1688 s_op->u.getattr.fs_id, s_op->u.getattr.handle, 1633 &s_op->key, &s_op->val, 1689 s_op->key_a, s_op->val_a, 1690 s_op->u.getattr.err_array, 1691 keyval_count, 1634 1692 0, 1635 1693 NULL, … … 1649 1707 int ret; 1650 1708 job_id_t tmp_id; 1709 PVFS_object_attr *attr; 1651 1710 int i; 1652 1711 1712 if(js_p->error_code == -TROVE_ENOENT) 1713 { 1714 gossip_debug(GOSSIP_GETATTR_DEBUG, "getattr: no DIST_DIR_ATTR key present, not getting dirent_count! \n"); 1715 return SM_ACTION_COMPLETE; 1716 } 1717 1718 attr = &s_op->resp.u.getattr.attr; 1719 1720 /* should return DIRENT_FILES always, already in resp.u.getattr.attr.u.dir.dirdata_handles */ 1721 /* 1653 1722 if (s_op->u.getattr.attrmask & PVFS_ATTR_DIR_DIRENT_FILES) 1654 { 1655 /* Implementation of distributed directories will mean there 1656 may be multiple. */ 1657 s_op->resp.u.getattr.attr.u.dir.dirent_file_count = s_op->u.getattr.num_dirent_handles; 1658 s_op->resp.u.getattr.attr.u.dir.dirent_handle = 1659 (PVFS_handle *) calloc(s_op->resp.u.getattr.attr.u.dir.dirent_file_count, 1660 sizeof(PVFS_handle)); 1661 if (! s_op->resp.u.getattr.attr.u.dir.dirent_handle) { 1662 js_p->error_code = -PVFS_ENOMEM; 1663 return SM_ACTION_COMPLETE; 1664 } 1665 memcpy(s_op->resp.u.getattr.attr.u.dir.dirent_handle, 1666 s_op->u.getattr.dirent_handle, 1667 s_op->resp.u.getattr.attr.u.dir.dirent_file_count * sizeof(PVFS_handle)); 1668 gossip_debug(GOSSIP_GETATTR_DEBUG, "getattr: num_dirent_handles: %d\n", 1669 s_op->resp.u.getattr.attr.u.dir.dirent_file_count); 1670 for (i = 0; i < s_op->resp.u.getattr.attr.u.dir.dirent_file_count; i++) 1671 { 1672 gossip_debug(GOSSIP_GETATTR_DEBUG, "getattr: dirent_handle[%d]: %llu\n", 1673 i, llu(s_op->resp.u.getattr.attr.u.dir.dirent_handle[i])); 1674 } 1675 } 1676 else 1677 { 1678 s_op->resp.u.getattr.attr.u.dir.dirent_file_count = 0; 1679 } 1723 */ 1724 1725 /* !!! gossip bitmap */ 1726 1727 gossip_debug(GOSSIP_GETATTR_DEBUG, 1728 "\t getattr: dirdata handles array of directory %llu.\n", 1729 llu(s_op->u.getattr.handle)); 1730 1731 for(i=0; i < attr->u.dir.dist_dir_attr.num_servers; i++) 1732 { 1733 gossip_debug(GOSSIP_MKDIR_DEBUG, 1734 "\t\tdirdata server %d: %llu.\n", 1735 i, llu(attr->u.dir.dirdata_handles[i])); 1736 } 1737 1680 1738 1681 1739 if (!(s_op->u.getattr.attrmask & PVFS_ATTR_DIR_DIRENT_COUNT)) … … 1687 1745 return SM_ACTION_COMPLETE; 1688 1746 } 1747 1689 1748 /* TODO: Have to gather counts from all dirent handles. */ 1749 /* only get dirent of local dirdata servers, later, should let TYPE_DIRDATA do these */ 1690 1750 ret = job_trove_keyval_get_handle_info( 1691 1751 s_op->u.getattr.fs_id, 1692 s_op->u.getattr.dirent_handle[0],1752 attr->u.dir.dirdata_handles[0], 1693 1753 TROVE_KEYVAL_HANDLE_COUNT | 1694 1754 0, -
branches/Orange-Elaine-Distr-Dir-Branch/src/server/mkdir.sm
r8478 r8480 17 17 #include "pint-cached-config.h" 18 18 #include "pvfs2-dist-basic.h" 19 #include "dist-dir-utils.h" 19 20 20 21 %% … … 32 33 { 33 34 run mkdir_setattrib; 34 success => create_di rdata_dspace;35 success => create_dist_dir_struct; 35 36 default => err_msg; 36 37 } 37 38 38 state create_dirdata_dspace 39 { 40 run mkdir_create_dirdata_dspace; 39 /* 1. now use err_msg as the error handling, will change if necessary */ 40 41 state create_dist_dir_struct 42 { 43 run mkdir_create_dist_dir_struct; 44 success => select_dirdata_servers; 45 default => err_msg; 46 } 47 48 state select_dirdata_servers 49 { 50 run mkdir_select_dirdata_servers; 41 51 success => create_local_dirdata_dspace; 42 52 default => err_msg; … … 45 55 state create_local_dirdata_dspace 46 56 { 57 run mkdir_create_local_dirdata_dspace; 58 success => request_remote_dirdata_dspace; 59 default => err_msg; 60 } 61 62 state request_remote_dirdata_dspace 63 { 47 64 run mkdir_request_remote_dirdata_dspace; 48 success => write_dirdata_handle;65 success => fill_handles_to_dist_dir_struct; 49 66 default => err_msg; 50 67 } 51 68 52 state write_dirdata_handle 53 { 54 run mkdir_write_dirdata_handles; 69 state fill_handles_to_dist_dir_struct 70 { 71 run mkdir_fill_handles_to_dist_dir_struct; 72 default => write_keyval_to_local_dirdata_handle; 73 } 74 75 state write_keyval_to_local_dirdata_handle 76 { 77 run mkdir_write_keyval_to_local_dirdata_handle; 78 /* uncomment when the msgpair is finished 79 success => remote_dirdata_keyval_setup_msgpair; 80 */ 81 success => write_keyval_to_meta_handle; 82 default => err_msg; 83 } 84 85 /* msgpairarray? may lookat sys-rename */ 86 /* comment now, add later */ 87 /*************** 88 state remote_dirdata_keyval_setup_msgpair 89 { 90 run mkdir_remote_dirdata_keyval_setup_msgpair; 91 success => remote_dirdata_keyval_xfer_msgpair; 92 default => err_msg; 93 } 94 95 state remote_dirdata_keyval_xfer_msgpair 96 { 97 jump pvfs2_msgpairarray_sm; 98 success => write_keyval_to_meta_handle; 99 default => err_msg; 100 } 101 ***************************/ 102 103 state write_keyval_to_meta_handle 104 { 105 run mkdir_write_keyval_to_meta_handle; 55 106 success => return; 56 107 default => err_msg; … … 180 231 } 181 232 182 static int mkdir_create_dirdata_dspace( 183 struct PINT_smcb *smcb, job_status_s *js_p) 184 { 185 struct PINT_server_op *s_op = PINT_sm_frame(smcb, PINT_FRAME_CURRENT); 233 234 /* init dist_dir_struct in s_op->attr.u.dir and s_op->u.mkdir */ 235 static PINT_sm_action mkdir_create_dist_dir_struct( 236 struct PINT_smcb *smcb, job_status_s *js_p) 237 { 238 struct PINT_server_op *s_op = PINT_sm_frame(smcb, PINT_FRAME_CURRENT); 239 PVFS_object_attr *attr; 240 int num_total_dirdata_servers, num_initial_dirdata_servers; 241 int ret = -1; 242 243 attr = (&s_op->attr); 244 245 /* get num_dirdata_servers */ 246 s_op->u.mkdir.num_dirdata_servers = 247 s_op->req->u.mkdir.num_dirent_files_req; 248 249 /* make all dirdata servers active */ 250 num_total_dirdata_servers = s_op->req->u.mkdir.num_dirent_files_req; 251 num_initial_dirdata_servers = s_op->req->u.mkdir.num_dirent_files_req; 252 253 /* init meta handle dist_dir_struct, server_no = -1 */ 254 ret = PINT_init_dist_dir_state(&attr->u.dir.dist_dir_attr, 255 &attr->u.dir.dist_dir_bitmap, 256 num_total_dirdata_servers, 257 -1, 258 num_initial_dirdata_servers); 259 260 assert(ret == 0); 261 262 gossip_debug(GOSSIP_MKDIR_DEBUG, 263 "mkdir: Init dist-dir-attr for dir meta handle %llu " 264 "with tree_height=%d, num_servers=%d, bitmap_size=%d, " 265 "split_size=%d, server_no=%d and branch_level=%d\n", 266 llu(s_op->resp.u.mkdir.handle), 267 attr->u.dir.dist_dir_attr.tree_height, 268 attr->u.dir.dist_dir_attr.num_servers, 269 attr->u.dir.dist_dir_attr.bitmap_size, 270 attr->u.dir.dist_dir_attr.split_size, 271 attr->u.dir.dist_dir_attr.server_no, 272 attr->u.dir.dist_dir_attr.branch_level); 273 274 /* !!! gossip bitmap */ 275 276 /* allocate dirdata handle space, similar to create.sm */ 277 attr->u.dir.dirdata_handles = malloc( 278 sizeof(*attr->u.dir.dirdata_handles) * 279 num_total_dirdata_servers); 280 s_op->u.mkdir.handle_array_local = malloc( 281 sizeof(*s_op->u.mkdir.handle_array_local) * 282 num_total_dirdata_servers); 283 s_op->u.mkdir.handle_array_remote = malloc( 284 sizeof(*s_op->u.mkdir.handle_array_remote) * 285 num_total_dirdata_servers); 286 287 if(!attr->u.dir.dirdata_handles || 288 !s_op->u.mkdir.handle_array_local || 289 !s_op->u.mkdir.handle_array_remote ) 290 { 291 js_p->error_code = -PVFS_ENOMEM; 292 return SM_ACTION_COMPLETE; 293 } 294 295 return ret; 296 } 297 298 299 static PINT_sm_action mkdir_select_dirdata_servers( 300 struct PINT_smcb *smcb, job_status_s *js_p) 301 { 302 /* 303 struct PINT_server_op *s_op = PINT_sm_frame(smcb, PINT_FRAME_CURRENT); 304 PVFS_object_attr *attr; 305 */ 306 int ret = 0; 307 308 /* not selecting servers now, suppose has dirdata on every metadata server */ 309 310 /******** if use the function in create.sm to get server list: 311 * 312 int PINT_cached_config_get_server_list( 313 PVFS_fs_id fs_id, 314 PINT_dist *dist, 315 int num_dfiles_req, 316 PVFS_sys_layout *layout, 317 const char ***server_names, 318 int *server_count) 319 320 1. need to provide dist & layout 321 2. server_count might be different from num_dfiles_req, then better put create dist-dir-struct after the servers selection function. 322 323 ****************/ 324 325 326 return ret; 327 328 } 329 330 331 332 static PINT_sm_action mkdir_create_local_dirdata_dspace( 333 struct PINT_smcb *smcb, job_status_s *js_p) 334 { 335 struct PINT_server_op *s_op = PINT_sm_frame(smcb, PINT_FRAME_CURRENT); 336 PVFS_object_attr *attr; 186 337 int ret = -PVFS_ENOMEM; 187 338 job_id_t tmp_id; 188 339 PVFS_handle_extent_array extent_array; 189 struct server_configuration_s *user_opts = get_server_config_struct(); 190 191 gossip_debug(GOSSIP_MKDIR_DEBUG, " creating dspace on coll_id %d\n", 192 s_op->u.mkdir.fs_id); 193 194 /* TODO: Determine how many dspace handles to create. For now just 195 default to all metadata servers. Eventually this should work 196 similar to specifying the number of datafiles for a file. 197 (See function create_parent_getattr_inspect of sys-create.sm.) */ 198 s_op->u.mkdir.dirent_handle = malloc( 199 sizeof(*s_op->u.mkdir.dirent_handle) * s_op->req->u.mkdir.num_dirent_files_req); 200 if(!s_op->u.mkdir.dirent_handle) 201 { 202 js_p->error_code = -PVFS_ENOMEM; 203 return SM_ACTION_COMPLETE; 204 } 205 ret = SM_ACTION_COMPLETE; 206 340 server_configuration_s *user_opts = get_server_config_struct(); 341 342 attr = (&s_op->attr); 343 344 assert(s_op->u.mkdir.num_dirdata_servers > 0); 345 346 /* dirdata on every meta server */ 207 347 s_op->u.mkdir.handle_array_local_count = 1; 208 s_op->u.mkdir.handle_array_remote_count = s_op->req->u.mkdir.num_dirent_files_req - 1; 209 210 gossip_debug(GOSSIP_MKDIR_DEBUG, "creating %d local dirent files\n", 348 s_op->u.mkdir.handle_array_remote_count = 349 s_op->u.mkdir.num_dirdata_servers - 1; 350 351 gossip_debug(GOSSIP_MKDIR_DEBUG, "creating %d local dirdata files\n", 211 352 s_op->u.mkdir.handle_array_local_count); 212 gossip_debug(GOSSIP_MKDIR_DEBUG, "creating %d remote dir ent files\n",353 gossip_debug(GOSSIP_MKDIR_DEBUG, "creating %d remote dirdata files\n", 213 354 s_op->u.mkdir.handle_array_remote_count); 214 355 215 /* find our meta handle range for this create */ 356 if(s_op->u.mkdir.handle_array_local_count == 0) 357 { 358 /* no local work to do */ 359 js_p->error_code = 0; 360 return(SM_ACTION_COMPLETE); 361 } 362 216 363 ret = PINT_config_get_meta_handle_extent_array( 217 364 user_opts, s_op->u.mkdir.fs_id, &extent_array); … … 224 371 llu(extent_array.extent_array[0].last)); 225 372 226 227 373 ret = job_trove_dspace_create_list( 228 374 s_op->req->u.mkdir.fs_id, 229 375 &extent_array, 230 s_op->u.mkdir. dirent_handle,376 s_op->u.mkdir.handle_array_local, 231 377 s_op->u.mkdir.handle_array_local_count, 232 PVFS_TYPE_DIRDATA, 378 PVFS_TYPE_DIRDATA, 233 379 NULL, 234 380 TROVE_SYNC, … … 237 383 js_p, 238 384 &tmp_id, 239 server_job_context, 385 server_job_context, 240 386 s_op->req->hints); 241 387 242 free(extent_array.extent_array); 243 js_p->error_code = 0; 244 return ret; 245 } 388 return(ret); 389 } 390 246 391 247 392 static PINT_sm_action mkdir_request_remote_dirdata_dspace( … … 249 394 { 250 395 struct PINT_server_op *s_op = PINT_sm_frame(smcb, PINT_FRAME_CURRENT); 251 int ret = - PVFS_EINVAL;252 job_id_t tmp_id;396 int ret = -1; 397 job_id_t j_id; 253 398 254 399 gossip_debug( 255 400 GOSSIP_MKDIR_DEBUG, " local dirdata handle (%llu)\n", 256 llu(s_op->u.mkdir. dirent_handle[0]));401 llu(s_op->u.mkdir.handle_array_local[0])); 257 402 258 403 if(s_op->u.mkdir.handle_array_remote_count == 0) 259 404 { 260 405 js_p->error_code = 0; 261 return SM_ACTION_COMPLETE;406 return(SM_ACTION_COMPLETE); 262 407 } 263 408 264 409 ret = job_precreate_pool_get_handles( 265 s_op-> u.mkdir.fs_id,410 s_op->req->u.mkdir.fs_id, 266 411 s_op->u.mkdir.handle_array_remote_count, 267 412 PVFS_TYPE_DIRDATA, 268 NULL, 269 &s_op->u.mkdir.dirent_handle[1],413 NULL, /* server string set to NULL for now */ 414 s_op->u.mkdir.handle_array_remote, 270 415 0, 271 416 smcb, 272 417 0, 273 418 js_p, 274 & tmp_id,419 &j_id, 275 420 server_job_context, 276 421 s_op->req->hints); 422 277 423 return ret; 278 } 279 280 static PINT_sm_action mkdir_write_dirdata_handles( 281 struct PINT_smcb *smcb, job_status_s *js_p) 282 { 283 struct PINT_server_op *s_op = PINT_sm_frame(smcb, PINT_FRAME_CURRENT); 284 int ret = -PVFS_EINVAL; 285 job_id_t i; 286 287 gossip_debug( 288 GOSSIP_MKDIR_DEBUG, " mkdir_write_dirdata_handles: error_code = %d\n", 289 js_p->error_code); 290 291 if (js_p->error_code) 292 { 293 return SM_ACTION_COMPLETE; 294 } 295 296 int32_t keyval_count = 2; 424 425 } 426 427 428 static PINT_sm_action mkdir_fill_handles_to_dist_dir_struct( 429 struct PINT_smcb *smcb, job_status_s *js_p) 430 { 431 struct PINT_server_op *s_op = PINT_sm_frame(smcb, PINT_FRAME_CURRENT); 432 PVFS_object_attr *attr; 433 int i; 434 435 attr = &s_op->attr; 436 437 /* fill dirdata_handles array */ 438 attr->u.dir.dirdata_handles[0] = 439 s_op->u.mkdir.handle_array_local[0]; 440 441 for(i = 0; i < s_op->u.mkdir.num_dirdata_servers - 1; i++) 442 { 443 attr->u.dir.dirdata_handles[i+1] = 444 s_op->u.mkdir.handle_array_remote[i]; 445 } 446 447 gossip_debug(GOSSIP_MKDIR_DEBUG, 448 "\t mkdir: dirdata handles array of directory %llu.\n", 449 llu(s_op->resp.u.mkdir.handle)); 450 451 for(i=0; i<s_op->u.mkdir.num_dirdata_servers; i++) 452 { 453 gossip_debug(GOSSIP_MKDIR_DEBUG, 454 "\t\tdirdata server %d: %llu.\n", 455 i, llu(attr->u.dir.dirdata_handles[i])); 456 } 457 458 return 0; 459 } 460 461 462 /* write dist-dir-struct key/val to local dirdata handle 463 * need to use a new attr struct and set the correct server_no 464 */ 465 static PINT_sm_action mkdir_write_keyval_to_local_dirdata_handle( 466 struct PINT_smcb *smcb, job_status_s *js_p) 467 { 468 struct PINT_server_op *s_op = PINT_sm_frame(smcb, PINT_FRAME_CURRENT); 469 PVFS_object_attr *attr; 470 int ret = -1; 471 job_id_t j_id; 472 /* total 3 keyvals, DIST_DIR_ATTR, DIST_DIRDATA_BITMAP, DIST_DIRDATA_HANDLES */ 473 int keyval_count = 3; 474 PVFS_dist_dir_attr tmp_ddattr; 475 476 /* !!!! this is to set dirdata handle keyval, 477 * the dist_dir_attr in s_op->attr is for the meta handle 478 * thus needs to create a dist_dir_attr and set server_no correctly!! 479 */ 480 481 attr = &s_op->attr; 482 PINT_dist_dir_attr_copyto(tmp_ddattr, attr->u.dir.dist_dir_attr); 297 483 298 484 s_op->key_a = malloc(sizeof(PVFS_ds_keyval) * keyval_count); … … 301 487 js_p->error_code = -PVFS_ENOMEM; 302 488 return SM_ACTION_COMPLETE; 303 } 304 489 } 490 305 491 s_op->val_a = malloc(sizeof(PVFS_ds_keyval) * keyval_count); 306 492 if(!s_op->val_a) 307 { 493 { 308 494 free(s_op->key_a); 309 495 js_p->error_code = -PVFS_ENOMEM; … … 311 497 } 312 498 memset(s_op->val_a, 0, sizeof(PVFS_ds_keyval) * keyval_count); 313 314 s_op->key_a[0].buffer = Trove_Common_Keys[NUM_DIR_ENT_KEYS].key; 315 s_op->key_a[0].buffer_sz = Trove_Common_Keys[NUM_DIR_ENT_KEYS].size; 316 317 s_op->val_a[0].buffer = &s_op->req->u.mkdir.num_dirent_files_req; 318 s_op->val_a[0].buffer_sz = sizeof(int32_t); 319 320 s_op->key_a[1].buffer = Trove_Common_Keys[DIR_ENT_KEY].key; 321 s_op->key_a[1].buffer_sz = Trove_Common_Keys[DIR_ENT_KEY].size; 322 323 s_op->val_a[1].buffer = s_op->u.mkdir.dirent_handle; 324 s_op->val_a[1].buffer_sz = sizeof(PVFS_handle) * s_op->req->u.mkdir.num_dirent_files_req; 325 326 gossip_debug( 327 GOSSIP_MKDIR_DEBUG, " num_dirent_files_req = %d\n", 328 s_op->req->u.mkdir.num_dirent_files_req); 329 for (i=0; i<s_op->req->u.mkdir.num_dirent_files_req; i++) 330 { 331 gossip_debug( 332 GOSSIP_MKDIR_DEBUG, " writing dirdata handle (%llu) " 333 "into parent dir (%llu)\n", llu(s_op->u.mkdir.dirent_handle[i]), 334 llu(s_op->resp.u.mkdir.handle)); 335 } 336 337 /* we don't sync here since we're going to anyway in the following 338 * operation (setting the dirent count). 499 500 s_op->key_a[0].buffer = Trove_Common_Keys[DIST_DIR_ATTR_KEY].key; 501 s_op->key_a[0].buffer_sz = Trove_Common_Keys[DIST_DIR_ATTR_KEY].size; 502 503 s_op->val_a[0].buffer = &tmp_ddattr; 504 s_op->val_a[0].buffer_sz = 505 sizeof(tmp_ddattr); 506 507 s_op->key_a[1].buffer = Trove_Common_Keys[DIST_DIRDATA_BITMAP_KEY].key; 508 s_op->key_a[1].buffer_sz = Trove_Common_Keys[DIST_DIRDATA_BITMAP_KEY].size; 509 510 s_op->val_a[1].buffer_sz = 511 attr->u.dir.dist_dir_attr.bitmap_size * 512 sizeof(PVFS_dist_dir_bitmap_basetype); 513 s_op->val_a[1].buffer = attr->u.dir.dist_dir_bitmap; 514 515 s_op->key_a[2].buffer = Trove_Common_Keys[DIST_DIRDATA_HANDLES_KEY].key; 516 s_op->key_a[2].buffer_sz = Trove_Common_Keys[DIST_DIRDATA_HANDLES_KEY].size; 517 518 s_op->val_a[2].buffer = attr->u.dir.dirdata_handles; 519 s_op->val_a[2].buffer_sz = attr->u.dir.dist_dir_attr.num_servers * 520 sizeof(*attr->u.dir.dirdata_handles); 521 522 /* local handle is the first handle, so has server_no=0 */ 523 PINT_dist_dir_set_serverno(0, &tmp_ddattr, attr->u.dir.dist_dir_bitmap); 524 525 gossip_debug(GOSSIP_MKDIR_DEBUG, 526 " mkdir: writing dist-dir-struct keyvals for local dirdata handle: %llu " 527 "(parent dir %llu),\n" 528 "\t with server_no=%d and branch_level=%d \n", 529 llu(attr->u.dir.dirdata_handles[0]), 530 llu(s_op->resp.u.mkdir.handle), 531 tmp_ddattr.server_no, 532 tmp_ddattr.branch_level); 533 534 535 ret = job_trove_keyval_write_list( 536 s_op->req->u.mkdir.fs_id, 537 attr->u.dir.dirdata_handles[0], /* dirdata handle */ 538 s_op->key_a, s_op->val_a, 539 keyval_count, TROVE_SYNC, NULL, smcb, 540 0, js_p, &j_id, server_job_context, 541 s_op->req->hints); 542 543 return ret; 544 } 545 546 547 548 /* sending keys to remote dirdata server is next task! */ 549 550 551 552 static PINT_sm_action mkdir_write_keyval_to_meta_handle( 553 struct PINT_smcb *smcb, job_status_s *js_p) 554 { 555 struct PINT_server_op *s_op = PINT_sm_frame(smcb, PINT_FRAME_CURRENT); 556 PVFS_object_attr *attr; 557 int ret = -1; 558 job_id_t j_id; 559 560 /* total 3 keyvals, PVFS_DIST_DIR_ATTR, PVFS_DIRDATA_BITMAP, PVFS_DIRDATA_HANDLES */ 561 int keyval_count = 3; 562 563 /* !!!! this is to set meta handle keyval, 564 * use dist_dir_attr in s_op->attr 339 565 */ 566 attr = &s_op->attr; 567 568 s_op->key_a = malloc(sizeof(PVFS_ds_keyval) * keyval_count); 569 if(!s_op->key_a) 570 { 571 js_p->error_code = -PVFS_ENOMEM; 572 return SM_ACTION_COMPLETE; 573 } 574 575 s_op->val_a = malloc(sizeof(PVFS_ds_keyval) * keyval_count); 576 if(!s_op->val_a) 577 { 578 free(s_op->key_a); 579 js_p->error_code = -PVFS_ENOMEM; 580 return SM_ACTION_COMPLETE; 581 } 582 memset(s_op->val_a, 0, sizeof(PVFS_ds_keyval) * keyval_count); 583 584 s_op->key_a[0].buffer = Trove_Common_Keys[DIST_DIR_ATTR_KEY].key; 585 s_op->key_a[0].buffer_sz = Trove_Common_Keys[DIST_DIR_ATTR_KEY].size; 586 587 s_op->val_a[0].buffer = &attr->u.dir.dist_dir_attr; 588 s_op->val_a[0].buffer_sz = 589 sizeof(attr->u.dir.dist_dir_attr); 590 591 s_op->key_a[1].buffer = Trove_Common_Keys[DIST_DIRDATA_BITMAP_KEY].key; 592 s_op->key_a[1].buffer_sz = Trove_Common_Keys[DIST_DIRDATA_BITMAP_KEY].size; 593 594 s_op->val_a[1].buffer_sz = 595 attr->u.dir.dist_dir_attr.bitmap_size * 596 sizeof(PVFS_dist_dir_bitmap_basetype); 597 s_op->val_a[1].buffer = attr->u.dir.dist_dir_bitmap; 598 599 s_op->key_a[2].buffer = Trove_Common_Keys[DIST_DIRDATA_HANDLES_KEY].key; 600 s_op->key_a[2].buffer_sz = Trove_Common_Keys[DIST_DIRDATA_HANDLES_KEY].size; 601 602 s_op->val_a[2].buffer = attr->u.dir.dirdata_handles; 603 s_op->val_a[2].buffer_sz = attr->u.dir.dist_dir_attr.num_servers * 604 sizeof(*attr->u.dir.dirdata_handles); 605 606 gossip_debug(GOSSIP_MKDIR_DEBUG, 607 " writing dist-dir-struct keyvals for meta handle: %llu " 608 "\t with server_no=%d and branch_level=%d \n", 609 llu(s_op->resp.u.mkdir.handle), 610 attr->u.dir.dist_dir_attr.server_no, 611 attr->u.dir.dist_dir_attr.branch_level); 612 613 340 614 ret = job_trove_keyval_write_list( 341 s_op->u.mkdir.fs_id,342 s_op->resp.u.mkdir.handle,343 s_op->key_a, s_op->val_a,344 keyval_count,345 TROVE_SYNC,346 NULL, smcb, 0, js_p, &i, server_job_context,s_op->req->hints);615 s_op->req->u.mkdir.fs_id, 616 s_op->resp.u.mkdir.handle, /* meta handle */ 617 s_op->key_a, s_op->val_a, 618 keyval_count, TROVE_SYNC, NULL, smcb, 619 0, js_p, &j_id, server_job_context, 620 s_op->req->hints); 347 621 348 622 return ret; 349 623 } 624 625 626 350 627 351 628 static int mkdir_error(struct PINT_smcb *smcb, job_status_s *js_p) … … 364 641 return 1; 365 642 } 643 366 644 367 645 /* … … 381 659 struct PINT_server_op *s_op = PINT_sm_frame(smcb, PINT_FRAME_CURRENT); 382 660 383 if (s_op->u.mkdir.dirent_handle)384 {385 free(s_op->u.mkdir.dirent_handle);386 }387 388 661 if(s_op->key_a) 389 662 { … … 394 667 { 395 668 free(s_op->val_a); 669 } 670 671 /* not sure s_op->attr should be released here */ 672 if(s_op->attr.u.dir.dist_dir_bitmap) 673 { 674 free(s_op->attr.u.dir.dist_dir_bitmap); 675 s_op->attr.u.dir.dist_dir_bitmap = NULL; 676 } 677 678 if(s_op->attr.u.dir.dirdata_handles) 679 { 680 free(s_op->attr.u.dir.dirdata_handles); 681 s_op->attr.u.dir.dirdata_handles = NULL; 682 } 683 684 if(s_op->u.mkdir.handle_array_local) 685 { 686 free(s_op->u.mkdir.handle_array_local); 687 } 688 689 if(s_op->u.mkdir.handle_array_remote) 690 { 691 free(s_op->u.mkdir.handle_array_remote); 396 692 } 397 693 -
branches/Orange-Elaine-Distr-Dir-Branch/src/server/pvfs2-server.c
r8478 r8480 135 135 {DIST_DIR_ATTR_KEYSTR, DIST_DIR_ATTR_KEYLEN}, 136 136 {DIST_DIRDATA_HANDLES_KEYSTR, DIST_DIRDATA_HANDLES_KEYLEN}, 137 {DIST_DIRDATA_BITMAP_KEYSTR, DIST_DIRDATA_BITMAP_KEYLEN}, 138 {NUM_DIRECTORY_ENTRY_KEYSTR, NUM_DIRECTORY_ENTRY_KEYLEN} 137 {DIST_DIRDATA_BITMAP_KEYSTR, DIST_DIRDATA_BITMAP_KEYLEN} 139 138 }; 140 139 -
branches/Orange-Elaine-Distr-Dir-Branch/src/server/pvfs2-server.h
r8478 r8480 172 172 NUM_DFILES_REQ_KEY = 6, 173 173 DIST_DIR_ATTR_KEY = 7, 174 DIST_DIRDATA_HANDLES = 8, 175 DIST_DIRDATA_BITMAP = 9, 176 NUM_DIR_ENT_KEYS =10 174 DIST_DIRDATA_HANDLES_KEY = 8, 175 DIST_DIRDATA_BITMAP_KEY = 9 177 176 }; 178 177 … … 531 530 PVFS_fs_id fs_id; 532 531 PVFS_handle_extent_array handle_extent_array; 533 PVFS_handle *dirent_handle; 534 // PVFS_handle *handle_array_local; 535 // PVFS_handle *handle_array_remote; 532 PVFS_size init_dirdata_size; 533 534 /* dist-dir-struct 535 * not in resp, only return meta handle 536 * should be in attr up-level, PINT_server_op*/ 537 538 /* inherit from create_op */ 539 /* not using these right now 540 const char **dirdata_servers; 541 const char **remote_dirdata_servers; 542 */ 543 int num_dirdata_servers; 544 PVFS_handle* handle_array_local; 545 PVFS_handle* handle_array_remote; 536 546 int handle_array_local_count; 537 547 int handle_array_remote_count; 538 // const char **meta_servers; 539 // const char **remote_meta_servers; 540 int num_meta_servers; 541 PVFS_size init_dirdata_size; 548 PVFS_error saved_error_code; 549 int handle_index; 550 542 551 }; 543 552 … … 550 559 PVFS_error* err_array; 551 560 PVFS_ds_keyval_handle_info keyval_handle_info; 561 /* store them in resp.u.getattr.attr.u.dir 552 562 int32_t num_dirent_handles; 553 563 PVFS_handle *dirent_handle; 564 */ 554 565 int num_dfiles_req; 555 566 PVFS_handle *mirror_dfile_status_array;
