diff --git a/package.json b/package.json index 996cfd893..571f620a5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "origintrail_node", - "version": "8.0.1", + "version": "8.0.1+hotfix.1", "description": "OTNode V8", "main": "index.js", "type": "module", diff --git a/src/modules/network/implementation/libp2p-service.js b/src/modules/network/implementation/libp2p-service.js index f1baad9f7..fedaa0300 100644 --- a/src/modules/network/implementation/libp2p-service.js +++ b/src/modules/network/implementation/libp2p-service.js @@ -464,7 +464,12 @@ class Libp2pService { return { message, valid: false, busy: false }; } - message.header = JSON.parse(stringifiedHeader); + try { + message.header = JSON.parse(stringifiedHeader); + } catch (error) { + // Return the same format as invalid request case + return { message, valid: false, busy: false }; + } // validate request / response if (!(await isMessageValid(message.header, peerIdString))) { @@ -481,10 +486,20 @@ class Libp2pService { let stringifiedData = ''; // read data the data - for await (const chunk of source) { - stringifiedData += chunk; + + try { + for await (const chunk of source) { + + stringifiedData += chunk; + + } + message.data = JSON.parse(stringifiedData); + + } catch (error) { + + // If data parsing fails, return invalid message response + return { message, valid: false, busy: false }; } - message.data = JSON.parse(stringifiedData); return { message, valid: true, busy: false }; } diff --git a/src/modules/triple-store/implementation/ot-triple-store.js b/src/modules/triple-store/implementation/ot-triple-store.js index 82b133475..9461b0375 100644 --- a/src/modules/triple-store/implementation/ot-triple-store.js +++ b/src/modules/triple-store/implementation/ot-triple-store.js @@ -270,23 +270,47 @@ class OtTripleStore { return this.ask(repository, query); } - async createKnowledgeCollectionNamedGraphs(repository, uals, assetsNQuads, visibility) { - const query = ` - PREFIX schema: <${SCHEMA_CONTEXT}> - INSERT DATA { - ${uals - .map( - (ual, index) => ` + async createKnowledgeCollectionNamedGraphs( + repository, + uals, + assetsNQuads, + visibility, + retries = 5, + retryDelay = 10, + ) { + const queries = uals.map( + (ual, index) => ` + PREFIX schema: <${SCHEMA_CONTEXT}> + INSERT DATA { GRAPH <${ual}/${visibility}> { ${assetsNQuads[index].join('\n')} } - `, - ) - .join('\n')} + } + `, + ); + for (const [index, query] of queries.entries()) { + let attempts = 0; + let success = false; + + while (attempts < retries && !success) { + try { + await this.queryVoid(repository, query); + success = true; + } catch (error) { + attempts += 1; + if (attempts <= retries) { + this.logger.warn( + `Insert failed for GRAPH <${uals[index]}/${visibility}>. Attempt ${attempts}/${retries}. Retrying in ${retryDelay}ms.`, + ); + await setTimeout(retryDelay); + } else { + throw new Error( + `Failed to insert into GRAPH <${uals[index]}/${visibility}> after ${retries} attempts.`, + ); + } + } } - `; - - await this.queryVoid(repository, query); + } } async deleteKnowledgeCollectionNamedGraphs(repository, uals) { diff --git a/src/service/sharding-table-service.js b/src/service/sharding-table-service.js index d20bea388..4c0f1dec7 100644 --- a/src/service/sharding-table-service.js +++ b/src/service/sharding-table-service.js @@ -106,19 +106,19 @@ class ShardingTableService { } async dial(peerId) { - const { addresses } = await this.findPeerAddressAndProtocols(peerId); - if (addresses.length) { - try { + try { + const { addresses } = await this.findPeerAddressAndProtocols(peerId); + if (addresses.length) { if (peerId !== this.networkModuleManager.getPeerId().toB58String()) { this.logger.trace(`Dialing peer ${peerId}.`); await this.networkModuleManager.dial(peerId); } await this.updatePeerRecordLastSeenAndLastDialed(peerId); - } catch (error) { - this.logger.trace(`Unable to dial peer ${peerId}. Error: ${error.message}`); + } else { await this.updatePeerRecordLastDialed(peerId); } - } else { + } catch (error) { + this.logger.trace(`Unable to dial peer ${peerId}. Error: ${error.message}`); await this.updatePeerRecordLastDialed(peerId); } } diff --git a/src/service/triple-store-service.js b/src/service/triple-store-service.js index 9fec7031d..41c1226c7 100644 --- a/src/service/triple-store-service.js +++ b/src/service/triple-store-service.js @@ -38,7 +38,7 @@ class TripleStoreService { knowledgeCollectionUAL, triples, retries = 5, - retryDelay = 0, + retryDelay = 50, ) { this.logger.info( `Inserting Knowledge Collection with the UAL: ${knowledgeCollectionUAL} ` +