Reset container sync points when the sync-to changes
This commit is contained in:
parent
2f0df53ed9
commit
498edf3e34
@ -213,6 +213,11 @@ class ContainerController(object):
|
||||
if key.lower() in self.save_headers or
|
||||
key.lower().startswith('x-container-meta-'))
|
||||
if metadata:
|
||||
if 'X-Container-Sync-To' in metadata:
|
||||
if 'X-Container-Sync-To' not in broker.metadata or \
|
||||
metadata['X-Container-Sync-To'][0] != \
|
||||
broker.metadata['X-Container-Sync-To'][0]:
|
||||
broker.set_x_container_sync_points(-1, -1)
|
||||
broker.update_metadata(metadata)
|
||||
resp = self.account_update(req, account, container, broker)
|
||||
if resp:
|
||||
@ -403,6 +408,11 @@ class ContainerController(object):
|
||||
if key.lower() in self.save_headers or
|
||||
key.lower().startswith('x-container-meta-'))
|
||||
if metadata:
|
||||
if 'X-Container-Sync-To' in metadata:
|
||||
if 'X-Container-Sync-To' not in broker.metadata or \
|
||||
metadata['X-Container-Sync-To'][0] != \
|
||||
broker.metadata['X-Container-Sync-To'][0]:
|
||||
broker.set_x_container_sync_points(-1, -1)
|
||||
broker.update_metadata(metadata)
|
||||
return HTTPNoContent(request=req)
|
||||
|
||||
|
@ -342,6 +342,76 @@ class TestContainerController(unittest.TestCase):
|
||||
raise Exception(err)
|
||||
self.assert_(not got_exc)
|
||||
|
||||
def test_PUT_reset_container_sync(self):
|
||||
req = Request.blank('/sda1/p/a/c', environ={'REQUEST_METHOD': 'PUT'},
|
||||
headers={'x-timestamp': '1',
|
||||
'x-container-sync-to': 'http://127.0.0.1:12345/v1/a/c'})
|
||||
resp = self.controller.PUT(req)
|
||||
self.assertEquals(resp.status_int, 201)
|
||||
db = self.controller._get_container_broker('sda1', 'p', 'a', 'c')
|
||||
info = db.get_info()
|
||||
self.assertEquals(info['x_container_sync_point1'], -1)
|
||||
self.assertEquals(info['x_container_sync_point2'], -1)
|
||||
db.set_x_container_sync_points(123, 456)
|
||||
info = db.get_info()
|
||||
self.assertEquals(info['x_container_sync_point1'], 123)
|
||||
self.assertEquals(info['x_container_sync_point2'], 456)
|
||||
# Set to same value
|
||||
req = Request.blank('/sda1/p/a/c', environ={'REQUEST_METHOD': 'PUT'},
|
||||
headers={'x-timestamp': '1',
|
||||
'x-container-sync-to': 'http://127.0.0.1:12345/v1/a/c'})
|
||||
resp = self.controller.PUT(req)
|
||||
self.assertEquals(resp.status_int, 202)
|
||||
db = self.controller._get_container_broker('sda1', 'p', 'a', 'c')
|
||||
info = db.get_info()
|
||||
self.assertEquals(info['x_container_sync_point1'], 123)
|
||||
self.assertEquals(info['x_container_sync_point2'], 456)
|
||||
# Set to new value
|
||||
req = Request.blank('/sda1/p/a/c', environ={'REQUEST_METHOD': 'PUT'},
|
||||
headers={'x-timestamp': '1',
|
||||
'x-container-sync-to': 'http://127.0.0.1:12345/v1/a/c2'})
|
||||
resp = self.controller.PUT(req)
|
||||
self.assertEquals(resp.status_int, 202)
|
||||
db = self.controller._get_container_broker('sda1', 'p', 'a', 'c')
|
||||
info = db.get_info()
|
||||
self.assertEquals(info['x_container_sync_point1'], -1)
|
||||
self.assertEquals(info['x_container_sync_point2'], -1)
|
||||
|
||||
def test_POST_reset_container_sync(self):
|
||||
req = Request.blank('/sda1/p/a/c', environ={'REQUEST_METHOD': 'PUT'},
|
||||
headers={'x-timestamp': '1',
|
||||
'x-container-sync-to': 'http://127.0.0.1:12345/v1/a/c'})
|
||||
resp = self.controller.PUT(req)
|
||||
self.assertEquals(resp.status_int, 201)
|
||||
db = self.controller._get_container_broker('sda1', 'p', 'a', 'c')
|
||||
info = db.get_info()
|
||||
self.assertEquals(info['x_container_sync_point1'], -1)
|
||||
self.assertEquals(info['x_container_sync_point2'], -1)
|
||||
db.set_x_container_sync_points(123, 456)
|
||||
info = db.get_info()
|
||||
self.assertEquals(info['x_container_sync_point1'], 123)
|
||||
self.assertEquals(info['x_container_sync_point2'], 456)
|
||||
# Set to same value
|
||||
req = Request.blank('/sda1/p/a/c', environ={'REQUEST_METHOD': 'POST'},
|
||||
headers={'x-timestamp': '1',
|
||||
'x-container-sync-to': 'http://127.0.0.1:12345/v1/a/c'})
|
||||
resp = self.controller.POST(req)
|
||||
self.assertEquals(resp.status_int, 204)
|
||||
db = self.controller._get_container_broker('sda1', 'p', 'a', 'c')
|
||||
info = db.get_info()
|
||||
self.assertEquals(info['x_container_sync_point1'], 123)
|
||||
self.assertEquals(info['x_container_sync_point2'], 456)
|
||||
# Set to new value
|
||||
req = Request.blank('/sda1/p/a/c', environ={'REQUEST_METHOD': 'POST'},
|
||||
headers={'x-timestamp': '1',
|
||||
'x-container-sync-to': 'http://127.0.0.1:12345/v1/a/c2'})
|
||||
resp = self.controller.POST(req)
|
||||
self.assertEquals(resp.status_int, 204)
|
||||
db = self.controller._get_container_broker('sda1', 'p', 'a', 'c')
|
||||
info = db.get_info()
|
||||
self.assertEquals(info['x_container_sync_point1'], -1)
|
||||
self.assertEquals(info['x_container_sync_point2'], -1)
|
||||
|
||||
def test_DELETE(self):
|
||||
req = Request.blank('/sda1/p/a/c',
|
||||
environ={'REQUEST_METHOD': 'PUT'}, headers={'X-Timestamp': '1'})
|
||||
|
Loading…
x
Reference in New Issue
Block a user