diff --git a/server/threads/itc.js b/server/threads/itc.js index 4e31e4e91..cea447231 100644 --- a/server/threads/itc.js +++ b/server/threads/itc.js @@ -31,7 +31,7 @@ onMessageFromWorkers(async (event, sender) => { * @param event */ function sendItcEvent(event) { - if (!isMainThread && event.message) event.message.originator = threadId; + if (event.message) event.message.originator = threadId; return broadcastWithAcknowledgement(event); } diff --git a/unitTests/server/itc/utility/itcUtils.test.js b/unitTests/server/itc/utility/itcUtils.test.js index d39a424e7..fd224a601 100644 --- a/unitTests/server/itc/utility/itcUtils.test.js +++ b/unitTests/server/itc/utility/itcUtils.test.js @@ -2,6 +2,9 @@ const chai = require('chai'); const sinon = require('sinon'); +const sinon_chai = require('sinon-chai').default; +const rewire = require('rewire'); +chai.use(sinon_chai); const { expect } = chai; const hdb_logger = require('#js/utility/logging/harper_logger'); const itc_utils = require('#js/server/threads/itc'); @@ -44,6 +47,42 @@ describe('Test itcUtils module', () => { }); }); + describe('Test sendItcEvent function', () => { + let itc_rewired; + let broadcast_stub; + + before(() => { + itc_rewired = rewire('#js/server/threads/itc'); + broadcast_stub = sinon.stub().resolves(); + itc_rewired.__set__('broadcastWithAcknowledgement', broadcast_stub); + }); + + afterEach(() => { + broadcast_stub.resetHistory(); + }); + + it('sets originator on message when called from main thread', () => { + const event = { type: 'schema', message: { operation: 'create_schema' } }; + itc_rewired.sendItcEvent(event); + expect(event.message.originator).to.not.equal(undefined); + expect(broadcast_stub).to.have.been.calledOnce; + }); + + it('sets originator to threadId regardless of isMainThread value', () => { + const event = { type: 'schema', message: { operation: 'create_schema' } }; + const { threadId } = require('node:worker_threads'); + itc_rewired.sendItcEvent(event); + expect(event.message.originator).to.equal(threadId); + }); + + it('does not set originator when message is absent', () => { + const event = { type: 'schema' }; + itc_rewired.sendItcEvent(event); + expect(event.originator).to.equal(undefined); + expect(broadcast_stub).to.have.been.calledOnce; + }); + }); + describe('Test constructor functions', () => { it('Test SchemaEventMsg', () => { const expected_obj = { diff --git a/utility/environment/systemInformation.ts b/utility/environment/systemInformation.ts index f0680a2c7..6e9c05d99 100644 --- a/utility/environment/systemInformation.ts +++ b/utility/environment/systemInformation.ts @@ -613,8 +613,8 @@ function getLMDBStats(table: Table, dbStats: DBStats): void { const { root: _root, ...stats } = table.primaryStore.rootStore.getStats(); Object.assign(dbStats, stats); dbStats.readers = table.primaryStore.rootStore - .readerList() - .split(/\n\s+/) + .readerList?.() + ?.split(/\n\s+/) .slice(1) .map((line) => { const [pid, thread, txnid] = line.trim().split(' ');