diff --git a/swift/account/server.py b/swift/account/server.py index ec9ad343dc..53d604ce93 100644 --- a/swift/account/server.py +++ b/swift/account/server.py @@ -29,7 +29,7 @@ import simplejson from swift.common.db import AccountBroker from swift.common.utils import get_logger, get_param, hash_path, \ - normalize_timestamp, split_path, storage_directory, get_txn_id + normalize_timestamp, split_path, storage_directory from swift.common.constraints import ACCOUNT_LISTING_LIMIT, \ check_mount, check_float, check_utf8 from swift.common.db_replicator import ReplicatorRpc @@ -86,7 +86,7 @@ class AccountController(object): return Response(status='507 %s is not mounted' % drive) broker = self._get_account_broker(drive, part, account) if container: # put account container - if get_txn_id(req, None) is None: + if 'x-cf-trans-id' in req.headers: broker.pending_timeout = 3 if req.headers.get('x-account-override-deleted', 'no').lower() != \ 'yes' and broker.is_deleted(): @@ -296,7 +296,7 @@ class AccountController(object): def __call__(self, env, start_response): start_time = time.time() req = Request(env) - self.logger.txn_id = get_txn_id(req, None) + self.logger.txn_id = req.headers.get('x-cf-trans-id', None) if not check_utf8(req.path_info): res = HTTPPreconditionFailed(body='Invalid UTF8') else: @@ -319,7 +319,7 @@ class AccountController(object): time.strftime('%d/%b/%Y:%H:%M:%S +0000', time.gmtime()), req.method, req.path, res.status.split()[0], res.content_length or '-', - get_txn_id(req, '-'), + req.headers.get('x-cf-trans-id', '-'), req.referer or '-', req.user_agent or '-', trans_time, additional_info) diff --git a/swift/common/utils.py b/swift/common/utils.py index d7abac2ec8..c240b242cf 100644 --- a/swift/common/utils.py +++ b/swift/common/utils.py @@ -107,16 +107,6 @@ def get_param(req, name, default=None): value.decode('utf8') # Ensure UTF8ness return value -def get_txn_id(req, default=None): - """ - Get the transaction id from a request - - :param req: Webob request object - :param default: value to return if no transaction id is found - """ - return req.headers.get('x-swift-txn-id', - req.headers.get('x-cf-trans-id', default)) - def fallocate(fd, size): """ diff --git a/swift/container/server.py b/swift/container/server.py index 010e9e0af6..fc06194de6 100644 --- a/swift/container/server.py +++ b/swift/container/server.py @@ -31,7 +31,7 @@ from webob.exc import HTTPAccepted, HTTPBadRequest, HTTPConflict, \ from swift.common.db import ContainerBroker from swift.common.utils import get_logger, get_param, hash_path, \ - normalize_timestamp, storage_directory, split_path, get_txn_id + normalize_timestamp, storage_directory, split_path from swift.common.constraints import CONTAINER_LISTING_LIMIT, \ check_mount, check_float, check_utf8 from swift.common.bufferedhttp import http_connect @@ -95,7 +95,7 @@ class ContainerController(object): 'x-delete-timestamp': info['delete_timestamp'], 'x-object-count': info['object_count'], 'x-bytes-used': info['bytes_used'], - 'x-swift-txn-id': get_txn_id(req, '-')} + 'x-cf-trans-id': req.headers.get('X-Cf-Trans-Id', '-')} if req.headers.get('x-account-override-deleted', 'no').lower() == \ 'yes': account_headers['x-account-override-deleted'] = 'yes' @@ -384,7 +384,7 @@ class ContainerController(object): def __call__(self, env, start_response): start_time = time.time() req = Request(env) - self.logger.txn_id = get_txn_id(req, None) + self.logger.txn_id = req.headers.get('x-cf-trans-id', None) if not check_utf8(req.path_info): res = HTTPPreconditionFailed(body='Invalid UTF8') else: @@ -404,7 +404,7 @@ class ContainerController(object): time.gmtime()), req.method, req.path, res.status.split()[0], res.content_length or '-', - get_txn_id(req, '-'), + req.headers.get('x-cf-trans-id', '-'), req.referer or '-', req.user_agent or '-', trans_time) if req.method.upper() == 'REPLICATE': diff --git a/swift/obj/server.py b/swift/obj/server.py index 6af3bdd844..7c139d7775 100644 --- a/swift/obj/server.py +++ b/swift/obj/server.py @@ -37,7 +37,7 @@ from eventlet import sleep, Timeout from swift.common.utils import mkdirs, normalize_timestamp, \ storage_directory, hash_path, renamer, fallocate, \ - split_path, drop_buffer_cache, get_logger, write_pickle, get_txn_id + split_path, drop_buffer_cache, get_logger, write_pickle from swift.common.bufferedhttp import http_connect from swift.common.constraints import check_object_creation, check_mount, \ check_float, check_utf8 @@ -409,7 +409,7 @@ class ObjectController(object): 'x-content-type': file.metadata['Content-Type'], 'x-timestamp': file.metadata['X-Timestamp'], 'x-etag': file.metadata['ETag'], - 'x-swift-txn-id': get_txn_id(request, '-')}, + 'x-cf-trans-id': request.headers.get('x-cf-trans-id', '-')}, device) resp = HTTPCreated(request=request, etag=etag) return resp @@ -531,7 +531,7 @@ class ObjectController(object): file.unlinkold(metadata['X-Timestamp']) self.container_update('DELETE', account, container, obj, request.headers, {'x-timestamp': metadata['X-Timestamp'], - 'x-swift-txn-id': get_txn_id(request, '-')}, + 'x-cf-trans-id': request.headers.get('x-cf-trans-id', '-')}, device) resp = response_class(request=request) return resp @@ -562,7 +562,7 @@ class ObjectController(object): """WSGI Application entry point for the Swift Object Server.""" start_time = time.time() req = Request(env) - self.logger.txn_id = get_txn_id(req, None) + self.logger.txn_id = req.headers.get('x-cf-trans-id', None) if not check_utf8(req.path_info): res = HTTPPreconditionFailed(body='Invalid UTF8') else: @@ -583,7 +583,7 @@ class ObjectController(object): time.gmtime()), req.method, req.path, res.status.split()[0], res.content_length or '-', req.referer or '-', - get_txn_id(req, '-'), + req.headers.get('x-cf-trans-id', '-'), req.user_agent or '-', trans_time) if req.method == 'REPLICATE': diff --git a/swift/proxy/server.py b/swift/proxy/server.py index d26e626cd9..1cde24cfe6 100644 --- a/swift/proxy/server.py +++ b/swift/proxy/server.py @@ -41,7 +41,7 @@ from webob import Request, Response from swift.common.ring import Ring from swift.common.utils import get_logger, normalize_timestamp, split_path, \ - cache_from_env, get_txn_id + cache_from_env from swift.common.bufferedhttp import http_connect from swift.common.constraints import check_metadata, check_object_creation, \ check_utf8, CONTAINER_LISTING_LIMIT, MAX_ACCOUNT_NAME_LENGTH, \ @@ -356,7 +356,7 @@ class Controller(object): result_code = 0 attempts_left = self.app.account_ring.replica_count path = '/%s' % account - headers = {'x-swift-txn-id': self.trans_id} + headers = {'x-cf-trans-id': self.trans_id} for node in self.iter_nodes(partition, nodes, self.app.account_ring): if self.error_limited(node): continue @@ -430,7 +430,7 @@ class Controller(object): write_acl = None container_size = None attempts_left = self.app.container_ring.replica_count - headers = {'x-swift-txn-id': self.trans_id} + headers = {'x-cf-trans-id': self.trans_id} for node in self.iter_nodes(partition, nodes, self.app.container_ring): if self.error_limited(node): continue @@ -1247,7 +1247,7 @@ class ContainerController(Controller): container_partition, containers = self.app.container_ring.get_nodes( self.account_name, self.container_name) headers = {'X-Timestamp': normalize_timestamp(time.time()), - 'x-swift-txn-id': self.trans_id} + 'x-cf-trans-id': self.trans_id} headers.update(value for value in req.headers.iteritems() if value[0].lower() in self.pass_through_headers or value[0].lower().startswith('x-container-meta-')) @@ -1309,7 +1309,7 @@ class ContainerController(Controller): container_partition, containers = self.app.container_ring.get_nodes( self.account_name, self.container_name) headers = {'X-Timestamp': normalize_timestamp(time.time()), - 'x-swift-txn-id': self.trans_id} + 'x-cf-trans-id': self.trans_id} headers.update(value for value in req.headers.iteritems() if value[0].lower() in self.pass_through_headers or value[0].lower().startswith('x-container-meta-')) @@ -1362,7 +1362,7 @@ class ContainerController(Controller): container_partition, containers = self.app.container_ring.get_nodes( self.account_name, self.container_name) headers = {'X-Timestamp': normalize_timestamp(time.time()), - 'x-swift-txn-id': self.trans_id} + 'x-cf-trans-id': self.trans_id} statuses = [] reasons = [] bodies = [] @@ -1450,7 +1450,7 @@ class AccountController(Controller): account_partition, accounts = \ self.app.account_ring.get_nodes(self.account_name) headers = {'X-Timestamp': normalize_timestamp(time.time()), - 'x-swift-txn-id': self.trans_id} + 'x-cf-trans-id': self.trans_id} headers.update(value for value in req.headers.iteritems() if value[0].lower().startswith('x-account-meta-')) statuses = [] @@ -1499,7 +1499,7 @@ class AccountController(Controller): account_partition, accounts = \ self.app.account_ring.get_nodes(self.account_name) headers = {'X-Timestamp': normalize_timestamp(time.time()), - 'x-swift-txn-id': self.trans_id} + 'X-CF-Trans-Id': self.trans_id} headers.update(value for value in req.headers.iteritems() if value[0].lower().startswith('x-account-meta-')) statuses = [] @@ -1546,7 +1546,7 @@ class AccountController(Controller): account_partition, accounts = \ self.app.account_ring.get_nodes(self.account_name) headers = {'X-Timestamp': normalize_timestamp(time.time()), - 'x-swift-txn-id': self.trans_id} + 'X-CF-Trans-Id': self.trans_id} statuses = [] reasons = [] bodies = [] @@ -1683,7 +1683,7 @@ class BaseApplication(object): def update_request(self, req): req.bytes_transferred = '-' req.client_disconnect = False - req.headers['x-swift-txn-id'] = 'tx' + str(uuid.uuid4()) + req.headers['x-cf-trans-id'] = 'tx' + str(uuid.uuid4()) if 'x-storage-token' in req.headers and \ 'x-auth-token' not in req.headers: req.headers['x-auth-token'] = req.headers['x-storage-token'] @@ -1707,9 +1707,8 @@ class BaseApplication(object): return HTTPPreconditionFailed(request=req, body='Bad URL') controller = controller(self, **path_parts) - txn_id = get_txn_id(req, None) - controller.trans_id = txn_id or '-' - self.logger.txn_id = txn_id + controller.trans_id = req.headers.get('x-cf-trans-id', '-') + self.logger.txn_id = req.headers.get('x-cf-trans-id', None) try: handler = getattr(controller, req.method) if not getattr(handler, 'publicly_accessible'): @@ -1787,7 +1786,7 @@ class Application(BaseApplication): getattr(req, 'bytes_transferred', 0) or '-', getattr(response, 'bytes_transferred', 0) or '-', req.headers.get('etag', '-'), - get_txn_id(req, '-'), + req.headers.get('x-cf-trans-id', '-'), logged_headers or '-', trans_time, ))) diff --git a/test/unit/common/test_utils.py b/test/unit/common/test_utils.py index f8c44440c0..b888686660 100644 --- a/test/unit/common/test_utils.py +++ b/test/unit/common/test_utils.py @@ -28,7 +28,6 @@ from StringIO import StringIO from functools import partial from tempfile import NamedTemporaryFile -from webob import Request from eventlet import sleep from swift.common import utils @@ -81,19 +80,6 @@ class TestUtils(unittest.TestCase): def setUp(self): utils.HASH_PATH_SUFFIX = 'endcap' - def test_get_txn_id(self): - req = Request.blank('') - req.headers['X-Swift-Txn-Id'] = 'tx12345' - self.assertEquals(utils.get_txn_id(req), 'tx12345') - environ = {'HTTP_X_CF_TRANS_ID': 'tx67890'} - req = Request.blank('', environ=environ) - self.assertEquals(utils.get_txn_id(req), 'tx67890') - req = Request.blank('') - self.assertEquals(utils.get_txn_id(req), None) - self.assertEquals(utils.get_txn_id(req, '-'), '-') - req.headers['X-Cf-Trans-Id'] = 'tx13579' - self.assertEquals(utils.get_txn_id(req, default='test'), 'tx13579') - def test_normalize_timestamp(self): """ Test swift.common.utils.normalize_timestamp """ self.assertEquals(utils.normalize_timestamp('1253327593.48174'), diff --git a/test/unit/proxy/test_server.py b/test/unit/proxy/test_server.py index f7e2479a16..4577cd4dac 100644 --- a/test/unit/proxy/test_server.py +++ b/test/unit/proxy/test_server.py @@ -218,7 +218,6 @@ def save_globals(): # tests - class TestController(unittest.TestCase): def setUp(self): @@ -373,7 +372,6 @@ class TestController(unittest.TestCase): test(404, 507, 503) test(503, 503, 503) - class TestProxyServer(unittest.TestCase): def test_unhandled_exception(self): @@ -470,7 +468,6 @@ class TestObjectController(unittest.TestCase): 'text/html', 'text/html'])) test_content_type('test.css', iter(['', '', '', 'text/css', 'text/css', 'text/css'])) - def test_custom_mime_types_files(self): swift_dir = mkdtemp() try: @@ -1718,7 +1715,7 @@ class TestObjectController(unittest.TestCase): for node in nodes: conn = proxy_server.http_connect(node['ip'], node['port'], node['device'], partition, 'PUT', '/a', - {'X-Timestamp': ts, 'x-swift-txn-id': 'test'}) + {'X-Timestamp': ts, 'X-CF-Trans-Id': 'test'}) resp = conn.getresponse() self.assertEquals(resp.status, 201) # Head account, just a double check and really is here to test