Implementing a machanism to purge databases.
This commit is contained in:
parent
4a4ebdff50
commit
71bd820da9
|
@ -1,21 +1,26 @@
|
|||
import { Signal } from 'solid-js';
|
||||
import PouchDB from 'pouchdb';
|
||||
import indexeddb from 'pouchdb-adapter-indexeddb';
|
||||
|
||||
import { getSettings } from '../db/settings';
|
||||
import { delay } from '../lib/delay';
|
||||
|
||||
PouchDB.plugin(indexeddb);
|
||||
|
||||
export const compactDb = async (p: { signal: Signal<any>; params: any }) => {
|
||||
const { signal, params } = p;
|
||||
const [, setStatus] = signal;
|
||||
console.log({ caller: 'compactDb', p });
|
||||
|
||||
const db = new PouchDB('dyomedea', { auto_compaction: true });
|
||||
const db = new PouchDB('_dyomedea_', {
|
||||
auto_compaction: true,
|
||||
adapter: 'indexeddb',
|
||||
});
|
||||
const dbinfo = await db.info();
|
||||
const tasks = PouchDB.activeTasks.list();
|
||||
|
||||
setStatus({ status: 'starting', db: 'dyomedea', dbinfo, tasks });
|
||||
setStatus({ status: 'starting', db: '_dyomedea_', dbinfo, tasks });
|
||||
|
||||
return;
|
||||
const timerId = setInterval(async () => {
|
||||
const dbinfo = await db.info();
|
||||
const tasks = PouchDB.activeTasks.list();
|
||||
|
@ -27,6 +32,8 @@ export const compactDb = async (p: { signal: Signal<any>; params: any }) => {
|
|||
}
|
||||
}, 1000);
|
||||
|
||||
// db.compact();
|
||||
|
||||
const openIDb = (name: string) =>
|
||||
new Promise((resolve, reject) => {
|
||||
const iDb = indexedDB.open(name);
|
||||
|
@ -71,10 +78,10 @@ export const compactDb = async (p: { signal: Signal<any>; params: any }) => {
|
|||
};
|
||||
});
|
||||
|
||||
const iDb = (await openIDb('_pouch_dyomedea')) as IDBDatabase;
|
||||
const iDb = (await openIDb('_pouch__dyomedea_')) as IDBDatabase;
|
||||
|
||||
const bySequence = iDb.transaction('by-sequence', 'readonly');
|
||||
const store = bySequence.objectStore('by-sequence');
|
||||
const bySequence = iDb.transaction('docs', 'readonly');
|
||||
const store = bySequence.objectStore('docs');
|
||||
console.log({
|
||||
caller: 'compactDb',
|
||||
message: 'transaction opened',
|
||||
|
@ -82,29 +89,26 @@ export const compactDb = async (p: { signal: Signal<any>; params: any }) => {
|
|||
store,
|
||||
});
|
||||
|
||||
const sequences = (await getAll(store)) as any[];
|
||||
setStatus({
|
||||
status: 'revisions',
|
||||
db: 'dyomedea',
|
||||
sequences,
|
||||
});
|
||||
const docs = (await getAll(store)) as any[];
|
||||
// setStatus({
|
||||
// status: 'docs',
|
||||
// db: 'dyomedea',
|
||||
// docs,
|
||||
// });
|
||||
|
||||
sequences.forEach(async (sequence) => {
|
||||
const { _deleted, _doc_id_rev } = sequence;
|
||||
if (_deleted) {
|
||||
const [id, rev] = _doc_id_rev.split('::');
|
||||
// const purge = await db.purge(id, rev);
|
||||
docs.forEach(async (doc) => {
|
||||
const { id, rev, deleted } = doc;
|
||||
if (deleted !== 0) {
|
||||
// const purge = await db.purge(id, rev);
|
||||
console.log({
|
||||
caller: 'compactDb',
|
||||
message: 'purging',
|
||||
id,
|
||||
rev,
|
||||
sequence,
|
||||
purge,
|
||||
doc,
|
||||
// purge,
|
||||
});
|
||||
await delay(100);
|
||||
await delay(1000);
|
||||
}
|
||||
});
|
||||
|
||||
// db.compact();
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue