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

Commit 02ae985

Browse files
authored
Merge pull request #337 from cole-miller/truncate-tracing
Add some tracing to help debug the truncate issues
2 parents 85059c4 + 0522d09 commit 02ae985

File tree

4 files changed

+19
-0
lines changed

4 files changed

+19
-0
lines changed

src/uv.c

+1
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ static int uvStart(struct raft_io *io,
156156

157157
void uvMaybeFireCloseCb(struct uv *uv)
158158
{
159+
tracef("uv maybe fire close cb");
159160
if (!uv->closing) {
160161
return;
161162
}

src/uv_append.c

+7
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
#include "uv_encoding.h"
77
#include "uv_writer.h"
88

9+
#define tracef(...) Tracef(uv->tracer, __VA_ARGS__)
10+
911
/* The happy path for an append request is:
1012
*
1113
* - If there is a current segment and it is has enough spare capacity to hold
@@ -799,6 +801,8 @@ int UvBarrier(struct uv *uv,
799801

800802
void UvUnblock(struct uv *uv)
801803
{
804+
tracef("uv unblock");
805+
tracef("clear uv barrier");
802806
uv->barrier = NULL;
803807
if (uv->closing) {
804808
uvMaybeFireCloseCb(uv);
@@ -817,6 +821,7 @@ void UvUnblock(struct uv *uv)
817821
* we're closing and abort there. */
818822
static void uvBarrierClose(struct uv *uv)
819823
{
824+
tracef("uv barrier close");
820825
struct UvBarrier *barrier = NULL;
821826
queue *head;
822827
assert(uv->closing);
@@ -828,6 +833,7 @@ static void uvBarrierClose(struct uv *uv)
828833
barrier = segment->barrier;
829834
barrier->cb(barrier);
830835
if (segment->barrier == uv->barrier) {
836+
tracef("clear uv barrier");
831837
uv->barrier = NULL;
832838
}
833839
}
@@ -840,6 +846,7 @@ static void uvBarrierClose(struct uv *uv)
840846
* too. */
841847
if (uv->barrier != NULL) {
842848
uv->barrier->cb(uv->barrier);
849+
tracef("clear uv barrier");
843850
uv->barrier = NULL;
844851
}
845852
}

src/uv_finalize.c

+2
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ static void uvFinalizeAfterWorkCb(uv_work_t *work, int status)
7575
{
7676
struct uvDyingSegment *segment = work->data;
7777
struct uv *uv = segment->uv;
78+
tracef("uv finalize after work cb status:%d", status);
7879
queue *head;
7980
int rv;
8081

@@ -88,6 +89,7 @@ static void uvFinalizeAfterWorkCb(uv_work_t *work, int status)
8889
/* If we have no more dismissed segments to close, check if there's a
8990
* barrier to unblock or if we are done closing. */
9091
if (QUEUE_IS_EMPTY(&uv->finalize_reqs)) {
92+
tracef("unblock barrier or close");
9193
if (uv->barrier != NULL && UvBarrierReady(uv)) {
9294
uv->barrier->cb(uv->barrier);
9395
}

src/uv_truncate.c

+9
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ static void uvTruncateWorkCb(uv_work_t *work)
2323
{
2424
struct uvTruncate *truncate = work->data;
2525
struct uv *uv = truncate->uv;
26+
tracef("uv truncate work cb");
2627
struct uvSnapshotInfo *snapshots;
2728
struct uvSegmentInfo *segments;
2829
struct uvSegmentInfo *segment;
@@ -89,6 +90,7 @@ static void uvTruncateWorkCb(uv_work_t *work)
8990
RaftHeapFree(segments);
9091
truncate->status = 0;
9192

93+
tracef("uv truncate work cb ok");
9294
return;
9395

9496
err_after_list:
@@ -105,10 +107,12 @@ static void uvTruncateAfterWorkCb(uv_work_t *work, int status)
105107
assert(truncate != NULL);
106108
struct uv *uv = truncate->uv;
107109
assert(uv != NULL);
110+
tracef("uv truncate after work cb status:%d", status);
108111
assert(status == 0);
109112
if (truncate->status != 0) {
110113
uv->errored = true;
111114
}
115+
tracef("clear truncate work");
112116
uv->truncate_work.data = NULL;
113117
RaftHeapFree(truncate);
114118
UvUnblock(uv);
@@ -118,10 +122,12 @@ static void uvTruncateBarrierCb(struct UvBarrier *barrier)
118122
{
119123
struct uvTruncate *truncate = barrier->data;
120124
struct uv *uv = truncate->uv;
125+
tracef("uv truncate barrier cb");
121126
int rv;
122127

123128
/* If we're closing, don't perform truncation at all and abort here. */
124129
if (uv->closing) {
130+
tracef("closing => don't truncate");
125131
RaftHeapFree(truncate);
126132
return;
127133
}
@@ -131,11 +137,13 @@ static void uvTruncateBarrierCb(struct UvBarrier *barrier)
131137
assert(uv->finalize_work.data == NULL);
132138
assert(uv->truncate_work.data == NULL);
133139

140+
tracef("set truncate work");
134141
uv->truncate_work.data = truncate;
135142
rv = uv_queue_work(uv->loop, &uv->truncate_work, uvTruncateWorkCb,
136143
uvTruncateAfterWorkCb);
137144
if (rv != 0) {
138145
tracef("truncate index %lld: %s", truncate->index, uv_strerror(rv));
146+
tracef("clear truncate work");
139147
uv->truncate_work.data = NULL;
140148
uv->errored = true;
141149
}
@@ -148,6 +156,7 @@ int UvTruncate(struct raft_io *io, raft_index index)
148156
int rv;
149157

150158
uv = io->impl;
159+
tracef("uv truncate %llu", index);
151160
assert(!uv->closing);
152161

153162
/* We should truncate only entries that we were requested to append in the

0 commit comments

Comments
 (0)