diff --git a/frameworks/innerkitsimpl/distributeddatafwk/src/kvstore_sync_callback_client.cpp b/frameworks/innerkitsimpl/distributeddatafwk/src/kvstore_sync_callback_client.cpp index 028362ba55f53fa5fa93ef4bffb7fdcda8efc8c5..d102cf420f0973a2624c86785705b0caf8012afb 100755 --- a/frameworks/innerkitsimpl/distributeddatafwk/src/kvstore_sync_callback_client.cpp +++ b/frameworks/innerkitsimpl/distributeddatafwk/src/kvstore_sync_callback_client.cpp @@ -17,6 +17,7 @@ #include #include +#include "dds_trace.h" #include "log_print.h" #include "kvstore_sync_callback_client.h" @@ -29,6 +30,7 @@ KvStoreSyncCallbackClient::~KvStoreSyncCallbackClient() void KvStoreSyncCallbackClient::SyncCompleted(const std::map &results, uint64_t sequenceId) { + DdsTrace trace(std::string(LOG_TAG "::") + std::string(__FUNCTION__), true); auto finded = syncCallbackInfo_.Find(sequenceId); if (finded.first) { finded.second->SyncCompleted(results); diff --git a/frameworks/innerkitsimpl/distributeddatafwk/src/single_kvstore_client.cpp b/frameworks/innerkitsimpl/distributeddatafwk/src/single_kvstore_client.cpp index 47387a8c84b7c8a3f213f5f835ec0906dd650ad6..5181b0ec66ae4e7ca478f30c87cd5e146b22a38a 100755 --- a/frameworks/innerkitsimpl/distributeddatafwk/src/single_kvstore_client.cpp +++ b/frameworks/innerkitsimpl/distributeddatafwk/src/single_kvstore_client.cpp @@ -309,6 +309,7 @@ Status SingleKvStoreClient::UnSubscribeKvStore(SubscribeType subscribeType, std: Status SingleKvStoreClient::RegisterSyncCallback(std::shared_ptr callback) { + DdsTrace trace(std::string(LOG_TAG "::") + std::string(__FUNCTION__), true); ZLOGI("begin."); if (callback == nullptr) { ZLOGW("return INVALID_ARGUMENT."); @@ -476,6 +477,7 @@ Status SingleKvStoreClient::GetSecurityLevel(SecurityLevel &securityLevel) const Status SingleKvStoreClient::SyncWithCondition(const std::vector &deviceIds, SyncMode mode, const DataQuery &query, std::shared_ptr callback) { + DdsTrace trace(std::string(LOG_TAG "::") + std::string(__FUNCTION__), true); if (kvStoreProxy_ == nullptr) { ZLOGE("singleKvstore proxy is nullptr."); return Status::SERVER_UNAVAILABLE; @@ -496,6 +498,7 @@ Status SingleKvStoreClient::SyncWithCondition(const std::vector &de Status SingleKvStoreClient::SubscribeWithQuery(const std::vector &deviceIds, const DataQuery &query) { + DdsTrace trace(std::string(LOG_TAG "::") + std::string(__FUNCTION__), true); if (kvStoreProxy_ == nullptr) { ZLOGE("singleKvstore proxy is nullptr."); return Status::SERVER_UNAVAILABLE; @@ -512,6 +515,7 @@ Status SingleKvStoreClient::SubscribeWithQuery(const std::vector &d Status SingleKvStoreClient::UnsubscribeWithQuery(const std::vector &deviceIds, const DataQuery &query) { + DdsTrace trace(std::string(LOG_TAG "::") + std::string(__FUNCTION__), true); if (kvStoreProxy_ == nullptr) { ZLOGE("singleKvstore proxy is nullptr."); return Status::SERVER_UNAVAILABLE; diff --git a/interfaces/innerkits/app_distributeddata/include/app_types.h b/interfaces/innerkits/app_distributeddata/include/app_types.h index abe748384ceb0e1ccf41d355b16c870ef5b3d063..2cf1ec75a65626c841c5b4de7d5510213388ff73 100755 --- a/interfaces/innerkits/app_distributeddata/include/app_types.h +++ b/interfaces/innerkits/app_distributeddata/include/app_types.h @@ -52,6 +52,13 @@ struct DeviceInfo { std::string deviceType; }; +struct DeviceCacheInfos { + std::string uuid; + std::string udid; + std::string deviceName; + std::string deviceType; +}; + enum class MessageType { DEFAULT = 0, FILE = 1, diff --git a/services/distributeddataservice/adapter/communicator/src/app_device_handler.cpp b/services/distributeddataservice/adapter/communicator/src/app_device_handler.cpp index a1054a664d67d7399ca4e31c3bf1f7fe075be3cd..8dfc30df2992c2ae8be1a41796033ef38a27d093 100755 --- a/services/distributeddataservice/adapter/communicator/src/app_device_handler.cpp +++ b/services/distributeddataservice/adapter/communicator/src/app_device_handler.cpp @@ -54,6 +54,11 @@ std::vector AppDeviceHandler::GetDeviceList() const return softbusAdapter_->GetDeviceList(); } +std::string AppDeviceHandler::GetDeviceInfo(const std::string &networkId) const +{ + return softbusAdapter_->GetDeviceInfo(networkId); +} + DeviceInfo AppDeviceHandler::GetLocalDevice() { return softbusAdapter_->GetLocalDevice(); diff --git a/services/distributeddataservice/adapter/communicator/src/app_device_handler.h b/services/distributeddataservice/adapter/communicator/src/app_device_handler.h index b1dbdef0d76ce3e206d0f190090c37964f7f588e..0a5b510cfb5ed8ae05315f3163092c6fbb4d814b 100755 --- a/services/distributeddataservice/adapter/communicator/src/app_device_handler.h +++ b/services/distributeddataservice/adapter/communicator/src/app_device_handler.h @@ -32,6 +32,7 @@ public: DeviceInfo GetLocalDevice(); std::vector GetDeviceList() const; + std::string GetDeviceInfo(const std::string &networkId) const; std::string GetUuidByNodeId(const std::string &nodeId) const; std::string GetUdidByNodeId(const std::string &nodeId) const; diff --git a/services/distributeddataservice/adapter/communicator/src/ark_communication_provider.cpp b/services/distributeddataservice/adapter/communicator/src/ark_communication_provider.cpp index b2ce805c5c230e125061517b87c219b030d6ef7f..bdd23f615280a8d638fb50207102a9f731fad6fd 100755 --- a/services/distributeddataservice/adapter/communicator/src/ark_communication_provider.cpp +++ b/services/distributeddataservice/adapter/communicator/src/ark_communication_provider.cpp @@ -57,6 +57,14 @@ std::vector ArkCommunicationProvider::GetDeviceList() const return deviceQuery_->GetDeviceList(); } +std::string ArkCommunicationProvider::GetDeviceInfo(const std::string &networkId) const +{ + if (deviceQuery_ == nullptr) { + return CommunicationProviderImpl::GetDeviceInfo(networkId); + } + return deviceQuery_->GetDeviceInfo(networkId); +} + void ArkCommunicationProvider::SetDeviceQuery(std::shared_ptr deviceQuery) { ZLOGI("set device query"); diff --git a/services/distributeddataservice/adapter/communicator/src/ark_communication_provider.h b/services/distributeddataservice/adapter/communicator/src/ark_communication_provider.h index 7c1e428025fb29f9eccc8f94b1f4b3a63501a55d..48d23d29f63303c95bd9d6ffd58a9d120b2e184e 100755 --- a/services/distributeddataservice/adapter/communicator/src/ark_communication_provider.h +++ b/services/distributeddataservice/adapter/communicator/src/ark_communication_provider.h @@ -30,6 +30,8 @@ public: void SetDeviceQuery(std::shared_ptr deviceQuery) override; // Get online deviceList std::vector GetDeviceList() const override; + // Get deviceType by networkId + std::string GetDeviceInfo(const std::string &networkId) const override; // Get local device information DeviceInfo GetLocalDevice() const override; diff --git a/services/distributeddataservice/adapter/communicator/src/communication_provider_impl.cpp b/services/distributeddataservice/adapter/communicator/src/communication_provider_impl.cpp index 54d2fb31fa82a6600833d78a569c2dcde25b0dfa..de028d8cc50ca8698c7456eb0622c245b780647a 100755 --- a/services/distributeddataservice/adapter/communicator/src/communication_provider_impl.cpp +++ b/services/distributeddataservice/adapter/communicator/src/communication_provider_impl.cpp @@ -60,6 +60,11 @@ std::vector CommunicationProviderImpl::GetDeviceList() const return appDeviceHandler_.GetDeviceList(); } +std::string CommunicationProviderImpl::GetDeviceInfo(const std::string &networkId) const +{ + return appDeviceHandler_.GetDeviceInfo(networkId); +} + Status CommunicationProviderImpl::StartWatchDataChange(const AppDataChangeListener *observer, const PipeInfo &pipeInfo) { return appPipeMgr_.StartWatchDataChange(observer, pipeInfo); diff --git a/services/distributeddataservice/adapter/communicator/src/communication_provider_impl.h b/services/distributeddataservice/adapter/communicator/src/communication_provider_impl.h index 4f1438334ca44d69fac07a18c01ec902461af49b..8673c566db36090ee460fdbc2148928e43b6c383 100755 --- a/services/distributeddataservice/adapter/communicator/src/communication_provider_impl.h +++ b/services/distributeddataservice/adapter/communicator/src/communication_provider_impl.h @@ -48,6 +48,9 @@ public: // Get online deviceList std::vector GetDeviceList() const override; + // Get deviceType by networkId + std::string GetDeviceInfo(const std::string &networkId) const override; + // Get local device information DeviceInfo GetLocalDevice() const override; diff --git a/services/distributeddataservice/adapter/communicator/src/process_communicator_impl.cpp b/services/distributeddataservice/adapter/communicator/src/process_communicator_impl.cpp index 8631d985f4a18f9d4a5d24f9ac176d42f5d5c6fe..abcc808491c5c8c085ee99976c79649dd04bde76 100755 --- a/services/distributeddataservice/adapter/communicator/src/process_communicator_impl.cpp +++ b/services/distributeddataservice/adapter/communicator/src/process_communicator_impl.cpp @@ -131,13 +131,12 @@ uint32_t ProcessCommunicatorImpl::GetMtuSize() uint32_t ProcessCommunicatorImpl::GetMtuSize(const DeviceInfos &devInfo) { ZLOGI("GetMtuSize start"); - std::vector devInfos = CommunicationProvider::GetInstance().GetDeviceList(); - for (auto const &entry : devInfos) { - ZLOGI("GetMtuSize deviceType: %{public}s", entry.deviceType.c_str()); - bool isWatch = (entry.deviceType == SMART_WATCH_TYPE || entry.deviceType == CHILDREN_WATCH_TYPE); - if (entry.deviceId == devInfo.identifier && isWatch) { - return MTU_SIZE_WATCH; - } + const auto &comm = CommunicationProvider::GetInstance(); + std::string networkId = comm.ToNodeId(devInfo.identifier); + std::string deviceType = comm.GetDeviceInfo(networkId); + if (deviceType == SMART_WATCH_TYPE || deviceType == CHILDREN_WATCH_TYPE) { + ZLOGI("GetMtuSize deviceType: %{public}s", deviceType.c_str()); + return MTU_SIZE_WATCH; } return MTU_SIZE; } diff --git a/services/distributeddataservice/adapter/communicator/src/softbus_adapter.h b/services/distributeddataservice/adapter/communicator/src/softbus_adapter.h index 409399585c5a45aeb7364351425c20674b4a6d39..ba77597f0987260c58d9d74af406acae6dc77cf9 100755 --- a/services/distributeddataservice/adapter/communicator/src/softbus_adapter.h +++ b/services/distributeddataservice/adapter/communicator/src/softbus_adapter.h @@ -86,6 +86,7 @@ public: void NotifyAll(const DeviceInfo &deviceInfo, const DeviceChangeType &type); DeviceInfo GetLocalDevice(); std::vector GetDeviceList() const; + std::string GetDeviceInfo(const std::string &networkId); std::string GetUuidByNodeId(const std::string &nodeId) const; std::string GetUdidByNodeId(const std::string &nodeId) const; // get local device node information; @@ -139,7 +140,7 @@ public: private: std::shared_ptr> GetSemaphore (int32_t sessinId); mutable std::mutex networkMutex_ {}; - mutable std::map> networkId2UuidUdid_ {}; + mutable std::map networkId2DeviceInfo_ {}; DeviceInfo localInfo_ {}; static std::shared_ptr instance_; std::mutex deviceChangeMutex_; diff --git a/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp b/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp index 44504483f5aaa1e5d1529484094e6fdc4a55edd8..dbfc2a1043b6a19c72d4ba80c15a01753b05bd76 100755 --- a/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp +++ b/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp @@ -271,6 +271,31 @@ std::vector SoftBusAdapter::GetDeviceList() const return dis; } +std::string SoftBusAdapter::GetDeviceInfo(const std::string &networkId) +{ + auto info = networkId2DeviceInfo_.find(networkId); + if (info != networkId2DeviceInfo_.end()) { + return info->second.deviceType; + } + std::vector devices = GetDeviceList(); + for (const auto &df : devices) { + if (networkId == df.deviceId) { + auto udid = GetUdidByNodeId(networkId); + auto uuid = GetUuidByNodeId(networkId); + DeviceCacheInfos dfs = {std::string(uuid), std::string(udid), std::string(df.deviceName), std::string(df.deviceType)}; + std::pair value = {networkId, dfs}; + auto res = this->networkId2DeviceInfo_.insert(std::move(value)); + if (!res.second) { + ZLOGW("insert failed."); + break; + } + return df.deviceType; + } + } + ZLOGE("Get deviceType failed."); + return ""; +} + DeviceInfo SoftBusAdapter::GetLocalDevice() { if (!localInfo_.deviceId.empty()) { @@ -362,17 +387,25 @@ void SoftBusAdapter::UpdateRelationship(const std::string &networkid, const Devi lock_guard lock(networkMutex_); switch (type) { case DeviceChangeType::DEVICE_OFFLINE: { - auto size = this->networkId2UuidUdid_.erase(networkid); + auto size = this->networkId2DeviceInfo_.erase(networkid); if (size == 0) { ZLOGW("not found id:%{public}s.", SoftBusAdapter::ToBeAnonymous(networkid).c_str()); } break; } case DeviceChangeType::DEVICE_ONLINE: { - std::pair> value = {networkid, {uuid, udid}}; - auto res = this->networkId2UuidUdid_.insert(std::move(value)); - if (!res.second) { - ZLOGW("insert failed."); + std::vector deviceList = GetDeviceList(); + for (const auto& deviceInfo : deviceList) { + auto deviceUuid = GetUuidByNodeId(deviceInfo.deviceId); + if (deviceUuid == uuid) { + DeviceCacheInfos dfs = {std::string(uuid), std::string(udid), std::string(deviceInfo.deviceName), std::string(deviceInfo.deviceType)}; + std::pair value = {networkid, dfs}; + auto res = this->networkId2DeviceInfo_.insert(std::move(value)); + if (!res.second) { + ZLOGW("insert failed."); + } + break; + } } break; } @@ -386,18 +419,18 @@ void SoftBusAdapter::UpdateRelationship(const std::string &networkid, const Devi std::string SoftBusAdapter::ToUUID(const std::string& id) const { lock_guard lock(networkMutex_); - auto res = networkId2UuidUdid_.find(id); - if (res != networkId2UuidUdid_.end()) { // id is networkid - return std::get<0>(res->second); + auto res = networkId2DeviceInfo_.find(id); + if (res != networkId2DeviceInfo_.end()) { // id is networkid + return res->second.uuid; } - for (auto const &e : networkId2UuidUdid_) { + for (auto const &e : networkId2DeviceInfo_) { auto tup = e.second; - if (id == (std::get<0>(tup))) { // id is uuid + if (id == tup.uuid) { // id is uuid return id; } - if (id == (std::get<1>(tup))) { // id is udid - return std::get<0>(tup); + if (id == tup.udid) { // id is udid + return tup.uuid; } } ZLOGW("unknown id."); @@ -409,12 +442,12 @@ std::string SoftBusAdapter::ToNodeID(const std::string& id, const std::string &n { { lock_guard lock(networkMutex_); - for (auto const &e : networkId2UuidUdid_) { + for (auto const &e : networkId2DeviceInfo_) { auto tup = e.second; - if (nodeId == (std::get<0>(tup))) { // id is uuid + if (nodeId == tup.uuid) { // id is uuid return e.first; } - if (nodeId == (std::get<1>(tup))) { // id is udid + if (nodeId == tup.udid) { // id is udid return e.first; } } @@ -429,12 +462,14 @@ std::string SoftBusAdapter::ToNodeID(const std::string& id, const std::string &n if (ret == SOFTBUS_OK) { lock_guard lock(networkMutex_); for (int i = 0; i < infoNum; i++) { - if (networkId2UuidUdid_.find(info[i].networkId) != networkId2UuidUdid_.end()) { + if (networkId2DeviceInfo_.find(info[i].networkId) != networkId2DeviceInfo_.end()) { continue; } auto uuid = GetUuidByNodeId(std::string(info[i].networkId)); auto udid = GetUdidByNodeId(std::string(info[i].networkId)); - networkId2UuidUdid_.insert({info[i].networkId, {uuid, udid}}); + DeviceCacheInfos dfs = {std::string(uuid), std::string(udid), std::string(info[i].deviceName), + std::to_string(info[i].deviceTypeId)}; + networkId2DeviceInfo_.insert({info[i].networkId, dfs}); if (uuid == nodeId || udid == nodeId) { networkId = info[i].networkId; } diff --git a/services/distributeddataservice/adapter/include/communicator/communication_provider.h b/services/distributeddataservice/adapter/include/communicator/communication_provider.h index 3422a7a42ada64b0e9c35afb3c1860f19b5abe5e..51533f29ac7145c4a71b7e0601d44da6126185de 100644 --- a/services/distributeddataservice/adapter/include/communicator/communication_provider.h +++ b/services/distributeddataservice/adapter/include/communicator/communication_provider.h @@ -56,6 +56,9 @@ public: // Get online deviceList KVSTORE_API virtual std::vector GetDeviceList() const = 0; + // Get deviceType by networkId + KVSTORE_API virtual std::string GetDeviceInfo(const std::string &networkId) const = 0; + // Get local device information KVSTORE_API virtual DeviceInfo GetLocalDevice() const = 0; diff --git a/services/distributeddataservice/adapter/include/communicator/idevice_query.h b/services/distributeddataservice/adapter/include/communicator/idevice_query.h index 118f818456ca47ec28c29df55e0423cd0a53810c..f9e86c9055dd800a790b9b443e752aae4703d0a3 100644 --- a/services/distributeddataservice/adapter/include/communicator/idevice_query.h +++ b/services/distributeddataservice/adapter/include/communicator/idevice_query.h @@ -29,6 +29,9 @@ public: // Get local device information KVSTORE_API virtual DeviceInfo GetLocalDevice() const = 0; + + // Get deviceType by networkId + KVSTORE_API virtual std::string GetDeviceInfo(const std::string &networkId) const = 0; }; } // namespace AppDistributedKv } // namespace OHOS diff --git a/services/distributeddataservice/app/src/kvstore_data_service.cpp b/services/distributeddataservice/app/src/kvstore_data_service.cpp index 366e338844500a5e74387ccf099235202bcd96de..5dcea4077dc43d77ece812f4af756b51ea8bf029 100644 --- a/services/distributeddataservice/app/src/kvstore_data_service.cpp +++ b/services/distributeddataservice/app/src/kvstore_data_service.cpp @@ -1050,15 +1050,14 @@ bool KvStoreDataService::CheckPermissions(const std::string &userId, const std:: auto &instance = KvStoreMetaManager::GetInstance(); KvStoreMetaData metaData; auto localDevId = DeviceKvStoreImpl::GetLocalDeviceId(); - auto qstatus = instance.QueryKvStoreMetaDataByDeviceIdAndAppId(localDevId, appId, metaData); + + auto qstatus = instance.QueryKvStoreLocalMetaDataByAppId(localDevId, appId, metaData); if (qstatus != Status::SUCCESS) { - qstatus = instance.QueryKvStoreMetaDataByDeviceIdAndAppId("", appId, metaData); // local device id maybe null - if (qstatus != Status::SUCCESS) { - ZLOGW("query appId failed."); - return false; - } + ZLOGW("query appId failed."); + return false; } - if (metaData.appType.compare("default") == 0) { + + if (metaData.appType == "default") { ZLOGD("default, dont check sync permission."); return true; } diff --git a/services/distributeddataservice/app/src/kvstore_meta_manager.cpp b/services/distributeddataservice/app/src/kvstore_meta_manager.cpp index 7a01c97154f75ab40e7ad864001bb6681a6d2687..efbb8dc8841e9baa38c99d001f045e94f33f9d73 100755 --- a/services/distributeddataservice/app/src/kvstore_meta_manager.cpp +++ b/services/distributeddataservice/app/src/kvstore_meta_manager.cpp @@ -862,9 +862,9 @@ Status KvStoreMetaManager::CheckSyncPermission(const std::string &userId, const return Status::ERROR; } KvStoreMetaData localMeta; - auto queryStatus = QueryKvStoreMetaDataByDeviceIdAndAppId(localId, appId, localMeta); + auto queryStatus = QueryKvStoreLocalMetaDataByAppId(localId, appId, localMeta); if (queryStatus != Status::SUCCESS) { - ZLOGE("get kvstore by deviceId and appId empty."); + ZLOGE("get kvstore by appId empty."); return Status::ERROR; } @@ -1041,11 +1041,58 @@ Status KvStoreMetaManager::QueryKvStoreMetaDataByDeviceIdAndAppId(const std::str return Status::SUCCESS; } } - ZLOGW("find meta failed id: %{public}s", appId.c_str()); return Status::ERROR; } +Status KvStoreMetaManager::QueryKvStoreLocalMetaDataByAppId(const std::string &devId, const std::string &appId, + KvStoreMetaData &val) +{ + ZLOGD("query local meta start."); + { + std::lock_guard lock(metaMutex_); + auto it = metaData_.find(appId); + if (it != metaData_.end()) { + val = it->second; + return Status::SUCCESS; + } + } + + std::string dbPrefixKey; + std::string prefix = KvStoreMetaRow::KEY_PREFIX; + ConcatWithSharps({prefix, devId}, dbPrefixKey); + static std::once_flag onceFlag; + std::call_once(onceFlag, [&] { + SubscribeMeta(dbPrefixKey,[this](const std::vector &key, + const std::vector &value, CHANGE_FLAG flag) { + KvStoreMetaData metaData; + std::string str(value.begin(), value.end()); + json j = Serializable::ToJson(str); + metaData.Unmarshal(j); + ZLOGD("flag:%{public}d, value:%{public}.10s", flag, metaData.deviceId.c_str()); + for (auto meta : metaData_) { + if (meta.first == metaData.appId) { + meta.second = metaData; + } + } + }); + }); + + auto &metaDelegate = GetMetaKvStore(); + if (metaDelegate == nullptr) { + ZLOGW("get delegate error."); + return Status::ERROR; + } + auto status = QueryKvStoreMetaDataByDeviceIdAndAppId(devId, appId, val); + if (status == Status::SUCCESS) { + std::lock_guard lock(metaMutex_); + metaData_.insert({appId, val}); + return Status::SUCCESS; + } + + return Status::ERROR; +} + Status KvStoreMetaManager::GetKvStoreMeta(const std::vector &metaKey, KvStoreMetaData &metaData) { ZLOGD("begin."); diff --git a/services/distributeddataservice/app/src/kvstore_meta_manager.h b/services/distributeddataservice/app/src/kvstore_meta_manager.h index 20925958c362f50684a10577d002c6a195196613..5a5420332e217182e562fd0023ef21149c8b9e74 100755 --- a/services/distributeddataservice/app/src/kvstore_meta_manager.h +++ b/services/distributeddataservice/app/src/kvstore_meta_manager.h @@ -234,6 +234,8 @@ public: Status QueryKvStoreMetaDataByDeviceIdAndAppId(const std::string &devId, const std::string &appId, KvStoreMetaData &val); + Status QueryKvStoreLocalMetaDataByAppId(const std::string &devId, const std::string &appId, KvStoreMetaData &val); + Status GetKvStoreMeta(const std::vector &metaKey, KvStoreMetaData &kvStoreMetaData); bool GetKvStoreMetaDataByBundleName(const std::string &bundleName, KvStoreMetaData &metaData); @@ -292,6 +294,8 @@ private: static MetaDeviceChangeListenerImpl listener_; KvStoreMetaObserver metaObserver_; std::recursive_mutex mutex_; + std::map metaData_; + std::mutex metaMutex_; }; } // namespace DistributedKv } // namespace OHOS