diff --git a/datamgr_service/services/distributeddataservice/service/cloud/cloud_service_impl.cpp b/datamgr_service/services/distributeddataservice/service/cloud/cloud_service_impl.cpp index 09495b84d2d2c788f09b1c5d3667a9521053d01f..3b4545406c8b2cea306210f5218962fc1e3ca5dc 100644 --- a/datamgr_service/services/distributeddataservice/service/cloud/cloud_service_impl.cpp +++ b/datamgr_service/services/distributeddataservice/service/cloud/cloud_service_impl.cpp @@ -354,46 +354,35 @@ ExecutorPool::Task CloudServiceImpl::GenTask(int32_t retry, int32_t user, AsyncW }; } -std::vector CloudServiceImpl::GetSchemaMeta(int32_t userId, const std::string &bundleName, int32_t instanceId) +SchemaMeta CloudServiceImpl::GetSchemaMeta(int32_t userId, const std::string &bundleName, int32_t instanceId) { + SchemaMeta schemaMeta; CloudInfo cloudInfo = GetCloudInfo(userId); if (!cloudInfo.IsValid()) { // GetCloudInfo has print the log info. so we don`t need print again. - return {}; + return schemaMeta; } if (!bundleName.empty() && !cloudInfo.Exist(bundleName, instanceId)) { - ZLOGE("bundleName:%{public}s instanceId:%{public}d", bundleName.c_str(), instanceId); - return {}; + ZLOGD("bundleName:%{public}s instanceId:%{public}d is not exist", bundleName.c_str(), instanceId); + return schemaMeta; + } + std::string schemaKey = cloudInfo.GetSchemaKey(bundleName, instanceId); + if (MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)) { + return schemaMeta; } auto instance = CloudServer::GetInstance(); if (instance == nullptr) { ZLOGE("instance is nullptr"); - return {}; + return schemaMeta; } - - std::vector schemas; - for (auto &[name, app]: cloudInfo.apps) { - if (!bundleName.empty() && name != bundleName) { - continue; - } - std::string schemaKey = cloudInfo.GetSchemaKey(name, instanceId); - SchemaMeta schemaMeta; - if (MetaDataManager::GetInstance().LoadMeta(schemaKey, schemaMeta, true)) { - schemas.push_back(std::move(schemaMeta)); - continue; - } - - schemaMeta = instance->GetAppSchema(userId, name); - if (!schemaMeta.IsValid()) { - ZLOGE("download schema from cloud failed, user:%{public}s, bundleName:%{public}s", userId, name.c_str()); - continue; - } - MetaDataManager::GetInstance().SaveMeta(schemaKey, schemaMeta, true); - schemas.push_back(std::move(schemaMeta)); + schemaMeta = instance->GetAppSchema(userId, bundleName); + if (!schemaMeta.IsValid()) { + ZLOGE("download schema from cloud failed, user:%{public}s, bundleName:%{public}s", userId, bundleName.c_str()); } - return schemas; + MetaDataManager::GetInstance().SaveMeta(schemaKey, schemaMeta, true); + return schemaMeta; } CloudInfo CloudServiceImpl::GetCloudInfo(int32_t userId) { @@ -465,10 +454,9 @@ bool CloudServiceImpl::DoSubscribe(int32_t user) } SchemaMeta schemaMeta; - exits = MetaDataManager::GetInstance().LoadMeta( - cloudInfo.GetSchemaKey(bundle), schemaMeta, true); + exits = MetaDataManager::GetInstance().LoadMeta(cloudInfo.GetSchemaKey(bundle), schemaMeta, true); if (exits) { - dbs[bundle] = std::move(schemaMeta.databases); + dbs.insert_or_assign(bundle, std::move(schemaMeta.databases)); } } diff --git a/datamgr_service/services/distributeddataservice/service/cloud/cloud_service_impl.h b/datamgr_service/services/distributeddataservice/service/cloud/cloud_service_impl.h index adc9a6648b7ddc7dfb8f727f9352989285e9b087..7bdbfe21b84c92716b380e88081dc1f6161e6151 100644 --- a/datamgr_service/services/distributeddataservice/service/cloud/cloud_service_impl.h +++ b/datamgr_service/services/distributeddataservice/service/cloud/cloud_service_impl.h @@ -68,7 +68,7 @@ private: bool UpdateCloudInfo(int32_t user); bool UpdateSchema(int32_t user); - std::vector GetSchemaMeta(int32_t userId, const std::string &bundleName, int32_t instanceId); + SchemaMeta GetSchemaMeta(int32_t userId, const std::string &bundleName, int32_t instanceId); CloudInfo GetCloudInfo(int32_t userId); int32_t GetCloudInfo(uint32_t tokenId, const std::string &id, CloudInfo &cloudInfo); int32_t GetCloudInfoFromMeta(CloudInfo &cloudInfo); diff --git a/datamgr_service/services/distributeddataservice/service/rdb/rdb_service_impl.h b/datamgr_service/services/distributeddataservice/service/rdb/rdb_service_impl.h index 3007d191da6b8e297109acbae184d5fdf6506690..f527997c182735dd07c87308f68faa20924fe110 100644 --- a/datamgr_service/services/distributeddataservice/service/rdb/rdb_service_impl.h +++ b/datamgr_service/services/distributeddataservice/service/rdb/rdb_service_impl.h @@ -52,6 +52,7 @@ public: const AsyncDetail &async) override; int32_t Subscribe(const RdbSyncerParam ¶m, const SubscribeOption &option, RdbStoreObserver *observer) override; + int32_t UnSubscribe(const RdbSyncerParam ¶m, const SubscribeOption &option, RdbStoreObserver *observer) override; diff --git a/datamgr_service/services/distributeddataservice/service/test/cloud_data_test.cpp b/datamgr_service/services/distributeddataservice/service/test/cloud_data_test.cpp index 8142fe7faa517b23d9468855782e0a35825645c8..09c13d8daf22590bcb2b90bf88f3bb80bd9d8078 100644 --- a/datamgr_service/services/distributeddataservice/service/test/cloud_data_test.cpp +++ b/datamgr_service/services/distributeddataservice/service/test/cloud_data_test.cpp @@ -172,7 +172,7 @@ void CloudDataTest::TearDown() {} /** * @tc.name: GetSchema -* @tc.desc: GetSchema from cloud. +* @tc.desc: GetSchema from cloud when no schema in meta. * @tc.type: FUNC * @tc.require: * @tc.author: ht @@ -180,8 +180,8 @@ void CloudDataTest::TearDown() {} HWTEST_F(CloudDataTest, GetSchema, TestSize.Level0) { ZLOGI("CloudDataTest start"); - auto cloudServer = CloudServer::GetInstance(); - auto cloudInfo = cloudServer->GetServerInfo( + auto cloudServerMock = std::make_shared(); + auto cloudInfo = cloudServerMock->GetServerInfo( DistributedKv::AccountDelegate::GetInstance()->GetUserByToken(OHOS::IPCSkeleton::GetCallingTokenID())); ASSERT_TRUE(MetaDataManager::GetInstance().DelMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE), true)); SchemaMeta schemaMeta; diff --git a/relational_store/frameworks/js/napi/relationalstore/src/napi_rdb_store.cpp b/relational_store/frameworks/js/napi/relationalstore/src/napi_rdb_store.cpp index 60d6928d7fe8a8ca2ac065d20395f4cf7606987a..c3bf29d8824b6d583e2475f195cb52c647bd5cfe 100644 --- a/relational_store/frameworks/js/napi/relationalstore/src/napi_rdb_store.cpp +++ b/relational_store/frameworks/js/napi/relationalstore/src/napi_rdb_store.cpp @@ -282,7 +282,7 @@ int ParseCloudSyncModeArg(const napi_env &env, const napi_value &arg, std::share CHECK_RETURN_SET(type == napi_number, std::make_shared("mode", "a SyncMode Type.")); napi_status status = napi_get_value_int32(env, arg, &context->enumArg); CHECK_RETURN_SET(status == napi_ok, std::make_shared("mode", "a SyncMode Type.")); - bool checked = (context->enumArg > 1 && context->enumArg <= 4); + bool checked = (context->enumArg > 2 && context->enumArg <= 5); CHECK_RETURN_SET(checked, std::make_shared("mode", "a SyncMode of cloud.")); LOG_DEBUG("ParseSyncModeArg end"); diff --git a/relational_store/frameworks/native/rdb/include/rdb_store_impl.h b/relational_store/frameworks/native/rdb/include/rdb_store_impl.h index 5d7df88e1aee136e3ed0679dc929b5fecd5eb901..5304839c59a431f108c6d01e4c7e37f478581955 100644 --- a/relational_store/frameworks/native/rdb/include/rdb_store_impl.h +++ b/relational_store/frameworks/native/rdb/include/rdb_store_impl.h @@ -22,12 +22,12 @@ #include #include -#include "executor_pool.h" #include "rdb_store.h" #include "rdb_store_config.h" #include "sqlite_connection_pool.h" #include "sqlite_statement.h" #include "transaction_observer.h" + namespace OHOS { class ExecutorPool; }