Commit 3096ecd7 authored by Li Wei's avatar Li Wei Committed by Willem Thiart
Browse files

DAOS-333 log: Pass correct indices to log_offer and log_poll



log_offer and log_poll should get log entry index rather than internal
array index. That would match the callback comment in raft.h and would
also match the log_pop case.
Signed-off-by: default avatarLi Wei <wei.g.li@intel.com>
parent 854a06d2
...@@ -106,6 +106,7 @@ void log_clear(log_t* me_) ...@@ -106,6 +106,7 @@ void log_clear(log_t* me_)
int log_append_entry(log_t* me_, raft_entry_t* c) int log_append_entry(log_t* me_, raft_entry_t* c)
{ {
log_private_t* me = (log_private_t*)me_; log_private_t* me = (log_private_t*)me_;
int idx = me->base + me->count + 1;
int e; int e;
e = __ensurecapacity(me); e = __ensurecapacity(me);
...@@ -117,8 +118,8 @@ int log_append_entry(log_t* me_, raft_entry_t* c) ...@@ -117,8 +118,8 @@ int log_append_entry(log_t* me_, raft_entry_t* c)
if (me->cb && me->cb->log_offer) if (me->cb && me->cb->log_offer)
{ {
void* ud = raft_get_udata(me->raft); void* ud = raft_get_udata(me->raft);
e = me->cb->log_offer(me->raft, ud, &me->entries[me->back], me->back); e = me->cb->log_offer(me->raft, ud, &me->entries[me->back], idx);
raft_offer_log(me->raft, &me->entries[me->back], me->back); raft_offer_log(me->raft, &me->entries[me->back], idx);
if (e == RAFT_ERR_SHUTDOWN) if (e == RAFT_ERR_SHUTDOWN)
return e; return e;
} }
...@@ -192,10 +193,11 @@ void log_delete(log_t* me_, int idx) ...@@ -192,10 +193,11 @@ void log_delete(log_t* me_, int idx)
for (end = log_count(me_); idx < end; idx++) for (end = log_count(me_); idx < end; idx++)
{ {
int idx_tmp = me->base + me->count;
if (me->cb && me->cb->log_pop) if (me->cb && me->cb->log_pop)
me->cb->log_pop(me->raft, raft_get_udata(me->raft), me->cb->log_pop(me->raft, raft_get_udata(me->raft),
&me->entries[me->back - 1], me->back); &me->entries[me->back - 1], idx_tmp);
raft_pop_log(me->raft, &me->entries[me->back - 1], me->back); raft_pop_log(me->raft, &me->entries[me->back - 1], idx_tmp);
me->back--; me->back--;
me->count--; me->count--;
} }
...@@ -204,6 +206,7 @@ void log_delete(log_t* me_, int idx) ...@@ -204,6 +206,7 @@ void log_delete(log_t* me_, int idx)
void *log_poll(log_t * me_) void *log_poll(log_t * me_)
{ {
log_private_t* me = (log_private_t*)me_; log_private_t* me = (log_private_t*)me_;
int idx = me->base + 1;
if (0 == log_count(me_)) if (0 == log_count(me_))
return NULL; return NULL;
...@@ -211,7 +214,7 @@ void *log_poll(log_t * me_) ...@@ -211,7 +214,7 @@ void *log_poll(log_t * me_)
const void *elem = &me->entries[me->front]; const void *elem = &me->entries[me->front];
if (me->cb && me->cb->log_poll) if (me->cb && me->cb->log_poll)
me->cb->log_poll(me->raft, raft_get_udata(me->raft), me->cb->log_poll(me->raft, raft_get_udata(me->raft),
&me->entries[me->front], me->front); &me->entries[me->front], idx);
me->front++; me->front++;
me->count--; me->count--;
me->base++; me->base++;
......
...@@ -20,6 +20,17 @@ void TestLog_new_is_empty(CuTest * tc) ...@@ -20,6 +20,17 @@ void TestLog_new_is_empty(CuTest * tc)
CuAssertTrue(tc, 0 == log_count(l)); CuAssertTrue(tc, 0 == log_count(l));
} }
static int __log_offer(
raft_server_t* raft,
void *user_data,
raft_entry_t *entry,
int entry_idx
)
{
CuAssertIntEquals((CuTest*)raft, 1, entry_idx);
return 0;
}
void TestLog_append_is_not_empty(CuTest * tc) void TestLog_append_is_not_empty(CuTest * tc)
{ {
void *l; void *l;
...@@ -28,6 +39,10 @@ void TestLog_append_is_not_empty(CuTest * tc) ...@@ -28,6 +39,10 @@ void TestLog_append_is_not_empty(CuTest * tc)
e.id = 1; e.id = 1;
l = log_new(); l = log_new();
raft_cbs_t funcs = {
.log_offer = __log_offer
};
log_set_callbacks(l, &funcs, tc);
CuAssertTrue(tc, 0 == log_append_entry(l, &e)); CuAssertTrue(tc, 0 == log_append_entry(l, &e));
CuAssertTrue(tc, 1 == log_count(l)); CuAssertTrue(tc, 1 == log_count(l));
} }
......
...@@ -270,7 +270,7 @@ static int __raft_logentry_offer( ...@@ -270,7 +270,7 @@ static int __raft_logentry_offer(
int ety_idx int ety_idx
) )
{ {
CuAssertIntEquals(udata, ety_idx, 0); CuAssertIntEquals(udata, ety_idx, 1);
ety->data.buf = udata; ety->data.buf = udata;
return 0; return 0;
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment