From 3e07fcbe88ca6e9e885bea5e8c4f9bc2bcff8ca0 Mon Sep 17 00:00:00 2001 From: Cole Miller Date: Tue, 4 Oct 2022 14:11:13 -0400 Subject: [PATCH 1/2] Add lifecycle function calls for request tracing Signed-off-by: Cole Miller --- Makefile.am | 1 + src/client.c | 5 +++-- src/lifecycle.c | 15 +++++++++++++++ src/lifecycle.h | 10 ++++++++++ src/replication.c | 3 ++- 5 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 src/lifecycle.c create mode 100644 src/lifecycle.h diff --git a/Makefile.am b/Makefile.am index 4be26efde..fd063874c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -19,6 +19,7 @@ libraft_la_SOURCES = \ src/entry.c \ src/err.c \ src/heap.c \ + src/lifecycle.c \ src/log.c \ src/membership.c \ src/progress.c \ diff --git a/src/client.c b/src/client.c index 9467a6b28..ccd3e5cd3 100644 --- a/src/client.c +++ b/src/client.c @@ -2,6 +2,7 @@ #include "assert.h" #include "configuration.h" #include "err.h" +#include "lifecycle.h" #include "log.h" #include "membership.h" #include "progress.h" @@ -47,7 +48,7 @@ int raft_apply(struct raft *r, goto err; } - QUEUE_PUSH(&r->leader_state.requests, &req->queue); + lifecycleRequestStart(r, (struct request *)req); rv = replicationTrigger(r, index); if (rv != 0) { @@ -96,7 +97,7 @@ int raft_barrier(struct raft *r, struct raft_barrier *req, raft_barrier_cb cb) goto err_after_buf_alloc; } - QUEUE_PUSH(&r->leader_state.requests, &req->queue); + lifecycleRequestStart(r, (struct request *)req); rv = replicationTrigger(r, index); if (rv != 0) { diff --git a/src/lifecycle.c b/src/lifecycle.c new file mode 100644 index 000000000..b7fa4ad31 --- /dev/null +++ b/src/lifecycle.c @@ -0,0 +1,15 @@ +#include "lifecycle.h" +#include "queue.h" + +#include + +void lifecycleRequestStart(struct raft *r, struct request *req) +{ + QUEUE_PUSH(&r->leader_state.requests, &req->queue); +} + +void lifecycleRequestEnd(struct raft *r, struct request *req) +{ + (void)r; + QUEUE_REMOVE(&req->queue); +} diff --git a/src/lifecycle.h b/src/lifecycle.h new file mode 100644 index 000000000..7ed5c8b34 --- /dev/null +++ b/src/lifecycle.h @@ -0,0 +1,10 @@ +#ifndef LIFECYCLE_H_ +#define LIFECYCLE_H_ + +#include "../include/raft.h" +#include "request.h" + +void lifecycleRequestStart(struct raft *r, struct request *req); +void lifecycleRequestEnd(struct raft *r, struct request *req); + +#endif diff --git a/src/replication.c b/src/replication.c index 0d73be2f7..e51281463 100644 --- a/src/replication.c +++ b/src/replication.c @@ -9,6 +9,7 @@ #endif #include "err.h" #include "heap.h" +#include "lifecycle.h" #include "log.h" #include "membership.h" #include "progress.h" @@ -454,7 +455,7 @@ static struct request *getRequest(struct raft *r, req = QUEUE_DATA(head, struct request, queue); if (req->index == index) { assert(req->type == type); - QUEUE_REMOVE(head); + lifecycleRequestEnd(r, req); return req; } } From 6049dfc77d39001985ad6fd3e894494156e68039 Mon Sep 17 00:00:00 2001 From: Cole Miller Date: Tue, 4 Oct 2022 16:18:32 -0400 Subject: [PATCH 2/2] Always pass -fno-omit-frame-pointer This helps bpftrace generate stack traces. Signed-off-by: Cole Miller --- Makefile.am | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Makefile.am b/Makefile.am index fd063874c..b6548a3dd 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,6 +1,9 @@ ACLOCAL_AMFLAGS = -I m4 AM_CFLAGS += $(CODE_COVERAGE_CFLAGS) +# Not clobbering the base pointer helps bpftrace construct backtraces +AM_CFLAGS += -fno-omit-frame-pointer + include_HEADERS = include/raft.h raftincludedir = $(includedir)/raft