From: Abhishek Dixit Date: Mon, 8 Jun 2015 17:29:54 +0000 (+0530) Subject: Transaction Id added in response X-Git-Tag: v9.0.3~195^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b711e3124f8f73c17ebd19b38807a1b77f201e44;p=ceph.git Transaction Id added in response Signed-off-by: Abhishek Dixit dixitabhi@gmail.com --- diff --git a/src/rgw/rgw_common.cc b/src/rgw/rgw_common.cc index 22581f5a69943..4924feae659d8 100644 --- a/src/rgw/rgw_common.cc +++ b/src/rgw/rgw_common.cc @@ -169,6 +169,18 @@ req_state::~req_state() { delete object_acl; } +void req_state::gen_trans_id() +{ + char buf[256]; + timeval timetest; + gettimeofday(&timetest, NULL); + if (strftime(buf, sizeof(buf), "%Y%m%d:%H%M%S",gmtime(&(timetest.tv_sec))) == 0) + return; + + snprintf(buf + strlen(buf), sizeof(buf)-strlen(buf) ,":%03ld", timetest.tv_usec/1000); + trans_id = req_id + "-" + buf; +} + struct str_len { const char *str; int len; diff --git a/src/rgw/rgw_common.h b/src/rgw/rgw_common.h index 1baf17862528a..42815049b3f16 100644 --- a/src/rgw/rgw_common.h +++ b/src/rgw/rgw_common.h @@ -1061,10 +1061,14 @@ struct req_state { string req_id; + string trans_id; + req_info info; req_state(CephContext *_cct, class RGWEnv *e); ~req_state(); + + void gen_trans_id(); }; /** Store basic data on an object */ diff --git a/src/rgw/rgw_main.cc b/src/rgw/rgw_main.cc index 9a8aa5f7b3d6d..caab642327c5e 100644 --- a/src/rgw/rgw_main.cc +++ b/src/rgw/rgw_main.cc @@ -556,6 +556,8 @@ static int process_request(RGWRados *store, RGWREST *rest, RGWRequest *req, RGWC s->req_id = store->unique_id(req->id); + s->gen_trans_id(); + req->log(s, "initializing"); RGWOp *op = NULL; diff --git a/src/rgw/rgw_rest.cc b/src/rgw/rgw_rest.cc index fffc0036e08f5..6ed518093a6d1 100644 --- a/src/rgw/rgw_rest.cc +++ b/src/rgw/rgw_rest.cc @@ -494,11 +494,23 @@ void dump_start(struct req_state *s) } } +void dump_trans_id(req_state *s) +{ + if (s->prot_flags & RGW_REST_SWIFT) { + s->cio->print("X-Trans-Id: ts-%s\r\n", s->trans_id.c_str()); + } + else { + s->cio->print("x-amz-request-id: %s\r\n", s->trans_id.c_str()); + } +} + void end_header(struct req_state *s, RGWOp *op, const char *content_type, const int64_t proposed_content_length, bool force_content_type) { string ctype; + dump_trans_id(s); + if (op) { dump_access_control(s, op); }