示例#1
0
bool threadpool_spec::init(configuration_ptr& config, __out_param std::vector<threadpool_spec>& specs)
{
    /*
    [threadpool.default]
    worker_count = 4
    worker_priority = THREAD_xPRIORITY_NORMAL
    max_input_queue_length = 10000
    partitioned = false
    queue_aspects = xxx
    worker_aspects = xxx
    admission_controller_factory_name = xxx
    admission_controller_arguments = xxx

    [threadpool.THREAD_POOL_REPLICATION]
    name = Thr.replication
    run = true
    worker_count = 4
    worker_priority = THREAD_xPRIORITY_NORMAL
    max_input_queue_length = 10000
    partitioned = false
    queue_aspects = xxx
    worker_aspects = xxx
    admission_controller_factory_name = xxx
    admission_controller_arguments = xxx
    */

    threadpool_spec default_spec("placeholder");
    if (false == read_config(config, "threadpool.default", default_spec, nullptr))
        return false;
    
    specs.clear();
    for (int code = 0; code <= threadpool_code::max_value(); code++)
    {
        std::string section_name = std::string("threadpool.") + std::string(threadpool_code::to_string(code));
        threadpool_spec spec(default_spec);
        if (false == read_config(config, section_name.c_str(), spec, &default_spec))
            return false;

        spec.pool_code.reset(threadpool_code::from_string(threadpool_code::to_string(code), THREAD_POOL_INVALID));
        if ("" == spec.name) spec.name = std::string(threadpool_code::to_string(code));

        if (false == spec.worker_share_core && 0 == spec.worker_affinity_mask)
        {
            spec.worker_affinity_mask = (1 << std::thread::hardware_concurrency()) - 1;
        }
            
        specs.push_back(spec);
    }

    return true;
}
示例#2
0
void Parser::decl() {
    if (lookahead[2] == ':') {
        match("ID");
        match("INT");
        default_spec();
        return;
    }
    if (lookahead == "PRIMARY") {
        match("PRIMARY");
        match("KEY");
        match("(");
        column_list();
        match(")");
    }
}
示例#3
0
 Parser &decl(map<string, int> &defaults, vector<string> &keys) {
     if (lookahead == ID) {
         // decl -> id INT default_spec
         string name = id();
         match(INT);
         int num = default_spec(defaults);
         defaults[name] = num;
     } else if (lookahead == PRIMARY) {
         // decl -> PRIMARY KEY L_PAREN column_list R_PAREN
         match(PRIMARY); match(KEY); match(L_PAREN);
         column_list(keys);
         match(R_PAREN);
     } else {
         throw ParseError("Syntax error");
     }
 }