Skip to content

Instantly share code, notes, and snippets.

@marcinwasowicz
Created February 1, 2024 10:48
Show Gist options
  • Save marcinwasowicz/1fd0e17c4808d72467ecf11dca9e0ca3 to your computer and use it in GitHub Desktop.
Save marcinwasowicz/1fd0e17c4808d72467ecf11dca9e0ca3 to your computer and use it in GitHub Desktop.
Test backup restore from log
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