From 7015b2ca6e33287f835c061fd81f2c37913fe45c Mon Sep 17 00:00:00 2001 From: eeliu <27064129+eeliu@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:31:54 +0800 Subject: [PATCH] update doc --- testapps/libevent_http_server/image-1.png | Bin 0 -> 45995 bytes testapps/libevent_http_server/image.png | Bin 0 -> 33938 bytes testapps/libevent_http_server/pp_ev_http.c | 20 ++++- testapps/libevent_http_server/pp_ev_http.h | 18 +++- testapps/libevent_http_server/readme.md | 93 ++++++++++++++++++++- 5 files changed, 127 insertions(+), 4 deletions(-) create mode 100644 testapps/libevent_http_server/image-1.png create mode 100644 testapps/libevent_http_server/image.png diff --git a/testapps/libevent_http_server/image-1.png b/testapps/libevent_http_server/image-1.png new file mode 100644 index 0000000000000000000000000000000000000000..dfbebcf4090653f3daa49dae82d24bb767ac7c54 GIT binary patch literal 45995 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 literal 0 HcmV?d00001 diff --git a/testapps/libevent_http_server/image.png b/testapps/libevent_http_server/image.png new file mode 100644 index 0000000000000000000000000000000000000000..fda6399572fcc8a1264e805b5d50300eb0342d4f GIT binary patch literal 33938 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 L;g5O8?XLa@^-#n6 literal 0 HcmV?d00001 diff --git a/testapps/libevent_http_server/pp_ev_http.c b/testapps/libevent_http_server/pp_ev_http.c index e942f324..16cd9b2e 100644 --- a/testapps/libevent_http_server/pp_ev_http.c +++ b/testapps/libevent_http_server/pp_ev_http.c @@ -1,3 +1,19 @@ +//////////////////////////////////////////////////////////////////////////////// +// Copyright 2020 NAVER Corp +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. +//////////////////////////////////////////////////////////////////////////////// + #include "pp_ev_http.h" #include "event2/http.h" #include @@ -158,8 +174,6 @@ static int pp_evhttp_make_request(struct evhttp_connection *evcon, req->cb = pp_sub_request_done; req->cb_arg = ctx; - // todo add pinpoint-header - struct evkeyvalq *output_headers; output_headers = evhttp_request_get_output_headers(req); @@ -318,3 +332,5 @@ void pp_free_http_client(pp_http_client_t *client) { free(client); } } + +//@author eeliu \ No newline at end of file diff --git a/testapps/libevent_http_server/pp_ev_http.h b/testapps/libevent_http_server/pp_ev_http.h index dbc5065b..7fc7cd56 100644 --- a/testapps/libevent_http_server/pp_ev_http.h +++ b/testapps/libevent_http_server/pp_ev_http.h @@ -1,5 +1,19 @@ #pragma once - +//////////////////////////////////////////////////////////////////////////////// +// Copyright 2020 NAVER Corp +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. +//////////////////////////////////////////////////////////////////////////////// #include #include #include @@ -97,3 +111,5 @@ void pinpoint_set_agent_helper(const char *app_name, const char *app_id, pinpoint_end_trace(node); \ } \ } + +//@author eeliu \ No newline at end of file diff --git a/testapps/libevent_http_server/readme.md b/testapps/libevent_http_server/readme.md index 1c0263ff..74b3138d 100644 --- a/testapps/libevent_http_server/readme.md +++ b/testapps/libevent_http_server/readme.md @@ -3,7 +3,8 @@ ## Command ``` -$ mkdir build && cd build && make -j +$ mkdir build && cd build && cmake .. && make -j +$ # curl http://localhost:8080/http-client ``` ### Thanks @@ -21,3 +22,93 @@ $ mkdir build && cd build && make -j ![call stack ](call_stack.png) +## Introduction for pinpoint on asynchronous framework + +> what's problem in asynchronous framework (event driver)? + +In synchronous, we gets trace by it's called order, that is the logical order when handling request, but in asynchronous framework, trace are driven by event, it's the event order. So, we must find a way to recover the logical order. + +### Synchronous call flow + +![alt text](image.png) + +### Asynchronous call flow + +> Red line: user A logical flow \ + Blue line: user B logical flow + + ![alt text](image-1.png) + +Here is the question, how to separate A and B from mixed call chains ? + +>Inspired by nginx + +Pass `ctx` to everywhere + +```c +#define CTX_MATIC_NUM 0x1357325l +typedef struct { + int magic_num_; + NodeID current_id_; // current trace ID + void *ori_arg_; + void (*on_complete_cb_origin_)(struct evhttp_request *, void *); + void *on_complete_cb_arg_origin_; + + void (*http_client_request_cb_)(struct evhttp_request *, void *); + void *http_client_request_done_cb_arg_; + ... +} pp_request_context_t; +``` + +If you want to trace `foo` function, + +1. add `ctx` into parameter list + +|Old | Now| +|----|----| +|void foo(int a, ...)| void foo(void* ctx, int a,...)| + +2. wrapper `foo` function + +```c +void foo(void *ctx,int a, ...); + +void pp_foo(void *ctx,int a, ...){ + ... + NodeID trace_id = pinpoint_start_trace(ctx_.current_id_); + foo(ctx,a); + // end current trace and update current_id_ + ctx_.current_id_ = pinpoint_end_trace(trace_id); +} +... +call_pp_foo(); +... +``` + +3. what if needs to register a callback function? + +Before +``` +// some like +async_http_request(.. request_done_call_cb,request_done_call_cb_arg...); + +``` +Now +``` +cxt->origin_request_done_call_cb = request_done_call_cb; +ctx->origin_request_done_call_cb_arg = request_done_call_cb_arg +int pp_request_done_call_cb(arg){ + cxt->origin_request_done_call_cb(ctx->origin_request_done_call_cb_arg); +}; + +async_http_request(ctx,.. pp_request_done_call_cb,ctx,...); + +``` + +While, there are many unknown cases in below list. If you have any question, [create an issue 🙋‍♂️ ](https://github.com/pinpoint-apm/pinpoint-c-agent/issues/new). + + + + + +