Created
February 1, 2024 10:48
-
-
Save marcinwasowicz/1fd0e17c4808d72467ecf11dca9e0ca3 to your computer and use it in GitHub Desktop.
Test backup restore from log
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/web/database/worker/db-worker.js b/web/database/worker/db-worker.js | |
index de512f5d4..ddefe642b 100644 | |
--- a/web/database/worker/db-worker.js | |
+++ b/web/database/worker/db-worker.js | |
@@ -220,6 +220,26 @@ async function processAppRequest( | |
message.type === workerRequestMessageTypes.REMOVE_PERSIST_STORAGE_ITEM | |
) { | |
sqliteQueryExecutor.removePersistStorageItem(message.key); | |
+ } else if (message.type === workerRequestMessageTypes.RESTORE_DATABASE) { | |
+ const myPersist = | |
+ sqliteQueryExecutor?.getPersistStorageItem('persist:root'); | |
+ if (myPersist) { | |
+ try { | |
+ console.log('restore from log start'); | |
+ sqliteQueryExecutor?.restoreFromBackupLog(message.backupLogBytes); | |
+ console.log('restore from log finished'); | |
+ } catch (e) { | |
+ console.log(dbModule?.getExceptionMessage(e)); | |
+ } | |
+ | |
+ try { | |
+ console.log('redux persist start'); | |
+ sqliteQueryExecutor?.setPersistStorageItem('persist:root', myPersist); | |
+ console.log('redux persist finished'); | |
+ } catch (e) { | |
+ console.log(dbModule?.getExceptionMessage(e)); | |
+ } | |
+ } | |
} | |
persistNeeded = true; | |
diff --git a/web/settings/account-settings.react.js b/web/settings/account-settings.react.js | |
index 2762eb7f0..77671c099 100644 | |
--- a/web/settings/account-settings.react.js | |
+++ b/web/settings/account-settings.react.js | |
@@ -19,6 +19,7 @@ import TunnelbrokerMessagesScreen from './tunnelbroker-message-list.react.js'; | |
import TunnelbrokerTestScreen from './tunnelbroker-test.react.js'; | |
import EditUserAvatar from '../avatars/edit-user-avatar.react.js'; | |
import Button from '../components/button.react.js'; | |
+import { getDatabaseModule } from '../database/database-module-provider.js'; | |
import { useSelector } from '../redux/redux-utils.js'; | |
import { useStaffCanSee } from '../utils/staff-utils.js'; | |
@@ -141,6 +142,28 @@ function AccountSettings(): React.Node { | |
<p className={css.buttonText}>Show list</p> | |
</Button> | |
</li> | |
+ <li> | |
+ <span>Test SQLite restore</span> | |
+ <div> | |
+ <label htmlFor="upload"> Select a file:</label> | |
+ <input | |
+ id="upload" | |
+ type="file" | |
+ onChange={async event => { | |
+ const blob = await event.target.files[0].arrayBuffer(); | |
+ const dbModule = await getDatabaseModule(); | |
+ try { | |
+ await dbModule.schedule({ | |
+ type: 11, | |
+ backupLogBytes: new Uint8Array(blob), | |
+ }); | |
+ } catch (e) { | |
+ console.log(e); | |
+ } | |
+ }} | |
+ /> | |
+ </div> | |
+ </li> | |
</ul> | |
</div> | |
</div> | |
diff --git a/web/types/worker-types.js b/web/types/worker-types.js | |
index b6cf7188c..4fe072326 100644 | |
--- a/web/types/worker-types.js | |
+++ b/web/types/worker-types.js | |
@@ -18,6 +18,7 @@ export const workerRequestMessageTypes = Object.freeze({ | |
SET_PERSIST_STORAGE_ITEM: 8, | |
REMOVE_PERSIST_STORAGE_ITEM: 9, | |
CLEAR_SENSITIVE_DATA: 10, | |
+ RESTORE_DATABASE: 11, | |
}); | |
export const workerWriteRequests: $ReadOnlyArray<number> = [ | |
@@ -25,6 +26,7 @@ export const workerWriteRequests: $ReadOnlyArray<number> = [ | |
workerRequestMessageTypes.SET_CURRENT_USER_ID, | |
workerRequestMessageTypes.SET_PERSIST_STORAGE_ITEM, | |
workerRequestMessageTypes.REMOVE_PERSIST_STORAGE_ITEM, | |
+ workerRequestMessageTypes.RESTORE_DATABASE, | |
]; | |
export type PingWorkerRequestMessage = { | |
@@ -81,6 +83,11 @@ export type ClearSensitiveDataRequestMessage = { | |
+type: 10, | |
}; | |
+export type RestoreDatabase = { | |
+ +type: 11, | |
+ +backupLogBytes: Uint8Array, | |
+}; | |
+ | |
export type WorkerRequestMessage = | |
| PingWorkerRequestMessage | |
| InitWorkerRequestMessage | |
@@ -92,7 +99,8 @@ export type WorkerRequestMessage = | |
| GetPersistStorageItemRequestMessage | |
| SetPersistStorageItemRequestMessage | |
| RemovePersistStorageItemRequestMessage | |
- | ClearSensitiveDataRequestMessage; | |
+ | ClearSensitiveDataRequestMessage | |
+ | RestoreDatabase; | |
export type WorkerRequestProxyMessage = { | |
+id: number, |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment