From b16e56b9a3b0cf4e890fc13b0111500db9e9655f Mon Sep 17 00:00:00 2001 From: Yuqing Date: Sun, 10 Apr 2016 17:44:10 +0800 Subject: [PATCH] id generator for multi processes --- HISTORY | 2 +- src/id_generator.c | 11 ++++++----- src/logger.c | 5 ++++- src/tests/test_id_generator.c | 11 +++++++---- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/HISTORY b/HISTORY index 6f5993c..9c55e67 100644 --- a/HISTORY +++ b/HISTORY @@ -1,5 +1,5 @@ -Version 1.27 2016-04-09 +Version 1.27 2016-04-10 * add function fd_set_cloexec * php-fastcommon.spec.in support PHP 7 * add file lock and unlock functions diff --git a/src/id_generator.c b/src/id_generator.c index fc190f8..ba1f512 100644 --- a/src/id_generator.c +++ b/src/id_generator.c @@ -69,10 +69,10 @@ int id_generator_init_ex(struct idg_context *context, const char *filename, return EINVAL; } - printf("ip_addr: %s, s_addr: %08X\n", local_ip, ip_addr.s_addr); - printf("mask number: %08X\n", (1 << mid_bits)); + logDebug("ip_addr: %s, s_addr: %08X, mask number: %08X", + local_ip, ip_addr.s_addr, (1 << mid_bits)); - mid = (ip_addr.s_addr >> (32 - mid_bits)) & ((1 << mid_bits) - 1); + mid = ntohl(ip_addr.s_addr) & ((1 << mid_bits) - 1); } if ((context->fd = open(filename, O_RDWR | O_CREAT, 0644)) < 0) @@ -91,7 +91,8 @@ int id_generator_init_ex(struct idg_context *context, const char *filename, context->masked_mid = ((int64_t)mid) << context->sn_bits; context->sn_mask = ((int64_t)1 << context->sn_bits) - 1; - printf("mid: %08X, masked_mid: %016llX, sn_mask: %08llX\n", mid, context->masked_mid, context->sn_mask); + logDebug("mid: %08X, masked_mid: %016llX, sn_mask: %08llX\n", + mid, context->masked_mid, context->sn_mask); return 0; } @@ -171,7 +172,7 @@ int id_generator_next(struct idg_context *context, int64_t *id) file_unlock(context->fd); - *id = (time(NULL) << 32) | context->masked_mid | (sn & context->sn_mask); + *id = (((int64_t)time(NULL)) << 32) | context->masked_mid | (sn & context->sn_mask); return result; } diff --git a/src/logger.c b/src/logger.c index 1b86300..2e38318 100644 --- a/src/logger.c +++ b/src/logger.c @@ -714,7 +714,10 @@ static void* log_gzip_func(void *args) snprintf(full_filename, sizeof(full_filename), "%s%s", log_filepath, filename_array.filenames[i]); snprintf(cmd, sizeof(cmd), "%s %s", gzip, full_filename); - system(cmd); + if (system(cmd) == -1) + { + fprintf(stderr, "execute %s fail\n", cmd); + } } log_free_filename_array(&filename_array); diff --git a/src/tests/test_id_generator.c b/src/tests/test_id_generator.c index 3eb5137..047c5fd 100644 --- a/src/tests/test_id_generator.c +++ b/src/tests/test_id_generator.c @@ -22,6 +22,9 @@ int main(int argc, char *argv[]) int64_t id; const int machine_id = 0; const int mid_bits = 8; + + log_init(); + //g_log_context.log_level = LOG_DEBUG; result = id_generator_init_ex(&context, "/tmp/sn.txt", machine_id, mid_bits); @@ -30,17 +33,17 @@ int main(int argc, char *argv[]) return result; } - id_generator_next(&context, &id); - printf("id: %"PRId64", %016llX\n", id, id); - for (i=0; i<1000000; i++) + //id_generator_next(&context, &id); + //printf("id: %"PRId64", %016llX\n", id, id); + for (i=0; i<100000; i++) { result = id_generator_next(&context, &id); if (result != 0) { break; } + printf("%"PRId64", %016llX\n", id, id); } - printf("id: %"PRId64", %016llX\n", id, id); id_generator_destroy(&context); return 0;