IdempotencyRequestMetadata add field n for integer argument

replication_quorum
YuQing 2022-07-05 19:25:55 +08:00
parent a966d1bf4d
commit 803d3cb626
2 changed files with 25 additions and 20 deletions

View File

@ -32,13 +32,14 @@ static struct {
#define CHECK_MASTER_METADATA(meta) \ #define CHECK_MASTER_METADATA(meta) \
(meta != NULL && g_current_time - meta->enqueue_time > \ (meta != NULL && g_current_time - (long)meta->enqueue_time > \
g_request_metadata.master_side_timeout) g_request_metadata.master_side_timeout)
static void process_master_side(IdempotencyRequestMetadataContext *ctx) static void process_master_side(IdempotencyRequestMetadataContext *ctx)
{ {
struct fast_mblock_chain chain; struct fast_mblock_chain chain;
struct fast_mblock_node *node; struct fast_mblock_node *node;
int count = 0;
chain.head = chain.tail = NULL; chain.head = chain.tail = NULL;
PTHREAD_MUTEX_LOCK(&ctx->lock); PTHREAD_MUTEX_LOCK(&ctx->lock);
@ -52,6 +53,7 @@ static void process_master_side(IdempotencyRequestMetadataContext *ctx)
} }
chain.tail = node; chain.tail = node;
++count;
ctx->list.head = ctx->list.head->next; ctx->list.head = ctx->list.head->next;
} while (CHECK_MASTER_METADATA(ctx->list.head)); } while (CHECK_MASTER_METADATA(ctx->list.head));
@ -65,6 +67,10 @@ static void process_master_side(IdempotencyRequestMetadataContext *ctx)
fast_mblock_batch_free(&ctx->allocator, &chain); fast_mblock_batch_free(&ctx->allocator, &chain);
} }
PTHREAD_MUTEX_UNLOCK(&ctx->lock); PTHREAD_MUTEX_UNLOCK(&ctx->lock);
if (count > 0) {
logInfo("#######func: %s, deal count: %d", __FUNCTION__, count);
}
} }
#define CHECK_SLAVE_METADATA(meta, dv) \ #define CHECK_SLAVE_METADATA(meta, dv) \
@ -129,9 +135,8 @@ static void *thread_run(void *arg)
return NULL; return NULL;
} }
int idempotency_request_metadata_init( int idempotency_request_metadata_init(IdempotencyRequestMetadataContext
IdempotencyRequestMetadataContext *ctx, *ctx, sf_is_master_callback is_master_callback, void *arg)
sf_is_master_callback is_master_callback, void *arg)
{ {
int result; int result;
@ -192,9 +197,8 @@ int idempotency_request_metadata_start(const int process_interval_ms,
SF_G_THREAD_STACK_SIZE); SF_G_THREAD_STACK_SIZE);
} }
int idempotency_request_metadata_add( int idempotency_request_metadata_add(IdempotencyRequestMetadataContext
IdempotencyRequestMetadataContext *ctx, *ctx, const SFRequestMetadata *metadata, const int n)
SFRequestMetadata *metadata)
{ {
IdempotencyRequestMetadata *idemp_meta; IdempotencyRequestMetadata *idemp_meta;
@ -206,6 +210,7 @@ int idempotency_request_metadata_add(
idemp_meta->req_id = metadata->req_id; idemp_meta->req_id = metadata->req_id;
idemp_meta->data_version = metadata->data_version; idemp_meta->data_version = metadata->data_version;
idemp_meta->n = n;
idemp_meta->enqueue_time = g_current_time; idemp_meta->enqueue_time = g_current_time;
idemp_meta->next = NULL; idemp_meta->next = NULL;
@ -221,9 +226,8 @@ int idempotency_request_metadata_add(
return (idemp_meta != NULL ? 0 : ENOMEM); return (idemp_meta != NULL ? 0 : ENOMEM);
} }
int idempotency_request_metadata_get( int idempotency_request_metadata_get(IdempotencyRequestMetadataContext
IdempotencyRequestMetadataContext *ctx, *ctx, const int64_t req_id, int64_t *data_version, int *n)
const int64_t req_id, int64_t *data_version)
{ {
int result; int result;
IdempotencyRequestMetadata *meta; IdempotencyRequestMetadata *meta;
@ -235,6 +239,9 @@ int idempotency_request_metadata_get(
if (req_id == meta->req_id) { if (req_id == meta->req_id) {
result = 0; result = 0;
*data_version = meta->data_version; *data_version = meta->data_version;
if (n != NULL) {
*n = meta->n;
}
break; break;
} }
meta = meta->next; meta = meta->next;

View File

@ -24,7 +24,8 @@ typedef bool (*sf_is_master_callback)(void *arg, int64_t *data_version);
typedef struct idempotency_request_metadata { typedef struct idempotency_request_metadata {
int64_t req_id; int64_t req_id;
int64_t data_version; int64_t data_version;
time_t enqueue_time; int n; //integer argument
uint32_t enqueue_time;
struct idempotency_request_metadata *next; struct idempotency_request_metadata *next;
} IdempotencyRequestMetadata; } IdempotencyRequestMetadata;
@ -46,20 +47,17 @@ typedef struct idempotency_request_metadata_context {
extern "C" { extern "C" {
#endif #endif
int idempotency_request_metadata_init( int idempotency_request_metadata_init(IdempotencyRequestMetadataContext
IdempotencyRequestMetadataContext *ctx, *ctx, sf_is_master_callback is_master_callback, void *arg);
sf_is_master_callback is_master_callback, void *arg);
int idempotency_request_metadata_start(const int process_interval_ms, int idempotency_request_metadata_start(const int process_interval_ms,
const int master_side_timeout); const int master_side_timeout);
int idempotency_request_metadata_add( int idempotency_request_metadata_add(IdempotencyRequestMetadataContext
IdempotencyRequestMetadataContext *ctx, *ctx, const SFRequestMetadata *metadata, const int n);
SFRequestMetadata *metadata);
int idempotency_request_metadata_get( int idempotency_request_metadata_get(IdempotencyRequestMetadataContext
IdempotencyRequestMetadataContext *ctx, *ctx, const int64_t req_id, int64_t *data_version, int *n);
const int64_t req_id, int64_t *data_version);
#ifdef __cplusplus #ifdef __cplusplus
} }