def checkReconnection(self): # Check that the client reconnects when a server restarts. self._storage = self.openClientStorage() oid = self._storage.new_oid() obj = MinPO(12) self._dostore(oid, data=obj) logging.info("checkReconnection(): About to shutdown server") self.shutdownServer() logging.info("checkReconnection(): About to restart server") self.startServer(create=0) forker.wait_until('reconnect', self._storage.is_connected) oid = self._storage.new_oid() obj = MinPO(12) while 1: try: self._dostore(oid, data=obj) break except ClientDisconnected: # Maybe the exception mess is better now logging.info("checkReconnection(): Error after" " server restart; retrying.", exc_info=True) transaction.abort() # Give the other thread a chance to run. time.sleep(0.1) logging.info("checkReconnection(): finished") self._storage.close()
def checkVerificationWith2ClientsInvqOverflow(self): perstorage = self.openClientStorage(cache="test") self.assertEqual(perstorage.verify_result, "empty cache") self._storage = self.openClientStorage() oid = self._storage.new_oid() # When we create a new storage, it should always do a full # verification self.assertEqual(self._storage.verify_result, "empty cache") # do two storages of the object to make sure an invalidation # message is generated revid = self._dostore(oid) revid = self._dostore(oid, revid) forker.wait_until( "Client has seen all of the transactions from the server", lambda : perstorage.lastTransaction() == self._storage.lastTransaction() ) perstorage.load(oid, '') perstorage.close() # the test code sets invq bound to 2 for i in range(5): revid = self._dostore(oid, revid) perstorage = self.openClientStorage(cache="test") self.assertEqual(perstorage.verify_result, "cache too old, clearing") self.assertEqual(self._storage.load(oid, '')[1], revid) self.assertEqual(perstorage.load(oid, ''), self._storage.load(oid, '')) perstorage.close()
def checkNoVerificationOnServerRestartWith2Clients(self): perstorage = self.openClientStorage(cache="test") self.assertEqual(perstorage.verify_result, "empty cache") self._storage = self.openClientStorage() oid = self._storage.new_oid() # When we create a new storage, it should always do a full # verification self.assertEqual(self._storage.verify_result, "empty cache") # do two storages of the object to make sure an invalidation # message is generated revid = self._dostore(oid) revid = self._dostore(oid, revid) forker.wait_until( "Client has seen all of the transactions from the server", lambda : perstorage.lastTransaction() == self._storage.lastTransaction() ) perstorage.load(oid, '') self.shutdownServer() self.pollDown() self._storage.verify_result = None perstorage.verify_result = None logging.info('2ALLBEEF') self.startServer(create=0, keep=0) self.pollUp() self.pollUp(storage=perstorage) # There were no transactions committed, so no verification # should be needed. self.assertEqual(self._storage.verify_result, "Cache up to date") self.assertEqual(perstorage.verify_result, "Cache up to date") perstorage.close() self._storage.close()
def checkQuickVerificationWith2Clients(self): perstorage = self.openClientStorage(cache="test", cache_size=4000) self._storage = self.openClientStorage() oid = self._storage.new_oid() oid2 = self._storage.new_oid() # When we create a new storage, it should always do a full # verification self.assertEqual(self._storage.verify_result, "empty cache") # do two storages of the object to make sure an invalidation # message is generated revid = self._dostore(oid) revid = self._dostore(oid, revid) # Create a second object and revision to guarantee it doesn't # show up in the list of invalidations sent when perstore restarts. revid2 = self._dostore(oid2) revid2 = self._dostore(oid2, revid2) forker.wait_until( lambda : perstorage.lastTransaction() == self._storage.lastTransaction()) perstorage.load(oid, '') perstorage.close() forker.wait_until(lambda : os.path.exists('test-1.zec')) revid = self._dostore(oid, revid) perstorage = self.openClientStorage(cache="test") self.assertEqual(perstorage.verify_result, "quick verification") self.assertEqual(perstorage.load(oid, ''), self._storage.load(oid, '')) perstorage.close()
def checkReconnection(self): # Check that the client reconnects when a server restarts. self._storage = self.openClientStorage() oid = self._storage.new_oid() obj = MinPO(12) self._dostore(oid, data=obj) logging.info("checkReconnection(): About to shutdown server") self.shutdownServer() logging.info("checkReconnection(): About to restart server") self.startServer(create=0) forker.wait_until('reconnect', self._storage.is_connected) oid = self._storage.new_oid() obj = MinPO(12) while 1: try: self._dostore(oid, data=obj) break except ClientDisconnected: # Maybe the exception mess is better now logging.info( "checkReconnection(): Error after" " server restart; retrying.", exc_info=True) transaction.abort() # Give the other thread a chance to run. time.sleep(0.1) logging.info("checkReconnection(): finished") self._storage.close()
def checkNoVerificationOnServerRestartWith2Clients(self): perstorage = self.openClientStorage(cache="test") self.assertEqual(perstorage.verify_result, "empty cache") self._storage = self.openClientStorage() oid = self._storage.new_oid() # When we create a new storage, it should always do a full # verification self.assertEqual(self._storage.verify_result, "empty cache") # do two storages of the object to make sure an invalidation # message is generated revid = self._dostore(oid) revid = self._dostore(oid, revid) forker.wait_until( "Client has seen all of the transactions from the server", lambda: perstorage.lastTransaction() == self._storage.lastTransaction()) perstorage.load(oid, '') self.shutdownServer() self.pollDown() self._storage.verify_result = None perstorage.verify_result = None logging.info('2ALLBEEF') self.startServer(create=0, keep=0) self.pollUp() self.pollUp(storage=perstorage) # There were no transactions committed, so no verification # should be needed. self.assertEqual(self._storage.verify_result, "Cache up to date") self.assertEqual(perstorage.verify_result, "Cache up to date") perstorage.close() self._storage.close()
def checkVerificationWith2ClientsInvqOverflow(self): perstorage = self.openClientStorage(cache="test") self.assertEqual(perstorage.verify_result, "empty cache") self._storage = self.openClientStorage() oid = self._storage.new_oid() # When we create a new storage, it should always do a full # verification self.assertEqual(self._storage.verify_result, "empty cache") # do two storages of the object to make sure an invalidation # message is generated revid = self._dostore(oid) revid = self._dostore(oid, revid) forker.wait_until( "Client has seen all of the transactions from the server", lambda: perstorage.lastTransaction() == self._storage.lastTransaction()) perstorage.load(oid, '') perstorage.close() # the test code sets invq bound to 2 for i in range(5): revid = self._dostore(oid, revid) perstorage = self.openClientStorage(cache="test") self.assertEqual(perstorage.verify_result, "cache too old, clearing") self.assertEqual(self._storage.load(oid, '')[1], revid) self.assertEqual(perstorage.load(oid, ''), self._storage.load(oid, '')) perstorage.close()
def checkQuickVerificationWith2Clients(self): perstorage = self.openClientStorage(cache="test", cache_size=4000) self._storage = self.openClientStorage() oid = self._storage.new_oid() oid2 = self._storage.new_oid() # When we create a new storage, it should always do a full # verification self.assertEqual(self._storage.verify_result, "empty cache") # do two storages of the object to make sure an invalidation # message is generated revid = self._dostore(oid) revid = self._dostore(oid, revid) # Create a second object and revision to guarantee it doesn't # show up in the list of invalidations sent when perstore restarts. revid2 = self._dostore(oid2) revid2 = self._dostore(oid2, revid2) forker.wait_until(lambda: perstorage.lastTransaction() == self._storage .lastTransaction()) perstorage.load(oid, '') perstorage.close() forker.wait_until(lambda: os.path.exists('test-1.zec')) revid = self._dostore(oid, revid) perstorage = self.openClientStorage(cache="test") self.assertEqual(perstorage.verify_result, "quick verification") self.assertEqual(perstorage.load(oid, ''), self._storage.load(oid, '')) perstorage.close()