Esempio n. 1
0
    die($dal->my_error());
}
$dal->my_query('select count(*) from schemata');
if ($dal->my_error()) {
    die("VERIFICATION FAILED: " . $dal->my_error());
}
echo "* Creating new mapper.\n";
switch ($config['mapper']) {
    case 'directory':
        $mapper = new DirectoryShardKeyMapper($config);
        break;
    case 'hash':
        $mapper = new HashShardKeyMapper($config);
        break;
    case 'none':
        $mapper = new NoneShardKeyMapper($config);
        break;
    default:
        throw new Exception('Unsupported mapper: ' . $config_database['mapper']);
        break;
}
if (empty($config['gearman'])) {
    /* 
    Add a Shard-Query managed gearmand
    */
    write_line("A gearman server was not seen in your config.  Enter a host to use: [127.0.0.1]");
    $gearman_host = read_line();
    if (!trim($gearman_host)) {
        $gearman_host = '127.0.0.1';
    }
    write_line("A gearman port was not seen in your config.  Enter a port number to use: [7001]");
Esempio n. 2
0
 function set_schema($schema_name = null, &$state = null, $config_file = 'shard-query-config.php')
 {
     if (!isset($state)) {
         $state = ShardQuery::new_state();
     }
     require $config_file;
     if (!$schema_name && isset($config_database['default_virtual_schema'])) {
         $schema_name = $config_database['default_virtual_schema'];
     }
     $state->schema_name = $schema_name;
     /* reset defaults */
     $state->verbose = false;
     $state->inlist_opt = false;
     $state->between_opt = false;
     $state->gearman_servers = array();
     $state->inlist_merge_threshold = 128;
     $state->inlist_merge_size = 128;
     $state->star_opt = false;
     $state->current_schema = $schema_name;
     $state->extra_tables = array();
     //any tables that get created along the way and need cleaning up at the end
     switch ($config_database['mapper_type']) {
         case SQ_DIRECTORY:
             $mapper = new DirectoryShardKeyMapper($config_database);
             break;
         case SQ_HASH:
             $mapper = new HashShardKeyMapper($config_database);
             break;
         case SQ_NONE:
             $mapper = new NoneShardKeyMapper($config_database);
             break;
         default:
             throw new Exception('Unsupported mapper: ' . $config_database['mapper']);
             break;
     }
     $params = $mapper->get_params($schema_name);
     $shards = $mapper->get_shards($schema_name);
     $state->shards = $shards;
     $state->mapper =& $mapper;
     if (!empty($params['shared_path'])) {
         $state->shared_path = $params['shared_path'];
     } else {
         $state->shared_path = "";
     }
     if (in_array('verbose', array_keys($params))) {
         $state->verbose = true;
     }
     if (!empty($params['inlist_merge_threshold'])) {
         $state->inlist_merge_threshold = $params['inlist_merge_threshold'];
     }
     if (!empty($params['inlist_merge_size'])) {
         $state->inlist_merge_size = $params['inlist_merge_size'];
     }
     if (!empty($params['ignore_virtual_schema'])) {
         if ($params['ignore_virtual_schema'] == 1 || $params['ignore_virtual_schema'] == 'true') {
             $state->ignore_virtual_schema = true;
         }
     }
     if (!empty($params['star_schema'])) {
         if ($params['star_schema'] == 1 || $params['star_schema'] == 'true') {
             $state->star_opt = 1;
         }
     }
     if (!empty($params['aws_access_key'])) {
         $state->aws_access_key = $params['aws_access_key'];
     }
     if (!empty($params['aws_secret_key'])) {
         $state->aws_secret_key = $params['aws_secret_key'];
     }
     $state->engine = 'InnoDB';
     if (!empty($params['coord_engine'])) {
         $state->engine = $params['coord_engine'];
     }
     $this->set_shard_mapper($column = $mapper->get_column($schema_name), array($mapper, 'map'));
     if (!$column) {
         $this->errors[] = "Could not find shard column or could not find schema definition";
         return false;
     }
     /* One shard acts as the coordination shard.  A table is created on this shard
        to coallesce the results from the other shards.  
        */
     $coords = $mapper->get_shards($schema_name, true);
     if (!empty($coords)) {
         $state->tmp_shard = $coords[array_rand($coords)];
     } else {
         $state->tmp_shard = $shards[array_rand($shards)];
     }
     if (!empty($params['inlist'])) {
         $state->inlist_opt = trim($params['inlist']);
         if ($state->inlist_opt == "-") {
             $state->inlist_opt = $column;
         }
     }
     if (!empty($params['between'])) {
         $state->between_opt = trim($params['between']);
         if ($state->inlist_opt == "-") {
             $state->inlist_opt = $column;
         }
     }
     $state->client = null;
     $servers = $mapper->get_gearman_servers($schema_name);
     $cnt = count($servers);
     for ($i = 0; $i < $cnt; ++$i) {
         $key = array_rand($servers);
         $server = $servers[$key];
         unset($servers[$key]);
         try {
             $state->client = new Net_Gearman_Client($server);
             break;
         } catch (Net_Gearman_Exception $e) {
             $state->client = null;
         }
     }
     if (!isset($state->client)) {
         $state->errors[] = "Could not connect to any of the specified gearman servers.";
         return false;
     }
     return $state;
 }