String offsets in MariaDB are 1-based, except in "Oracle compatible" mode. SUBSTR(modtoken,0,13) was always the empty string and so the modtoken comparison was always true. I was able to reproduce a failure to reach consistency using ring replication. Add regression test. Bug: T315271 Change-Id: I74e54e8aba44505dd04426c12d91a9ea0de17f22
34 lines
841 B
PHP
34 lines
841 B
PHP
<?php
|
|
|
|
/**
|
|
* @group BagOStuff
|
|
* @group Database
|
|
* @covers SqlBagOStuff
|
|
*/
|
|
class SqlBagOStuffMultiPrimaryIntegrationTest extends BagOStuffTestBase {
|
|
protected function newCacheInstance() {
|
|
return ObjectCache::newFromParams( [
|
|
'class' => SqlBagOStuff::class,
|
|
'loggroup' => 'SQLBagOStuff',
|
|
'multiPrimaryMode' => true,
|
|
'purgePeriod' => 0,
|
|
'reportDupes' => false
|
|
] );
|
|
}
|
|
|
|
public function testModtoken() {
|
|
$now = self::TEST_TIME;
|
|
$this->cache->setMockTime( $now );
|
|
$this->cache->set( 'test', 'a' );
|
|
$this->assertSame( 'a', $this->cache->get( 'test' ) );
|
|
|
|
$now--;
|
|
// Modtoken comparison makes this a no-op
|
|
$this->cache->set( 'test', 'b' );
|
|
$this->assertSame( 'a', $this->cache->get( 'test' ) );
|
|
|
|
$now += 2;
|
|
$this->cache->set( 'test', 'c' );
|
|
$this->assertSame( 'c', $this->cache->get( 'test' ) );
|
|
}
|
|
}
|