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')); }
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')); }