Page MenuHomePhorge

D5991.1768417770.diff
No OneTemporary

Size
2 KB
Referenced Files
None
Subscribers
None

D5991.1768417770.diff

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

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)

Event Timeline