Skip to content
This repository was archived by the owner on Mar 4, 2024. It is now read-only.

Commit 44efc76

Browse files
committed
Introduce lifecycle function calls for requests
These are intended to support instrumentation with bpftrace. Signed-off-by: Cole Miller <cole.miller@canonical.com>
1 parent e1e6fc7 commit 44efc76

File tree

7 files changed

+37
-3
lines changed

7 files changed

+37
-3
lines changed

Makefile.am

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ libraft_la_SOURCES = \
1919
src/entry.c \
2020
src/err.c \
2121
src/heap.c \
22+
src/lifecycle.c \
2223
src/log.c \
2324
src/membership.c \
2425
src/progress.c \

include/raft.h

+1
Original file line numberDiff line numberDiff line change
@@ -909,6 +909,7 @@ RAFT_API raft_index raft_last_applied(struct raft *r);
909909
void *data; \
910910
int type; \
911911
raft_index index; \
912+
long id; \
912913
void *queue[2]
913914

914915
/**

src/client.c

+7-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1+
#include <stdlib.h>
2+
13
#include "../include/raft.h"
24
#include "assert.h"
35
#include "configuration.h"
46
#include "err.h"
7+
#include "lifecycle.h"
58
#include "log.h"
69
#include "membership.h"
710
#include "progress.h"
@@ -39,6 +42,7 @@ int raft_apply(struct raft *r,
3942
tracef("%u commands starting at %lld", n, index);
4043
req->type = RAFT_COMMAND;
4144
req->index = index;
45+
req->id = random();
4246
req->cb = cb;
4347

4448
/* Append the new entries to the log. */
@@ -47,7 +51,7 @@ int raft_apply(struct raft *r,
4751
goto err;
4852
}
4953

50-
QUEUE_PUSH(&r->leader_state.requests, &req->queue);
54+
lifecycleRequestStart(r, (struct request *)req);
5155

5256
rv = replicationTrigger(r, index);
5357
if (rv != 0) {
@@ -89,14 +93,15 @@ int raft_barrier(struct raft *r, struct raft_barrier *req, raft_barrier_cb cb)
8993
tracef("barrier starting at %lld", index);
9094
req->type = RAFT_BARRIER;
9195
req->index = index;
96+
req->id = random();
9297
req->cb = cb;
9398

9499
rv = logAppend(&r->log, r->current_term, RAFT_BARRIER, &buf, NULL);
95100
if (rv != 0) {
96101
goto err_after_buf_alloc;
97102
}
98103

99-
QUEUE_PUSH(&r->leader_state.requests, &req->queue);
104+
lifecycleRequestStart(r, (struct request *)req);
100105

101106
rv = replicationTrigger(r, index);
102107
if (rv != 0) {

src/lifecycle.c

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#include "lifecycle.h"
2+
#include "queue.h"
3+
4+
#include <stdlib.h>
5+
6+
void lifecycleRequestStart(struct raft *r, struct request *req)
7+
{
8+
QUEUE_PUSH(&r->leader_state.requests, &req->queue);
9+
}
10+
11+
void lifecycleRequestEnd(struct raft *r, struct request *req)
12+
{
13+
(void)r;
14+
QUEUE_REMOVE(&req->queue);
15+
}

src/lifecycle.h

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#ifndef LIFECYCLE_H_
2+
#define LIFECYCLE_H_
3+
4+
#include "../include/raft.h"
5+
#include "request.h"
6+
7+
void lifecycleRequestStart(struct raft *r, struct request *req);
8+
void lifecycleRequestEnd(struct raft *r, struct request *req);
9+
10+
#endif

src/replication.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#endif
1010
#include "err.h"
1111
#include "heap.h"
12+
#include "lifecycle.h"
1213
#include "log.h"
1314
#include "membership.h"
1415
#include "progress.h"
@@ -454,7 +455,7 @@ static struct request *getRequest(struct raft *r,
454455
req = QUEUE_DATA(head, struct request, queue);
455456
if (req->index == index) {
456457
assert(req->type == type);
457-
QUEUE_REMOVE(head);
458+
lifecycleRequestEnd(r, req);
458459
return req;
459460
}
460461
}

src/request.h

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ struct request
1010
void *data;
1111
int type;
1212
raft_index index;
13+
long id;
1314
void *queue[2];
1415
};
1516

0 commit comments

Comments
 (0)