Skip to content
Snippets Groups Projects
Commit ddec5593 authored by Cédric Moreau's avatar Cédric Moreau
Browse files

Begin Loki storage

parent e9b5436b
Branches
Tags
No related merge requests found
......@@ -37,7 +37,7 @@ import {MetaDAL} from "./sqliteDAL/MetaDAL"
import {DataErrors} from "../common-libs/errors"
import {BasicRevocableIdentity, IdentityDTO} from "../dto/IdentityDTO"
import {BlockDAL} from "./sqliteDAL/BlockDAL"
import {FileSystem} from "../system/directory"
import {Directory, FileSystem} from "../system/directory"
import {WoTBInstance} from "../wot"
import {IIndexDAO} from "./indexDAL/abstract/IIndexDAO"
import {LokiIIndex} from "./indexDAL/loki/LokiIIndex"
......@@ -102,7 +102,24 @@ export class FileDAL {
this.sqliteDriver = params.dbf()
this.wotb = params.wotb
this.profile = 'DAL'
this.loki = new loki('index.db')
const that = this
this.loki = new loki(path.join(this.rootPath, Directory.INDEX_DB_FILE), {
autoload: true,
autoloadCallback : () => {
const dals = [
that.bindexDAL,
that.mindexDAL,
that.iindexDAL,
that.sindexDAL,
that.cindexDAL,
]
for (const indexDAL of dals) {
indexDAL.triggerInit()
}
},
autosave: true,
autosaveInterval: 4000
})
// DALs
this.powDAL = new PowDAL(this.rootPath, params.fs)
......
......@@ -2,6 +2,11 @@ import {Initiable} from "../../sqliteDAL/Initiable"
export interface GenericDAO<T> extends Initiable {
/**
* Trigger the initialization of the DAO. Called when the underlying DB is ready.
*/
triggerInit(): void
/**
* Make a generic find.
* @param criterion Criterion object, LokiJS's find object format.
......
......@@ -17,16 +17,25 @@ export interface IndexData {
export abstract class LokiIndex<T extends IndexData> implements GenericDAO<T> {
protected collection:LokiCollection<T>
protected collectionIsInitialized: Promise<void>
private resolveCollection: () => void
public constructor(
protected loki:any,
protected collectionName:'iindex'|'mindex'|'cindex'|'sindex'|'bindex',
indices: (keyof T)[]) {
const coll = loki.addCollection(collectionName, { indices })
this.collection = new LokiProxyCollection(coll, collectionName)
protected indices: (keyof T)[]) {
this.collectionIsInitialized = new Promise<void>(res => this.resolveCollection = res)
}
public triggerInit() {
const coll = this.loki.addCollection(this.collectionName, { indices: this.indices })
this.collection = new LokiProxyCollection(coll, this.collectionName)
this.resolveCollection()
}
async init(): Promise<void> {
await this.collectionIsInitialized
logger.info('Collection %s ready', this.collectionName)
}
cleanCache(): void {
......
......@@ -88,6 +88,7 @@ export const Directory = {
INSTANCE_NAME: getDomain(opts.mdb),
INSTANCE_HOME: getHomePath(opts.mdb, opts.home),
INSTANCE_HOMELOG_FILE: getLogsPath(opts.mdb, opts.home),
INDEX_DB_FILE: 'index.db',
DUNITER_DB_NAME: 'duniter',
WOTB_FILE: 'wotb.bin',
......
......@@ -375,14 +375,14 @@ export class Server extends stream.Duplex implements HookableServer {
async resetAll(done:any = null) {
await this.resetDataHook()
await this.resetConfigHook()
const files = ['stats', 'cores', 'current', Directory.DUNITER_DB_NAME, Directory.DUNITER_DB_NAME + '.db', Directory.DUNITER_DB_NAME + '.log', Directory.WOTB_FILE, 'export.zip', 'import.zip', 'conf'];
const files = ['stats', 'cores', 'current', Directory.INDEX_DB_FILE, Directory.DUNITER_DB_NAME, Directory.DUNITER_DB_NAME + '.db', Directory.DUNITER_DB_NAME + '.log', Directory.WOTB_FILE, 'export.zip', 'import.zip', 'conf'];
const dirs = ['blocks', 'blockchain', 'ud_history', 'branches', 'certs', 'txs', 'cores', 'sources', 'links', 'ms', 'identities', 'peers', 'indicators', 'leveldb'];
return this.resetFiles(files, dirs, done);
}
async resetData(done:any = null) {
await this.resetDataHook()
const files = ['stats', 'cores', 'current', Directory.DUNITER_DB_NAME, Directory.DUNITER_DB_NAME + '.db', Directory.DUNITER_DB_NAME + '.log', Directory.WOTB_FILE];
const files = ['stats', 'cores', 'current', Directory.INDEX_DB_FILE, Directory.DUNITER_DB_NAME, Directory.DUNITER_DB_NAME + '.db', Directory.DUNITER_DB_NAME + '.log', Directory.WOTB_FILE];
const dirs = ['blocks', 'ud_history', 'branches', 'certs', 'txs', 'cores', 'sources', 'links', 'ms', 'identities', 'peers', 'indicators', 'leveldb'];
await this.resetFiles(files, dirs, done);
}
......@@ -436,7 +436,7 @@ export class Server extends stream.Duplex implements HookableServer {
async cleanDBData() {
await this.dal.cleanCaches();
this.dal.wotb.resetWoT();
const files = ['stats', 'cores', 'current', Directory.DUNITER_DB_NAME, Directory.DUNITER_DB_NAME + '.db', Directory.DUNITER_DB_NAME + '.log'];
const files = ['stats', 'cores', 'current', Directory.INDEX_DB_FILE, Directory.DUNITER_DB_NAME, Directory.DUNITER_DB_NAME + '.db', Directory.DUNITER_DB_NAME + '.log'];
const dirs = ['blocks', 'ud_history', 'branches', 'certs', 'txs', 'cores', 'sources', 'links', 'ms', 'identities', 'peers', 'indicators', 'leveldb'];
return this.resetFiles(files, dirs);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment