mirror of
https://github.com/openharmony/bundlemanager_app_domain_verify.git
synced 2026-07-01 22:34:03 -04:00
!229 merge master into master
lru增加锁,增加读写dfx
Created-by: zhangrn98
Commit-by: zhangrn98
Merged-by: openharmony_ci
Description: ### 一、内容说明(相关的Issue)
### 二、建议测试周期和提测地址
建议测试完成时间:xxxx.xx.xx
投产上线时间:xxxx.xx.xx
提测地址:CI环境/压测环境
测试账号:
### 三、变更内容
* 3.1 关联PR列表
* 3.2 数据库和部署说明
1. 常规更新
2. 重启unicorn
3. 重启sidekiq
4. 迁移任务:是否有迁移任务,没有写 "无"
5. rake脚本:`bundle exec xxx RAILS_ENV = production`;没有写 "无"
* 3.4 其他技术优化内容(做了什么,变更了什么)
- 重构了 xxxx 代码
- xxxx 算法优化
* 3.5 废弃通知(什么字段、方法弃用?)
* 3.6 后向不兼容变更(是否有无法向后兼容的变更?)
### 四、研发自测点(自测哪些?冒烟用例全部自测?)
自测测试结论:
### 五、测试关注点(需要提醒QA重点关注的、可能会忽略的地方)
检查点:
| 需求名称 | 是否影响xx公共模块 | 是否需要xx功能 | 需求升级是否依赖其他子产品 |
|------|------------|----------|---------------|
| xxx | 否 | 需要 | 不需要 |
| | | | |
接口测试:
性能测试:
并发测试:
其他:
See merge request: openharmony/bundlemanager_app_domain_verify!229
This commit is contained in:
@@ -83,13 +83,14 @@ bool AppDetailsRdbDataMgr::ExecWithTrans(TransCallback cb)
|
||||
}
|
||||
|
||||
bool AppDetailsRdbDataMgr::QueryDataByDomain(
|
||||
const std::string& tableName, const std::string &domain, std::vector<AppDetailsRdbItem> &itemVec)
|
||||
const std::string& tableName, const std::string& domain, std::vector<AppDetailsRdbItem>& itemVec)
|
||||
{
|
||||
APP_DOMAIN_VERIFY_HILOGD(APP_DOMAIN_VERIFY_MGR_MODULE_SERVICE, "call.");
|
||||
APP_DOMAIN_VERIFY_HILOGI(APP_DOMAIN_VERIFY_MGR_MODULE_SERVICE, "[AppDomainVerifyIO] QueryDataByDomain.");
|
||||
NativeRdb::AbsRdbPredicates absRdbPred(tableName);
|
||||
absRdbPred.EqualTo(DETAILS_DOMAIN, domain);
|
||||
std::vector<std::string> columns = {};
|
||||
RdbForEachRetCb eachCb = [&itemVec](std::shared_ptr<AbsSharedResultSet> retSet)->bool {
|
||||
RdbForEachRetCb eachCb = [&itemVec](std::shared_ptr<AbsSharedResultSet> retSet) -> bool {
|
||||
AppDetailsRdbItem item;
|
||||
if (!item.GetRdbItem(retSet)) {
|
||||
return false;
|
||||
@@ -129,6 +130,7 @@ void AppDetailsRdbDataMgr::PostDelayCloseTask(int32_t delayTime)
|
||||
bool AppDetailsRdbDataMgr::InsertDataBatch(const std::string& tableName, std::vector<AppDetailsRdbItem>& infoVec)
|
||||
{
|
||||
APP_DOMAIN_VERIFY_HILOGD(APP_DOMAIN_VERIFY_MGR_MODULE_SERVICE, "called");
|
||||
APP_DOMAIN_VERIFY_HILOGI(APP_DOMAIN_VERIFY_MGR_MODULE_SERVICE, "[AppDomainVerifyIO] InsertDataBatch.");
|
||||
auto rdbStore = GetRdbStore();
|
||||
if (!rdbStore) {
|
||||
APP_DOMAIN_VERIFY_HILOGE(APP_DOMAIN_VERIFY_MGR_MODULE_SERVICE, "get rdbStore fail.");
|
||||
@@ -169,9 +171,10 @@ bool AppDetailsRdbDataMgr::CreateMetaData()
|
||||
return true;
|
||||
};
|
||||
|
||||
bool AppDetailsRdbDataMgr::UpdateMetaData(std::vector<MetaItem> &itemVec)
|
||||
bool AppDetailsRdbDataMgr::UpdateMetaData(std::vector<MetaItem>& itemVec)
|
||||
{
|
||||
APP_DOMAIN_VERIFY_HILOGD(APP_DOMAIN_VERIFY_MGR_MODULE_SERVICE, "called");
|
||||
APP_DOMAIN_VERIFY_HILOGI(APP_DOMAIN_VERIFY_MGR_MODULE_SERVICE, "[AppDomainVerifyIO] UpdateMetaData.");
|
||||
auto rdbStore = GetRdbStore();
|
||||
if (!rdbStore) {
|
||||
APP_DOMAIN_VERIFY_HILOGE(APP_DOMAIN_VERIFY_MGR_MODULE_SERVICE, "get rdbStore fail.");
|
||||
@@ -191,9 +194,10 @@ bool AppDetailsRdbDataMgr::UpdateMetaData(std::vector<MetaItem> &itemVec)
|
||||
return true;
|
||||
};
|
||||
|
||||
bool AppDetailsRdbDataMgr::QueryMetaData(const std::string &tableName, MetaItem &info)
|
||||
bool AppDetailsRdbDataMgr::QueryMetaData(const std::string& tableName, MetaItem& info)
|
||||
{
|
||||
APP_DOMAIN_VERIFY_HILOGD(APP_DOMAIN_VERIFY_MGR_MODULE_SERVICE, "call.");
|
||||
APP_DOMAIN_VERIFY_HILOGI(APP_DOMAIN_VERIFY_MGR_MODULE_SERVICE, "[AppDomainVerifyIO] QueryMetaData.");
|
||||
NativeRdb::AbsRdbPredicates absRdbPred(META_DATA);
|
||||
absRdbPred.EqualTo(META_TABLE_NAME, tableName);
|
||||
std::vector<std::string> columns = {};
|
||||
@@ -203,7 +207,7 @@ bool AppDetailsRdbDataMgr::QueryMetaData(const std::string &tableName, MetaItem
|
||||
return false;
|
||||
}
|
||||
std::vector<MetaItem> itemVec;
|
||||
RdbForEachRetCb eachCb = [&itemVec](std::shared_ptr<AbsSharedResultSet> retSet)->bool {
|
||||
RdbForEachRetCb eachCb = [&itemVec](std::shared_ptr<AbsSharedResultSet> retSet) -> bool {
|
||||
MetaItem item;
|
||||
if (!item.GetRdbItem(retSet)) {
|
||||
return false;
|
||||
@@ -218,7 +222,7 @@ bool AppDetailsRdbDataMgr::QueryMetaData(const std::string &tableName, MetaItem
|
||||
return false;
|
||||
};
|
||||
|
||||
bool AppDetailsRdbDataMgr::CreateTable(const std::string &tableName)
|
||||
bool AppDetailsRdbDataMgr::CreateTable(const std::string& tableName)
|
||||
{
|
||||
APP_DOMAIN_VERIFY_HILOGD(APP_DOMAIN_VERIFY_MGR_MODULE_SERVICE, "called");
|
||||
std::string sql = "CREATE TABLE IF NOT EXISTS " + tableName
|
||||
@@ -262,7 +266,7 @@ bool AppDetailsRdbDataMgr::CreateRegularIndex(const std::string& tableName, cons
|
||||
return true;
|
||||
};
|
||||
|
||||
bool AppDetailsRdbDataMgr::DeleteTable(const std::string &tableName)
|
||||
bool AppDetailsRdbDataMgr::DeleteTable(const std::string& tableName)
|
||||
{
|
||||
APP_DOMAIN_VERIFY_HILOGD(APP_DOMAIN_VERIFY_MGR_MODULE_SERVICE, "Called");
|
||||
std::string sql = "DROP TABLE IF EXISTS " + tableName + ";";
|
||||
@@ -295,7 +299,7 @@ std::string AppDetailsRdbDataMgr::GetDbVersion()
|
||||
return "";
|
||||
};
|
||||
|
||||
bool AppDetailsRdbDataMgr::RenameTable(const std::string &oldName, const std::string &newName)
|
||||
bool AppDetailsRdbDataMgr::RenameTable(const std::string& oldName, const std::string& newName)
|
||||
{
|
||||
APP_DOMAIN_VERIFY_HILOGD(APP_DOMAIN_VERIFY_MGR_MODULE_SERVICE, "called");
|
||||
std::string sql = "ALTER TABLE " + oldName + " RENAME TO " + newName + ";";
|
||||
@@ -349,6 +353,7 @@ bool AppDetailsRdbDataMgr::Query(const NativeRdb::AbsRdbPredicates& predicates,
|
||||
const std::vector<std::string>& columns, RdbForEachRetCb cb)
|
||||
{
|
||||
APP_DOMAIN_VERIFY_HILOGD(APP_DOMAIN_VERIFY_MGR_MODULE_SERVICE, "called");
|
||||
APP_DOMAIN_VERIFY_HILOGI(APP_DOMAIN_VERIFY_MGR_MODULE_SERVICE, "[AppDomainVerifyIO] Query.");
|
||||
auto rdbStore = GetRdbStore();
|
||||
if (!rdbStore) {
|
||||
APP_DOMAIN_VERIFY_HILOGE(APP_DOMAIN_VERIFY_MGR_MODULE_SERVICE, "rdb store is null");
|
||||
@@ -359,10 +364,8 @@ bool AppDetailsRdbDataMgr::Query(const NativeRdb::AbsRdbPredicates& predicates,
|
||||
APP_DOMAIN_VERIFY_HILOGE(APP_DOMAIN_VERIFY_MGR_MODULE_SERVICE, "rdbStore query absSharedResultSet failed");
|
||||
return false;
|
||||
}
|
||||
auto guard = std::unique_ptr<void, std::function<void(void*)>>(nullptr,
|
||||
[&](void*) {
|
||||
absSharedResultSet->Close();
|
||||
});
|
||||
auto guard = std::unique_ptr<void, std::function<void(void*)>>(
|
||||
nullptr, [&](void*) { absSharedResultSet->Close(); });
|
||||
if (!absSharedResultSet->HasBlock()) {
|
||||
APP_DOMAIN_VERIFY_HILOGE(APP_DOMAIN_VERIFY_MGR_MODULE_SERVICE, "absSharedResultSet has no block");
|
||||
return false;
|
||||
|
||||
@@ -38,6 +38,7 @@ private:
|
||||
std::atomic<size_t> maxCap_ = 10;
|
||||
std::list<std::pair<K, V>> cache_;
|
||||
std::unordered_map<K, typename std::list<std::pair<K, V>>::iterator> lruMap_;
|
||||
std::mutex mutex_;
|
||||
};
|
||||
|
||||
template<typename K, typename V>
|
||||
@@ -49,6 +50,7 @@ bool LruCacheUtil<K, V>::SetMaxCap(size_t cap)
|
||||
template<typename K, typename V>
|
||||
bool LruCacheUtil<K, V>::Get(const K& key, V& value)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(mutex_);
|
||||
if (lruMap_.find(key) == lruMap_.end()) {
|
||||
return false;
|
||||
}
|
||||
@@ -62,6 +64,7 @@ bool LruCacheUtil<K, V>::Get(const K& key, V& value)
|
||||
template<typename K, typename V>
|
||||
void LruCacheUtil<K, V>::Put(const K& key, const V& value)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(mutex_);
|
||||
auto iter = lruMap_.find(key);
|
||||
if (iter != lruMap_.end()) {
|
||||
V val = lruMap_[key]->second;
|
||||
@@ -82,6 +85,7 @@ void LruCacheUtil<K, V>::Put(const K& key, const V& value)
|
||||
template<typename K, typename V>
|
||||
void LruCacheUtil<K, V>::Clear()
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(mutex_);
|
||||
cache_.clear();
|
||||
lruMap_.clear();
|
||||
};
|
||||
@@ -89,6 +93,7 @@ void LruCacheUtil<K, V>::Clear()
|
||||
template<typename K, typename V>
|
||||
bool LruCacheUtil<K, V>::IsEmpty()
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(mutex_);
|
||||
return lruMap_.empty();
|
||||
};
|
||||
}
|
||||
|
||||
@@ -39,6 +39,8 @@ WhiteListConfigMgr::~WhiteListConfigMgr()
|
||||
}
|
||||
void WhiteListConfigMgr::LoadDefault()
|
||||
{
|
||||
APP_DOMAIN_VERIFY_HILOGI(
|
||||
APP_DOMAIN_VERIFY_MODULE_COMMON, "[AppDomainVerifyIO] operation:read default whitelist");
|
||||
preferences_ = GetPreference(DEFAULT_WHITE_LIST_PRE_PATH);
|
||||
if (preferences_ == nullptr) {
|
||||
UNIVERSAL_ERROR_EVENT(READ_DEFAULT_WHITE_LIST_FAULT);
|
||||
@@ -54,6 +56,8 @@ void WhiteListConfigMgr::LoadDefault()
|
||||
}
|
||||
void WhiteListConfigMgr::LoadDynamic()
|
||||
{
|
||||
APP_DOMAIN_VERIFY_HILOGI(
|
||||
APP_DOMAIN_VERIFY_MODULE_COMMON, "[AppDomainVerifyIO] operation:read dynamic whitelist");
|
||||
preferences_ = GetPreference(DYNAMIC_WHITE_LIST_PRE_PATH);
|
||||
if (preferences_ == nullptr) {
|
||||
UNIVERSAL_ERROR_EVENT(READ_DYNAMIC_WHITE_LIST_FAULT);
|
||||
@@ -107,6 +111,8 @@ std::shared_ptr<NativePreferences::Preferences> WhiteListConfigMgr::GetPreferenc
|
||||
}
|
||||
bool WhiteListConfigMgr::Save()
|
||||
{
|
||||
APP_DOMAIN_VERIFY_HILOGI(
|
||||
APP_DOMAIN_VERIFY_MODULE_COMMON, "[AppDomainVerifyIO] operation:write dynamic whitelist");
|
||||
APP_DOMAIN_VERIFY_HILOGI(APP_DOMAIN_VERIFY_MODULE_COMMON, "called");
|
||||
if (preferences_ == nullptr) {
|
||||
APP_DOMAIN_VERIFY_HILOGW(APP_DOMAIN_VERIFY_MODULE_COMMON, "preferences null");
|
||||
|
||||
@@ -37,6 +37,7 @@ public:
|
||||
AppDetailsDataMgr();
|
||||
virtual ~AppDetailsDataMgr();
|
||||
int QueryAppDetailsWant(const std::string& url, AAFwk::Want& want, std::string& bundleName);
|
||||
|
||||
private:
|
||||
bool QueryAppDetailsWantByCache(const std::string& url, std::string& bundleName);
|
||||
bool QueryAppDetailsWantByRdb(const std::string& url, std::string& bundleName);
|
||||
@@ -44,8 +45,9 @@ private:
|
||||
std::shared_ptr<LruCacheUtil<std::string, std::string>> lruCache_;
|
||||
std::shared_ptr<AppDetailsRdbDataMgr> rdbMgr_;
|
||||
std::shared_ptr<AppDetailsFilter> detailsFilter_;
|
||||
int64_t cacheBeginTime_ = 0;
|
||||
std::mutex agWantUrlMutex;
|
||||
int64_t cacheBeginTime_{0};
|
||||
std::mutex cacheMutex_;
|
||||
std::mutex agWantUrlMutex_;
|
||||
std::string agWantUrl_;
|
||||
};
|
||||
} // namespace AppDomainVerify
|
||||
|
||||
@@ -41,7 +41,7 @@ AppDetailsDataMgr::AppDetailsDataMgr()
|
||||
rdbMgr_ = std::make_shared<AppDetailsRdbDataMgr>(false);
|
||||
};
|
||||
|
||||
AppDetailsDataMgr::~AppDetailsDataMgr(){};
|
||||
AppDetailsDataMgr::~AppDetailsDataMgr() {};
|
||||
|
||||
int AppDetailsDataMgr::QueryAppDetailsWant(const std::string& url, AAFwk::Want& want, std::string& bundleName)
|
||||
{
|
||||
@@ -68,15 +68,18 @@ bool AppDetailsDataMgr::QueryAppDetailsWantByCache(const std::string& url, std::
|
||||
{
|
||||
int64_t currTime =
|
||||
std::chrono::time_point_cast<std::chrono::seconds>(std::chrono::system_clock::now()).time_since_epoch().count();
|
||||
if (currTime - cacheBeginTime_ > CACHE_TIME_S) {
|
||||
cacheBeginTime_ = currTime;
|
||||
lruCache_->Clear();
|
||||
return false;
|
||||
}
|
||||
std::string value;
|
||||
if (lruCache_->Get(url, value)) {
|
||||
bundleName = value;
|
||||
return true;
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(cacheMutex_);
|
||||
if (currTime - cacheBeginTime_ > CACHE_TIME_S) {
|
||||
cacheBeginTime_ = currTime;
|
||||
lruCache_->Clear();
|
||||
return false;
|
||||
}
|
||||
std::string value;
|
||||
if (lruCache_->Get(url, value)) {
|
||||
bundleName = value;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
@@ -118,7 +121,7 @@ bool AppDetailsDataMgr::QueryAppDetailsWantByRdb(const std::string& url, std::st
|
||||
void AppDetailsDataMgr::AddInfoToWant(AAFwk::Want& want, const std::string& bundleName)
|
||||
{
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(agWantUrlMutex);
|
||||
std::lock_guard<std::mutex> lock(agWantUrlMutex_);
|
||||
if (agWantUrl_.empty()) {
|
||||
MetaItem info;
|
||||
rdbMgr_->QueryMetaData(APP_DETAILS_TABLE, info);
|
||||
|
||||
@@ -64,6 +64,7 @@ AppDomainVerifyRdbDataManager::~AppDomainVerifyRdbDataManager()
|
||||
bool AppDomainVerifyRdbDataManager::InsertData(const RdbDataItem& rdbDataItem)
|
||||
{
|
||||
APP_DOMAIN_VERIFY_HILOGD(APP_DOMAIN_VERIFY_MGR_MODULE_SERVICE, "called");
|
||||
APP_DOMAIN_VERIFY_HILOGI(APP_DOMAIN_VERIFY_MGR_MODULE_SERVICE, "[AppDomainVerifyIO] InsertData.");
|
||||
auto rdbStore = GetRdbStore();
|
||||
if (!CheckRdbStoreExist(rdbStore)) {
|
||||
return false;
|
||||
@@ -108,6 +109,7 @@ bool AppDomainVerifyRdbDataManager::Query(const NativeRdb::AbsRdbPredicates& pre
|
||||
if (!CheckRdbStoreExist(rdbStore)) {
|
||||
return false;
|
||||
}
|
||||
APP_DOMAIN_VERIFY_HILOGI(APP_DOMAIN_VERIFY_MGR_MODULE_SERVICE, "[AppDomainVerifyIO] Query.");
|
||||
auto absSharedResultSet = rdbStore->Query(predicates, columns);
|
||||
if (absSharedResultSet == nullptr) {
|
||||
APP_DOMAIN_VERIFY_HILOGE(APP_DOMAIN_VERIFY_MGR_MODULE_SERVICE, "rdbStore query absSharedResultSet failed");
|
||||
@@ -142,6 +144,7 @@ bool AppDomainVerifyRdbDataManager::Query(const NativeRdb::AbsRdbPredicates& pre
|
||||
bool AppDomainVerifyRdbDataManager::DeleteData(const std::string& bundleName)
|
||||
{
|
||||
APP_DOMAIN_VERIFY_HILOGD(APP_DOMAIN_VERIFY_MGR_MODULE_SERVICE, "called");
|
||||
APP_DOMAIN_VERIFY_HILOGI(APP_DOMAIN_VERIFY_MGR_MODULE_SERVICE, "[AppDomainVerifyIO] DeleteData.");
|
||||
auto rdbStore = GetRdbStore();
|
||||
if (!CheckRdbStoreExist(rdbStore)) {
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user