TEST_F(ServerCollectTest, touch) { srand(time(NULL)); DataServerStatInfo info; memset(&info, 0, sizeof(info)); info.status_ = DATASERVER_STATUS_ALIVE; info.id_ = 0xfffffff0; info.use_capacity_ = 0xffffff; info.total_capacity_ = 0xffffffff; time_t now = Func::get_monotonic_time(); bool master = true; bool writable = true; ServerCollect server(layout_manager_, info, now); info.id_++; ServerCollect server2(layout_manager_, info,now); const int32_t BLOCK_COUNT = random() % 10000 + 40960; for (int32_t i = 0; i < BLOCK_COUNT; ++i) { BlockCollect* block = layout_manager_.get_block_manager().insert(100 + i, now); EXPECT_TRUE(NULL != block); block->add(writable, master, server.id(), now); EXPECT_EQ(TFS_SUCCESS, server.add(block->id(), writable, master)); } EXPECT_TRUE(server.writable_->size() > 0); EXPECT_EQ(0, server.hold_master_->size()); EXPECT_EQ(BLOCK_COUNT, server.hold_->size()); bool promote = false; int32_t count = 0; int64_t average_used_capacity = 0xfff; EXPECT_FALSE(server.touch(promote, count, average_used_capacity)); count = 3; EXPECT_FALSE(server.touch(promote, count, average_used_capacity)); count = 3; promote = true; EXPECT_TRUE(server.touch(promote, count, average_used_capacity)); EXPECT_EQ(3, count); average_used_capacity = 0xffffff; EXPECT_TRUE(server.touch(promote, count, average_used_capacity)); EXPECT_EQ(3, count); for (int32_t i = 0; i < BLOCK_COUNT; ++i) { BlockCollect* block = layout_manager_.get_block_manager().get(100 + i); EXPECT_TRUE(NULL != block); block->add(writable, master, server2.id(), now); server2.add(block->id(), writable, master); } EXPECT_TRUE(server2.touch(promote, count, average_used_capacity)); EXPECT_EQ(0, count); EXPECT_TRUE(server2.hold_master_->size() == 3); EXPECT_EQ(BLOCK_COUNT, server.hold_->size()); }