Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Merged by Bors] - Optimize searching for positioning ATX #5952

Closed
wants to merge 4 commits into from

Conversation

poszu
Copy link
Contributor

@poszu poszu commented May 17, 2024

Motivation

Searching for positioning ATX is slow because:

  • the SQL query is slow
  • it usually happens at the same time as many ATXs are being inserted into the DB (the poet CG)

Description

💡 For some users the searching took even 1h+, which resulted in being late for the poet round.

Changed the ATX Builder to use the in-memory ATX store, that contains ATXs for the last ~2 epochs to lookup a high-tick ATX for the positioning ATX.

The search algorithm is simplified and just picks the highest valid ATX. It's later decided whether to use this one or the own previous ATX (if they have equal height).

Test Plan

Added few tests, but mostly the existing tests cover the same usecase

TODO

  • Explain motivation or link existing issue(s)
  • Test changes and document test plan
  • Update documentation as needed
  • Update changelog as needed

@poszu poszu requested review from dshulyak, fasmat and ivan4th as code owners May 17, 2024 12:12
Copy link

codecov bot commented May 17, 2024

Codecov Report

Attention: Patch coverage is 91.20879% with 8 lines in your changes are missing coverage. Please review.

Project coverage is 80.8%. Comparing base (6798b5e) to head (32b4a96).
Report is 8 commits behind head on develop.

Files Patch % Lines
activation/activation.go 92.3% 2 Missing and 2 partials ⚠️
activation/post.go 71.4% 1 Missing and 1 partial ⚠️
atxsdata/data.go 92.0% 2 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff           @@
##           develop   #5952   +/-   ##
=======================================
  Coverage     80.8%   80.8%           
=======================================
  Files          287     287           
  Lines        29688   29742   +54     
=======================================
+ Hits         24010   24058   +48     
- Misses        4109    4118    +9     
+ Partials      1569    1566    -3     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

activation/activation.go Outdated Show resolved Hide resolved
Comment on lines +795 to +801
case id != b.conf.GoldenATXID:
if candidate, err := atxs.Get(b.db, id); err == nil {
if previous.TickHeight() >= candidate.TickHeight() {
id = previous.ID()
}
}
}
Copy link
Member

Choose a reason for hiding this comment

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

I am not sure if this check is necessary? If we have a previous ATX and the search found something then this will always be the previous ATX or one with a higher TickHeight, won't it be? I get the intention of preferring one's own ATX in the case that the candidate is a different ATX with the exact same TickHeight but I don't think that this is strictly advantageous? The candidate has already been verified to be valid.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

The search in atxsdata doesn't prefer own ATXs - it picks the first of the highest randomly. The check here ensures we pick our own ATX.

I get the intention of preferring one's own ATX in the case that the candidate is a different ATX with the exact same TickHeight but I don't think that this is strictly advantageous?

The only advantage I see is that it's "less risky" to refer to something created by self. The existing code does the same and I wanted to keep the functionality unchanged.

Copy link
Member

Choose a reason for hiding this comment

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

The check here ensures we pick our own ATX.

only in the case of a tie. Even if the node decided candidate is valid although it isn't this has no impact on ATXs that use it as a positioning ATX. As long as it is syntactically valid it can be referenced even if malfeasant. It has to be like this or marking an identity as malfeasant would cause everyone who referenced them (directly or indirectly) to fail validation of their published ATXs.

I'm not blocking the merge of this PR because of this, just making sure we are on the same page 🙂

atxsdata/data.go Outdated Show resolved Hide resolved
@poszu
Copy link
Contributor Author

poszu commented May 21, 2024

bors merge

spacemesh-bors bot pushed a commit that referenced this pull request May 21, 2024
## Motivation

Searching for positioning ATX is slow because:
- the SQL query is slow
- it usually happens at the same time as many ATXs are being inserted into the DB (the poet CG)
@spacemesh-bors
Copy link

Build failed (retrying...):

spacemesh-bors bot pushed a commit that referenced this pull request May 21, 2024
## Motivation

Searching for positioning ATX is slow because:
- the SQL query is slow
- it usually happens at the same time as many ATXs are being inserted into the DB (the poet CG)
@spacemesh-bors
Copy link

Pull request successfully merged into develop.

Build succeeded:

@spacemesh-bors spacemesh-bors bot changed the title Optimize searching for positioning ATX [Merged by Bors] - Optimize searching for positioning ATX May 21, 2024
@spacemesh-bors spacemesh-bors bot closed this May 21, 2024
@spacemesh-bors spacemesh-bors bot deleted the opt/high-tick-atx-lookup branch May 21, 2024 16:11
poszu added a commit that referenced this pull request May 21, 2024
Searching for positioning ATX is slow because:
- the SQL query is slow
- it usually happens at the same time as many ATXs are being inserted into the DB (the poet CG)
poszu added a commit that referenced this pull request May 21, 2024
Searching for positioning ATX is slow because:
- the SQL query is slow
- it usually happens at the same time as many ATXs are being inserted into the DB (the poet CG)
fasmat pushed a commit that referenced this pull request May 21, 2024
Searching for positioning ATX is slow because:
- the SQL query is slow
- it usually happens at the same time as many ATXs are being inserted into the DB (the poet CG)
poszu added a commit that referenced this pull request May 22, 2024
Searching for positioning ATX is slow because:
- the SQL query is slow
- it usually happens at the same time as many ATXs are being inserted into the DB (the poet CG)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants