public function testDiscoveryWithBackoffWorksWithSentinelsTemporarilyUnreachable() { // disable sentinel on all nodes $this->disableSentinelAt('192.168.50.40'); $this->disableSentinelAt('192.168.50.41'); $this->disableSentinelAt('192.168.50.30'); // we need a factory to create the clients $clientFactory = new PredisClientCreator(); // we need an adapter for each sentinel client too! $clientAdapter = new PredisClientAdapter($clientFactory, Client::TYPE_SENTINEL); $sentinel1 = new Client('192.168.50.40', '26379', $clientAdapter); $clientAdapter = new PredisClientAdapter($clientFactory, Client::TYPE_SENTINEL); $sentinel2 = new Client('192.168.50.41', '26379', $clientAdapter); $clientAdapter = new PredisClientAdapter($clientFactory, Client::TYPE_SENTINEL); $sentinel3 = new Client('192.168.50.30', '26379', $clientAdapter); // now we can start discovering where the master is $masterDiscovery = new MasterDiscovery('integrationtests'); $masterDiscovery->addSentinel($sentinel1); $masterDiscovery->addSentinel($sentinel2); $masterDiscovery->addSentinel($sentinel3); // configure a backoff strategy $incrementalBackoff = new Incremental(500, 1.5); $incrementalBackoff->setMaxAttempts(10); $masterDiscovery->setBackoffStrategy($incrementalBackoff); $masterDiscovery->setBackoffObserver(array($this, 'enableAllSentinels')); // try to discover the master $master = $masterDiscovery->getMaster(); // after master discovery, at least one sentinel is connected $this->assertTrue((bool) ($sentinel1->isConnected() | $sentinel2->isConnected() | $sentinel3->isConnected()), 'At least one of the sentinels is back online'); // master discovery returned a client to the correct node $this->assertInstanceOf('\\PSRedis\\Client', $master, 'Master is returned after successful master discovery'); $this->assertAttributeEquals('192.168.50.40', 'ipAddress', $master, 'The master ip returned is correct'); $this->assertAttributeEquals('6379', 'port', $master, 'The master ip returned is correct'); }
public function testThatAnObserverIsCalledOnBackoff() { $this->observedBackoff = false; $backoffOnce = new Incremental(0, 1); $backoffOnce->setMaxAttempts(2); $sentinel1 = $this->mockOfflineSentinel(); $sentinel2 = $this->mockOnlineSentinelWithMasterSteppingDown(); $masterDiscovery = new MasterDiscovery('online-sentinel'); $masterDiscovery->setBackoffStrategy($backoffOnce); $masterDiscovery->addSentinel($sentinel1); $masterDiscovery->addSentinel($sentinel2); $masterDiscovery->setBackoffObserver(array($this, 'backoffObserver')); $masterDiscovery->getMaster(); $this->assertTrue($this->observedBackoff, 'When backing off an observer can be called'); }