Add replication to what -t bench measures. Add a bool to control printing RPC messages. Respond to ebt.replicate with messages that weren't requested.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4095 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
@ -75,17 +75,24 @@ static void _ssb_test_connections_changed(tf_ssb_t* ssb, tf_ssb_change_t change,
|
||||
printf("conns = %d %d %d\n", test->connection_count0, test->connection_count1, test->connection_count2);
|
||||
}
|
||||
|
||||
typedef struct _count_messages_t
|
||||
{
|
||||
tf_ssb_t* ssb;
|
||||
int count;
|
||||
} count_messages_t;
|
||||
|
||||
static void _count_messages_callback(JSValue row, void* user_data)
|
||||
{
|
||||
int* count = user_data;
|
||||
++*count;
|
||||
count_messages_t* count = user_data;
|
||||
JSContext* context = tf_ssb_get_context(count->ssb);
|
||||
JS_ToInt32(context, &count->count, JS_GetPropertyStr(context, row, "count"));
|
||||
}
|
||||
|
||||
static int _ssb_test_count_messages(tf_ssb_t* ssb)
|
||||
{
|
||||
int count = 0;
|
||||
tf_ssb_db_visit_query(ssb, "SELECT * FROM messages", JS_UNDEFINED, _count_messages_callback, &count);
|
||||
return count;
|
||||
count_messages_t count = { .ssb = ssb };
|
||||
tf_ssb_db_visit_query(ssb, "SELECT COUNT(*) AS count FROM messages", JS_UNDEFINED, _count_messages_callback, &count);
|
||||
return count.count;
|
||||
}
|
||||
|
||||
static void _message_added(tf_ssb_t* ssb, const char* id, void* user_data)
|
||||
@ -564,15 +571,55 @@ void tf_ssb_test_bench(const tf_test_options_t* options)
|
||||
struct timespec start_time = { 0 };
|
||||
struct timespec end_time = { 0 };
|
||||
clock_gettime(CLOCK_REALTIME, &start_time);
|
||||
for (int i = 0; i < 10 * 1024; i++)
|
||||
const int k_messages = 4096;
|
||||
for (int i = 0; i < k_messages; i++)
|
||||
{
|
||||
tf_ssb_append_post(ssb0, "Hello, world!");
|
||||
}
|
||||
clock_gettime(CLOCK_REALTIME, &end_time);
|
||||
printf("delta = %f seconds\n", (float)(end_time.tv_sec - start_time.tv_sec) + (end_time.tv_nsec - start_time.tv_nsec) / 1e9f);
|
||||
printf("insert = %f seconds\n", (float)(end_time.tv_sec - start_time.tv_sec) + (end_time.tv_nsec - start_time.tv_nsec) / 1e9f);
|
||||
|
||||
sqlite3* db1 = NULL;
|
||||
sqlite3_open(":memory:", &db1);
|
||||
assert(r == SQLITE_OK);
|
||||
tf_ssb_t* ssb1 = tf_ssb_create(&loop, NULL, db1);
|
||||
tf_ssb_generate_keys(ssb1);
|
||||
uint8_t id0bin[k_id_bin_len];
|
||||
tf_ssb_id_str_to_bin(id0bin, id0);
|
||||
|
||||
uv_idle_t idle0 = { .data = ssb0 };
|
||||
uv_idle_init(&loop, &idle0);
|
||||
uv_idle_start(&idle0, _ssb_test_idle);
|
||||
|
||||
uv_idle_t idle1 = { .data = ssb1 };
|
||||
uv_idle_init(&loop, &idle1);
|
||||
uv_idle_start(&idle1, _ssb_test_idle);
|
||||
|
||||
tf_ssb_register(tf_ssb_get_context(ssb0), ssb0);
|
||||
tf_ssb_register(tf_ssb_get_context(ssb1), ssb1);
|
||||
|
||||
tf_ssb_server_open(ssb0, 12347);
|
||||
tf_ssb_connect(ssb1, "127.0.0.1", 12347, id0bin);
|
||||
|
||||
printf("Waiting for messages.\n");
|
||||
clock_gettime(CLOCK_REALTIME, &start_time);
|
||||
while (_ssb_test_count_messages(ssb1) < k_messages)
|
||||
{
|
||||
uv_run(&loop, UV_RUN_ONCE);
|
||||
}
|
||||
clock_gettime(CLOCK_REALTIME, &end_time);
|
||||
printf("Done.\n");
|
||||
printf("replicate = %f seconds\n", (float)(end_time.tv_sec - start_time.tv_sec) + (end_time.tv_nsec - start_time.tv_nsec) / 1e9f);
|
||||
|
||||
tf_ssb_send_close(ssb1);
|
||||
tf_ssb_server_close(ssb0);
|
||||
|
||||
uv_close((uv_handle_t*)&idle0, NULL);
|
||||
uv_close((uv_handle_t*)&idle1, NULL);
|
||||
|
||||
uv_run(&loop, UV_RUN_DEFAULT);
|
||||
|
||||
tf_ssb_destroy(ssb1);
|
||||
tf_ssb_destroy(ssb0);
|
||||
|
||||
uv_loop_close(&loop);
|
||||
|
Reference in New Issue
Block a user