Example #1
0
    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());
    }