private function getCoordinator() { $clientWikis = array('dewiki' => 'dewikidb', 'enwiki' => 'enwikidb', 'nlwiki' => 'nlwikidb', 'ruwiki' => 'ruwikidb', 'zhwiki' => 'zhwikidb'); $coordinator = new SqlChangeDispatchCoordinator(false, $clientWikis); $coordinator->setBatchSize(3); $coordinator->setRandomness(3); $coordinator->setLockGraceInterval(120); $coordinator->setDispatchInterval(60); $coordinator->setArrayRandOverride(function ($array) { $keys = array_keys($array); $last = end($keys); return $last; }); $coordinator->setTimeOverride(function () { return wfTimestamp(TS_UNIX, '20140303000000'); }); $coordinator->setIsClientLockUsedOverride(function ($wikiDB, $lockName) { return $wikiDB === 'zhwikidb'; }); $coordinator->setEngageClientLockOverride(function ($wikiDB) { return $wikiDB !== 'zhwikidb'; }); $coordinator->setReleaseClientLockOverride(function ($wikiDB) { return true; }); return $coordinator; }
private function getCoordinator() { $coordinator = new SqlChangeDispatchCoordinator(false, 'TestRepo'); $coordinator->setBatchSize(3); $coordinator->setRandomness(3); $coordinator->setLockGraceInterval(120); $coordinator->setDispatchInterval(60); $coordinator->setArrayRandOverride(function ($array) { $keys = array_keys($array); $last = end($keys); return $last; }); $coordinator->setTimeOverride(function () { return wfTimestamp(TS_UNIX, '20140303000000'); }); $coordinator->setIsClientLockUsedOverride(function ($db, $lockName) { return $lockName === 'Wikibase.TestRepo.dispatchChanges.zhwiki'; }); $coordinator->setEngageClientLockOverride(function ($db, $lockName) { return $lockName !== 'Wikibase.TestRepo.dispatchChanges.zhwiki'; }); $coordinator->setReleaseClientLockOverride(function ($db, $lockName) { return true; }); return $coordinator; }
/** * Initializes members from command line options and configuration settings. * * @param ChangeLookup $changeLookup * @param SettingsArray $settings * * @return ChangeDispatcher * @throws MWException */ private function newChangeDispatcher(ChangeLookup $changeLookup, SettingsArray $settings) { $repoDB = $settings->getSetting('changesDatabase'); $clientWikis = $settings->getSetting('localClientDatabases'); $batchChunkFactor = $settings->getSetting('dispatchBatchChunkFactor'); $batchCacheFactor = $settings->getSetting('dispatchBatchCacheFactor'); $subscriptionLookupMode = $settings->getSetting('subscriptionLookupMode'); $batchSize = (int) $this->getOption('batch-size', 1000); $maxChunks = (int) $this->getOption('max-chunks', 15); $dispatchInterval = (int) $this->getOption('dispatch-interval', 60); $lockGraceInterval = (int) $this->getOption('lock-grace-interval', 60); $randomness = (int) $this->getOption('randomness', 10); $this->verbose = $this->getOption('verbose', false); $cacheChunkSize = $batchSize * $batchChunkFactor; $cacheSize = $cacheChunkSize * $batchCacheFactor; $changesCache = new ChunkCache($changeLookup, $cacheChunkSize, $cacheSize); // make sure we have a mapping from siteId to database name in clientWikis: foreach ($clientWikis as $siteID => $dbName) { if (is_int($siteID)) { unset($clientWikis[$siteID]); $clientWikis[$dbName] = $dbName; } } if (empty($clientWikis)) { throw new MWException("No client wikis configured! Please set \$wgWBRepoSettings['localClientDatabases']."); } $reporter = new ObservableMessageReporter(); $self = $this; // PHP 5.3... $reporter->registerReporterCallback(function ($message) use($self) { $self->log($message); }); $coordinator = new SqlChangeDispatchCoordinator($repoDB, $clientWikis); $coordinator->setMessageReporter($reporter); $coordinator->setBatchSize($batchSize); $coordinator->setDispatchInterval($dispatchInterval); $coordinator->setLockGraceInterval($lockGraceInterval); $coordinator->setRandomness($randomness); $notificationSender = new JobQueueChangeNotificationSender($repoDB, $clientWikis); $subscriptionLookup = $this->getSubscriptionLookup($repoDB, $subscriptionLookupMode); $dispatcher = new ChangeDispatcher($coordinator, $notificationSender, $changesCache, $subscriptionLookup); $dispatcher->setMessageReporter($reporter); $dispatcher->setExceptionHandler(new ReportingExceptionHandler($reporter)); $dispatcher->setBatchSize($batchSize); $dispatcher->setMaxChunks($maxChunks); $dispatcher->setBatchChunkFactor($batchChunkFactor); $dispatcher->setVerbose($this->verbose); return $dispatcher; }
/** * Initializes members from command line options and configuration settings. * * @param string[] $clientWikis A mapping of client wiki site IDs to logical database names. * @param ChangeLookup $changeLookup * @param SettingsArray $settings * * @return ChangeDispatcher */ private function newChangeDispatcher(array $clientWikis, ChangeLookup $changeLookup, SettingsArray $settings) { $repoID = wfWikiID(); $repoDB = $settings->getSetting('changesDatabase'); $batchChunkFactor = $settings->getSetting('dispatchBatchChunkFactor'); $batchCacheFactor = $settings->getSetting('dispatchBatchCacheFactor'); $batchSize = (int) $this->getOption('batch-size', 1000); $maxChunks = (int) $this->getOption('max-chunks', 15); $dispatchInterval = (int) $this->getOption('dispatch-interval', 60); $lockGraceInterval = (int) $this->getOption('lock-grace-interval', 60); $randomness = (int) $this->getOption('randomness', 10); $this->verbose = $this->getOption('verbose', false); $cacheChunkSize = $batchSize * $batchChunkFactor; $cacheSize = $cacheChunkSize * $batchCacheFactor; $changesCache = new ChunkCache($changeLookup, $cacheChunkSize, $cacheSize); $reporter = new ObservableMessageReporter(); $self = $this; // PHP 5.3... $reporter->registerReporterCallback(function ($message) use($self) { $self->log($message); }); $coordinator = new SqlChangeDispatchCoordinator($repoDB, $repoID); $coordinator->setMessageReporter($reporter); $coordinator->setBatchSize($batchSize); $coordinator->setDispatchInterval($dispatchInterval); $coordinator->setLockGraceInterval($lockGraceInterval); $coordinator->setRandomness($randomness); $notificationSender = new JobQueueChangeNotificationSender($repoDB, $clientWikis); $subscriptionLookup = new SqlSubscriptionLookup(wfGetLB()); $dispatcher = new ChangeDispatcher($coordinator, $notificationSender, $changesCache, $subscriptionLookup); $dispatcher->setMessageReporter($reporter); $dispatcher->setExceptionHandler(new ReportingExceptionHandler($reporter)); $dispatcher->setBatchSize($batchSize); $dispatcher->setMaxChunks($maxChunks); $dispatcher->setBatchChunkFactor($batchChunkFactor); $dispatcher->setVerbose($this->verbose); return $dispatcher; }