From 89612f2f3373e2b3cd38b8fea4dc2658e027a4d5 Mon Sep 17 00:00:00 2001 From: lsqwx Date: Thu, 7 Aug 2025 11:02:00 +0800 Subject: [PATCH 1/3] revert queryTimeout Signed-off-by: lsqwx --- .../service/data_share/common/qos_manager.h | 42 ---------- .../data_share/data_share_service_impl.cpp | 77 +++---------------- .../data_share/data_share_service_impl.h | 10 +-- .../data_share/data_share_service_stub.cpp | 37 ++++++--- .../data_share/data_share_service_stub.h | 1 + .../service/data_share/idata_share_service.h | 6 +- .../test/data_share_service_impl_test.cpp | 4 +- 7 files changed, 43 insertions(+), 134 deletions(-) delete mode 100644 services/distributeddataservice/service/data_share/common/qos_manager.h diff --git a/services/distributeddataservice/service/data_share/common/qos_manager.h b/services/distributeddataservice/service/data_share/common/qos_manager.h deleted file mode 100644 index 8f3d1eac8..000000000 --- a/services/distributeddataservice/service/data_share/common/qos_manager.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2025 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef DATASHARESERVICE_QOS_MANAGER_H -#define DATASHARESERVICE_QOS_MANAGER_H - -#include "qos.h" -namespace OHOS { -namespace DataShare { - -class QosManager { -public: - QosManager() - { -#ifndef IS_EMULATOR - // set thread qos QOS_USER_INTERACTIVE - QOS::SetThreadQos(QOS::QosLevel::QOS_USER_INTERACTIVE); -#endif - } - ~QosManager() - { -#ifndef IS_EMULATOR - QOS::ResetThreadQos(); -#endif - } -}; - -} // namespace DataShare -} // namespace OHOS -#endif // DATASHARESERVICE_QOS_MANAGER_H \ No newline at end of file diff --git a/services/distributeddataservice/service/data_share/data_share_service_impl.cpp b/services/distributeddataservice/service/data_share/data_share_service_impl.cpp index c9a1b00f7..8a57af991 100644 --- a/services/distributeddataservice/service/data_share/data_share_service_impl.cpp +++ b/services/distributeddataservice/service/data_share/data_share_service_impl.cpp @@ -24,7 +24,6 @@ #include "app_connect_manager.h" #include "bundle_mgr_proxy.h" #include "bundle_utils.h" -#include "block_data.h" #include "common_event_manager.h" #include "common_event_support.h" #include "concurrent_task_client.h" @@ -65,7 +64,6 @@ #include "parameters.h" #include "dataproxy_handle_common.h" #include "proxy_data_manager.h" -#include "qos_manager.h" #include "datashare_observer.h" #include "subscriber_managers/proxy_data_subscriber_manager.h" @@ -77,8 +75,6 @@ using namespace OHOS::DistributedData; __attribute__((used)) DataShareServiceImpl::Factory DataShareServiceImpl::factory_; // decimal base static constexpr int DECIMAL_BASE = 10; -static constexpr int MAX_QUERYTIMEOUT_COUNT = 8; -std::atomic DataShareServiceImpl::queryTimeoutCount_ = 0; DataShareServiceImpl::BindInfo DataShareServiceImpl::binderInfo_; class DataShareServiceImpl::SystemAbilityStatusChangeListener : public SystemAbilityStatusChangeStub { @@ -226,73 +222,17 @@ std::pair DataShareServiceImpl::DeleteEx(const std::string &ur return ExecuteEx(uri, extUri, callingTokenId, false, callBack); } -std::pair> DataShareServiceImpl::QueryTimeout(const std::string &uri, - const std::string &extUri, const DataSharePredicates &predicates, - const std::vector &columns, DataShareOption &option) -{ - // 1. This function itself is an IPC call. 2. It is not allowed for other non-IPC requests to call this function. - int count = queryTimeoutCount_.fetch_add(1); - if (count >= MAX_QUERYTIMEOUT_COUNT) { - queryTimeoutCount_.fetch_sub(1); - ZLOGW("Query Timeout busy, uri: %{public}s", URIUtils::Anonymous(uri).c_str()); - return std::make_pair(E_RESULTSET_BUSY, nullptr); - } - auto pid = IPCSkeleton::GetCallingPid(); - auto tokenId = IPCSkeleton::GetCallingTokenID(); - auto resultTuple = std::make_shared>, std::chrono::milliseconds>>(option.timeout, - std::tuple{false, 0, nullptr}); - std::shared_ptr> overTime = std::make_shared>(false); - binderInfo_.executors->Execute([uri, extUri, predicates, columns, resultTuple, - pid, tokenId, overTime, this]() { - // set thread qos - QosManager qosManager; - if (overTime->load()) { - queryTimeoutCount_.fetch_sub(1); - return; - } - std::shared_ptr resultSet = nullptr; - auto callBack = [&uri, &predicates, &columns, pid, tokenId, &resultTuple, &resultSet, this] - (ProviderInfo &info, DistributedData::StoreMetaData &, - std::shared_ptr dbDelegate) -> std::pair { - std::string func = __FUNCTION__; - TimeoutReport timeoutReport({info.bundleName, info.moduleName, "", func, tokenId}, true); - auto [err, result] = dbDelegate->Query(info.tableName, predicates, columns, pid, tokenId); - if (err != E_OK) { - ReportExcuteFault(tokenId, info, err, func); - } - resultSet = std::move(result); - timeoutReport.Report(); - return std::make_pair(err, E_OK); - }; - auto [errVal, status] = ExecuteEx(uri, extUri, tokenId, true, callBack); - resultTuple->SetValue({true, errVal, std::move(resultSet)}); - queryTimeoutCount_.fetch_sub(1); - }); - auto [finish, status, res] = resultTuple->GetValue(); - if (finish) { - return std::make_pair(status, res); - } - overTime->store(true); - ZLOGW("Query Timeout, uri: %{public}s", URIUtils::Anonymous(uri).c_str()); - return std::make_pair(E_TIMEOUT_ERROR, nullptr); -} - -std::pair> DataShareServiceImpl::Query(const std::string &uri, - const std::string &extUri, const DataSharePredicates &predicates, - const std::vector &columns, DataShareOption &option) +std::shared_ptr DataShareServiceImpl::Query(const std::string &uri, const std::string &extUri, + const DataSharePredicates &predicates, const std::vector &columns, int &errCode) { std::string func = __FUNCTION__; - XCollie xcollie(std::string(LOG_TAG) + "::" + func, XCollie::XCOLLIE_LOG | XCollie::XCOLLIE_RECOVERY); - int errCode = GetSilentProxyStatus(uri, false); - if (errCode != E_OK) { + XCollie xcollie(std::string(LOG_TAG) + "::" + func, + XCollie::XCOLLIE_LOG | XCollie::XCOLLIE_RECOVERY); + if (GetSilentProxyStatus(uri, false) != E_OK) { ZLOGW("silent proxy disable, %{public}s", URIUtils::Anonymous(uri).c_str()); - return std::make_pair(errCode, nullptr); - } - if (option.timeout != 0 && binderInfo_.executors != nullptr) { - return QueryTimeout(uri, extUri, predicates, columns, option); + return nullptr; } - std::shared_ptr resultSet = nullptr; + std::shared_ptr resultSet; auto callingPid = IPCSkeleton::GetCallingPid(); auto callingTokenId = IPCSkeleton::GetCallingTokenID(); auto callBack = [&uri, &predicates, &columns, &resultSet, &callingPid, &callingTokenId, &func, this] @@ -310,7 +250,8 @@ std::pair> DataShareServiceImpl::Qu return std::make_pair(err, E_OK); }; auto [errVal, status] = ExecuteEx(uri, extUri, callingTokenId, true, callBack); - return std::make_pair(errVal, resultSet); + errCode = errVal; + return resultSet; } int32_t DataShareServiceImpl::AddTemplate(const std::string &uri, const int64_t subscriberId, const Template &tplt) diff --git a/services/distributeddataservice/service/data_share/data_share_service_impl.h b/services/distributeddataservice/service/data_share/data_share_service_impl.h index 8408c10f9..04448e729 100644 --- a/services/distributeddataservice/service/data_share/data_share_service_impl.h +++ b/services/distributeddataservice/service/data_share/data_share_service_impl.h @@ -30,7 +30,6 @@ #include "data_share_db_config.h" #include "data_share_service_stub.h" #include "data_share_silent_config.h" -#include "datashare_option.h" #include "datashare_template.h" #include "db_delegate.h" #include "eventcenter/event.h" @@ -51,9 +50,8 @@ public: DistributedData::StoreMetaData &, std::shared_ptr)>; DataShareServiceImpl() = default; virtual ~DataShareServiceImpl(); - std::pair> Query(const std::string &uri, const std::string &extUri, - const DataSharePredicates &predicates, const std::vector &columns, - DataShareOption &option) override; + std::shared_ptr Query(const std::string &uri, const std::string &extUri, + const DataSharePredicates &predicates, const std::vector &columns, int &errCode) override; int32_t AddTemplate(const std::string &uri, const int64_t subscriberId, const Template &tplt) override; int32_t DelTemplate(const std::string &uri, const int64_t subscriberId) override; std::vector Publish(const Data &data, const std::string &bundleNameOfProvider) override; @@ -156,9 +154,6 @@ private: bool VerifyPermission(const std::string &bundleName, const std::string &permission, bool isFromExtension, const int32_t tokenId); bool GetCallerBundleInfo(BundleInfo &callerBundleInfo); - std::pair> QueryTimeout(const std::string &uri, - const std::string &extUri, const DataSharePredicates &predicates, const std::vector &columns, - DataShareOption &option); static Factory factory_; static constexpr int32_t ERROR = -1; static constexpr int32_t ERROR_PERMISSION_DENIED = -2; @@ -174,7 +169,6 @@ private: static BindInfo binderInfo_; std::shared_ptr timerReceiver_ = nullptr; DataShareSilentConfig dataShareSilentConfig_; - static std::atomic queryTimeoutCount_; }; } // namespace OHOS::DataShare #endif // DATASHARESERVICE_DATA_SERVICE_IMPL_H diff --git a/services/distributeddataservice/service/data_share/data_share_service_stub.cpp b/services/distributeddataservice/service/data_share/data_share_service_stub.cpp index eb5b6b498..a1548b4f6 100644 --- a/services/distributeddataservice/service/data_share/data_share_service_stub.cpp +++ b/services/distributeddataservice/service/data_share/data_share_service_stub.cpp @@ -21,14 +21,13 @@ #include #include "common_utils.h" #include "data_share_obs_proxy.h" -#include "datashare_option.h" #include "hiview_adapter.h" #include "hiview_fault_adapter.h" #include "ipc_skeleton.h" #include "ishared_result_set.h" #include "itypes_util.h" #include "log_print.h" -#include "qos_manager.h" +#include "qos.h" #include "uri_utils.h" #include "utils/anonymous.h" #include "dataproxy_handle_common.h" @@ -36,6 +35,23 @@ namespace OHOS { namespace DataShare { +class DataShareServiceStub::QosManager { +public: + QosManager() + { +#ifndef IS_EMULATOR + // set thread qos QOS_USER_INTERACTIVE + QOS::SetThreadQos(QOS::QosLevel::QOS_USER_INTERACTIVE); +#endif + } + ~QosManager() + { +#ifndef IS_EMULATOR + QOS::ResetThreadQos(); +#endif + } +}; + bool DataShareServiceStub::CheckInterfaceToken(MessageParcel &data) { auto localDescriptor = IDataShareService::GetDescriptor(); @@ -109,18 +125,19 @@ int32_t DataShareServiceStub::OnDeleteEx(MessageParcel &data, MessageParcel &rep int32_t DataShareServiceStub::OnQuery(MessageParcel &data, MessageParcel &reply) { + std::string uri; + std::string extUri; DataSharePredicates predicate; std::vector columns; - DataShareParamSet paramSet; - if (!ITypesUtil::Unmarshal(data, paramSet, predicate, columns)) { - ZLOGE("Unmarshal uri:%{public}s columns size:%{public}zu", URIUtils::Anonymous(paramSet.uri).c_str(), + if (!ITypesUtil::Unmarshal(data, uri, extUri, predicate, columns)) { + ZLOGE("Unmarshal uri:%{public}s columns size:%{public}zu", URIUtils::Anonymous(uri).c_str(), columns.size()); return IPC_STUB_INVALID_DATA_ERR; } - auto [errCode, resultset] = Query(paramSet.uri, paramSet.extUri, predicate, columns, paramSet.option); - auto result = ISharedResultSet::WriteToParcel(resultset, reply); - if (!ITypesUtil::Marshal(reply, errCode)) { - ZLOGE("Marshal status:0x%{public}x", errCode); + int status = 0; + auto result = ISharedResultSet::WriteToParcel(Query(uri, extUri, predicate, columns, status), reply); + if (!ITypesUtil::Marshal(reply, status)) { + ZLOGE("Marshal status:0x%{public}x", status); return IPC_STUB_WRITE_PARCEL_ERR; } return 0; @@ -340,7 +357,7 @@ int32_t DataShareServiceStub::OnNotifyConnectDone(MessageParcel &data, MessagePa int DataShareServiceStub::OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply) { // set thread qos - QosManager qos; + DataShareServiceStub::QosManager qos; int tryTimes = TRY_TIMES; while (!isReady_.load() && tryTimes > 0) { diff --git a/services/distributeddataservice/service/data_share/data_share_service_stub.h b/services/distributeddataservice/service/data_share/data_share_service_stub.h index a242a4455..27f1690ff 100644 --- a/services/distributeddataservice/service/data_share/data_share_service_stub.h +++ b/services/distributeddataservice/service/data_share/data_share_service_stub.h @@ -27,6 +27,7 @@ public: void SetServiceReady(); private: + class QosManager; static constexpr std::chrono::milliseconds TIME_THRESHOLD = std::chrono::milliseconds(500); static bool CheckInterfaceToken(MessageParcel& data); int32_t OnQuery(MessageParcel& data, MessageParcel& reply); diff --git a/services/distributeddataservice/service/data_share/idata_share_service.h b/services/distributeddataservice/service/data_share/idata_share_service.h index 99d2a5901..9f08d74c5 100644 --- a/services/distributeddataservice/service/data_share/idata_share_service.h +++ b/services/distributeddataservice/service/data_share/idata_share_service.h @@ -19,7 +19,6 @@ #include #include -#include "datashare_common.h" #include "datashare_predicates.h" #include "datashare_result_set.h" #include "datashare_values_bucket.h" @@ -89,9 +88,8 @@ public: enum { DATA_SHARE_ERROR = -1, DATA_SHARE_OK = 0 }; DECLARE_INTERFACE_DESCRIPTOR(u"OHOS.DataShare.IDataShareService"); - virtual std::pair> Query(const std::string &uri, - const std::string &extUri, const DataSharePredicates &predicates, const std::vector &columns, - DataShareOption &option) = 0; + virtual std::shared_ptr Query(const std::string &uri, const std::string &extUri, + const DataSharePredicates &predicates, const std::vector &columns, int &errCode) = 0; virtual int32_t AddTemplate(const std::string &uri, const int64_t subscriberId, const Template &tplt) = 0; virtual int32_t DelTemplate(const std::string &uri, const int64_t subscriberId) = 0; virtual std::vector Publish(const Data &data, const std::string &bundleNameOfProvider) = 0; diff --git a/services/distributeddataservice/service/test/data_share_service_impl_test.cpp b/services/distributeddataservice/service/test/data_share_service_impl_test.cpp index 076ec4bb3..7e65ce071 100644 --- a/services/distributeddataservice/service/test/data_share_service_impl_test.cpp +++ b/services/distributeddataservice/service/test/data_share_service_impl_test.cpp @@ -136,8 +136,8 @@ HWTEST_F(DataShareServiceImplTest, DataShareServiceImpl001, TestSize.Level1) predicates.EqualTo("", ""); std::vector columns; - DataShareOption option; - auto [errVal, resQuery] = dataShareServiceImpl.Query(uri, "", predicates, columns, option); + int errVal = 0; + auto resQuery = dataShareServiceImpl.Query(uri, "", predicates, columns, errVal); int resultSet = 0; if (resQuery != nullptr) { resQuery->GetRowCount(resultSet); -- Gitee From 5a423eacdbf1b36ae0d369a7b3d89e036d20febf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BD=97=E4=B8=96=E5=A5=87?= Date: Mon, 11 Aug 2025 12:36:01 +0000 Subject: [PATCH 2/3] update services/distributeddataservice/service/data_share/data_share_service_stub.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 罗世奇 --- .../service/data_share/data_share_service_stub.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/services/distributeddataservice/service/data_share/data_share_service_stub.cpp b/services/distributeddataservice/service/data_share/data_share_service_stub.cpp index fa5bcaeeb..1506a41b5 100644 --- a/services/distributeddataservice/service/data_share/data_share_service_stub.cpp +++ b/services/distributeddataservice/service/data_share/data_share_service_stub.cpp @@ -27,7 +27,6 @@ #include "ishared_result_set.h" #include "itypes_util.h" #include "log_print.h" -#include "qos_manager.h" #include "utils.h" #include "utils/anonymous.h" #include "dataproxy_handle_common.h" -- Gitee From d7f11f759fb06f312efcd14c156a661a978f901c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BD=97=E4=B8=96=E5=A5=87?= Date: Mon, 11 Aug 2025 12:39:42 +0000 Subject: [PATCH 3/3] update services/distributeddataservice/service/data_share/data_share_service_stub.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 罗世奇 --- .../service/data_share/data_share_service_stub.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/services/distributeddataservice/service/data_share/data_share_service_stub.cpp b/services/distributeddataservice/service/data_share/data_share_service_stub.cpp index 1506a41b5..35586c108 100644 --- a/services/distributeddataservice/service/data_share/data_share_service_stub.cpp +++ b/services/distributeddataservice/service/data_share/data_share_service_stub.cpp @@ -27,6 +27,7 @@ #include "ishared_result_set.h" #include "itypes_util.h" #include "log_print.h" +#include "qos.h" #include "utils.h" #include "utils/anonymous.h" #include "dataproxy_handle_common.h" -- Gitee