提交 23bd3346 编写于 作者: C chenwei 提交者: SiKu

fix topology metric inaccurate when metaserver offline

Signed-off-by: Nchenwei <461432360@qq.com>
上级 07d3b063
......@@ -161,6 +161,17 @@ void TopologyMetricService::UpdateTopologyMetrics() {
totalDiskUsed += ix->second->diskUsed.get_value();
totalMemoryThreshold += ix->second->memoryThreshold.get_value();
totalMemoryUsed += ix->second->memoryUsed.get_value();
// process the metric of metaserver which has no copyset
if (metaServerMetricInfo.find(msId) == metaServerMetricInfo.end()) {
auto ix = gMetaServerMetrics.find(msId);
if (ix != gMetaServerMetrics.end()) {
ix->second->scatterWidth.set_value(0);
ix->second->copysetNum.set_value(0);
ix->second->leaderNum.set_value(0);
ix->second->partitionNum.set_value(0);
}
}
}
it->second->metaServerNum.set_value(msIdInPool.size());
......
......@@ -123,6 +123,14 @@ class TestTopologyMetric : public ::testing::Test {
<< "should have PrepareAddPool()";
}
void UpdateCopysetMembers(CopySetIdType copysetId, PoolIdType poolId,
const std::set<MetaServerIdType> &members) {
CopySetInfo cs(poolId, copysetId);
cs.SetCopySetMembers(members);
TopoStatusCode ret = topology_->UpdateCopySetTopo(cs);
ASSERT_EQ(TopoStatusCode::TOPO_OK, ret);
}
void PrepareAddPartition(PartitionIdType partitionId,
CopySetIdType copysetId, PoolIdType poolId) {
Partition partition;
......@@ -208,6 +216,42 @@ TEST_F(TestTopologyMetric, TestUpdateTopologyMetricsOnePool) {
ASSERT_EQ(30, gPoolMetrics[poolId]->inodeNum.get_value());
ASSERT_EQ(300, gPoolMetrics[poolId]->dentryNum.get_value());
ASSERT_EQ(3, gPoolMetrics[poolId]->partitionNum.get_value());
// Simulate metaserver offline and migrate data to another metaserver
PrepareAddMetaServer(0x44, "host4", "token4", 0x33, "127.0.0.1", 8890);
std::set<MetaServerIdType> replicas2;
replicas2.insert(0x41);
replicas2.insert(0x42);
replicas2.insert(0x44);
UpdateCopysetMembers(copysetId, poolId, replicas2);
testObj_->UpdateTopologyMetrics();
ASSERT_EQ(0, gMetaServerMetrics[0x43]->scatterWidth.get_value());
ASSERT_EQ(0, gMetaServerMetrics[0x43]->copysetNum.get_value());
ASSERT_EQ(0, gMetaServerMetrics[0x43]->leaderNum.get_value());
ASSERT_EQ(100 * 1024, gMetaServerMetrics[0x43]->diskThreshold.get_value());
ASSERT_EQ(10 * 1024, gMetaServerMetrics[0x43]->diskUsed.get_value());
ASSERT_EQ(20 * 1024, gMetaServerMetrics[0x43]->memoryUsed.get_value());
ASSERT_EQ(0, gMetaServerMetrics[0x43]->partitionNum.get_value());
ASSERT_EQ(2, gMetaServerMetrics[0x44]->scatterWidth.get_value());
ASSERT_EQ(1, gMetaServerMetrics[0x44]->copysetNum.get_value());
ASSERT_EQ(0, gMetaServerMetrics[0x44]->leaderNum.get_value());
ASSERT_EQ(100 * 1024, gMetaServerMetrics[0x44]->diskThreshold.get_value());
ASSERT_EQ(10 * 1024, gMetaServerMetrics[0x44]->diskUsed.get_value());
ASSERT_EQ(20 * 1024, gMetaServerMetrics[0x44]->memoryUsed.get_value());
ASSERT_EQ(3, gMetaServerMetrics[0x44]->partitionNum.get_value());
ASSERT_EQ(1, gPoolMetrics.size());
ASSERT_EQ(4, gPoolMetrics[poolId]->metaServerNum.get_value());
ASSERT_EQ(1, gPoolMetrics[poolId]->copysetNum.get_value());
ASSERT_EQ(100 * 1024 * 4, gPoolMetrics[poolId]->diskThreshold.get_value());
ASSERT_EQ(10 * 1024 * 4, gPoolMetrics[poolId]->diskUsed.get_value());
ASSERT_EQ(30, gPoolMetrics[poolId]->inodeNum.get_value());
ASSERT_EQ(300, gPoolMetrics[poolId]->dentryNum.get_value());
ASSERT_EQ(3, gPoolMetrics[poolId]->partitionNum.get_value());
}
} // namespace topology
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册