Beispiel #1
0
 public function testAdd()
 {
     $this->clear();
     //old (no newshard) configuration
     $cm = new Cm([['host' => '127.0.0.1', 'port' => 11211], ['host' => '127.0.0.1', 'port' => 11212]], true);
     $this->assertTrue($cm->add("b", "valueB"));
     $this->assertTrue($cm->add("c", "valueC"));
     $this->assertTrue($cm->add("d", "valueD"));
     //check first shard
     $this->assertEquals($this->getFromPort(11211, "b"), "valueB", "first shard B");
     $this->assertEquals($this->getFromPort(11211, "c"), null, "first shard C");
     $this->assertEquals($this->getFromPort(11211, "d"), "valueD", "first shard D");
     //check second shard
     $this->assertEquals($this->getFromPort(11212, "b"), null, "second shard b");
     $this->assertEquals($this->getFromPort(11212, "c"), "valueC", "second shard c");
     $this->assertEquals($this->getFromPort(11212, "d"), null, "second shard d");
     //configuration with newhost
     $cm = new Cm([['host' => '127.0.0.1', 'port' => 11211], ['host' => '127.0.0.1', 'port' => 11212], ['newhost' => '127.0.0.1', 'port' => 11221]], true);
     //old keys avalibaly
     $this->assertEquals($cm->get("b"), "valueB", "check b in new config");
     $this->assertEquals($cm->get("c"), "valueC", "check c in new config");
     $this->assertEquals($cm->get("d"), "valueD", "check d in new config");
     //reSet keys
     $cm->add("b", "valueB");
     $cm->add("c", "valueC");
     $cm->add("d", "valueD");
     //check keys for both configurations
     //check first shard
     $this->assertEquals($this->getFromPort(11211, "b"), "valueB", "new/first shard B");
     $this->assertEquals($this->getFromPort(11211, "c"), "valueC", "new/first shard C");
     $this->assertEquals($this->getFromPort(11211, "d"), "valueD", "new/first shard D");
     //check second shard
     $this->assertEquals($this->getFromPort(11212, "b"), null, "new/second shard B");
     $this->assertEquals($this->getFromPort(11212, "c"), "valueC", "new/second shard C");
     $this->assertEquals($this->getFromPort(11212, "d"), "valueD", "new/second shard D");
     //check new shard
     $this->assertEquals($this->getFromPort(11221, "b"), "valueB", "new/new shard B");
     $this->assertEquals($this->getFromPort(11221, "c"), null, "new/new shard C");
     $this->assertEquals($this->getFromPort(11221, "d"), null, "new/new shard D");
     $cm = new Cm([['host' => '127.0.0.1', 'port' => 11211], ['host' => '127.0.0.1', 'port' => 11212], ['host' => '127.0.0.1', 'port' => 11221]], true);
     //old keys avalibaly
     $this->assertEquals($cm->get("b"), "valueB", "check b in only new config");
     $this->assertEquals($cm->get("c"), "valueC", "check c in only new config");
     $this->assertEquals($cm->get("d"), "valueD", "check d in only new config");
 }
Beispiel #2
0
 public function testShardingByLatestByteAdd()
 {
     $shardA = ['host' => '127.0.0.1', 'port' => 11211];
     $shardB = ['host' => '127.0.0.1', 'port' => 11212];
     $scm = new Cm([$shardA, $shardB]);
     $scmA = new Cm([$shardA]);
     $scmB = new Cm([$shardB]);
     //cleanup
     $scm->remove("aa");
     $scm->remove("ab");
     $scmA->remove("aa");
     $scmA->remove("ab");
     $scmB->remove("aa");
     $scmB->remove("ab");
     $this->assertTrue($scm->add("aa", "valueA"), "st-1");
     $this->assertTrue($scm->add("ab", "valueB"), "st-2");
     $this->assertEquals($scm->get("aa"), "valueA", "st-3");
     $this->assertEquals($scm->get("ab"), "valueB", "st-4");
     $this->assertEquals($scmA->get("ab"), "valueB", "st-5");
     $this->assertNull($scmA->get("aa"), "st-6");
     $this->assertEquals($scmB->get("aa"), "valueA", "st-7");
     $this->assertNull($scmB->get("ab"), "st-8");
 }