std::vector<std::pair<std::string, uid_t>> AbstractDBHandler::GetDBPath() {
std::vector<std::pair<std::string, uid_t>> db_path;
if (db_type_ == DB_TYPE_FILE_PKGDB)
- db_path = DBHandleProvider::GetInst(uid_).GetParserDBPath(pid_);
+ db_path = DBHandleProvider::GetInst(uid_).GetParserDBPath(pid_,
+ op_type_ == OPERATION_TYPE_WRITE);
else if (db_type_ == DB_TYPE_FILE_CERTDB)
db_path.emplace_back(
- std::make_pair(
- DBHandleProvider::GetInst(uid_).GetCertDBPath(pid_), uid_));
+ std::make_pair(DBHandleProvider::GetInst(uid_).GetCertDBPath(pid_,
+ op_type_ == OPERATION_TYPE_WRITE), uid_));
return db_path;
}
}
std::vector<std::pair<std::string, uid_t>> DBHandleProvider::GetParserDBPath(
- pid_t pid) {
+ pid_t pid, bool write) {
std::unique_lock<std::recursive_mutex> u(lock_);
std::unique_lock<std::recursive_mutex> gu(global_lock_);
std::vector<std::pair<std::string, uid_t>> db_path_list;
if (is_memory_ != is_memory_global_)
SetMemoryMode(pid, is_memory_global_);
- if (is_memory_ && pid_list_.find(pid) == pid_list_.end()) {
+ if (is_memory_ && pid_list_.find(pid) == pid_list_.end() && !write) {
if (uid_ > REGULAR_USER)
db_path_list.emplace_back(std::make_pair(parser_memory_db_path_, uid_));
db_path_list.emplace_back(
return db_path_list;
}
-std::string DBHandleProvider::GetCertDBPath(pid_t pid) {
+std::string DBHandleProvider::GetCertDBPath(pid_t pid, bool write) {
std::unique_lock<std::recursive_mutex> u(lock_);
std::unique_lock<std::recursive_mutex> gu(global_lock_);
if (is_memory_ != is_memory_global_)
SetMemoryMode(pid, is_memory_global_);
- if (is_memory_ && pid_list_.find(pid) == pid_list_.end())
+ if ((is_memory_ && pid_list_.find(pid) == pid_list_.end()) && !write)
return cert_memory_db_path_;
else
return cert_file_db_path_;
public:
~DBHandleProvider() = default;
static DBHandleProvider& GetInst(uid_t uid);
- std::vector<std::pair<std::string, uid_t>> GetParserDBPath(int pid);
- std::string GetCertDBPath(int pid);
+ std::vector<std::pair<std::string, uid_t>> GetParserDBPath(int pid, bool write);
+ std::string GetCertDBPath(int pid, bool write);
void SetMemoryMode(int pid, bool flag);
private: