Skip to content
This repository has been archived by the owner on Aug 23, 2020. It is now read-only.

Add transaction solidifier queue #1821

Merged
merged 26 commits into from
Apr 20, 2020

Conversation

DyrellC
Copy link
Contributor

@DyrellC DyrellC commented Apr 1, 2020

Description

Decouple the milestone and transaction solidification processes to handle transaction solidification asynchronously from milestone checking. Currently each time the MilestoneSolidifier checks the solidity of a transaction, it does the TransactionSolidifier's checkSolidity call directly. This can cause a hanging when processing longer sync queues, which can delay the MilestoneSolidifier processing newer received milestone transactions. In order to decouple this, the MilestoneSolidifier will check the solid state of a transaction and add it to a processing queue in the TransactionSolidifier so that there are no hanging moments during milestone processing. This is a step introduced within the process of updating milestone handling as per #1674.

Follow up to #1805

Type of change

  • Enhancement (a non-breaking change which adds functionality)

How Has This Been Tested?

  • All previously created tests still work, new unit tests work, and regression tests still pass locally (with the exception of the already known bug for machine3)

Checklist:

  • My code follows the style guidelines for this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes

@DyrellC DyrellC mentioned this pull request Apr 1, 2020
6 tasks
Copy link
Contributor

@acha-bill acha-bill left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

8ed7600 Looks good.

@DyrellC DyrellC changed the base branch from Dyrell-Milestone-Stage-Draft to dev April 7, 2020 00:24
Copy link
Contributor

@GalRogozinski GalRogozinski left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just some nits

@@ -216,6 +280,12 @@ private void addToBroadcastQueue(TransactionViewModel tvm) {
}
}

@VisibleForTesting
Set<Hash> getSolidificationQueue(){
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is funny that you call it getQueue but you return a Set

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A fair point, i'll rename

@@ -98,11 +98,22 @@ public void verifyTxIsNotSolid() throws Exception {
assertFalse("Expected transaction to fail solidity check", txSolidifier.checkSolidity(tx.getHash()));
}

@Test
public void getSolidificationQueue() throws Exception {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You are testing add to solidification queue not get, so better rename

…SolidifierImpl.java

Co-Authored-By: Gal Rogozinski <galrogogit@gmail.com>
DyrellC and others added 2 commits April 7, 2020 10:52
…SolidifierImpl.java

Co-Authored-By: Gal Rogozinski <galrogogit@gmail.com>
Copy link
Contributor

@GalRogozinski GalRogozinski left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good

@GalRogozinski GalRogozinski merged commit b1f9fbc into iotaledger:dev Apr 20, 2020
GalRogozinski added a commit that referenced this pull request Apr 21, 2020
* Move validation to validation service package

* Add Transaction Solidifier

* Update Transaction Validator

* Update Unit Tests

* Remove tip field from solidify stage

* Move broadcast queue retreival to solidify stage

* Undo auto-formatting

* More autoformatting

* Re-remove refillBroadcast

* Move propagation logic to inner class

* Remove unused imports

* Add comment to propagator

* Remove unused txSolidifier private field

* Remove separate thread logic, check solidity from milestone solidifier

* Add solidification queue to transaction solidifier

* LinkedHashSet -> ArrayDeque in checkSolidity

* Update maxProcessedTransactions value determination

* Make Transaction Propagator private

* Add milestone stage

* add heartbeat message (#1825)

* add heartbeat message

* added javadocs

* print exception message

* Regression: Update pruning test  (#1775)

* Update pruning test for before and after pruning status

* m6 -> m1

Co-authored-by: Gal Rogozinski <gal.rogozinski@iota.org>

* Fix: Update Broadcast Stage logic  (#1827)

* Update broadcast fetch logic

* Comment

* Feature: Add transaction solidifier queue (#1821)

* Move validation to validation service package

* Add Transaction Solidifier

* Update Transaction Validator

* Update Unit Tests

* Remove tip field from solidify stage

* Move broadcast queue retreival to solidify stage

* Undo auto-formatting

* More autoformatting

* Re-remove refillBroadcast

* Move propagation logic to inner class

* Remove unused imports

* Add comment to propagator

* Remove unused txSolidifier private field

* Remove separate thread logic, check solidity from milestone solidifier

* Add solidification queue to transaction solidifier

* LinkedHashSet -> ArrayDeque in checkSolidity

* Update maxProcessedTransactions value determination

* Make Transaction Propagator private

* Fix test conflicts

* Update src/main/java/com/iota/iri/service/validation/impl/TransactionSolidifierImpl.java

Co-Authored-By: Gal Rogozinski <galrogogit@gmail.com>

* Update src/main/java/com/iota/iri/service/validation/impl/TransactionSolidifierImpl.java

Co-Authored-By: Gal Rogozinski <galrogogit@gmail.com>

* Rename

Co-authored-by: Gal Rogozinski <gal.rogozinski@iota.org>
Co-authored-by: Gal Rogozinski <galrogogit@gmail.com>

* Unit test for milestone stage

Co-authored-by: Gal Rogozinski <gal.rogozinski@iota.org>
Co-authored-by: Acha Bill <57879913+acha-bill@users.noreply.github.com>
Co-authored-by: Gal Rogozinski <galrogogit@gmail.com>
GalRogozinski added a commit that referenced this pull request Apr 23, 2020
* Move validation to validation service package

* Add Transaction Solidifier

* Update Transaction Validator

* Update Unit Tests

* Remove tip field from solidify stage

* Move broadcast queue retreival to solidify stage

* Undo auto-formatting

* More autoformatting

* Re-remove refillBroadcast

* Move propagation logic to inner class

* Remove unused imports

* Add comment to propagator

* Remove unused txSolidifier private field

* Remove separate thread logic, check solidity from milestone solidifier

* Add solidification queue to transaction solidifier

* LinkedHashSet -> ArrayDeque in checkSolidity

* Update maxProcessedTransactions value determination

* Make Transaction Propagator private

* Add milestone stage

* add heartbeat message (#1825)

* add heartbeat message

* added javadocs

* print exception message

* Regression: Update pruning test  (#1775)

* Update pruning test for before and after pruning status

* m6 -> m1

Co-authored-by: Gal Rogozinski <gal.rogozinski@iota.org>

* Fix: Update Broadcast Stage logic  (#1827)

* Update broadcast fetch logic

* Comment

* Feature: Add transaction solidifier queue (#1821)

* Move validation to validation service package

* Add Transaction Solidifier

* Update Transaction Validator

* Update Unit Tests

* Remove tip field from solidify stage

* Move broadcast queue retreival to solidify stage

* Undo auto-formatting

* More autoformatting

* Re-remove refillBroadcast

* Move propagation logic to inner class

* Remove unused imports

* Add comment to propagator

* Remove unused txSolidifier private field

* Remove separate thread logic, check solidity from milestone solidifier

* Add solidification queue to transaction solidifier

* LinkedHashSet -> ArrayDeque in checkSolidity

* Update maxProcessedTransactions value determination

* Make Transaction Propagator private

* Fix test conflicts

* Update src/main/java/com/iota/iri/service/validation/impl/TransactionSolidifierImpl.java

Co-Authored-By: Gal Rogozinski <galrogogit@gmail.com>

* Update src/main/java/com/iota/iri/service/validation/impl/TransactionSolidifierImpl.java

Co-Authored-By: Gal Rogozinski <galrogogit@gmail.com>

* Rename

Co-authored-by: Gal Rogozinski <gal.rogozinski@iota.org>
Co-authored-by: Gal Rogozinski <galrogogit@gmail.com>

* Unit test for milestone stage

* Consolidate milestone solidification logic

* Update milestone stage tests

* update bootstrap

* Minor refactor

* Log correct milestones, add switch for processing solidification queue

* Bootstrap milestone hash and index properly

* set index and hash directly instead of through method

* Place all milestone tails into solidifier from milestone stage

* setLatestMilestone -> logNewMilestone

* remove second LSM update in update milestones

* Stop repeats and solid entry points in broadcast queue

* Don't abort milestone stage for second transaction in milestone bundle

* Shorten regression wait times

* Clean up, syntax updates, comment clarification

* Remove unecessary method, syntax

* Atomic variables and syntax changes

* Update scanMilestones in queue

* Extract repair logic

* Update src/main/java/com/iota/iri/service/milestone/MilestoneSolidifier.java

Co-Authored-By: Gal Rogozinski <galrogogit@gmail.com>

* Typo, check solidity in milestone stage

* syntax and minor logic change

* Rename logNewMilestone

* log -> register in milestone stage

* Update milestone payload to pass forward transaction, fix tests

Co-authored-by: Gal Rogozinski <gal.rogozinski@iota.org>
Co-authored-by: Acha Bill <57879913+acha-bill@users.noreply.github.com>
Co-authored-by: Gal Rogozinski <galrogogit@gmail.com>
@GalRogozinski GalRogozinski mentioned this pull request May 6, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants