Ejemplo n.º 1
0
 /**
  * @param string $cluster
  * @param bool|string $wiki
  * @return array
  */
 public function &getExternalLB($cluster, $wiki = false)
 {
     if (!isset($this->extLBs[$cluster])) {
         $this->extLBs[$cluster] = $this->newExternalLB($cluster, $wiki);
         $this->extLBs[$cluster]->parentInfo(array('id' => "ext-{$cluster}"));
         $this->chronProt->initLB($this->extLBs[$cluster]);
     }
     return $this->extLBs[$cluster];
 }
Ejemplo n.º 2
0
 public function testChronologyProtector()
 {
     // (a) First HTTP request
     $mPos = new MySQLMasterPos('db1034-bin.000976', '843431247');
     $mockDB = $this->getMockBuilder('DatabaseMysql')->disableOriginalConstructor()->getMock();
     $mockDB->expects($this->any())->method('doneWrites')->will($this->returnValue(true));
     $mockDB->expects($this->any())->method('getMasterPos')->will($this->returnValue($mPos));
     $lb = $this->getMockBuilder('LoadBalancer')->disableOriginalConstructor()->getMock();
     $lb->expects($this->any())->method('getConnection')->will($this->returnValue($mockDB));
     $lb->expects($this->any())->method('getServerCount')->will($this->returnValue(2));
     $lb->expects($this->any())->method('parentInfo')->will($this->returnValue(array('id' => "main-DEFAULT")));
     $lb->expects($this->any())->method('getAnyOpenConnection')->will($this->returnValue($mockDB));
     $bag = new HashBagOStuff();
     $cp = new ChronologyProtector($bag, array('ip' => '127.0.0.1', 'agent' => "Totally-Not-FireFox"));
     $mockDB->expects($this->exactly(2))->method('doneWrites');
     // Nothing to wait for
     $cp->initLB($lb);
     // Record in stash
     $cp->shutdownLB($lb);
     $cp->shutdown();
     // (b) Second HTTP request
     $cp = new ChronologyProtector($bag, array('ip' => '127.0.0.1', 'agent' => "Totally-Not-FireFox"));
     $lb->expects($this->once())->method('waitFor')->with($this->equalTo($mPos));
     // Wait
     $cp->initLB($lb);
     // Record in stash
     $cp->shutdownLB($lb);
     $cp->shutdown();
 }
Ejemplo n.º 3
0
 public function testChronologyProtector()
 {
     // (a) First HTTP request
     $mPos = new MySQLMasterPos('db1034-bin.000976', '843431247');
     $now = microtime(true);
     $mockDB = $this->getMockBuilder('DatabaseMysql')->disableOriginalConstructor()->getMock();
     $mockDB->method('writesOrCallbacksPending')->willReturn(true);
     $mockDB->method('lastDoneWrites')->willReturn($now);
     $mockDB->method('getMasterPos')->willReturn($mPos);
     $lb = $this->getMockBuilder('LoadBalancer')->disableOriginalConstructor()->getMock();
     $lb->method('getConnection')->willReturn($mockDB);
     $lb->method('getServerCount')->willReturn(2);
     $lb->method('parentInfo')->willReturn(['id' => "main-DEFAULT"]);
     $lb->method('getAnyOpenConnection')->willReturn($mockDB);
     $lb->method('hasOrMadeRecentMasterChanges')->will($this->returnCallback(function () use($mockDB) {
         $p = 0;
         $p |= call_user_func([$mockDB, 'writesOrCallbacksPending']);
         $p |= call_user_func([$mockDB, 'lastDoneWrites']);
         return (bool) $p;
     }));
     $lb->method('getMasterPos')->willReturn($mPos);
     $bag = new HashBagOStuff();
     $cp = new ChronologyProtector($bag, ['ip' => '127.0.0.1', 'agent' => "Totally-Not-FireFox"]);
     $mockDB->expects($this->exactly(2))->method('writesOrCallbacksPending');
     $mockDB->expects($this->exactly(2))->method('lastDoneWrites');
     // Nothing to wait for
     $cp->initLB($lb);
     // Record in stash
     $cp->shutdownLB($lb);
     $cp->shutdown();
     // (b) Second HTTP request
     $cp = new ChronologyProtector($bag, ['ip' => '127.0.0.1', 'agent' => "Totally-Not-FireFox"]);
     $lb->expects($this->once())->method('waitFor')->with($this->equalTo($mPos));
     // Wait
     $cp->initLB($lb);
     // Record in stash
     $cp->shutdownLB($lb);
     $cp->shutdown();
 }