%PDF- %PDF-
| Direktori : /www/varak.net/wiki.varak.net/extensions/CirrusSearch/includes/ |
| Current File : /www/varak.net/wiki.varak.net/extensions/CirrusSearch/includes/ClusterSettings.php |
<?php
namespace CirrusSearch;
/**
* Handles resolving configuration variables into specific settings
* for a specific cluster.
*/
class ClusterSettings {
/**
* @var SearchConfig
*/
protected $config;
/**
* @var string
*/
protected $cluster;
/**
* @param SearchConfig $config
* @param string $cluster
*/
public function __construct( SearchConfig $config, $cluster ) {
$this->config = $config;
$this->cluster = $cluster;
}
/**
* @param string $indexType
* @return integer Number of shards the index should have
*/
public function getShardCount( $indexType ) {
$settings = $this->config->get( 'CirrusSearchShardCount' );
if ( isset( $settings[$this->cluster][$indexType] ) ) {
return $settings[$this->cluster][$indexType];
} elseif ( isset( $settings[$indexType] ) ) {
return $settings[$indexType];
}
throw new \Exception( "Could not find a shard count for "
. "{$indexType}. Did you add an index to "
. "\$wgCirrusSearchNamespaceMappings but forget to "
. "add it to \$wgCirrusSearchShardCount?" );
}
/**
* @param string $indexType
* @return string Number of replicas Elasticsearch can expand or contract to
* in the format of '0-2' for the minimum and maximum number of replicas. May
* also be the string 'false' when replicas are disabled.
*/
public function getReplicaCount( $indexType ) {
$settings = $this->config->get( 'CirrusSearchReplicas' );
if ( !is_array( $settings ) ) {
return $settings;
} elseif ( isset( $settings[$this->cluster][$indexType] ) ) {
return $settings[$this->cluster][$indexType];
} elseif ( isset( $settings[$indexType] ) ) {
return $settings[$indexType];
}
throw new \Exception( "If \$wgCirrusSearchReplicas is " .
"an array it must contain all index types." );
}
/**
* @return int
*/
public function getDropDelayedJobsAfter() {
$timeout = $this->config->get( 'CirrusSearchDropDelayedJobsAfter' );
if ( is_int( $timeout ) ) {
return $timeout;
} elseif ( isset( $timeout[$this->cluster] ) ) {
return $timeout[$this->cluster];
}
throw new \Exception( "If \$wgCirrusSearchDropDelayedJobsAfter is " .
"an array it must contain all configured clusters." );
}
/**
* @return integer Connect timeout to use when initializing connection.
* Fallback to 0 (300 sec) if not specified in cirrus config.
*/
public function getConnectTimeout() {
$timeout = $this->config->get( 'CirrusSearchClientSideConnectTimeout' );
if ( is_int( $timeout ) ) {
return $timeout;
} elseif ( isset( $timeout[$this->cluster] ) ) {
return $timeout[$this->cluster];
}
// 0 means no timeout (defaults to 300 sec)
return 0;
}
}