Skip to content

Commit 5f7755b

Browse files
committed
PCBC-527: Initial tracing implementation
Change-Id: I43e5e9694f5da2c07f288e657fc772c52ccc7346 Reviewed-on: http://review.couchbase.org/90749 Tested-by: Build Bot <[email protected]> Reviewed-by: Sergey Avseyev <[email protected]>
1 parent 0eaa51b commit 5f7755b

File tree

3 files changed

+264
-5
lines changed

3 files changed

+264
-5
lines changed

couchbase.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ zval *bop_get_return_doc(zval *return_value, const char *key, int key_len, int i
173173

174174
#define PCBC_DATE_FORMAT_RFC3339 "Y-m-d\\TH:i:sP"
175175

176+
extern char *pcbc_client_string;
176177
extern zend_class_entry *pcbc_analytics_query_ce;
177178
extern zend_class_entry *pcbc_n1ql_query_ce;
178179
extern zend_class_entry *pcbc_cluster_ce;
@@ -983,6 +984,9 @@ typedef struct {
983984
int json_options;
984985
int is_cbas; // FIXME: convert to bit-flags
985986
PCBC_ZVAL exc;
987+
#ifdef LCB_TRACING
988+
lcbtrace_SPAN *span;
989+
#endif
986990
} opcookie;
987991

988992
opcookie *opcookie_init();

src/couchbase/bucket/get.c

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ static lcb_error_t proc_get_results(pcbc_bucket_t *bucket, zval *return_value, o
5656
{
5757
opcookie_get_res *res;
5858
lcb_error_t err = LCB_SUCCESS;
59+
#ifdef LCB_TRACING
60+
lcbtrace_SPAN *parent = cookie->span;
61+
lcbtrace_TRACER *tracer = lcb_get_tracer(bucket->conn->lcb);
62+
#endif
5963

6064
// If we are not mapped, we need to throw any op errors
6165
if (is_mapped == 0) {
@@ -68,8 +72,23 @@ static lcb_error_t proc_get_results(pcbc_bucket_t *bucket, zval *return_value, o
6872
zval *doc = bop_get_return_doc(return_value, res->key, res->key_len, is_mapped TSRMLS_CC);
6973

7074
if (res->header.err == LCB_SUCCESS) {
75+
#ifdef LCB_TRACING
76+
lcbtrace_SPAN *span = NULL;
77+
if (parent) {
78+
lcbtrace_REF ref;
79+
ref.type = LCBTRACE_REF_CHILD_OF;
80+
ref.span = parent;
81+
span = lcbtrace_span_start(tracer, LCBTRACE_OP_RESPONSE_DECODING, LCBTRACE_NOW, &ref);
82+
lcbtrace_span_add_tag_str(span, LCBTRACE_TAG_COMPONENT, pcbc_client_string);
83+
}
84+
#endif
7185
pcbc_document_init_decode(doc, bucket, res->bytes, res->bytes_len, res->flags, res->datatype, res->cas,
7286
NULL TSRMLS_CC);
87+
#ifdef LCB_TRACING
88+
if (span) {
89+
lcbtrace_span_finish(span, LCBTRACE_NOW);
90+
}
91+
#endif
7392
} else {
7493
pcbc_document_init_error(doc, &res->header TSRMLS_CC);
7594
}
@@ -96,10 +115,21 @@ void pcbc_bucket_get(pcbc_bucket_t *obj, pcbc_pp_state *pp_state, pcbc_pp_id *id
96115
int ii, ncmds, nscheduled;
97116
opcookie *cookie;
98117
lcb_error_t err = LCB_SUCCESS;
118+
#ifdef LCB_TRACING
119+
lcbtrace_TRACER *tracer = NULL;
120+
#endif
99121

100122
ncmds = pcbc_pp_keycount(pp_state);
101123
cookie = opcookie_init();
102124

125+
#ifdef LCB_TRACING
126+
tracer = lcb_get_tracer(obj->conn->lcb);
127+
if (tracer) {
128+
cookie->span = lcbtrace_span_start(tracer, "get", 0, NULL);
129+
lcbtrace_span_add_tag_str(cookie->span, LCBTRACE_TAG_COMPONENT, pcbc_client_string);
130+
}
131+
#endif
132+
103133
nscheduled = 0;
104134
for (ii = 0; pcbc_pp_next(pp_state); ++ii) {
105135
lcb_CMDGET cmd = {0};
@@ -115,6 +145,11 @@ void pcbc_bucket_get(pcbc_bucket_t *obj, pcbc_pp_state *pp_state, pcbc_pp_id *id
115145
}
116146

117147
LCB_CMD_SET_KEY(&cmd, id->str, id->len);
148+
#ifdef LCB_TRACING
149+
if (cookie->span) {
150+
LCB_CMD_SET_TRACESPAN(&cmd, cookie->span);
151+
}
152+
#endif
118153
if (expiry && *expiry) {
119154
cmd.lock = 0;
120155
cmd.exptime = Z_LVAL_P(*expiry);
@@ -139,6 +174,11 @@ void pcbc_bucket_get(pcbc_bucket_t *obj, pcbc_pp_state *pp_state, pcbc_pp_id *id
139174
err = proc_get_results(obj, return_value, cookie, pcbc_pp_ismapped(pp_state) TSRMLS_CC);
140175
}
141176

177+
#ifdef LCB_TRACING
178+
if (cookie->span) {
179+
lcbtrace_span_finish(cookie->span, LCBTRACE_NOW);
180+
}
181+
#endif
142182
opcookie_destroy(cookie);
143183

144184
if (err != LCB_SUCCESS) {
@@ -208,6 +248,9 @@ PHP_METHOD(Bucket, getFromReplica)
208248
zval *zindex, *zgroupid;
209249
opcookie *cookie;
210250
lcb_error_t err = LCB_SUCCESS;
251+
#ifdef LCB_TRACING
252+
lcbtrace_TRACER *tracer = NULL;
253+
#endif
211254

212255
// Note that groupid is experimental here and should not be used.
213256
if (pcbc_pp_begin(ZEND_NUM_ARGS() TSRMLS_CC, &pp_state, "id||index,groupid", &id, &zindex, &zgroupid) != SUCCESS) {
@@ -217,6 +260,13 @@ PHP_METHOD(Bucket, getFromReplica)
217260

218261
ncmds = pcbc_pp_keycount(&pp_state);
219262
cookie = opcookie_init();
263+
#ifdef LCB_TRACING
264+
tracer = lcb_get_tracer(obj->conn->lcb);
265+
if (tracer) {
266+
cookie->span = lcbtrace_span_start(tracer, "get_from_replica", 0, NULL);
267+
lcbtrace_span_add_tag_str(cookie->span, LCBTRACE_TAG_COMPONENT, pcbc_client_string);
268+
}
269+
#endif
220270

221271
nscheduled = 0;
222272
for (ii = 0; pcbc_pp_next(&pp_state); ++ii) {
@@ -226,6 +276,11 @@ PHP_METHOD(Bucket, getFromReplica)
226276
PCBC_CHECK_ZVAL_STRING(zgroupid, "groupid must be a string");
227277

228278
LCB_CMD_SET_KEY(&cmd, id.str, id.len);
279+
#ifdef LCB_TRACING
280+
if (cookie->span) {
281+
LCB_CMD_SET_TRACESPAN(&cmd, cookie->span);
282+
}
283+
#endif
229284
if (zindex) {
230285
cmd.index = Z_LVAL_P(zindex);
231286
if (cmd.index >= 0) {
@@ -252,6 +307,11 @@ PHP_METHOD(Bucket, getFromReplica)
252307
err = proc_get_results(obj, return_value, cookie, pcbc_pp_ismapped(&pp_state) TSRMLS_CC);
253308
}
254309

310+
#ifdef LCB_TRACING
311+
if (cookie->span) {
312+
lcbtrace_span_finish(cookie->span, LCBTRACE_NOW);
313+
}
314+
#endif
255315
opcookie_destroy(cookie);
256316

257317
if (err != LCB_SUCCESS) {

0 commit comments

Comments
 (0)