oceanbase
336 строк · 17.6 Кб
1// Copyright (c) 2021 OceanBase
2// OceanBase is licensed under Mulan PubL v2.
3// You can use this software according to the terms and conditions of the Mulan PubL v2.
4// You may obtain a copy of Mulan PubL v2 at:
5// http://license.coscl.org.cn/MulanPubL-2.0
6// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
7// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
8// MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
9// See the Mulan PubL v2 for more details.
10#include <cstdio>11#include <gtest/gtest.h>12#include <signal.h>13#define private public14#include "env/ob_simple_log_cluster_env.h"15#undef private16
17const std::string TEST_NAME = "single_arb_server";18
19using namespace oceanbase::common;20using namespace oceanbase;21namespace oceanbase22{
23namespace unittest24{
25
26class TestObSimpleMutilArbServer : public ObSimpleLogClusterTestEnv27{
28public:29TestObSimpleMutilArbServer() : ObSimpleLogClusterTestEnv()30{}31};32
33int64_t ObSimpleLogClusterTestBase::member_cnt_ = 1;34int64_t ObSimpleLogClusterTestBase::node_cnt_ = 1;35bool ObSimpleLogClusterTestBase::need_add_arb_server_ = true;36std::string ObSimpleLogClusterTestBase::test_name_ = TEST_NAME;37
38bool check_dir_exist(const char *base_dir, const int64_t id)39{
40char dir[OB_MAX_FILE_NAME_LENGTH] = {'\0'};41snprintf(dir, OB_MAX_FILE_NAME_LENGTH, "%s/tenant_%ld", base_dir, id);42int ret = OB_SUCCESS;43bool result = false;44if (OB_FAIL(FileDirectoryUtils::is_exists(dir, result))) {45CLOG_LOG(WARN, "dir is not exist", K(ret), K(errno), K(dir), K(dir));46}47return result;48}
49
50TEST_F(TestObSimpleMutilArbServer, create_mutil_tenant)51{
52SET_CASE_LOG_FILE(TEST_NAME, "create_mutil_tenant");53OB_LOGGER.set_log_level("TRACE");54ObISimpleLogServer *iserver = get_cluster()[0];55EXPECT_EQ(true, iserver->is_arb_server());56ObSimpleArbServer *arb_server = dynamic_cast<ObSimpleArbServer*>(iserver);57palflite::PalfEnvLiteMgr *palf_env_mgr = &arb_server->palf_env_mgr_;58int64_t cluster_id = 1;59arbserver::GCMsgEpoch epoch = arbserver::GCMsgEpoch(1, 1);60EXPECT_EQ(OB_ARBITRATION_SERVICE_ALREADY_EXIST, palf_env_mgr->add_cluster(iserver->get_addr(), cluster_id, "arbserver_test", epoch));61sleep(2);62CLOG_LOG(INFO, "one tenant");63sleep(2);64EXPECT_EQ(OB_SUCCESS, palf_env_mgr->create_palf_env_lite(palflite::PalfEnvKey(cluster_id, 1)));65sleep(2);66CLOG_LOG(INFO, "two tenant");67sleep(2);68EXPECT_EQ(OB_SUCCESS, palf_env_mgr->create_palf_env_lite(palflite::PalfEnvKey(cluster_id, 2)));69sleep(2);70CLOG_LOG(INFO, "three tenant");71sleep(2);72EXPECT_EQ(OB_SUCCESS, palf_env_mgr->create_palf_env_lite(palflite::PalfEnvKey(cluster_id, 3)));73sleep(2);74CLOG_LOG(INFO, "four tenant");75sleep(2);76{77PalfBaseInfo info_2; info_2.generate_by_default();78AccessMode mode(palf::AccessMode::APPEND);79IPalfHandleImpl *ipalf_handle_impl_2 = NULL;80palflite::PalfEnvLite *palf_env_lite_2 = NULL;81EXPECT_EQ(OB_SUCCESS, palf_env_mgr->palf_env_lite_map_.get(palflite::PalfEnvKey(cluster_id, 2), palf_env_lite_2));82EXPECT_EQ(OB_SUCCESS, palf_env_lite_2->create_palf_handle_impl(1, mode, info_2, ipalf_handle_impl_2));83palf_env_lite_2->revert_palf_handle_impl(ipalf_handle_impl_2);84palf_env_mgr->revert_palf_env_lite(palf_env_lite_2);85CLOG_LOG(INFO, "revert_palf_env_lite2");86}87EXPECT_EQ(OB_SUCCESS, palf_env_mgr->remove_palf_env_lite(palflite::PalfEnvKey(cluster_id, 1)));88EXPECT_EQ(OB_SUCCESS, palf_env_mgr->remove_palf_env_lite(palflite::PalfEnvKey(cluster_id, 2)));89EXPECT_EQ(OB_SUCCESS, palf_env_mgr->remove_palf_env_lite(palflite::PalfEnvKey(cluster_id, 3)));90EXPECT_EQ(false, check_dir_exist(palf_env_mgr->base_dir_, 1));91EXPECT_EQ(false, check_dir_exist(palf_env_mgr->base_dir_, 2));92EXPECT_EQ(false, check_dir_exist(palf_env_mgr->base_dir_, 3));93CLOG_LOG(INFO, "before restart_paxos_groups1");94EXPECT_EQ(OB_SUCCESS, restart_paxos_groups());95auto &map = palf_env_mgr->cluster_meta_info_map_;96EXPECT_EQ(OB_SUCCESS, palf_env_mgr->create_palf_env_lite(palflite::PalfEnvKey(cluster_id, 1)));97palflite::ClusterMetaInfo info;98EXPECT_EQ(OB_SUCCESS, map.get_refactored(cluster_id, info));99EXPECT_EQ(2, info.tenant_count_);100EXPECT_EQ(OB_SUCCESS, palf_env_mgr->create_palf_env_lite(palflite::PalfEnvKey(cluster_id, 2)));101EXPECT_EQ(OB_SUCCESS, map.get_refactored(cluster_id, info));102EXPECT_EQ(3, info.tenant_count_);103EXPECT_EQ(OB_SUCCESS, palf_env_mgr->create_palf_env_lite(palflite::PalfEnvKey(cluster_id, 3)));104EXPECT_EQ(OB_SUCCESS, map.get_refactored(cluster_id, info));105EXPECT_EQ(4, info.tenant_count_);106EXPECT_EQ(OB_SUCCESS, palf_env_mgr->create_arbitration_instance(107palflite::PalfEnvKey(cluster_id, 1), arb_server->self_, 1001,108ObTenantRole(ObTenantRole::PRIMARY_TENANT)));109auto update_meta = [](palflite::PalfEnvLiteMgr::MapPair &pair) -> void{110auto &info = pair.second;111info.epoch_ = arbserver::GCMsgEpoch(100, 100);112};113EXPECT_EQ(OB_SUCCESS, palf_env_mgr->update_cluster_meta_info_(cluster_id, update_meta));114EXPECT_EQ(OB_SUCCESS, palf_env_mgr->get_cluster_meta_info_(cluster_id, info));115EXPECT_EQ(arbserver::GCMsgEpoch(100, 100), info.epoch_);116CLOG_LOG(INFO, "before restart_paxos_groups2");117EXPECT_EQ(OB_SUCCESS, restart_paxos_groups());118{119palflite::PalfEnvLite *palf_env_lite_2 = NULL;120EXPECT_EQ(OB_SUCCESS, palf_env_mgr->palf_env_lite_map_.get(palflite::PalfEnvKey(cluster_id, 2), palf_env_lite_2));121palf_env_mgr->revert_palf_env_lite(palf_env_lite_2);122}123EXPECT_EQ(OB_SUCCESS, palf_env_mgr->remove_palf_env_lite(palflite::PalfEnvKey(cluster_id, 1)));124EXPECT_EQ(OB_SUCCESS, map.get_refactored(cluster_id, info));125EXPECT_EQ(3, info.tenant_count_);126EXPECT_EQ(OB_SUCCESS, palf_env_mgr->remove_palf_env_lite(palflite::PalfEnvKey(cluster_id, 2)));127EXPECT_EQ(OB_SUCCESS, map.get_refactored(cluster_id, info));128EXPECT_EQ(2, info.tenant_count_);129EXPECT_EQ(OB_SUCCESS, palf_env_mgr->remove_palf_env_lite(palflite::PalfEnvKey(cluster_id, 3)));130EXPECT_EQ(OB_SUCCESS, map.get_refactored(cluster_id, info));131EXPECT_EQ(1, info.tenant_count_);132EXPECT_EQ(OB_ENTRY_NOT_EXIST, palf_env_mgr->remove_palf_env_lite(palflite::PalfEnvKey(cluster_id, 1001)));133CLOG_LOG(INFO, "end restart_paxos_groups");134}
135
136TEST_F(TestObSimpleMutilArbServer, out_interface)137{
138SET_CASE_LOG_FILE(TEST_NAME, "out_interface");139OB_LOGGER.set_log_level("TRACE");140ObISimpleLogServer *iserver = get_cluster()[0];141EXPECT_EQ(true, iserver->is_arb_server());142ObMember member(iserver->get_addr(), 100);143ObSimpleArbServer *arb_server = dynamic_cast<ObSimpleArbServer*>(iserver);144ObTenantRole tenant_role(ObTenantRole::PRIMARY_TENANT);145int64_t cluster_id = 1;146GlobalLearnerList learner_list;147arbserver::GCMsgEpoch epoch = arbserver::GCMsgEpoch(1, 1);148EXPECT_EQ(OB_ARBITRATION_SERVICE_ALREADY_EXIST, arb_server->palf_env_mgr_.add_cluster(149iserver->get_addr(), cluster_id, "arbserver_test", epoch));150EXPECT_EQ(OB_ENTRY_NOT_EXIST, arb_server->palf_env_mgr_.set_initial_member_list(151palflite::PalfEnvKey(cluster_id, 1), arb_server->self_,1521000, get_member_list(), member, get_member_cnt(), learner_list));153EXPECT_EQ(OB_SUCCESS, arb_server->palf_env_mgr_.create_arbitration_instance(154palflite::PalfEnvKey(cluster_id, 1), arb_server->self_,1551000, tenant_role));156EXPECT_EQ(OB_SUCCESS, arb_server->palf_env_mgr_.create_arbitration_instance(157palflite::PalfEnvKey(cluster_id, 1), arb_server->self_,1581000, tenant_role));159EXPECT_EQ(OB_NOT_SUPPORTED, arb_server->palf_env_mgr_.set_initial_member_list(160palflite::PalfEnvKey(cluster_id, 1), arb_server->self_,1611000, get_member_list(), member, get_member_cnt(), learner_list));162ObMemberList member_list = get_member_list();163member_list.add_server(arb_server->self_);164EXPECT_EQ(OB_NOT_SUPPORTED, arb_server->palf_env_mgr_.set_initial_member_list(165palflite::PalfEnvKey(cluster_id, 1), arb_server->self_,1661000, member_list, member, get_member_cnt(), learner_list));167EXPECT_EQ(OB_SUCCESS, arb_server->palf_env_mgr_.delete_arbitration_instance(168palflite::PalfEnvKey(cluster_id, 1), arb_server->self_, 1000));169palflite::PalfEnvLite *palf_env_lite = NULL;170EXPECT_EQ(OB_SUCCESS, arb_server->palf_env_mgr_.get_palf_env_lite(171palflite::PalfEnvKey(cluster_id, OB_SERVER_TENANT_ID), palf_env_lite));172arb_server->palf_env_mgr_.revert_palf_env_lite(palf_env_lite);173EXPECT_EQ(OB_SUCCESS, arb_server->palf_env_mgr_.remove_palf_env_lite(174palflite::PalfEnvKey(cluster_id, OB_SERVER_TENANT_ID)));175EXPECT_EQ(OB_SUCCESS, arb_server->palf_env_mgr_.delete_arbitration_instance(176palflite::PalfEnvKey(cluster_id, 1), arb_server->self_, 1000));177CLOG_LOG(INFO, "end test out_interface");178}
179
180TEST_F(TestObSimpleMutilArbServer, create_mutil_cluster)181{
182SET_CASE_LOG_FILE(TEST_NAME, "create_mutil_cluster");183OB_LOGGER.set_log_level("TRACE");184ObISimpleLogServer *iserver = get_cluster()[0];185EXPECT_EQ(true, iserver->is_arb_server());186ObSimpleArbServer *arb_server = dynamic_cast<ObSimpleArbServer*>(iserver);187palflite::PalfEnvLiteMgr *palf_env_mgr = &arb_server->palf_env_mgr_;188std::vector<int64_t> cluster_ids = {2, 3, 4, 5, 6, 7};189arbserver::GCMsgEpoch epoch = arbserver::GCMsgEpoch(1, 1);190
191// test add tenant without cluster, generate placeholder192EXPECT_EQ(OB_SUCCESS, palf_env_mgr->create_palf_env_lite(palflite::PalfEnvKey(cluster_ids[0], 1)));193EXPECT_TRUE(palf_env_mgr->is_cluster_placeholder_exists(cluster_ids[0]));194EXPECT_EQ(OB_ARBITRATION_SERVICE_ALREADY_EXIST, palf_env_mgr->add_cluster(iserver->get_addr(), cluster_ids[0], "arbserver_test", epoch));195EXPECT_EQ(OB_ARBITRATION_SERVICE_ALREADY_EXIST, palf_env_mgr->add_cluster(iserver->get_addr(), cluster_ids[0], "", epoch));196EXPECT_EQ(OB_SUCCESS, palf_env_mgr->remove_cluster(iserver->get_addr(), cluster_ids[0], "", epoch));197
198// test add cluster and restart199EXPECT_EQ(OB_SUCCESS, palf_env_mgr->add_cluster(iserver->get_addr(), cluster_ids[0], "arbserver_test", epoch));200// duplicate add_cluster201EXPECT_EQ(OB_SUCCESS, palf_env_mgr->add_cluster(iserver->get_addr(), cluster_ids[0], "arbserver_test", epoch));202// wrong add_cluster203EXPECT_EQ(OB_ARBITRATION_SERVICE_ALREADY_EXIST, palf_env_mgr->add_cluster(iserver->get_addr(), cluster_ids[0], "arbserver_test1", epoch));204EXPECT_EQ(OB_ARBITRATION_SERVICE_ALREADY_EXIST, palf_env_mgr->add_cluster(iserver->get_addr(), cluster_ids[0], "arbserver_test", arbserver::GCMsgEpoch(1, 0)));205
206EXPECT_EQ(OB_SUCCESS, palf_env_mgr->add_cluster(iserver->get_addr(), cluster_ids[1], "arbserver_test", epoch));207EXPECT_EQ(OB_SUCCESS, restart_paxos_groups());208// re-create cluster, cluster_name match, return OB_SUCCESS209EXPECT_EQ(OB_SUCCESS, palf_env_mgr->add_cluster(iserver->get_addr(), cluster_ids[0], "arbserver_test", epoch));210EXPECT_EQ(OB_SUCCESS, palf_env_mgr->add_cluster(iserver->get_addr(), cluster_ids[1], "arbserver_test", epoch));211// re-create cluster, cluster_name do not match, return OB_SUCCESS212EXPECT_EQ(OB_ARBITRATION_SERVICE_ALREADY_EXIST, palf_env_mgr->add_cluster(iserver->get_addr(), cluster_ids[0], "arbserver_test1", epoch));213EXPECT_EQ(OB_ARBITRATION_SERVICE_ALREADY_EXIST, palf_env_mgr->add_cluster(iserver->get_addr(), cluster_ids[1], "arbserver_test1", epoch));214
215EXPECT_EQ(OB_SUCCESS, palf_env_mgr->add_cluster(iserver->get_addr(), cluster_ids[2], "arbserver_test", epoch));216EXPECT_EQ(OB_SUCCESS, palf_env_mgr->add_cluster(iserver->get_addr(), cluster_ids[3], "arbserver_test", epoch));217
218// empty cluster_name219EXPECT_EQ(OB_SUCCESS, palf_env_mgr->add_cluster(iserver->get_addr(), cluster_ids[4], "", epoch));220EXPECT_EQ(OB_ARBITRATION_SERVICE_ALREADY_EXIST, palf_env_mgr->add_cluster(iserver->get_addr(), cluster_ids[4], "test", epoch));221
222// long cluster_name223char *long_cluster_name = new char[OB_MAX_CLUSTER_NAME_LENGTH + 1];224MEMSET(long_cluster_name, '\0', OB_MAX_CLUSTER_NAME_LENGTH + 1);225MEMSET(long_cluster_name, 'a', OB_MAX_CLUSTER_NAME_LENGTH);226EXPECT_EQ(OB_SUCCESS, palf_env_mgr->add_cluster(iserver->get_addr(), cluster_ids[5], long_cluster_name, epoch));227EXPECT_EQ(OB_SUCCESS, palf_env_mgr->add_cluster(iserver->get_addr(), cluster_ids[5], long_cluster_name, epoch));228EXPECT_TRUE(palf_env_mgr->is_cluster_placeholder_exists(cluster_ids[0]));229EXPECT_EQ(OB_SUCCESS, restart_paxos_groups());230EXPECT_TRUE(palf_env_mgr->is_cluster_placeholder_exists(cluster_ids[0]));231palflite::ClusterMetaInfo long_cluster_meta_info;232EXPECT_EQ(OB_SUCCESS, palf_env_mgr->get_cluster_meta_info_(cluster_ids[5], long_cluster_meta_info));233EXPECT_EQ(0, strcmp(long_cluster_name, long_cluster_meta_info.cluster_name_));234EXPECT_EQ(OB_SUCCESS, palf_env_mgr->remove_cluster(iserver->get_addr(), cluster_ids[5], long_cluster_name, epoch));235
236// test remove_cluster237EXPECT_EQ(OB_SUCCESS, palf_env_mgr->remove_cluster(iserver->get_addr(), cluster_ids[0], "arbserver_test", epoch));238// duplicate remove_cluster239EXPECT_EQ(OB_SUCCESS, palf_env_mgr->remove_cluster(iserver->get_addr(), cluster_ids[0], "arbserver_test", epoch));240
241// remove_cluster with wrong cluster_name, still success242EXPECT_EQ(OB_SUCCESS, palf_env_mgr->remove_cluster(iserver->get_addr(), cluster_ids[1], "arbserver_test1", epoch));243
244// improve epoch and remove cluster245arbserver::GCMsgEpoch improved_epoch = arbserver::GCMsgEpoch(2, 1);246arbserver::TenantLSIDSArray ls_ids;247ls_ids.set_max_tenant_id(UINT64_MAX);248EXPECT_EQ(OB_SUCCESS, palf_env_mgr->handle_gc_message_(improved_epoch, iserver->get_addr(), cluster_ids[2], ls_ids));249EXPECT_EQ(OB_OP_NOT_ALLOW, palf_env_mgr->remove_cluster(iserver->get_addr(), cluster_ids[2], "arbserver_test", epoch));250EXPECT_EQ(OB_SUCCESS, palf_env_mgr->remove_cluster(iserver->get_addr(), cluster_ids[2], "arbserver_test", improved_epoch));251
252// normal remove_cluster253EXPECT_EQ(OB_SUCCESS, palf_env_mgr->remove_cluster(iserver->get_addr(), cluster_ids[1], "arbserver_test", epoch));254EXPECT_EQ(OB_SUCCESS, palf_env_mgr->remove_cluster(iserver->get_addr(), cluster_ids[3], "arbserver_test", epoch));255EXPECT_EQ(OB_SUCCESS, palf_env_mgr->remove_cluster(iserver->get_addr(), cluster_ids[4], "", epoch));256
257// test upgrade arbserver, cluster 2 has a tenant and cluster 3 do not258EXPECT_EQ(OB_SUCCESS, palf_env_mgr->add_cluster(iserver->get_addr(), cluster_ids[0], "arbserver_test", epoch));259EXPECT_EQ(OB_SUCCESS, palf_env_mgr->add_cluster(iserver->get_addr(), cluster_ids[1], "arbserver_test", epoch));260EXPECT_EQ(OB_SUCCESS, palf_env_mgr->create_palf_env_lite(palflite::PalfEnvKey(cluster_ids[0], 1)));261EXPECT_TRUE(palf_env_mgr->is_cluster_placeholder_exists(cluster_ids[0]));262EXPECT_TRUE(palf_env_mgr->is_cluster_placeholder_exists(cluster_ids[1]));263
264std::string cluster_dir1 = palf_env_mgr->base_dir_;265cluster_dir1 += "/cluster_2_clustername_arbserver_test";266cluster_dir1 = "rm -rf " + cluster_dir1;267std::string cluster_dir2 = palf_env_mgr->base_dir_;268cluster_dir2 += "/cluster_3_clustername_arbserver_test";269cluster_dir2 = "rm -rf " + cluster_dir2;270SERVER_LOG(INFO, "delete cluster placeholder manually", K(cluster_dir1.c_str()), K(cluster_dir2.c_str()));271
272system(cluster_dir1.c_str());273system(cluster_dir2.c_str());274EXPECT_FALSE(palf_env_mgr->is_cluster_placeholder_exists(cluster_ids[0]));275EXPECT_FALSE(palf_env_mgr->is_cluster_placeholder_exists(cluster_ids[1]));276
277// restart and regenerate cluster placeholder dir for cluster 2278EXPECT_EQ(OB_SUCCESS, restart_paxos_groups());279
280EXPECT_TRUE(palf_env_mgr->is_cluster_placeholder_exists(cluster_ids[0]));281EXPECT_FALSE(palf_env_mgr->is_cluster_placeholder_exists(cluster_ids[1]));282
283EXPECT_EQ(OB_SUCCESS, palf_env_mgr->remove_cluster(iserver->get_addr(), cluster_ids[0], "arbserver_test", epoch));284EXPECT_FALSE(palf_env_mgr->is_cluster_placeholder_exists(cluster_ids[0]));285}
286
287TEST_F(TestObSimpleMutilArbServer, restart_arb)288{
289SET_CASE_LOG_FILE(TEST_NAME, "restart_arb");290OB_LOGGER.set_log_level("TRACE");291ObISimpleLogServer *iserver = get_cluster()[0];292EXPECT_EQ(true, iserver->is_arb_server());293ObSimpleArbServer *arb_server = dynamic_cast<ObSimpleArbServer*>(iserver);294palflite::PalfEnvLiteMgr *palf_env_mgr = &arb_server->palf_env_mgr_;295std::vector<int64_t> cluster_ids = {2, 3, 4, 5, 6, 7};296arbserver::GCMsgEpoch epoch = arbserver::GCMsgEpoch(1, 1);297
298// test add tenant without cluster, generate placeholder299EXPECT_EQ(OB_SUCCESS, palf_env_mgr->create_palf_env_lite(palflite::PalfEnvKey(cluster_ids[0], 1)));300EXPECT_TRUE(palf_env_mgr->is_cluster_placeholder_exists(cluster_ids[0]));301
302palflite::PalfEnvLite *palf_env_lite = NULL;303IPalfHandleImpl *ipalf_handle_impl = NULL;304{305PalfBaseInfo info; info.generate_by_default();306AccessMode mode(palf::AccessMode::APPEND);307EXPECT_EQ(OB_SUCCESS, palf_env_mgr->get_palf_env_lite(palflite::PalfEnvKey(cluster_ids[0], 1), palf_env_lite));308EXPECT_EQ(OB_SUCCESS, palf_env_lite->create_palf_handle_impl(1, mode, info, ipalf_handle_impl));309palflite::PalfHandleLite *palf_handle_lite = dynamic_cast<palflite::PalfHandleLite*>(ipalf_handle_impl);310ASSERT_NE(nullptr, palf_handle_lite);311LogEngine *log_engine = &palf_handle_lite->log_engine_;312LogMeta log_meta = log_engine->log_meta_;313int count = (2 * 1024 * 1024 - log_engine->log_meta_storage_.log_tail_.val_) / 4096;314while (count > 0) {315EXPECT_EQ(OB_SUCCESS, log_engine->append_log_meta_(log_meta));316count --;317}318while (log_engine->log_meta_storage_.log_tail_ != LSN(2*1024*1024)) {319sleep(1);320}321sleep(1);322EXPECT_EQ(2*1024*1024, log_engine->log_meta_storage_.log_tail_);323EXPECT_EQ(OB_SUCCESS, log_engine->log_meta_storage_.block_mgr_.switch_next_block(1));324}325palf_env_lite->revert_palf_handle_impl(ipalf_handle_impl);326palf_env_mgr->revert_palf_env_lite(palf_env_lite);327EXPECT_EQ(OB_SUCCESS, restart_server(0));328}
329
330} // end unittest331} // end oceanbase332
333int main(int argc, char **argv)334{
335RUN_SIMPLE_LOG_CLUSTER_TEST(TEST_NAME);336}
337