diff --git a/frameworks/libs/distributeddb/common/src/schema_utils.cpp b/frameworks/libs/distributeddb/common/src/schema_utils.cpp index 22c254748b84f58164325c4fad0f0622180f4f0c..30d707e37b4df20aebc31d1cb0eb59c4557c9142 100644 --- a/frameworks/libs/distributeddb/common/src/schema_utils.cpp +++ b/frameworks/libs/distributeddb/common/src/schema_utils.cpp @@ -178,7 +178,7 @@ int SchemaUtils::TransToLong(const std::string &defaultContent, SchemaAttribute return -E_SCHEMA_PARSE_FAIL; } auto defaultPos = defaultContent.find_first_not_of("+- "); - if (defaultPos >= defaultContent.size()) { + if (defaultPos == std::string::npos) { LOGE("Default value without +-"); return -E_SCHEMA_PARSE_FAIL; } diff --git a/frameworks/libs/distributeddb/storage/src/storage_engine.cpp b/frameworks/libs/distributeddb/storage/src/storage_engine.cpp index c759d9ea86fa01238c0c76e8c330a939236b8a8f..93ae53dca611dceb4c7ee4cb357a717267f615e0 100644 --- a/frameworks/libs/distributeddb/storage/src/storage_engine.cpp +++ b/frameworks/libs/distributeddb/storage/src/storage_engine.cpp @@ -16,7 +16,6 @@ #include "storage_engine.h" #include -#include #include "db_common.h" #include "db_errno.h" @@ -597,39 +596,38 @@ void StorageEngine::PrintDbFileMsg(bool isOpen) if (option.isMemDb || dbFilePath.empty()) { return; } + + std::string logMessage = isOpen ? "before open db," : "after close db,"; + struct stat dbFileStat; - if (memset_s(&dbFileStat, sizeof(struct stat), 0, sizeof(struct stat)) != E_OK) { - LOGW("init db file stat fail"); - return; - } - stat(dbFilePath.c_str(), &dbFileStat); + logMessage += LogAndCheckFileStat(dbFilePath, dbFileStat, "db file"); + std::string dbWalFilePath = dbFilePath + "-wal"; struct stat dbWalFileStat; - if (memset_s(&dbWalFileStat, sizeof(struct stat), 0, sizeof(struct stat)) != E_OK) { - LOGW("init db wal file stat fail"); - return; - } - stat(dbWalFilePath.c_str(), &dbWalFileStat); + logMessage += LogAndCheckFileStat(dbWalFilePath, dbWalFileStat, "db wal file"); + std::string dbShmFilePath = dbFilePath + "-shm"; struct stat dbShmFileStat; - if (memset_s(&dbShmFileStat, sizeof(struct stat), 0, sizeof(struct stat)) != E_OK) { - LOGW("init db shm file stat fail"); - return; - } - stat(dbShmFilePath.c_str(), &dbShmFileStat); + logMessage += LogAndCheckFileStat(dbShmFilePath, dbShmFileStat, "db shm file"); + std::string dbDwrFilePath = dbFilePath + "-dwr"; struct stat dbDwrFileStat; - if (memset_s(&dbDwrFileStat, sizeof(struct stat), 0, sizeof(struct stat)) != E_OK) { - LOGW("init db dwr file stat fail"); - return; + logMessage += LogAndCheckFileStat(dbDwrFilePath, dbDwrFileStat, "db dwr file"); + + LOGI("%s", logMessage.c_str()); +} + +std::string StorageEngine::LogAndCheckFileStat( + const std::string& filePath, struct stat& fileStat, const std::string& logPrefix) +{ + int errCode = stat(filePath.c_str(), &fileStat); + if (errCode != 0) { + return logPrefix + ": [stat() failed, errCoded: " + std::to_string(errCode) + + ", errno" + std::to_string(errno) + "]; "; } - stat(dbDwrFilePath.c_str(), &dbDwrFileStat); - std::string stage = isOpen ? "before open db," : "after close db,"; - LOGI("%s db file: [size: %lld, mtime: %lld, inode: %llu], db-wal file: [size: %lld, mtime: %lld, inode: %llu], " - "db-shm file: [size: %lld, mtime: %lld, inode: %llu], db-dwr file: [size: %lld, mtime: %lld, inode: %llu]", - stage.c_str(), dbFileStat.st_size, dbFileStat.st_mtim.tv_sec, dbFileStat.st_ino, dbWalFileStat.st_size, - dbWalFileStat.st_mtim.tv_sec, dbWalFileStat.st_ino, dbShmFileStat.st_size, dbShmFileStat.st_mtim.tv_sec, - dbShmFileStat.st_ino, dbDwrFileStat.st_size, dbDwrFileStat.st_mtim.tv_sec, dbDwrFileStat.st_ino); + return logPrefix + ": [size: " + std::to_string(fileStat.st_size) + + ", mtime: " + std::to_string(fileStat.st_mtim.tv_sec) + + ", inode: " + std::to_string(fileStat.st_ino) + "]; "; } void StorageEngine::SetUri(const std::string &uri) diff --git a/frameworks/libs/distributeddb/storage/src/storage_engine.h b/frameworks/libs/distributeddb/storage/src/storage_engine.h index 7057698f28f6b9c032d73c339c2454a8b2de5423..cd8c1bfb663c4e1be1399e34c30025481fb6dc10 100644 --- a/frameworks/libs/distributeddb/storage/src/storage_engine.h +++ b/frameworks/libs/distributeddb/storage/src/storage_engine.h @@ -20,6 +20,7 @@ #include #include #include +#include #include "db_types.h" #include "macro_utils.h" @@ -96,6 +97,8 @@ public: OpenDbProperties GetOption() const; + void SetUri(const std::string &uri); + protected: virtual int CreateNewExecutor(bool isWrite, StorageExecutor *&handle) = 0; @@ -107,7 +110,6 @@ protected: int InitReadWriteExecutors(); - void SetUri(const std::string &uri); void SetSQL(const std::vector &sql); void SetSecurityOption(const SecurityOption &option); void SetCreateIfNecessary(bool isCreateIfNecessary); @@ -148,6 +150,8 @@ private: virtual void ClearCorruptedFlag(); + std::string LogAndCheckFileStat(const std::string& filePath, struct stat& fileStat, const std::string& logPrefix); + void PrintDbFileMsg(bool isOpen); static const int MAX_WAIT_TIME; diff --git a/frameworks/libs/distributeddb/test/unittest/common/storage/distributeddb_storage_rd_single_ver_storage_engine_test.cpp b/frameworks/libs/distributeddb/test/unittest/common/storage/distributeddb_storage_rd_single_ver_storage_engine_test.cpp index 74c1e39fa8776db9cdb1bfb59d55c52862eafa06..7507f6550c36166ce3de81a924b08fbdadb6888e 100644 --- a/frameworks/libs/distributeddb/test/unittest/common/storage/distributeddb_storage_rd_single_ver_storage_engine_test.cpp +++ b/frameworks/libs/distributeddb/test/unittest/common/storage/distributeddb_storage_rd_single_ver_storage_engine_test.cpp @@ -121,3 +121,62 @@ HWTEST_F(DistributedDBStorageRdSingleVerStorageEngineTest, DataTest001, TestSize storageEngine->Release(); storageEngine = nullptr; } + +/** + * @tc.name: StorageEnginePrintDbFileMsg001 + * @tc.desc: test when file is not exist + * @tc.type: FUNC + * @tc.require: + * @tc.author: xiefengzhu + */ +HWTEST_F(DistributedDBStorageRdSingleVerStorageEngineTest, StorageEnginePrintDbFileMsg001, TestSize.Level1) +{ + // release and print db file msg when db file is not exist + RdSingleVerStorageEngine *storageEngine1 = nullptr; + GetStorageEngine(storageEngine1); + ASSERT_NE(storageEngine1, nullptr); + storageEngine1->Release(); + EXPECT_EQ(storageEngine1->GetEngineState(), EngineState::INVALID); + storageEngine1 = nullptr; + // release and print db file msg when db wal file is not exist + RdSingleVerStorageEngine *storageEngine2 = nullptr; + GetStorageEngine(storageEngine2); + ASSERT_NE(storageEngine2, nullptr); + + std::string dbPath = "/tmp/test_db"; + storageEngine2->SetUri(dbPath); + + std::ofstream dbFile(dbPath); + dbFile.close(); + storageEngine2->Release(); + EXPECT_EQ(storageEngine2->GetEngineState(), EngineState::INVALID); + storageEngine2 = nullptr; + // release and print db file msg when db shm file is not exist + RdSingleVerStorageEngine *storageEngine3 = nullptr; + GetStorageEngine(storageEngine3); + ASSERT_NE(storageEngine3, nullptr); + + storageEngine3->SetUri(dbPath); + std::string walPath = dbPath + "-wal"; + std::ofstream walFile(walPath); + walFile.close(); + storageEngine3->Release(); + EXPECT_EQ(storageEngine3->GetEngineState(), EngineState::INVALID); + storageEngine3 = nullptr; + // release and print db file msg when db dwr file is not exist + RdSingleVerStorageEngine *storageEngine4 = nullptr; + GetStorageEngine(storageEngine4); + ASSERT_NE(storageEngine4, nullptr); + + storageEngine4->SetUri(dbPath); + std::string shmPath = dbPath + "-shm"; + std::ofstream shmFile(shmPath); + shmFile.close(); + storageEngine4->Release(); + EXPECT_EQ(storageEngine4->GetEngineState(), EngineState::INVALID); + storageEngine4 = nullptr; + //remove temp file + remove(dbPath.c_str()); + remove(walPath.c_str()); + remove(shmPath.c_str()); +} \ No newline at end of file