forked from lei.chen/myxce
test(ha-commit-durability): end-to-end durable-majority commit + liveness integration tests (task 5.1)
This commit is contained in:
parent
e9e2a6d703
commit
e14bd62115
4 changed files with 404 additions and 0 deletions
|
|
@ -302,6 +302,16 @@ static uint64_t flusher_flush_once(persist_t* p)
|
|||
if (tip > dur)
|
||||
atomic_store_explicit(&p->durable_lsn, tip, memory_order_release);
|
||||
|
||||
#ifdef XCE_TESTING
|
||||
/* Record which thread ran this successful fdatasync (task 5.1 / Req 1.6):
|
||||
* a liveness test asserts this is the dedicated flusher thread, never the
|
||||
* caller/iomgr/heartbeat thread. Written under p->lock; read after the
|
||||
* flusher has caught up, so no extra synchronization is needed. */
|
||||
p->test_last_fdatasync_thread = pthread_self();
|
||||
atomic_store_explicit(&p->test_last_fdatasync_thread_set, 1,
|
||||
memory_order_release);
|
||||
#endif
|
||||
|
||||
pthread_mutex_unlock(&p->lock);
|
||||
return tip;
|
||||
}
|
||||
|
|
@ -841,6 +851,18 @@ unsigned persist_test_replicated_fdatasync_count(persist_t* p)
|
|||
memory_order_relaxed);
|
||||
}
|
||||
|
||||
pthread_t persist_test_last_fdatasync_thread(persist_t* p)
|
||||
{
|
||||
/* If no flusher fdatasync has advanced durable_lsn yet, return the
|
||||
* caller's own id so an unprimed read never spuriously looks off-thread.
|
||||
* After a flush, return the recorded flusher thread id (Req 1.6). */
|
||||
if (!p ||
|
||||
atomic_load_explicit(&p->test_last_fdatasync_thread_set,
|
||||
memory_order_acquire) == 0)
|
||||
return pthread_self();
|
||||
return p->test_last_fdatasync_thread;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ *
|
||||
* Durability-verification test seam (ha-commit-durability Req 3.2/3.3)*
|
||||
* *
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue