@@ -1445,6 +1445,56 @@ int TopologyImpl::UpdateChunkServerVersion(const std::string &version,
14451445 return ret;
14461446}
14471447
1448+ int TopologyImpl::UpdateChunkServer (uint32_t chunkserverId,
1449+ const std::string &hostIp,
1450+ const std::string &externalIP) {
1451+ ReadLockGuard rlockChunkServerMap (chunkServerMutex_);
1452+ auto it = chunkServerMap_.find (chunkserverId);
1453+ if (it != chunkServerMap_.end ()) {
1454+ WriteLockGuard wlockChunkServer (it->second .GetRWLockRef ());
1455+ ChunkServer temp = it->second ;
1456+
1457+ if (!hostIp.empty () && hostIp != temp.GetHostIp ()) {
1458+ temp.SetHostIp (hostIp);
1459+ }
1460+ if (!externalIP.empty () && externalIP != temp.GetExternalHostIp ()) {
1461+ temp.SetExternalHostIp (externalIP);
1462+ }
1463+
1464+ if (!storage_->UpdateChunkServer (temp)) {
1465+ return kTopoErrCodeStorgeFail ;
1466+ }
1467+ it->second = std::move (temp);
1468+ it->second .SetDirtyFlag (false );
1469+ return kTopoErrCodeSuccess ;
1470+ } else {
1471+ return kTopoErrCodeChunkServerNotFound ;
1472+ }
1473+ }
1474+
1475+ int TopologyImpl::UpdateServer (uint32_t serverId, const std::string &hostIp,
1476+ const std::string &externalIp) {
1477+ WriteLockGuard wlockServer (serverMutex_);
1478+ auto it = serverMap_.find (serverId);
1479+ if (it != serverMap_.end ()) {
1480+ Server temp = it->second ;
1481+
1482+ if (!hostIp.empty () && hostIp != temp.GetInternalHostIp ()) {
1483+ temp.SetInternalHostIp (hostIp);
1484+ }
1485+ if (!externalIp.empty () && externalIp != temp.GetExternalHostIp ()) {
1486+ temp.SetExternalHostIp (externalIp);
1487+ }
1488+ if (!storage_->UpdateServer (temp)) {
1489+ return kTopoErrCodeStorgeFail ;
1490+ }
1491+ it->second = std::move (temp);
1492+ return kTopoErrCodeSuccess ;
1493+ } else {
1494+ return kTopoErrCodeServerNotFound ;
1495+ }
1496+ }
1497+
14481498} // namespace topology
14491499} // namespace mds
14501500} // namespace curve
0 commit comments