TEST_F(TestTimerTask, test_timer_fetch) { ObMergerRpcStub stub; ThreadSpecificBuffer buffer; ObPacketFactory factory; tbnet::Transport transport; tbnet::DefaultPacketStreamer streamer; streamer.setPacketFactory(&factory); transport.start(); ObClientManager client_manager; EXPECT_TRUE(OB_SUCCESS == client_manager.initialize(&transport, &streamer)); EXPECT_TRUE(OB_SUCCESS == stub.init(&buffer, &client_manager)); int64_t timeout = 1000000; ObServer root_server; root_server.set_ipv4_addr(addr, MockRootServer::ROOT_SERVER_PORT); ObServer merge_server; ObMergerRpcProxy proxy(1, timeout, root_server, merge_server); EXPECT_TRUE(OB_SUCCESS != proxy.init(NULL, NULL, NULL)); EXPECT_TRUE(OB_SUCCESS != proxy.init(&stub, NULL, NULL)); ObMergerSchemaManager * schema = new ObMergerSchemaManager; EXPECT_TRUE(NULL != schema); ObSchemaManagerV2 temp(200); EXPECT_TRUE(OB_SUCCESS == schema->init(false, temp)); ObTabletLocationCache * location = new ObMergerTabletLocationCache; EXPECT_TRUE(NULL != location); EXPECT_TRUE(OB_SUCCESS == proxy.init(&stub, schema, location)); // not start root server ObMergerSchemaTask task; task.init(&proxy, schema); ObTimer timer; EXPECT_TRUE(OB_SUCCESS == timer.init()); task.set_version(1024, 1025); EXPECT_TRUE(OB_SUCCESS == timer.schedule(task, 2000 * 1000, false)); EXPECT_TRUE(200 == schema->get_latest_version()); // start root server MockRootServer server; MockServerRunner test_root_server(server); tbsys::CThread root_server_thread; root_server_thread.start(&test_root_server, NULL); sleep(5); // wait timer task processed EXPECT_TRUE(1025 == schema->get_latest_version()); timer.destroy(); transport.stop(); server.stop(); sleep(5); }
TEST_F(TestRpcStub, test_scan_root_table) { ObMergerRpcStub stub; ThreadSpecificBuffer buffer; ObPacketFactory factory; tbnet::Transport transport; tbnet::DefaultPacketStreamer streamer; streamer.setPacketFactory(&factory); transport.start(); ObClientManager client_manager; EXPECT_TRUE(OB_SUCCESS == client_manager.initialize(&transport, &streamer)); EXPECT_TRUE(OB_SUCCESS == stub.init(&buffer, &client_manager)); // self server ObServer root_server; root_server.set_ipv4_addr(addr, MockRootServer::ROOT_SERVER_PORT); // scan root error char * string = "test_table"; uint64_t root_table = 0; uint64_t table_id = 100; ObString row_key; row_key.assign(string, strlen(string)); ObScanner scanner; EXPECT_TRUE(OB_SUCCESS != stub.fetch_tablet_location(timeout, root_server, root_table, table_id, row_key, scanner)); // start root server MockRootServer server; MockServerRunner test_root_server(server); tbsys::CThread root_server_thread; root_server_thread.start(&test_root_server, NULL); sleep(2); // root table id = 0 root_table = 0; EXPECT_TRUE(OB_SUCCESS == stub.fetch_tablet_location(timeout, root_server, root_table, table_id, row_key, scanner)); transport.stop(); server.stop(); sleep(10); }
TEST_F(TestRpcStub, test_find_server) { // client thread one ObMergerRpcStub stub; ThreadSpecificBuffer buffer; ObPacketFactory factory; tbnet::Transport transport; tbnet::DefaultPacketStreamer streamer; streamer.setPacketFactory(&factory); // 2 & 3 (io transport thread) transport.start(); ObClientManager client_manager; EXPECT_TRUE(OB_SUCCESS == client_manager.initialize(&transport, &streamer)); EXPECT_TRUE(OB_SUCCESS == stub.init(&buffer, &client_manager)); ObServer root_server; root_server.set_ipv4_addr(addr, MockRootServer::ROOT_SERVER_PORT); // register error ObServer update_server; EXPECT_TRUE(OB_SUCCESS != stub.find_server(timeout, root_server, update_server)); // server thread MockRootServer server; MockServerRunner test_root_server(server); tbsys::CThread root_server_thread; // 4(queue) & 5 & 6(io transport) & 7(main) root_server_thread.start(&test_root_server, NULL); sleep(2); EXPECT_TRUE(OB_SUCCESS == stub.find_server(timeout, root_server, update_server)); EXPECT_TRUE(MockUpdateServer::UPDATE_SERVER_PORT == update_server.get_port()); EXPECT_TRUE(OB_SUCCESS == stub.find_server(timeout, root_server, update_server)); EXPECT_TRUE(MockUpdateServer::UPDATE_SERVER_PORT == update_server.get_port()); transport.stop(); server.stop(); sleep(10); }
TEST_F(TestRpcStub, test_fetch_schema) { ObMergerRpcStub stub; ThreadSpecificBuffer buffer; ObPacketFactory factory; tbnet::Transport transport; tbnet::DefaultPacketStreamer streamer; streamer.setPacketFactory(&factory); transport.start(); ObClientManager client_manager; EXPECT_TRUE(OB_SUCCESS == client_manager.initialize(&transport, &streamer)); EXPECT_TRUE(OB_SUCCESS == stub.init(&buffer, &client_manager)); // self server ObServer root_server; root_server.set_ipv4_addr(addr, MockRootServer::ROOT_SERVER_PORT); // start root server MockRootServer server; MockServerRunner test_root_server(server); tbsys::CThread root_server_thread; root_server_thread.start(&test_root_server, NULL); sleep(2); ObSchemaManagerV2 manager; // wrong version int64_t timestamp = 1023; EXPECT_TRUE(OB_SUCCESS != stub.fetch_schema(timeout, root_server, timestamp, manager)); timestamp = 1024; EXPECT_TRUE(OB_SUCCESS == stub.fetch_schema(timeout, root_server, timestamp, manager)); EXPECT_TRUE(manager.get_version() == 1025); transport.stop(); server.stop(); sleep(10); }
TEST_F(TestSchemaProxy, test_get) { ObMergerRpcStub stub; ThreadSpecificBuffer buffer; ObPacketFactory factory; tbnet::Transport transport; tbnet::DefaultPacketStreamer streamer; streamer.setPacketFactory(&factory); transport.start(); ObClientManager client_manager; EXPECT_TRUE(OB_SUCCESS == client_manager.initialize(&transport, &streamer)); EXPECT_TRUE(OB_SUCCESS == stub.init(&buffer, &client_manager)); ObServer root_server; root_server.set_ipv4_addr(addr, MockRootServer::ROOT_SERVER_PORT); ObMergerRootRpcProxy root_proxy(0, timeout, root_server); // not init const ObSchemaManagerV2 * schema = NULL; ObMergerSchemaManager * manager = new ObMergerSchemaManager; EXPECT_TRUE(NULL != manager); int64_t timestamp = ObMergerSchemaProxy::LOCAL_NEWEST; ObMergerSchemaProxy proxy(&root_proxy, manager); EXPECT_TRUE(OB_SUCCESS == proxy.get_schema(timestamp, &schema)); EXPECT_TRUE(schema == NULL); timestamp = 1001; EXPECT_TRUE(OB_SUCCESS != proxy.get_schema(timestamp, &schema)); timestamp = ObMergerSchemaProxy::LOCAL_NEWEST; EXPECT_TRUE(OB_SUCCESS == root_proxy.init(&stub)); EXPECT_TRUE(OB_SUCCESS == proxy.get_schema(timestamp, &schema)); EXPECT_TRUE(schema == NULL); // init schema manger ObSchemaManagerV2 sample(1022); EXPECT_TRUE(OB_SUCCESS == manager->init(sample)); EXPECT_TRUE(OB_SUCCESS == proxy.get_schema(timestamp, &schema)); EXPECT_TRUE(NULL != schema); EXPECT_TRUE(schema->get_version() == 1022); EXPECT_TRUE(OB_SUCCESS == proxy.release_schema(schema)); // server not start timestamp = 1024; EXPECT_TRUE(OB_SUCCESS != proxy.get_schema(timestamp, &schema)); // start root server MockRootServer server; MockServerRunner test_root_server(server); tbsys::CThread root_server_thread; root_server_thread.start(&test_root_server, NULL); sleep(2); // not exist but server exist timestamp = 1024; EXPECT_TRUE(OB_SUCCESS == proxy.get_schema(timestamp, &schema)); EXPECT_TRUE(NULL != schema); EXPECT_TRUE(schema->get_version() == 1025); EXPECT_TRUE(OB_SUCCESS == proxy.release_schema(schema)); // get server newest for init timestamp = 100; // add schema failed EXPECT_TRUE(OB_SUCCESS != proxy.get_schema(timestamp, &schema)); // local version timestamp = ObMergerSchemaProxy::LOCAL_NEWEST; EXPECT_TRUE(OB_SUCCESS == proxy.get_schema(timestamp, &schema)); EXPECT_TRUE(NULL != schema); EXPECT_TRUE(schema->get_version() == 1025); EXPECT_TRUE(OB_SUCCESS == proxy.release_schema(schema)); if (manager) { delete manager; manager = NULL; } transport.stop(); server.stop(); sleep(5); }
// multi-thread schema test TEST_F(TestSchemaProxy, test_multi_schema) { ObMergerRpcStub stub; ThreadSpecificBuffer buffer; ObPacketFactory factory; tbnet::Transport transport; tbnet::DefaultPacketStreamer streamer; streamer.setPacketFactory(&factory); transport.start(); ObClientManager client_manager; EXPECT_TRUE(OB_SUCCESS == client_manager.initialize(&transport, &streamer)); EXPECT_TRUE(OB_SUCCESS == stub.init(&buffer, &client_manager)); ObServer root_server; root_server.set_ipv4_addr(addr, MockRootServer::ROOT_SERVER_PORT); ObServer update_server; update_server.set_ipv4_addr(addr, MockUpdateServer::UPDATE_SERVER_PORT); ObServer merge_server; merge_server.set_ipv4_addr(addr, 10256); ObMergerRootRpcProxy root_proxy(0, timeout, root_server); EXPECT_TRUE(OB_SUCCESS == root_proxy.init(&stub)); ObMergerSchemaManager * manager = new ObMergerSchemaManager; EXPECT_TRUE(NULL != manager); ObSchemaManagerV2 sample(1022); EXPECT_TRUE(OB_SUCCESS == manager->init(sample)); ObMergerSchemaProxy proxy(&root_proxy, manager); // start root server MockRootServer server; MockServerRunner test_root_server(server); tbsys::CThread root_server_thread; root_server_thread.start(&test_root_server, NULL); sleep(2); const int MAX_THREAD_COUNT = 15; pthread_t threads[MAX_THREAD_COUNT]; for (int i = 0; i < MAX_THREAD_COUNT; ++i) { int ret = pthread_create(&threads[i], NULL, fetch_schema, &proxy); if (ret != OB_SUCCESS) { break; } } for (int i = 0; i < MAX_THREAD_COUNT; ++i) { pthread_join(threads[i], NULL); } if (NULL != manager) { delete manager; manager = NULL; } transport.stop(); server.stop(); sleep(5); }
TEST_F(TestTimerTask, test_fetch_schema) { /* const char * test = "test"; printf("ret[%d]\n", memcmp(NULL, test, 0)); printf("ret[%d]\n", memcmp(test, NULL, 0)); */ ObMergerRpcStub stub; ThreadSpecificBuffer buffer; ObPacketFactory factory; tbnet::Transport transport; tbnet::DefaultPacketStreamer streamer; streamer.setPacketFactory(&factory); transport.start(); ObClientManager client_manager; EXPECT_TRUE(OB_SUCCESS == client_manager.initialize(&transport, &streamer)); EXPECT_TRUE(OB_SUCCESS == stub.init(&buffer, &client_manager)); int64_t timeout = 100000; ObServer root_server; root_server.set_ipv4_addr(addr, MockRootServer::ROOT_SERVER_PORT); ObServer merge_server; ObMergerRpcProxy proxy(1, timeout, root_server, merge_server); EXPECT_TRUE(OB_SUCCESS != proxy.init(NULL, NULL, NULL)); EXPECT_TRUE(OB_SUCCESS != proxy.init(&stub, NULL, NULL)); ObMergerSchemaManager * schema = new ObMergerSchemaManager; EXPECT_TRUE(NULL != schema); ObSchemaManagerV2 temp(200); EXPECT_TRUE(OB_SUCCESS == schema->init(false, temp)); ObTabletLocationCache * location = new ObMergerTabletLocationCache; EXPECT_TRUE(NULL != location); EXPECT_TRUE(OB_SUCCESS == proxy.init(&stub, schema, location)); // not start root server ObMergerSchemaTask task; task.init(&proxy, schema); task.runTimerTask(); EXPECT_TRUE(200 == schema->get_latest_version()); // stat failed ObMergerSchemaTask task1; task1.init(NULL, NULL); task1.runTimerTask(); EXPECT_TRUE(200 == schema->get_latest_version()); // start root server MockRootServer server; MockServerRunner test_root_server(server); tbsys::CThread root_server_thread; root_server_thread.start(&test_root_server, NULL); sleep(2); task.set_version(1024, 1025); task.runTimerTask(); // root server returned EXPECT_TRUE(1025 == schema->get_latest_version()); transport.stop(); server.stop(); sleep(5); }
TEST_F(TestGetRequestEvent, test_get) { ObMergerRpcStub stub; ThreadSpecificBuffer buffer; ObPacketFactory factory; tbnet::Transport transport; tbnet::DefaultPacketStreamer streamer; streamer.setPacketFactory(&factory); transport.start(); ObClientManager client_manager; EXPECT_TRUE(OB_SUCCESS == client_manager.initialize(&transport, &streamer)); EXPECT_TRUE(OB_SUCCESS == stub.init(&buffer, &client_manager)); ObServer root_server; root_server.set_ipv4_addr(addr, MockRootServer::ROOT_SERVER_PORT); ObServer update_server; update_server.set_ipv4_addr(addr, MockUpdateServer::UPDATE_SERVER_PORT); ObServer merge_server; merge_server.set_ipv4_addr(addr, 10256); ObMergerRpcProxy proxy(3, timeout, update_server); root_server.set_ipv4_addr(addr, MockRootServer::ROOT_SERVER_PORT); ObMergerRootRpcProxy rpc(0, timeout, root_server); EXPECT_TRUE(OB_SUCCESS == rpc.init(&stub)); ObTabletLocationCache * location = new ObMergerTabletLocationCache; EXPECT_TRUE(NULL != location); EXPECT_TRUE(OB_SUCCESS == location->init(50000 * 5, 1000, 10000)); ObMergerLocationCacheProxy cache(merge_server, &rpc, location); // init tablet cache char temp[256] = ""; char temp_end[256] = ""; ObServer server; const uint64_t START_ROW = 100L; const uint64_t MAX_ROW = 300L; for (uint64_t i = START_ROW; i < MAX_ROW - 100; i += 100) { server.set_ipv4_addr(addr, MockChunkServer::CHUNK_SERVER_PORT); ObTabletLocation addr(i, server); ObTabletLocationList list; EXPECT_TRUE(OB_SUCCESS == list.add(addr)); EXPECT_TRUE(OB_SUCCESS == list.add(addr)); EXPECT_TRUE(OB_SUCCESS == list.add(addr)); snprintf(temp, 100, "row_%lu", i); snprintf(temp_end, 100, "row_%lu", i + 100); ObString start_key(100, strlen(temp), temp); ObString end_key(100, strlen(temp_end), temp_end); ObRange range; range.table_id_ = 234; range.start_key_ = start_key; range.end_key_ = end_key; list.set_timestamp(tbsys::CTimeUtil::getTime()); EXPECT_TRUE(OB_SUCCESS == location->set(range, list)); } ObMergerTabletLocation succ_addr; ObTabletLocationList list; EXPECT_TRUE(OB_SUCCESS == proxy.init(&stub, &cache, NULL)); // start root server MockRootServer root; tbsys::CThread root_server_thread; MockServerRunner test_root_server(root); root_server_thread.start(&test_root_server, NULL); // start chunk server MockChunkServer chunk; tbsys::CThread chunk_server_thread; MockServerRunner test_chunk_server(chunk); chunk_server_thread.start(&test_chunk_server, NULL); sleep(2); ObMergerAsyncRpcStub async; ObMergerLocationCacheProxy location_proxy(root_server, &rpc, location); ObGetRequestEvent request(&location_proxy, &async); ObGetParam get_param; ObCellInfo cell; ObString row_key; snprintf(temp, 100, "row_101"); row_key.assign(temp, strlen(temp)); cell.table_id_ = 234; cell.column_id_ = 111; cell.row_key_ = row_key; // add same cells EXPECT_TRUE(OB_SUCCESS == get_param.add_cell(cell)); EXPECT_TRUE(OB_SUCCESS == get_param.add_cell(cell)); EXPECT_TRUE(OB_SUCCESS == get_param.add_cell(cell)); EXPECT_TRUE(OB_SUCCESS == get_param.add_cell(cell)); EXPECT_TRUE(OB_SUCCESS == get_param.add_cell(cell)); EXPECT_TRUE(OB_SUCCESS == get_param.add_cell(cell)); EXPECT_TRUE(OB_SUCCESS == get_param.add_cell(cell)); // not init EXPECT_TRUE(OB_SUCCESS != request.set_request_param(get_param, timeout)); EXPECT_TRUE(OB_SUCCESS != request.wait(timeout)); EXPECT_TRUE(OB_SUCCESS == async.init(&buffer, &client_manager)); EXPECT_TRUE(OB_SUCCESS == request.init(100, 10)); EXPECT_TRUE(OB_SUCCESS == request.set_request_param(get_param, timeout)); EXPECT_TRUE(OB_SUCCESS == request.wait(timeout)); uint64_t count = 0; ObScannerIterator iter; ObCellInfo * cell_info = NULL; int ret = OB_SUCCESS; while (OB_ITER_END != (ret = request.next_cell())) { EXPECT_TRUE(OB_SUCCESS == ret); EXPECT_TRUE(OB_SUCCESS == request.get_cell(&cell_info)); EXPECT_TRUE(cell_info != NULL); printf("client:%.*s\n", cell_info->row_key_.length(), cell_info->row_key_.ptr()); ++count; } EXPECT_TRUE(OB_SUCCESS == request.reset()); root.stop(); chunk.stop(); sleep(3); transport.stop(); if (location != NULL) { delete location; location = NULL; } }