Changeset 8648

Show
Ignore:
Timestamp:
12/06/10 16:26:00 (2 years ago)
Author:
shuangy
Message:

1. add >InitNumDirdataHandles?< field to fs_config and default value set to 2. 2. add command line options >-n, --init-num-dirdata< to pvfs2-mkdir to set initial number of dirdata handles for a directory. (not yet applied to kernel module.)

Location:
branches/Orange-Elaine-Distr-Dir-Branch/src
Files:
6 modified

Legend:

Unmodified
Added
Removed
  • branches/Orange-Elaine-Distr-Dir-Branch/src/apps/admin/pvfs2-genconfig

    r8521 r8648  
    214214    print $target "\tPrecreateBatchSize 0,32,512,32,32,32,0\n"; 
    215215    print $target "\tPrecreateLowThreshold 0,16,256,16,16,16,0\n"; 
     216    print $target "\tInitNumDirdataHandles 2\n"; 
    216217 
    217218    if(defined($default_storage)) 
  • branches/Orange-Elaine-Distr-Dir-Branch/src/apps/admin/pvfs2-mkdir.c

    r7471 r8648  
    3939    int     numdirs; /* number of directories to create */ 
    4040    int     mode;    /* mode of directories */ 
     41    int     init_num_dirdata; /* init num of dirdata handles */ 
    4142    int     verbose;  
    4243    int     make_parent_dirs; /* Create missing parents */ 
     
    4950static void enable_parents(struct options * opts); 
    5051static int read_mode(struct options * opts, const char * buffer); 
     52static int read_init_num_dirdata(struct options * opts, const char * buffer); 
    5153static int make_directory(PVFS_credentials     * credentials, 
    5254                          const PVFS_fs_id       fs_id, 
    5355                          const int              mode, 
     56                          const int              init_num_dirdata, 
    5457                          const char           * dir, 
    5558                          const char           * pvfs_path, 
     
    140143                             pfs_id[i], 
    141144                             user_opts.mode, 
     145                             user_opts.init_num_dirdata, 
    142146                             user_opts.dir_array[i], 
    143147                             pvfs_path[i], 
     
    185189                          const PVFS_fs_id       fs_id, 
    186190                          const int              mode, 
     191                          const int              init_num_dirdata, 
    187192                          const char           * dir, 
    188193                          const char           * pvfs_path, 
     
    230235    attr.perms = mode; 
    231236    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; 
    232242         
    233243    /* Clear out any info from previous calls */ 
     
    265275                             fs_id, 
    266276                             mode, 
     277                             init_num_dirdata, 
    267278                             dirname(realpath), 
    268279                             dirname(parent_dir), 
     
    299310    { 
    300311        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); 
    306318 
    307319        fprintf(stdout, "Directory Attributes\n"); 
     
    335347{ 
    336348    int i = 0, ret = 0,option_index = 0, mode_requested = 0; 
     349    int init_num_dirdata_requested = 0; 
    337350    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 */ 
    339352 
    340353    static struct option long_opts[] = 
     
    344357        {"verbose",0,0,0}, 
    345358        {"mode",1,0,0}, 
     359        {"init-num-dirdata",1,0,0}, 
    346360        {0,0,0,0} 
    347361    }; 
     
    383397                    mode_requested = 1; 
    384398                } 
     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                } 
    385410                else 
    386411                { 
     
    404429                } 
    405430                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; 
    406442                break; 
    407443 
     
    460496    } 
    461497     
     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 
    462509    /* Allocate memory to hold the filenames */ 
    463510    opts->dir_array = (char **)calloc(opts->numdirs, sizeof(char *)); 
     
    478525    { 
    479526        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); 
    483531        for(i=0; i<opts->numdirs; i++) 
    484532        { 
     
    494542    fprintf(stderr, "Create the DIRECTORY(ies), if they do not already exist.\n\n"); 
    495543 
    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"); 
    502551    return; 
    503552} 
     
    518567     
    519568    ret = sscanf(buffer, "%o", &opts->mode); 
     569     
     570    return(ret); 
     571} 
     572 
     573static 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); 
    520578     
    521579    return(ret); 
  • branches/Orange-Elaine-Distr-Dir-Branch/src/client/sysint/sys-mkdir.sm

    r8646 r8648  
    608608    PVFS_object_attr *attr = NULL; 
    609609    int i; 
    610     int ret = -PVFS_EINVAL; 
    611610 
    612611    gossip_debug(GOSSIP_CLIENT_DEBUG, "mkdir state: parent_getattr_inspect\n"); 
     
    637636    } 
    638637 
    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 use 
    641      * 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 0 
    653638    /* 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 
    658646 
    659647    /* note: if select less # of dirdata servers, need to modify getattr, etc. to contact only active servers, not all dirdata servers */ 
    660 #endif 
    661648 
    662649    return SM_ACTION_COMPLETE; 
  • branches/Orange-Elaine-Distr-Dir-Branch/src/common/misc/server-config.c

    r8544 r8648  
    111111static DOTCONF_CB(get_precreate_batch_size); 
    112112static DOTCONF_CB(get_precreate_low_threshold); 
     113static DOTCONF_CB(get_init_num_dirdata_handles); 
    113114static DOTCONF_CB(get_client_retry_limit); 
    114115static DOTCONF_CB(get_client_retry_delay); 
     
    690691         CTX_DEFAULTS|CTX_SERVER_OPTIONS, "0, 16, 256, 16, 16, 16, 0"}, 
    691692 
     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 
    692699    /* Specifies if file stuffing should be enabled or not.  Default is 
    693700     * enabled; this option is only provided for benchmarking purposes  
     
    16971704    return NULL; 
    16981705} 
     1706 
     1707DOTCONF_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 
    16991725 
    17001726DOTCONF_CB(get_server_job_flow_timeout) 
  • branches/Orange-Elaine-Distr-Dir-Branch/src/common/misc/server-config.h

    r8544 r8648  
    162162    uint32_t  *precreate_batch_size;    /* batch size for each ds type */ 
    163163    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 */ 
    164165    char *logfile;                  /* what log file to write to */ 
    165166    char *logtype;                  /* "file" or "syslog" destination */ 
  • branches/Orange-Elaine-Distr-Dir-Branch/src/server/mkdir.sm

    r8646 r8648  
    230230    PVFS_object_attr *attr; 
    231231    int num_total_dirdata_servers, num_initial_dirdata_servers; 
     232    server_configuration_s *user_opts = get_server_config_struct(); 
    232233    int ret = -1; 
    233234    unsigned char *c; 
     
    250251        num_total_dirdata_servers; 
    251252 
    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    } 
    254262 
    255263    /* will do the same check in PINT_init_dist_dir_state,