Changeset 8648
- Timestamp:
- 12/06/10 16:26:00 (2 years ago)
- Location:
- branches/Orange-Elaine-Distr-Dir-Branch/src
- Files:
-
- 6 modified
-
apps/admin/pvfs2-genconfig (modified) (1 diff)
-
apps/admin/pvfs2-mkdir.c (modified) (15 diffs)
-
client/sysint/sys-mkdir.sm (modified) (2 diffs)
-
common/misc/server-config.c (modified) (3 diffs)
-
common/misc/server-config.h (modified) (1 diff)
-
server/mkdir.sm (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/Orange-Elaine-Distr-Dir-Branch/src/apps/admin/pvfs2-genconfig
r8521 r8648 214 214 print $target "\tPrecreateBatchSize 0,32,512,32,32,32,0\n"; 215 215 print $target "\tPrecreateLowThreshold 0,16,256,16,16,16,0\n"; 216 print $target "\tInitNumDirdataHandles 2\n"; 216 217 217 218 if(defined($default_storage)) -
branches/Orange-Elaine-Distr-Dir-Branch/src/apps/admin/pvfs2-mkdir.c
r7471 r8648 39 39 int numdirs; /* number of directories to create */ 40 40 int mode; /* mode of directories */ 41 int init_num_dirdata; /* init num of dirdata handles */ 41 42 int verbose; 42 43 int make_parent_dirs; /* Create missing parents */ … … 49 50 static void enable_parents(struct options * opts); 50 51 static int read_mode(struct options * opts, const char * buffer); 52 static int read_init_num_dirdata(struct options * opts, const char * buffer); 51 53 static int make_directory(PVFS_credentials * credentials, 52 54 const PVFS_fs_id fs_id, 53 55 const int mode, 56 const int init_num_dirdata, 54 57 const char * dir, 55 58 const char * pvfs_path, … … 140 143 pfs_id[i], 141 144 user_opts.mode, 145 user_opts.init_num_dirdata, 142 146 user_opts.dir_array[i], 143 147 pvfs_path[i], … … 185 189 const PVFS_fs_id fs_id, 186 190 const int mode, 191 const int init_num_dirdata, 187 192 const char * dir, 188 193 const char * pvfs_path, … … 230 235 attr.perms = mode; 231 236 attr.mask = (PVFS_ATTR_SYS_ALL_SETABLE); 237 /* sys_attr.dirdata_count is meant to be the total number of dirdata handles. 238 * introduced for pvfs2_fs_dump & pvfs2_fsck. 239 * here it's used to pass the initial number of dirdata handles 240 */ 241 attr.dirdata_count = init_num_dirdata; 232 242 233 243 /* Clear out any info from previous calls */ … … 265 275 fs_id, 266 276 mode, 277 init_num_dirdata, 267 278 dirname(realpath), 268 279 dirname(parent_dir), … … 299 310 { 300 311 fprintf(stderr, "Creating Directory\n"); 301 fprintf(stderr, "\t basename_ptr = [%s]\n", basename_ptr); 302 fprintf(stderr, "\t fs_id = [%d]\n", fs_id); 303 fprintf(stderr, "\t Mode = [%o]\n", mode); 304 fprintf(stderr, "\t DirName = [%s]\n", dir); 305 fprintf(stderr, "\t pvfs path = [%s]\n", pvfs_path); 312 fprintf(stderr, "\t basename_ptr = [%s]\n", basename_ptr); 313 fprintf(stderr, "\t fs_id = [%d]\n", fs_id); 314 fprintf(stderr, "\t Mode = [%o]\n", mode); 315 fprintf(stderr, "\t InitNumDirdata = [%d]\n", init_num_dirdata); 316 fprintf(stderr, "\t DirName = [%s]\n", dir); 317 fprintf(stderr, "\t pvfs path = [%s]\n", pvfs_path); 306 318 307 319 fprintf(stdout, "Directory Attributes\n"); … … 335 347 { 336 348 int i = 0, ret = 0,option_index = 0, mode_requested = 0; 349 int init_num_dirdata_requested = 0; 337 350 const char * cur_option = NULL; 338 char flags[] = "hm: pvV"; /* Options available on command line */351 char flags[] = "hm:n:pvV"; /* Options available on command line */ 339 352 340 353 static struct option long_opts[] = … … 344 357 {"verbose",0,0,0}, 345 358 {"mode",1,0,0}, 359 {"init-num-dirdata",1,0,0}, 346 360 {0,0,0,0} 347 361 }; … … 383 397 mode_requested = 1; 384 398 } 399 else if(strcmp("init-num-dirdata", cur_option) == 0) 400 { 401 ret = read_init_num_dirdata(opts, optarg); 402 if(ret == 0) 403 { 404 fprintf(stderr, "Unable to read initial number of dirdata handles\n"); 405 usage(argc, argv); 406 return(-1); 407 } 408 init_num_dirdata_requested = 1; 409 } 385 410 else 386 411 { … … 404 429 } 405 430 mode_requested = 1; 431 break; 432 433 case 'n': /* --init-num-dirdata */ 434 ret = read_init_num_dirdata(opts, optarg); 435 if(ret == 0) 436 { 437 fprintf(stderr, "Unable to read initial number of dirdata handles\n"); 438 usage(argc, argv); 439 return(-1); 440 } 441 init_num_dirdata_requested = 1; 406 442 break; 407 443 … … 460 496 } 461 497 498 if(!init_num_dirdata_requested) 499 { 500 opts->init_num_dirdata = 0; 501 } 502 else if(opts->init_num_dirdata <=0 ) 503 { 504 fprintf(stderr, "init-num-dirdata has to be a positive integer!\n"); 505 usage(argc, argv); 506 return(-1); 507 } 508 462 509 /* Allocate memory to hold the filenames */ 463 510 opts->dir_array = (char **)calloc(opts->numdirs, sizeof(char *)); … … 478 525 { 479 526 fprintf(stdout, "Options Specified\n"); 480 fprintf(stdout, "\t Verbose [%d]\n", opts->verbose); 481 fprintf(stdout, "\t Mode [%o]\n", opts->mode); 482 fprintf(stdout, "\t Num Dirs [%d]\n", opts->numdirs); 527 fprintf(stdout, "\t Verbose [%d]\n", opts->verbose); 528 fprintf(stdout, "\t Mode [%o]\n", opts->mode); 529 fprintf(stdout, "\t Init Num Dirdata [%d]\n", opts->init_num_dirdata); 530 fprintf(stdout, "\t Num Dirs [%d]\n", opts->numdirs); 483 531 for(i=0; i<opts->numdirs; i++) 484 532 { … … 494 542 fprintf(stderr, "Create the DIRECTORY(ies), if they do not already exist.\n\n"); 495 543 496 fprintf(stderr," -m, --mode set permission mode (as in chmod), " 497 "not rwxrwxrwx - umask\n"); 498 fprintf(stderr," -p, --parents make parent directories as needed\n"); 499 fprintf(stderr," -V, --verbose turns on verbose messages\n"); 500 fprintf(stderr," -v, --version output version information and exit\n"); 501 fprintf(stderr," -h, --help print help\n"); 544 fprintf(stderr," -m, --mode set permission mode (as in chmod), " 545 "not rwxrwxrwx - umask\n"); 546 fprintf(stderr," -n, --init-num-dirdata set initial number of dirdata handles for the directory,\n"); 547 fprintf(stderr," -p, --parents make parent directories as needed\n"); 548 fprintf(stderr," -V, --verbose turns on verbose messages\n"); 549 fprintf(stderr," -v, --version output version information and exit\n"); 550 fprintf(stderr," -h, --help print help\n"); 502 551 return; 503 552 } … … 518 567 519 568 ret = sscanf(buffer, "%o", &opts->mode); 569 570 return(ret); 571 } 572 573 static int read_init_num_dirdata(struct options * opts, const char * buffer) 574 { 575 int ret = 0; 576 577 ret = sscanf(buffer, "%d", &opts->init_num_dirdata); 520 578 521 579 return(ret); -
branches/Orange-Elaine-Distr-Dir-Branch/src/client/sysint/sys-mkdir.sm
r8646 r8648 608 608 PVFS_object_attr *attr = NULL; 609 609 int i; 610 int ret = -PVFS_EINVAL;611 610 612 611 gossip_debug(GOSSIP_CLIENT_DEBUG, "mkdir state: parent_getattr_inspect\n"); … … 637 636 } 638 637 639 /* TODO: use settings from the config file, or from parent dir? */640 /* Determine the number of dirent files. For now just assume we will use641 * all the metadata servers.642 */643 ret = PINT_cached_config_get_num_meta(sm_p->object_ref.fs_id,644 &sm_p->u.mkdir.num_dirent_files);645 if(ret < 0)646 {647 gossip_err("Error: failed to get number of metadata servers\n");648 js_p->error_code = ret;649 return SM_ACTION_COMPLETE;650 }651 652 #if 0653 638 /* set value of num_dirent_files, 654 * max(max(parent_num, command_line) [client], config_file)[server] */ 655 sm_p->u.mkdir.num_dirent_files = attr->u.dir.dist_dir_attr.num_servers; 656 657 /* TODO: get command line value of NumDirdata */ 639 * not considering parent_# since it doesn't have direct relation. 640 * here, if user has inputs, send it, otherwise, send 0. 641 * on server side, if met 0, use config_file data, otherwise use user set value */ 642 643 /* get command line value of NumDirdata from sys_attr */ 644 sm_p->u.mkdir.num_dirent_files = sm_p->u.mkdir.sys_attr.dirdata_count; 645 658 646 659 647 /* note: if select less # of dirdata servers, need to modify getattr, etc. to contact only active servers, not all dirdata servers */ 660 #endif661 648 662 649 return SM_ACTION_COMPLETE; -
branches/Orange-Elaine-Distr-Dir-Branch/src/common/misc/server-config.c
r8544 r8648 111 111 static DOTCONF_CB(get_precreate_batch_size); 112 112 static DOTCONF_CB(get_precreate_low_threshold); 113 static DOTCONF_CB(get_init_num_dirdata_handles); 113 114 static DOTCONF_CB(get_client_retry_limit); 114 115 static DOTCONF_CB(get_client_retry_delay); … … 690 691 CTX_DEFAULTS|CTX_SERVER_OPTIONS, "0, 16, 256, 16, 16, 16, 0"}, 691 692 693 /* Initial number of dirdata handles when creating a new directory. 694 * TODO: determine the default value, use 2 as a start 695 */ 696 {"InitNumDirdataHandles",ARG_INT, get_init_num_dirdata_handles,NULL, 697 CTX_DEFAULTS|CTX_SERVER_OPTIONS, "2"}, 698 692 699 /* Specifies if file stuffing should be enabled or not. Default is 693 700 * enabled; this option is only provided for benchmarking purposes … … 1697 1704 return NULL; 1698 1705 } 1706 1707 DOTCONF_CB(get_init_num_dirdata_handles) 1708 { 1709 struct server_configuration_s *config_s = 1710 (struct server_configuration_s *)cmd->context; 1711 if(config_s->configuration_context == CTX_SERVER_OPTIONS && 1712 config_s->my_server_options == 0) 1713 { 1714 return NULL; 1715 } 1716 if(cmd->data.value <= 0) 1717 { 1718 return "InitNumDirdataHandles has to be a positive integer!\n"; 1719 } 1720 config_s->init_num_dirdata_handles = cmd->data.value; 1721 return NULL; 1722 } 1723 1724 1699 1725 1700 1726 DOTCONF_CB(get_server_job_flow_timeout) -
branches/Orange-Elaine-Distr-Dir-Branch/src/common/misc/server-config.h
r8544 r8648 162 162 uint32_t *precreate_batch_size; /* batch size for each ds type */ 163 163 uint32_t *precreate_low_threshold; /* threshold for each ds type */ 164 uint32_t init_num_dirdata_handles; /* initial number of dirdata handles when creating a new directory */ 164 165 char *logfile; /* what log file to write to */ 165 166 char *logtype; /* "file" or "syslog" destination */ -
branches/Orange-Elaine-Distr-Dir-Branch/src/server/mkdir.sm
r8646 r8648 230 230 PVFS_object_attr *attr; 231 231 int num_total_dirdata_servers, num_initial_dirdata_servers; 232 server_configuration_s *user_opts = get_server_config_struct(); 232 233 int ret = -1; 233 234 unsigned char *c; … … 250 251 num_total_dirdata_servers; 251 252 252 /* TODO: initial active # of dirdata servers = max(client_req, config_files) */ 253 num_initial_dirdata_servers = s_op->req->u.mkdir.num_dirent_files_req; 253 /* TODO: if received >0, use; else use config_file value,*/ 254 if(s_op->req->u.mkdir.num_dirent_files_req > 0) 255 { 256 num_initial_dirdata_servers = s_op->req->u.mkdir.num_dirent_files_req; 257 } 258 else 259 { 260 num_initial_dirdata_servers = user_opts->init_num_dirdata_handles; 261 } 254 262 255 263 /* will do the same check in PINT_init_dist_dir_state,
