chore: build (using TS5.0 LF)

See https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-0.html
This commit is contained in:
Ewout Stortenbeker 2023-05-01 17:40:37 +02:00
parent 9123efd2f6
commit 034be7f617
29 changed files with 244 additions and 144 deletions

View file

@ -1 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ipc/index.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ipc/index.ts"],"names":[],"mappings":"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"}

View file

@ -4,21 +4,23 @@ exports.startServer = void 0;
const net_1 = require("net");
const shared_1 = require("./shared");
const __1 = require("../../");
const acebase_core_1 = require("acebase-core");
const ERROR = Object.freeze({
ALREADY_RUNNING: { code: 'already_running', exitCode: 2 },
UNKNOWN: { code: 'unknown', exitCode: 3 },
NO_DB: { code: 'no_db', exitCode: 4 },
});
async function startServer(dbFile, exit) {
async function startServer(dbFile, options) {
const fileMatch = dbFile.match(/^(?<storagePath>.*([\\\/]))(?<dbName>.+)\.acebase\2(?<storageType>[a-z]+)\.db$/);
if (!fileMatch) {
return exit(ERROR.NO_DB.exitCode);
return options.exit(ERROR.NO_DB.exitCode);
}
const { storagePath, dbName, storageType } = fileMatch.groups;
const logger = new acebase_core_1.DebugLogger(options.logLevel, `[IPC service ${dbName}:${storageType}]`);
let db; // Will be opened when listening
const sockets = [];
const socketPath = (0, shared_1.getSocketPath)(dbFile);
console.log(`starting socket server on path ${socketPath}`);
logger.log(`[starting socket server on path ${socketPath}`);
const server = (0, net_1.createServer)();
server.listen({
path: socketPath,
@ -27,57 +29,67 @@ async function startServer(dbFile, exit) {
});
server.on('listening', () => {
// Started successful
// state = STATE.STARTED;
// process.send(`state:${state}`);
process.on('SIGINT', () => server.close());
process.on('exit', (code) => {
console.log(`exiting with code ${code}`);
logger.log(`exiting with code ${code}`);
});
// Start the "master" IPC client
db = new __1.AceBase(dbName, { storage: { type: storageType, path: storagePath, ipc: server } });
// Bind socket server to the instance
// (db.api.storage.ipc as IPCSocketPeer).server = server;
db = new __1.AceBase(dbName, { logLevel: options.logLevel, storage: { type: storageType, path: storagePath, ipc: server } });
});
server.on('error', (err) => {
var _a;
// state = STATE.ERROR;
// process.send(`state:${state}`);
// process.send(`error:${err.code ?? err.message}`);
if (err.code === 'EADDRINUSE') {
console.log('socket server already running');
return exit(ERROR.ALREADY_RUNNING.exitCode);
logger.log(`socket server already running`);
return options.exit(ERROR.ALREADY_RUNNING.exitCode);
}
console.error(`socket server error ${(_a = err.code) !== null && _a !== void 0 ? _a : err.message}`);
exit(ERROR.UNKNOWN.exitCode);
logger.error(`socket server error ${(_a = err.code) !== null && _a !== void 0 ? _a : err.message}`);
options.exit(ERROR.UNKNOWN.exitCode);
});
let connectionsMade = false;
server.on('connection', (socket) => {
// New socket connected handler
connectionsMade = true;
sockets.push(socket);
console.log(`socket connected, total: ${sockets.length}`);
// socket.on('data', (data) => {
// // Received data from a connected client (master or worker)
// // Socket IPC implementation handles this
// });
logger.log(`socket connected, total: ${sockets.length}`);
socket.on('close', (hadError) => {
// Socket is closed
sockets.splice(sockets.indexOf(socket), 1);
console.log(`socket disconnected${hadError ? ' because of an error' : ''}, total: ${sockets.length}`);
logger.log(`socket disconnected${hadError ? ' because of an error' : ''}, total: ${sockets.length}`);
if (sockets.length === 0) {
// setTimeout(() => {
// if (sockets.length === 0) {
console.log(`closing server socket because there are no more connected clients, exiting with code 0`);
// Stop socket server
server.close((err) => {
exit(0);
});
// }
// }, 5000);
const stop = () => {
logger.log(`closing server socket because there are no more connected clients, exiting with code 0`);
// Stop socket server
server.close((err) => {
options.exit(err ? ERROR.UNKNOWN.exitCode : 0);
});
};
if (options.maxIdleTime > 0) {
setTimeout(() => {
if (sockets.length === 0) {
stop();
}
}, 5000);
}
else {
stop();
}
}
});
});
server.on('close', () => {
db.close();
});
if (options.maxIdleTime > 0) {
setTimeout(() => {
if (!connectionsMade) {
logger.log(`closing server socket because no clients connected, exiting with code 0`);
// Stop socket server
server.close((err) => {
options.exit(err ? ERROR.UNKNOWN.exitCode : 0);
});
}
}, options.maxIdleTime).unref();
}
}
exports.startServer = startServer;
//# sourceMappingURL=index.js.map

View file

@ -1 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ipc/service/index.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ipc/service/index.ts"],"names":[],"mappings":"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"}

View file

@ -1,10 +1,20 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MSG_DELIMITER = exports.getSocketPath = void 0;
const crypto_1 = require("crypto");
function getSocketPath(filePath) {
return process.platform === 'win32'
let path = process.platform === 'win32'
? `\\\\.\\pipe\\${filePath.replace(/^\//, '').replace(/\//g, '-')}`
: `${filePath}.sock`;
const maxLength = process.platform === 'win32' ? 256 : 108;
if (path.length > maxLength) {
// Use hash of filepath instead
const hash = (0, crypto_1.createHash)('sha256').update(path).digest('hex');
path = process.platform === 'win32'
? `\\\\.\\pipe\\${hash}`
: `${hash}.sock`;
}
return path;
}
exports.getSocketPath = getSocketPath;
// export const MSG_DELIMITER = String.fromCharCode(0) + String.fromCharCode(1) + String.fromCharCode(3) + String.fromCharCode(5) + String.fromCharCode(0);

View file

@ -1 +1 @@
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/ipc/service/shared.ts"],"names":[],"mappings":";;;AAAA,SAAgB,aAAa,CAAC,QAAgB;IAC1C,OAAO,OAAO,CAAC,QAAQ,KAAI,OAAO;QAC9B,CAAC,CAAC,gBAAgB,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;QACnE,CAAC,CAAC,GAAG,QAAQ,OAAO,CAAC;AAC7B,CAAC;AAJD,sCAIC;AAED,2JAA2J;AAC9I,QAAA,aAAa,GAAG,IAAI,CAAC"}
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/ipc/service/shared.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;AAEpC,SAAgB,aAAa,CAAC,QAAgB;IAC1C,IAAI,IAAI,GAAG,OAAO,CAAC,QAAQ,KAAI,OAAO;QAClC,CAAC,CAAC,gBAAgB,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;QACnE,CAAC,CAAC,GAAG,QAAQ,OAAO,CAAC;IACzB,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1D,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE;QACzB,+BAA+B;QAC/B,MAAM,IAAI,GAAG,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7D,IAAI,GAAG,OAAO,CAAC,QAAQ,KAAI,OAAO;YAC9B,CAAC,CAAC,gBAAgB,IAAI,EAAE;YACxB,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC;KACxB;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAbD,sCAaC;AAED,2JAA2J;AAC9I,QAAA,aAAa,GAAG,IAAI,CAAC"}

View file

@ -4,8 +4,23 @@ const _1 = require(".");
(async () => {
try {
const dbFile = process.argv[2]; // full path to db storage file, eg '/home/ewout/project/db.acebase/data.db'
await (0, _1.startServer)(dbFile, (code) => {
process.exit(code);
const settings = process.argv.slice(3).reduce((settings, arg, i, args) => {
switch (arg.toLowerCase()) {
case '--loglevel':
settings.logLevel = args[i + 1];
break;
case '--maxidletime':
settings.maxIdleTime = parseInt(args[i + 1]);
break;
}
return settings;
}, { logLevel: 'log', maxIdleTime: 5000 });
await (0, _1.startServer)(dbFile, {
logLevel: settings.logLevel,
maxIdleTime: settings.maxIdleTime,
exit: (code) => {
process.exit(code);
},
});
}
catch (err) {

View file

@ -1 +1 @@
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../../src/ipc/service/start.ts"],"names":[],"mappings":";;AAAA,wBAAgC;AAEhC,CAAC,KAAK,IAAI,EAAE;IACR,IAAI;QACA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,4EAA4E;QAC5G,MAAM,IAAA,cAAW,EAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC/B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;KACN;IACD,OAAO,GAAG,EAAE;QACR,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACnB;AACL,CAAC,CAAC,EAAE,CAAC"}
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../../src/ipc/service/start.ts"],"names":[],"mappings":";;AAAA,wBAAgC;AAGhC,CAAC,KAAK,IAAI,EAAE;IACR,IAAI;QACA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,4EAA4E;QAC5G,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;YACrE,QAAQ,GAAG,CAAC,WAAW,EAAE,EAAE;gBACvB,KAAK,YAAY;oBAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAqC,CAAC;oBAAC,MAAM;gBAC9F,KAAK,eAAe;oBAAE,QAAQ,CAAC,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAAC,MAAM;aAC7E;YACD,OAAO,QAAQ,CAAC;QACpB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAyC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/E,MAAM,IAAA,cAAW,EAAC,MAAM,EAAE;YACtB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;gBACX,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;SACJ,CAAC,CAAC;KACN;IACD,OAAO,GAAG,EAAE;QACR,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACnB;AACL,CAAC,CAAC,EAAE,CAAC"}

View file

@ -7,13 +7,17 @@ const child_process_1 = require("child_process");
const ipc_1 = require("./ipc");
const acebase_core_1 = require("acebase-core");
const shared_1 = require("./service/shared");
// import { startServer } from './service';
var net_2 = require("net");
Object.defineProperty(exports, "NetIPCServer", { enumerable: true, get: function () { return net_2.Server; } });
const masterPeerId = '[master]';
/**
* Node cluster functionality - enables vertical scaling with forked processes. AceBase will enable IPC at startup, so
* any forked process will communicate database changes and events automatically. Locking of resources will be done by
* the cluster's primary (previously master) process. NOTE: if the master process dies, all peers stop working
* Socket IPC implementation. Peers will attempt starting up a dedicated service process for the target database,
* or connect to an already running process. The service acts as the IPC master and governs over locks, space allocation
* and communication between peers. Communication between the processes is done using (very fast in-memory) Unix sockets.
* This IPC implementation allows different processes on a single machine to access the same database simultaniously without
* them having to explicitly configure their IPC settings.
* Currently can be used by passing `ipc: 'socket'` in AceBase's `storage` settings, will become the default soon.
*/
class IPCSocketPeer extends ipc_1.AceBaseIPCPeer {
constructor(storage, ipcSettings) {
@ -36,15 +40,17 @@ class IPCSocketPeer extends ipc_1.AceBaseIPCPeer {
this.exit();
});
if (!isMaster) {
// Try starting IPC service if it is not running yet
const service = (0, child_process_1.fork)(__dirname + '/service/start.js', [dbFile], { detached: true, stdio: 'inherit' });
service.unref(); // Process is detached and allowed to keep running after we exit
bindEventHandler(service, 'exit', (code, signal) => {
console.log(`Service exited with code ${code}`);
});
// // For testing:
// startServer(dbFile, (code) => {
// console.log(`Service exited with code ${code}`);
// Try starting IPC service if it is not running yet.
// Use maxIdleTime 0 to allow tests to remove database files when done, make this configurable!
const service = (0, child_process_1.spawn)('node', [__dirname + '/service/start.js', dbFile, '--loglevel', storage.debug.level, '--maxidletime', '0'], { detached: true, stdio: 'ignore' });
service.unref(); // Process is detached and allowed to keep running after we exit. Do not keep a reference to it, possibly preventing app exit.
// For testing:
// startServer(dbFile, {
// maxIdleTime: 0,
// logLevel: storage.debug.level,
// exit: (code) => {
// storage.debug.log(`[IPC ${ipcSettings.ipcName}] service exited with code ${code}`);
// },
// });
}
/**
@ -95,17 +101,17 @@ class IPCSocketPeer extends ipc_1.AceBaseIPCPeer {
break; // wait for more data
}
// Extract message from buffer
const message = buffer.slice(0, delimiterIndex);
buffer = buffer.slice(delimiterIndex + shared_1.MSG_DELIMITER.length);
const message = buffer.subarray(0, delimiterIndex);
buffer = buffer.subarray(delimiterIndex + shared_1.MSG_DELIMITER.length);
try {
const json = message.toString('utf-8');
// console.log(`Received socket message: `, json);
// storage.debug.log(`[IPC ${ipcSettings.ipcName}] Received socket message: `, json);
const serialized = JSON.parse(json);
const msg = acebase_core_1.Transport.deserialize2(serialized);
handleMessage(socket, msg);
}
catch (err) {
console.error(`Error parsing message: ${err}`);
storage.debug.error(`[IPC ${ipcSettings.ipcName}] Error parsing message: ${err}`);
}
}
});
@ -128,12 +134,15 @@ class IPCSocketPeer extends ipc_1.AceBaseIPCPeer {
const connectSocket = async (path) => {
const tryConnect = async (tries) => {
try {
if (this._exiting) {
return;
}
const s = (0, net_1.connect)({ path });
await new Promise((resolve, reject) => {
s.once('error', reject);
s.once('connect', resolve);
s.once('error', reject).unref();
s.once('connect', resolve).unref();
});
console.log(`IPC peer ${this.id} successfully established connection to the server`);
storage.debug.log(`[IPC ${ipcSettings.ipcName}] peer ${this.id} successfully established connection to the service`);
socket = s;
connected = true;
}
@ -143,17 +152,17 @@ class IPCSocketPeer extends ipc_1.AceBaseIPCPeer {
await new Promise(resolve => setTimeout(resolve, 100));
return tryConnect(tries + 1);
}
console.error(err.message);
storage.debug.error(`[IPC ${ipcSettings.ipcName}] peer ${this.id} cannot connect to service: ${err.message}`);
throw err;
}
};
await tryConnect(1);
this.once('exit', () => {
socket.destroy();
socket === null || socket === void 0 ? void 0 : socket.destroy();
});
bindEventHandler(socket, 'close', (hadError) => {
// Connection to server closed
console.log(`IPC peer ${this.id} lost its connection to the server${hadError ? ' because of an error' : ''}`);
storage.debug.log(`IPC peer ${this.id} lost its connection to the service${hadError ? ' because of an error' : ''}`);
});
let buffer = Buffer.alloc(0); // Buffer to store incomplete messages
bindEventHandler(socket, 'data', chunk => {
@ -165,17 +174,17 @@ class IPCSocketPeer extends ipc_1.AceBaseIPCPeer {
break; // wait for more data
}
// Extract message from buffer
const message = buffer.slice(0, delimiterIndex);
buffer = buffer.slice(delimiterIndex + shared_1.MSG_DELIMITER.length);
const message = buffer.subarray(0, delimiterIndex);
buffer = buffer.subarray(delimiterIndex + shared_1.MSG_DELIMITER.length);
try {
const json = message.toString('utf-8');
// console.log(`Received server message: `, json);
// storage.debug.log(`Received server message: `, json);
const serialized = JSON.parse(json);
const msg = acebase_core_1.Transport.deserialize2(serialized);
handleMessage(socket, msg);
}
catch (err) {
console.error(`Error parsing message: ${err}`);
storage.debug.error(`Error parsing message: ${err}`);
}
}
});

File diff suppressed because one or more lines are too long

View file

@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
const tempdb_1 = require("./tempdb");
const acebase_core_1 = require("acebase-core");
// This test takes at least an hour on a fast system, enable only if you have time
const LONG_RUNNING_TEST_ENABLED = false;
const LONG_RUNNING_TEST_ENABLED = process.env.LONG_RUNNING_TESTS === 'true';
describe('bulk import', () => {
let db, removeDB;
beforeAll(async () => {

View file

@ -1 +1 @@
{"version":3,"file":"bulk-import.spec.js","sourceRoot":"","sources":["../../../src/test/bulk-import.spec.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"bulk-import.spec.js","sourceRoot":"","sources":["../../../src/test/bulk-import.spec.ts"],"names":[],"mappings":"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"}

View file

@ -1 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ipc/index.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ipc/index.ts"],"names":[],"mappings":"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"}

View file

@ -1,21 +1,23 @@
import { createServer } from 'net';
import { getSocketPath } from './shared.js';
import { AceBase } from '../..//index.js';
import { DebugLogger } from 'acebase-core';
const ERROR = Object.freeze({
ALREADY_RUNNING: { code: 'already_running', exitCode: 2 },
UNKNOWN: { code: 'unknown', exitCode: 3 },
NO_DB: { code: 'no_db', exitCode: 4 },
});
export async function startServer(dbFile, exit) {
export async function startServer(dbFile, options) {
const fileMatch = dbFile.match(/^(?<storagePath>.*([\\\/]))(?<dbName>.+)\.acebase\2(?<storageType>[a-z]+)\.db$/);
if (!fileMatch) {
return exit(ERROR.NO_DB.exitCode);
return options.exit(ERROR.NO_DB.exitCode);
}
const { storagePath, dbName, storageType } = fileMatch.groups;
const logger = new DebugLogger(options.logLevel, `[IPC service ${dbName}:${storageType}]`);
let db; // Will be opened when listening
const sockets = [];
const socketPath = getSocketPath(dbFile);
console.log(`starting socket server on path ${socketPath}`);
logger.log(`[starting socket server on path ${socketPath}`);
const server = createServer();
server.listen({
path: socketPath,
@ -24,55 +26,65 @@ export async function startServer(dbFile, exit) {
});
server.on('listening', () => {
// Started successful
// state = STATE.STARTED;
// process.send(`state:${state}`);
process.on('SIGINT', () => server.close());
process.on('exit', (code) => {
console.log(`exiting with code ${code}`);
logger.log(`exiting with code ${code}`);
});
// Start the "master" IPC client
db = new AceBase(dbName, { storage: { type: storageType, path: storagePath, ipc: server } });
// Bind socket server to the instance
// (db.api.storage.ipc as IPCSocketPeer).server = server;
db = new AceBase(dbName, { logLevel: options.logLevel, storage: { type: storageType, path: storagePath, ipc: server } });
});
server.on('error', (err) => {
// state = STATE.ERROR;
// process.send(`state:${state}`);
// process.send(`error:${err.code ?? err.message}`);
if (err.code === 'EADDRINUSE') {
console.log('socket server already running');
return exit(ERROR.ALREADY_RUNNING.exitCode);
logger.log(`socket server already running`);
return options.exit(ERROR.ALREADY_RUNNING.exitCode);
}
console.error(`socket server error ${err.code ?? err.message}`);
exit(ERROR.UNKNOWN.exitCode);
logger.error(`socket server error ${err.code ?? err.message}`);
options.exit(ERROR.UNKNOWN.exitCode);
});
let connectionsMade = false;
server.on('connection', (socket) => {
// New socket connected handler
connectionsMade = true;
sockets.push(socket);
console.log(`socket connected, total: ${sockets.length}`);
// socket.on('data', (data) => {
// // Received data from a connected client (master or worker)
// // Socket IPC implementation handles this
// });
logger.log(`socket connected, total: ${sockets.length}`);
socket.on('close', (hadError) => {
// Socket is closed
sockets.splice(sockets.indexOf(socket), 1);
console.log(`socket disconnected${hadError ? ' because of an error' : ''}, total: ${sockets.length}`);
logger.log(`socket disconnected${hadError ? ' because of an error' : ''}, total: ${sockets.length}`);
if (sockets.length === 0) {
// setTimeout(() => {
// if (sockets.length === 0) {
console.log(`closing server socket because there are no more connected clients, exiting with code 0`);
// Stop socket server
server.close((err) => {
exit(0);
});
// }
// }, 5000);
const stop = () => {
logger.log(`closing server socket because there are no more connected clients, exiting with code 0`);
// Stop socket server
server.close((err) => {
options.exit(err ? ERROR.UNKNOWN.exitCode : 0);
});
};
if (options.maxIdleTime > 0) {
setTimeout(() => {
if (sockets.length === 0) {
stop();
}
}, 5000);
}
else {
stop();
}
}
});
});
server.on('close', () => {
db.close();
});
if (options.maxIdleTime > 0) {
setTimeout(() => {
if (!connectionsMade) {
logger.log(`closing server socket because no clients connected, exiting with code 0`);
// Stop socket server
server.close((err) => {
options.exit(err ? ERROR.UNKNOWN.exitCode : 0);
});
}
}, options.maxIdleTime).unref();
}
}
//# sourceMappingURL=index.js.map

View file

@ -1 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ipc/service/index.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ipc/service/index.ts"],"names":[],"mappings":"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"}

View file

@ -1,7 +1,17 @@
import { createHash } from 'crypto';
export function getSocketPath(filePath) {
return process.platform === 'win32'
let path = process.platform === 'win32'
? `\\\\.\\pipe\\${filePath.replace(/^\//, '').replace(/\//g, '-')}`
: `${filePath}.sock`;
const maxLength = process.platform === 'win32' ? 256 : 108;
if (path.length > maxLength) {
// Use hash of filepath instead
const hash = createHash('sha256').update(path).digest('hex');
path = process.platform === 'win32'
? `\\\\.\\pipe\\${hash}`
: `${hash}.sock`;
}
return path;
}
// export const MSG_DELIMITER = String.fromCharCode(0) + String.fromCharCode(1) + String.fromCharCode(3) + String.fromCharCode(5) + String.fromCharCode(0);
export const MSG_DELIMITER = '\n';

View file

@ -1 +1 @@
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/ipc/service/shared.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC1C,OAAO,OAAO,CAAC,QAAQ,KAAI,OAAO;QAC9B,CAAC,CAAC,gBAAgB,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;QACnE,CAAC,CAAC,GAAG,QAAQ,OAAO,CAAC;AAC7B,CAAC;AAED,2JAA2J;AAC3J,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC"}
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/ipc/service/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC1C,IAAI,IAAI,GAAG,OAAO,CAAC,QAAQ,KAAI,OAAO;QAClC,CAAC,CAAC,gBAAgB,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;QACnE,CAAC,CAAC,GAAG,QAAQ,OAAO,CAAC;IACzB,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1D,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE;QACzB,+BAA+B;QAC/B,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7D,IAAI,GAAG,OAAO,CAAC,QAAQ,KAAI,OAAO;YAC9B,CAAC,CAAC,gBAAgB,IAAI,EAAE;YACxB,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC;KACxB;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,2JAA2J;AAC3J,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC"}

View file

@ -2,8 +2,23 @@ import { startServer } from './index.js';
(async () => {
try {
const dbFile = process.argv[2]; // full path to db storage file, eg '/home/ewout/project/db.acebase/data.db'
await startServer(dbFile, (code) => {
process.exit(code);
const settings = process.argv.slice(3).reduce((settings, arg, i, args) => {
switch (arg.toLowerCase()) {
case '--loglevel':
settings.logLevel = args[i + 1];
break;
case '--maxidletime':
settings.maxIdleTime = parseInt(args[i + 1]);
break;
}
return settings;
}, { logLevel: 'log', maxIdleTime: 5000 });
await startServer(dbFile, {
logLevel: settings.logLevel,
maxIdleTime: settings.maxIdleTime,
exit: (code) => {
process.exit(code);
},
});
}
catch (err) {

View file

@ -1 +1 @@
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../../src/ipc/service/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC;AAEhC,CAAC,KAAK,IAAI,EAAE;IACR,IAAI;QACA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,4EAA4E;QAC5G,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC/B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;KACN;IACD,OAAO,GAAG,EAAE;QACR,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACnB;AACL,CAAC,CAAC,EAAE,CAAC"}
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../../src/ipc/service/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC;AAGhC,CAAC,KAAK,IAAI,EAAE;IACR,IAAI;QACA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,4EAA4E;QAC5G,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;YACrE,QAAQ,GAAG,CAAC,WAAW,EAAE,EAAE;gBACvB,KAAK,YAAY;oBAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAqC,CAAC;oBAAC,MAAM;gBAC9F,KAAK,eAAe;oBAAE,QAAQ,CAAC,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAAC,MAAM;aAC7E;YACD,OAAO,QAAQ,CAAC;QACpB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAyC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/E,MAAM,WAAW,CAAC,MAAM,EAAE;YACtB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;gBACX,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;SACJ,CAAC,CAAC;KACN;IACD,OAAO,GAAG,EAAE;QACR,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACnB;AACL,CAAC,CAAC,EAAE,CAAC"}

View file

@ -1,15 +1,19 @@
import { connect, Server } from 'net';
import { resolve as resolvePath } from 'path';
import { fork } from 'child_process';
import { spawn } from 'child_process';
import { AceBaseIPCPeer } from './ipc.js';
import { ID, Transport } from 'acebase-core';
import { getSocketPath, MSG_DELIMITER } from './service/shared.js';
// import { startServer } from './service/index.js';
export { Server as NetIPCServer } from 'net';
const masterPeerId = '[master]';
/**
* Node cluster functionality - enables vertical scaling with forked processes. AceBase will enable IPC at startup, so
* any forked process will communicate database changes and events automatically. Locking of resources will be done by
* the cluster's primary (previously master) process. NOTE: if the master process dies, all peers stop working
* Socket IPC implementation. Peers will attempt starting up a dedicated service process for the target database,
* or connect to an already running process. The service acts as the IPC master and governs over locks, space allocation
* and communication between peers. Communication between the processes is done using (very fast in-memory) Unix sockets.
* This IPC implementation allows different processes on a single machine to access the same database simultaniously without
* them having to explicitly configure their IPC settings.
* Currently can be used by passing `ipc: 'socket'` in AceBase's `storage` settings, will become the default soon.
*/
export class IPCSocketPeer extends AceBaseIPCPeer {
constructor(storage, ipcSettings) {
@ -31,15 +35,17 @@ export class IPCSocketPeer extends AceBaseIPCPeer {
this.exit();
});
if (!isMaster) {
// Try starting IPC service if it is not running yet
const service = fork(/file:\/{2,3}(.+)\/[^/]/.exec(import.meta.url)[1] + '/service/start.js', [dbFile], { detached: true, stdio: 'inherit' });
service.unref(); // Process is detached and allowed to keep running after we exit
bindEventHandler(service, 'exit', (code, signal) => {
console.log(`Service exited with code ${code}`);
});
// // For testing:
// startServer(dbFile, (code) => {
// console.log(`Service exited with code ${code}`);
// Try starting IPC service if it is not running yet.
// Use maxIdleTime 0 to allow tests to remove database files when done, make this configurable!
const service = spawn('node', [/file:\/{2,3}(.+)\/[^/]/.exec(import.meta.url)[1] + '/service/start.js', dbFile, '--loglevel', storage.debug.level, '--maxidletime', '0'], { detached: true, stdio: 'ignore' });
service.unref(); // Process is detached and allowed to keep running after we exit. Do not keep a reference to it, possibly preventing app exit.
// For testing:
// startServer(dbFile, {
// maxIdleTime: 0,
// logLevel: storage.debug.level,
// exit: (code) => {
// storage.debug.log(`[IPC ${ipcSettings.ipcName}] service exited with code ${code}`);
// },
// });
}
/**
@ -90,17 +96,17 @@ export class IPCSocketPeer extends AceBaseIPCPeer {
break; // wait for more data
}
// Extract message from buffer
const message = buffer.slice(0, delimiterIndex);
buffer = buffer.slice(delimiterIndex + MSG_DELIMITER.length);
const message = buffer.subarray(0, delimiterIndex);
buffer = buffer.subarray(delimiterIndex + MSG_DELIMITER.length);
try {
const json = message.toString('utf-8');
// console.log(`Received socket message: `, json);
// storage.debug.log(`[IPC ${ipcSettings.ipcName}] Received socket message: `, json);
const serialized = JSON.parse(json);
const msg = Transport.deserialize2(serialized);
handleMessage(socket, msg);
}
catch (err) {
console.error(`Error parsing message: ${err}`);
storage.debug.error(`[IPC ${ipcSettings.ipcName}] Error parsing message: ${err}`);
}
}
});
@ -123,12 +129,15 @@ export class IPCSocketPeer extends AceBaseIPCPeer {
const connectSocket = async (path) => {
const tryConnect = async (tries) => {
try {
if (this._exiting) {
return;
}
const s = connect({ path });
await new Promise((resolve, reject) => {
s.once('error', reject);
s.once('connect', resolve);
s.once('error', reject).unref();
s.once('connect', resolve).unref();
});
console.log(`IPC peer ${this.id} successfully established connection to the server`);
storage.debug.log(`[IPC ${ipcSettings.ipcName}] peer ${this.id} successfully established connection to the service`);
socket = s;
connected = true;
}
@ -138,17 +147,17 @@ export class IPCSocketPeer extends AceBaseIPCPeer {
await new Promise(resolve => setTimeout(resolve, 100));
return tryConnect(tries + 1);
}
console.error(err.message);
storage.debug.error(`[IPC ${ipcSettings.ipcName}] peer ${this.id} cannot connect to service: ${err.message}`);
throw err;
}
};
await tryConnect(1);
this.once('exit', () => {
socket.destroy();
socket?.destroy();
});
bindEventHandler(socket, 'close', (hadError) => {
// Connection to server closed
console.log(`IPC peer ${this.id} lost its connection to the server${hadError ? ' because of an error' : ''}`);
storage.debug.log(`IPC peer ${this.id} lost its connection to the service${hadError ? ' because of an error' : ''}`);
});
let buffer = Buffer.alloc(0); // Buffer to store incomplete messages
bindEventHandler(socket, 'data', chunk => {
@ -160,17 +169,17 @@ export class IPCSocketPeer extends AceBaseIPCPeer {
break; // wait for more data
}
// Extract message from buffer
const message = buffer.slice(0, delimiterIndex);
buffer = buffer.slice(delimiterIndex + MSG_DELIMITER.length);
const message = buffer.subarray(0, delimiterIndex);
buffer = buffer.subarray(delimiterIndex + MSG_DELIMITER.length);
try {
const json = message.toString('utf-8');
// console.log(`Received server message: `, json);
// storage.debug.log(`Received server message: `, json);
const serialized = JSON.parse(json);
const msg = Transport.deserialize2(serialized);
handleMessage(socket, msg);
}
catch (err) {
console.error(`Error parsing message: ${err}`);
storage.debug.error(`Error parsing message: ${err}`);
}
}
});

File diff suppressed because one or more lines are too long

View file

@ -1,7 +1,7 @@
import { createTempDB } from './tempdb.js';
import { ID } from 'acebase-core';
// This test takes at least an hour on a fast system, enable only if you have time
const LONG_RUNNING_TEST_ENABLED = false;
const LONG_RUNNING_TEST_ENABLED = process.env.LONG_RUNNING_TESTS === 'true';
describe('bulk import', () => {
let db, removeDB;
beforeAll(async () => {

View file

@ -1 +1 @@
{"version":3,"file":"bulk-import.spec.js","sourceRoot":"","sources":["../../../src/test/bulk-import.spec.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"bulk-import.spec.js","sourceRoot":"","sources":["../../../src/test/bulk-import.spec.ts"],"names":[],"mappings":"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"}

View file

@ -1,2 +1,7 @@
export declare function startServer(dbFile: string, exit: (code: number) => void): Promise<void>;
import { type AceBaseLocalSettings } from '../../';
export declare function startServer(dbFile: string, options: {
logLevel: AceBaseLocalSettings['logLevel'];
maxIdleTime: number;
exit: (code: number) => void;
}): Promise<void>;
//# sourceMappingURL=index.d.ts.map

View file

@ -1 +1 @@
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ipc/service/index.ts"],"names":[],"mappings":"AAUA,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,iBA+E7E"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ipc/service/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAS5D,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,QAAQ,EAAE,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,iBAuF3J"}

View file

@ -1 +1 @@
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/ipc/service/shared.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,UAI7C;AAGD,eAAO,MAAM,aAAa,OAAO,CAAC"}
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/ipc/service/shared.ts"],"names":[],"mappings":"AAEA,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,UAa7C;AAGD,eAAO,MAAM,aAAa,OAAO,CAAC"}

View file

@ -4,9 +4,12 @@ import { AceBaseIPCPeer, IMessage } from './ipc';
import { Storage } from '../storage';
export { Server as NetIPCServer } from 'net';
/**
* Node cluster functionality - enables vertical scaling with forked processes. AceBase will enable IPC at startup, so
* any forked process will communicate database changes and events automatically. Locking of resources will be done by
* the cluster's primary (previously master) process. NOTE: if the master process dies, all peers stop working
* Socket IPC implementation. Peers will attempt starting up a dedicated service process for the target database,
* or connect to an already running process. The service acts as the IPC master and governs over locks, space allocation
* and communication between peers. Communication between the processes is done using (very fast in-memory) Unix sockets.
* This IPC implementation allows different processes on a single machine to access the same database simultaniously without
* them having to explicitly configure their IPC settings.
* Currently can be used by passing `ipc: 'socket'` in AceBase's `storage` settings, will become the default soon.
*/
export declare class IPCSocketPeer extends AceBaseIPCPeer {
server?: Server;

View file

@ -1 +1 @@
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../../src/ipc/socket.ts"],"names":[],"mappings":";AAAA,OAAO,EAAmB,MAAM,EAAE,MAAM,KAAK,CAAC;AAG9C,OAAO,EAAE,cAAc,EAAiB,QAAQ,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIrC,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,KAAK,CAAC;AAW7C;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,cAAc;IAEtC,MAAM,CAAC,EAAE,MAAM,CAAC;gBAEX,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;IA6NrF,WAAW,CAAC,OAAO,EAAE,QAAQ;IAEhB,IAAI,CAAC,IAAI,SAAI;CAI7B"}
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../../src/ipc/socket.ts"],"names":[],"mappings":";AAAA,OAAO,EAAmB,MAAM,EAAE,MAAM,KAAK,CAAC;AAG9C,OAAO,EAAE,cAAc,EAAiB,QAAQ,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIrC,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,KAAK,CAAC;AAW7C;;;;;;;GAOG;AACH,qBAAa,aAAc,SAAQ,cAAc;IAEtC,MAAM,CAAC,EAAE,MAAM,CAAC;gBAEX,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;IAgOrF,WAAW,CAAC,OAAO,EAAE,QAAQ;IAEhB,IAAI,CAAC,IAAI,SAAI;CAI7B"}

View file

@ -12,7 +12,7 @@ export declare class NodeInfo {
childCount?: number;
constructor(info: Partial<NodeInfo>);
get valueType(): NodeValueType;
get valueTypeName(): "object" | "string" | "number" | "binary" | "date" | "bigint" | "boolean" | "array" | "reference";
get valueTypeName(): "object" | "string" | "number" | "binary" | "bigint" | "boolean" | "date" | "array" | "reference";
toString(): string;
}
//# sourceMappingURL=node-info.d.ts.map

View file

@ -11,7 +11,7 @@ declare const nodeValueTypes: {
};
export type NodeValueType = typeof nodeValueTypes[keyof typeof nodeValueTypes];
export declare const VALUE_TYPES: Record<"OBJECT" | "ARRAY" | "NUMBER" | "BOOLEAN" | "STRING" | "BIGINT" | "DATETIME" | "BINARY" | "REFERENCE", NodeValueType>;
export declare function getValueTypeName(valueType: number): "object" | "string" | "number" | "binary" | "date" | "bigint" | "boolean" | "array" | "reference";
export declare function getValueTypeName(valueType: number): "object" | "string" | "number" | "binary" | "bigint" | "boolean" | "date" | "array" | "reference";
export declare function getNodeValueType(value: unknown): NodeValueType;
export declare function getValueType(value: unknown): NodeValueType;
export {};