Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F33044689
D5991.1768417770.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D5991.1768417770.diff
View Options
diff --git a/native/cpp/CommonCpp/DatabaseManagers/DatabaseManager.h b/native/cpp/CommonCpp/DatabaseManagers/DatabaseManager.h
--- a/native/cpp/CommonCpp/DatabaseManagers/DatabaseManager.h
+++ b/native/cpp/CommonCpp/DatabaseManagers/DatabaseManager.h
@@ -9,6 +9,7 @@
class DatabaseManager {
public:
static const DatabaseQueryExecutor &getQueryExecutor();
+ static void initializeQueryExecutor();
};
} // namespace comm
diff --git a/native/cpp/CommonCpp/DatabaseManagers/DatabaseManager.cpp b/native/cpp/CommonCpp/DatabaseManagers/DatabaseManager.cpp
--- a/native/cpp/CommonCpp/DatabaseManagers/DatabaseManager.cpp
+++ b/native/cpp/CommonCpp/DatabaseManagers/DatabaseManager.cpp
@@ -1,8 +1,18 @@
#include "DatabaseManager.h"
+#include "../Tools/CommSecureStore.h"
+#include "../Tools/TerminateApp.h"
+#include "Logger.h"
#include "SQLiteQueryExecutor.h"
namespace comm {
+typedef const std::string DatabaseManagerStatus;
+DatabaseManagerStatus DB_MANAGER_WORKABLE = "WORKABLE";
+DatabaseManagerStatus DB_MANAGER_FIRST_FAILURE = "FIRST_FAILURE";
+DatabaseManagerStatus DB_MANAGER_SECOND_FAILURE = "SECOND_FAILURE";
+
+const std::string DATABASE_MANAGER_STATUS_KEY = "DATABASE_MANAGER_STATUS";
+
const DatabaseQueryExecutor &DatabaseManager::getQueryExecutor() {
// TODO: conditionally create desired type of db manager
// maybe basing on some preprocessor flag
@@ -10,4 +20,37 @@
return instance;
}
+void handleFirstFailure(comm::CommSecureStore commSecureStore) {
+ commSecureStore.set(DATABASE_MANAGER_STATUS_KEY, DB_MANAGER_FIRST_FAILURE);
+ Logger::log("Database manager initialization issue, terminating app");
+ TerminateApp::terminate();
+}
+
+void DatabaseManager::initializeQueryExecutor() {
+ comm::CommSecureStore commSecureStore{};
+ try {
+ DatabaseManager::getQueryExecutor();
+ commSecureStore.set(DATABASE_MANAGER_STATUS_KEY, DB_MANAGER_WORKABLE);
+ Logger::log("Database manager initialized");
+ } catch (...) {
+ folly::Optional<std::string> databaseManagerStatus =
+ commSecureStore.get(DATABASE_MANAGER_STATUS_KEY);
+ if (!databaseManagerStatus.hasValue()) {
+ handleFirstFailure(commSecureStore);
+ }
+ std::string databaseManagerStatusValue = databaseManagerStatus.value();
+ if (databaseManagerStatusValue == DB_MANAGER_WORKABLE) {
+ handleFirstFailure(commSecureStore);
+ }
+ if (databaseManagerStatusValue == DB_MANAGER_FIRST_FAILURE) {
+ commSecureStore.set(
+ DATABASE_MANAGER_STATUS_KEY, DB_MANAGER_SECOND_FAILURE);
+ Logger::log(
+ "Database manager initialization issue, app proceeding, but "
+ "database needs to be deleted");
+ return;
+ }
+ }
+}
+
} // namespace comm
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Jan 14, 7:09 PM (11 h, 27 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5933545
Default Alt Text
D5991.1768417770.diff (2 KB)
Attached To
Mode
D5991: [native] add function to initialize `DatabaseQueryExecutor`
Attached
Detach File
Event Timeline
Log In to Comment