Example #1
0
 function testMultiExecContext_RetryOnServerAbort()
 {
     $client1 = RC::getConnection();
     $client2 = RC::getConnection(true);
     $client1->flushdb();
     $retry = 3;
     $attempts = 0;
     RC::testForAbortedMultiExecException($this, function () use($client1, $client2, $retry, &$attempts) {
         $options = array('watch' => 'sentinel', 'retry' => $retry);
         $client1->multiExec($options, function ($tx) use($client2, &$attempts) {
             $attempts++;
             $tx->set('sentinel', 'client1');
             $tx->get('sentinel');
             $client2->set('sentinel', 'client2');
         });
     });
     $this->assertEquals('client2', $client1->get('sentinel'));
     $this->assertEquals($retry + 1, $attempts);
     $retry = 3;
     $attempts = 0;
     RC::testForAbortedMultiExecException($this, function () use($client1, $client2, $retry, &$attempts) {
         $options = array('watch' => 'sentinel', 'cas' => true, 'retry' => $retry);
         $client1->multiExec($options, function ($tx) use($client2, &$attempts) {
             $attempts++;
             $tx->incr('attempts');
             $tx->multi();
             $tx->set('sentinel', 'client1');
             $tx->get('sentinel');
             $client2->set('sentinel', 'client2');
         });
     });
     $this->assertEquals('client2', $client1->get('sentinel'));
     $this->assertEquals($retry + 1, $attempts);
     $this->assertEquals($attempts, $client1->get('attempts'));
 }
Example #2
0
 function testMultiExecBlock_Watch()
 {
     $client1 = RC::getConnection();
     $client2 = RC::getConnection(true);
     $client1->flushdb();
     RC::testForAbortedMultiExecException($this, function () use($client1, $client2) {
         $client1->multiExec(array('watch' => 'sentinel'), function ($multi) use($client2) {
             $multi->set('sentinel', 'client1');
             $multi->get('sentinel');
             $client2->set('sentinel', 'client2');
         });
     });
     $this->assertEquals('client2', $client1->get('sentinel'));
 }