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

Store Pre-signatures and Triples using Redis, refactor managers #869

Merged
merged 58 commits into from
Oct 30, 2024

Conversation

volovyks
Copy link
Collaborator

@volovyks volovyks commented Oct 2, 2024

This is the setup of Docker in the same container. Some people consider it a bad practice, but it may be a simpler solution for node validators. I have no strong opinion here.

It is expected to be executed with

docker run -d \
  --name my-redis-rust-app \
  -v /path/on/host/redis-data:/var/lib/redis \
  -p 6379:6379 \
  -p 8080:8080 \
  my-redis-rust-app

It will persist the apend file on the VM.

cc @kmaus-near @ppca

@volovyks volovyks changed the title basic redis setup in the same container basic redis setup Oct 2, 2024
@ppca
Copy link
Contributor

ppca commented Oct 2, 2024

@kmaus-near How does your draft redis setup work? Is it different or similar to this?

@kmaus-near
Copy link
Collaborator

@kmaus-near How does your draft redis setup work? Is it different or similar to this?

My homelab setup uses a dedicated VM running a Redis container vs. baking it into the multichain image, but other than that similar configuration. @volovyks and myself discussed this a bit yesterday, it's not exactly the "best practice" but if we are trying to simplify this for our partners, this may be a better route. Plus if we are to run it locally, we are then going to be running 3 containers on a single VM if we do not bake it into the image itself, which is not ideal resource wise or best practice wise. In short, both are not ideal, but for different reasons 😂.

I would suggest that we try to keep the code interacting with Redis as decoupled as possible, so if in the future we need to separate Redis from the base image, we can do so easily.

@volovyks
Copy link
Collaborator Author

volovyks commented Oct 4, 2024

@kmaus-near all we need in code is the Redis URL, so it is not coupled. If we change how we manage Redis storage, most of the complexity will be on the Terraform side.

Dockerfile.multichain Outdated Show resolved Hide resolved
@volovyks volovyks changed the title basic redis setup Stora pre-signatures using Redis Oct 14, 2024
@volovyks volovyks changed the title Stora pre-signatures using Redis Store pre-signatures using Redis Oct 14, 2024
@volovyks volovyks force-pushed the serhii/presignature-storage branch from 3a3bf87 to feba156 Compare October 14, 2024 14:53
@volovyks volovyks linked an issue Oct 16, 2024 that may be closed by this pull request
@volovyks volovyks changed the title Store pre-signatures using Redis Store Pre-signatures and Triples using Redis, refactor managers Oct 23, 2024
@volovyks
Copy link
Collaborator Author

Merged triple storage into this PR:

What was done:

  • Removed duplicate storage (DB and memory) approach
  • Datastore replaced with Redis
  • Refactoring of TripleManager

Other:

  • I removed StuckMonitor because it does not fit well into the design with Redis. I assume it was used for testing. I can add a lightweight version in Triple and Presignature managers if requested.

chain-signatures/node/src/protocol/presignature.rs Outdated Show resolved Hide resolved
chain-signatures/node/src/protocol/presignature.rs Outdated Show resolved Hide resolved
Comment on lines +575 to +576
let mut new_presignatures = Vec::new();
let mut new_mine_presignatures = Vec::new();
Copy link
Member

Choose a reason for hiding this comment

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

now that I see this, it's better for us to just have an extra bool field denoting the ownership of the presignature even though we already maintain a list of mine presignatures in redis. Would simplify the code a bit

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Redis is not designed for such data structures. For example, it will need to deserialize all triples to count mine.

@ChaoticTempest
Copy link
Member

#914 should fix the issues you were seeing @volovyks. Too many write locks were being acquired at the same time

@ppca
Copy link
Contributor

ppca commented Oct 30, 2024

LGTM!

ppca
ppca previously approved these changes Oct 30, 2024
@ppca
Copy link
Contributor

ppca commented Oct 30, 2024

@ChaoticTempest was the reason behind removing Arc and RwLock for triple/presignature storage because redis itself can already handle the concurrent read and write with its own locking mechanism?

@ppca ppca merged commit ce420d3 into develop Oct 30, 2024
3 checks passed
@ppca ppca deleted the serhii/presignature-storage branch October 30, 2024 18:53
@ChaoticTempest
Copy link
Member

@ppca yup, when sending items to be stored to redis, it's going to be over the wire anyways, so mutability does not matter at all here, thus we don't need RwLock at all. The redis pool struct actually has an internal Arc, so no need for us to manage it ourself

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.

Persist pre-signatures
5 participants