From c15aad68427aa5608054a454d04302310ad51382 Mon Sep 17 00:00:00 2001 From: Ivan Shumkov Date: Mon, 10 Oct 2022 18:37:31 +0200 Subject: [PATCH 1/2] fix(drive): db is in readonly mode due to the active transaction --- .../lib/identity/masternode/handleRemovedMasternodeFactory.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/js-drive/lib/identity/masternode/handleRemovedMasternodeFactory.js b/packages/js-drive/lib/identity/masternode/handleRemovedMasternodeFactory.js index c4a48c6832d..16712f29396 100644 --- a/packages/js-drive/lib/identity/masternode/handleRemovedMasternodeFactory.js +++ b/packages/js-drive/lib/identity/masternode/handleRemovedMasternodeFactory.js @@ -31,7 +31,7 @@ function handleRemovedMasternodeFactory( dataContract, 'rewardShare', document.getId(), - true, + { useTransaction: true }, ); result.push( From 301a7c6e94f1e41a5981d064dd41d3766b245c70 Mon Sep 17 00:00:00 2001 From: Ivan Shumkov Date: Mon, 10 Oct 2022 19:41:44 +0200 Subject: [PATCH 2/2] test: make synchronizeMasternodeIdentitiesFactory to use transactions --- ...hronizeMasternodeIdentitiesFactory.spec.js | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/packages/js-drive/test/integration/identity/masternode/synchronizeMasternodeIdentitiesFactory.spec.js b/packages/js-drive/test/integration/identity/masternode/synchronizeMasternodeIdentitiesFactory.spec.js index 5d32e9b4b14..f5be975fe96 100644 --- a/packages/js-drive/test/integration/identity/masternode/synchronizeMasternodeIdentitiesFactory.spec.js +++ b/packages/js-drive/test/integration/identity/masternode/synchronizeMasternodeIdentitiesFactory.spec.js @@ -41,7 +41,10 @@ function expectOperatorIdentityFactory( const operatorIdentifier = createOperatorIdentifier(smlEntry); - const operatorIdentityResult = await identityRepository.fetch(operatorIdentifier); + const operatorIdentityResult = await identityRepository.fetch( + operatorIdentifier, + { useTransaction: true }, + ); const operatorIdentity = operatorIdentityResult.getValue(); @@ -76,7 +79,7 @@ function expectOperatorIdentityFactory( .equal(operatorPubKey); const firstOperatorIdentityByPublicKeyHashResult = await publicKeyToIdentitiesRepository - .fetch(firstOperatorMasternodePublicKey.hash()); + .fetch(firstOperatorMasternodePublicKey.hash(), { useTransaction: true }); const firstOperatorIdentityByPublicKeyHash = firstOperatorIdentityByPublicKeyHashResult .getValue(); @@ -104,7 +107,7 @@ function expectOperatorIdentityFactory( ); const masternodeIdentityByPayoutPublicKeyHashResult = await publicKeyToIdentitiesRepository - .fetch(payoutPublicKey.hash()); + .fetch(payoutPublicKey.hash(), { useTransaction: true }); const masternodeIdentityByPayoutPublicKeyHash = masternodeIdentityByPayoutPublicKeyHashResult .getValue(); @@ -126,7 +129,7 @@ function expectOperatorIdentityFactory( ); const masternodeIdentityByPayoutPublicKeyHashResult = await publicKeyToIdentitiesRepository - .fetch(payoutPublicKey.hash()); + .fetch(payoutPublicKey.hash(), { useTransaction: true }); const masternodeIdentityByPayoutPublicKeyHash = masternodeIdentityByPayoutPublicKeyHashResult .getValue(); @@ -171,7 +174,10 @@ function expectMasternodeIdentityFactory( Buffer.from(smlEntry.proRegTxHash, 'hex'), ); - const masternodeIdentityResult = await identityRepository.fetch(masternodeIdentifier); + const masternodeIdentityResult = await identityRepository.fetch( + masternodeIdentifier, + { useTransaction: true }, + ); const masternodeIdentity = masternodeIdentityResult.getValue(); @@ -195,7 +201,7 @@ function expectMasternodeIdentityFactory( ); const masternodeIdentityByPublicKeyHashResult = await publicKeyToIdentitiesRepository - .fetch(masternodePublicKey.hash()); + .fetch(masternodePublicKey.hash(), { useTransaction: true }); const masternodeIdentityByPublicKeyHash = masternodeIdentityByPublicKeyHashResult.getValue(); @@ -217,7 +223,7 @@ function expectMasternodeIdentityFactory( ); const masternodeIdentityByPayoutPublicKeyHashResult = await publicKeyToIdentitiesRepository - .fetch(payoutPublicKey.hash()); + .fetch(payoutPublicKey.hash(), { useTransaction: true }); const masternodeIdentityByPayoutPublicKeyHash = masternodeIdentityByPayoutPublicKeyHashResult .getValue(); @@ -239,7 +245,7 @@ function expectMasternodeIdentityFactory( ); const masternodeIdentityByPayoutPublicKeyHashResult = await publicKeyToIdentitiesRepository - .fetch(payoutPublicKey.hash()); + .fetch(payoutPublicKey.hash(), { useTransaction: true }); const masternodeIdentityByPayoutPublicKeyHash = masternodeIdentityByPayoutPublicKeyHashResult .getValue(); @@ -372,14 +378,16 @@ describe('synchronizeMasternodeIdentitiesFactory', () => { container.register('simplifiedMasternodeList', asValue(simplifiedMasternodeListMock)); + const groveDBStore = container.resolve('groveDBStore'); + await groveDBStore.startTransaction(); + /** * @type {Drive} */ const rsDrive = container.resolve('rsDrive'); - await rsDrive.createInitialStateStructure(); + await rsDrive.createInitialStateStructure(true); // Create misc tree - const groveDBStore = container.resolve('groveDBStore'); await groveDBStore.createTree( [], Buffer.from([5]), @@ -478,6 +486,7 @@ describe('synchronizeMasternodeIdentitiesFactory', () => { ['$ownerId', '==', firstMasternodeIdentifier], ['payToId', '==', firstOperatorIdentifier], ], + useTransaction: true, }, ); @@ -657,6 +666,7 @@ describe('synchronizeMasternodeIdentitiesFactory', () => { ['$ownerId', '==', newMasternodeIdentifier], ['payToId', '==', newOperatorIdentifier], ], + useTransaction: true, }, ); @@ -843,6 +853,7 @@ describe('synchronizeMasternodeIdentitiesFactory', () => { where: [ ['$ownerId', '==', changedMasternodeIdentifier], ], + useTransaction: true, }, ); @@ -918,6 +929,7 @@ describe('synchronizeMasternodeIdentitiesFactory', () => { where: [ ['$ownerId', '==', changedMasternodeIdentifier], ], + useTransaction: true, }, );