diff --git a/curvefs/src/mds/fs_manager.cpp b/curvefs/src/mds/fs_manager.cpp index 3af5b118d3..1d5a3852d1 100644 --- a/curvefs/src/mds/fs_manager.cpp +++ b/curvefs/src/mds/fs_manager.cpp @@ -808,15 +808,29 @@ int FsManager::IsExactlySameOrCreateUnComplete(const std::string& fsName, return google::protobuf::util::MessageDifferencer::Equals(lhs, rhs); }; - auto checkFsInfo = [fsType, volumeInfoComparator](const FsDetail& lhs, - const FsDetail& rhs) { + auto s3InfoComparator = [](common::S3Info lhs, common::S3Info rhs) { + // for compatible with old clients + if (lhs.has_objectprefix() && !rhs.has_objectprefix() && + lhs.objectprefix() != 0) { + return false; + } + if (rhs.has_objectprefix() && !lhs.has_objectprefix() && + rhs.objectprefix() != 0) { + return false; + } + + return google::protobuf::util::MessageDifferencer::Equals(lhs, rhs); + }; + + auto checkFsInfo = [fsType, volumeInfoComparator, s3InfoComparator]( + const FsDetail& lhs, const FsDetail& rhs) { switch (fsType) { case curvefs::common::FSType::TYPE_S3: - return MessageDifferencer::Equals(lhs.s3info(), rhs.s3info()); + return s3InfoComparator(lhs.s3info(), rhs.s3info()); case curvefs::common::FSType::TYPE_VOLUME: return volumeInfoComparator(lhs.volume(), rhs.volume()); case curvefs::common::FSType::TYPE_HYBRID: - return MessageDifferencer::Equals(lhs.s3info(), rhs.s3info()) && + return s3InfoComparator(lhs.s3info(), rhs.s3info()) && volumeInfoComparator(lhs.volume(), rhs.volume()); }