Skip to content

Commit 2c329d8

Browse files
authored
Merge pull request #47 from MinaFoundation/sharding+cassandra-creds
PM-1284 Sharding with 600 per 24h and use of ExponentialBackoffRetryPolicy
2 parents d47a6c8 + 2a30606 commit 2c329d8

File tree

3 files changed

+18
-6
lines changed

3 files changed

+18
-6
lines changed

Diff for: database/migrations/1_create_submissions_table.up.cql

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
CREATE TABLE IF NOT EXISTS submissions (
22
// filled by uptime_service_backend
33
submitted_at_date TEXT,
4+
shard INT,
45
submitted_at TIMESTAMP,
56
submitter TEXT,
67
created_at TIMESTAMP,
@@ -19,5 +20,5 @@ CREATE TABLE IF NOT EXISTS submissions (
1920
validation_error TEXT,
2021
// was it verified by zk-validator
2122
verified BOOLEAN,
22-
PRIMARY KEY (submitted_at_date, submitted_at, submitter)
23+
PRIMARY KEY ((submitted_at_date, shard), submitted_at, submitter)
2324
);

Diff for: src/delegation_backend/aws_keyspaces.go

+15-4
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ func InitializeKeyspaceSession(config *AwsKeyspacesConfig) (*gocql.Session, erro
6666

6767
cluster.Consistency = gocql.LocalQuorum
6868
cluster.DisableInitialHostLookup = false
69+
cluster.RetryPolicy = &gocql.ExponentialBackoffRetryPolicy{NumRetries: 10, Min: 100 * time.Millisecond, Max: 10 * time.Second}
6970

7071
session, err := cluster.CreateSession()
7172
if err != nil {
@@ -200,14 +201,24 @@ func (kc *KeyspaceContext) insertSubmission(submission *Submission) error {
200201
}, maxRetries, initialBackoff)
201202
}
202203

204+
// calculateShard returns the shard number for a given submission time.
205+
// 0-599 are the possible shard numbers, each representing a 144-second interval within 24h.
206+
// shard = (3600 * hour + 60 * minute + second) // 144
207+
func calculateShard(submittedAt time.Time) int {
208+
hour := submittedAt.Hour()
209+
minute := submittedAt.Minute()
210+
second := submittedAt.Second()
211+
return (3600*hour + 60*minute + second) / 144
212+
}
213+
203214
func (kc *KeyspaceContext) tryInsertSubmission(submission *Submission, includeRawBlock bool) error {
204-
query := "INSERT INTO " + kc.Keyspace + ".submissions (submitted_at_date, submitted_at, submitter, remote_addr, peer_id, snark_work, block_hash, created_at, graphql_control_port, built_with_commit_sha"
205-
values := []interface{}{submission.SubmittedAtDate, submission.SubmittedAt, submission.Submitter, submission.RemoteAddr, submission.PeerId, submission.SnarkWork, submission.BlockHash, submission.CreatedAt, submission.GraphqlControlPort, submission.BuiltWithCommitSha}
215+
query := "INSERT INTO " + kc.Keyspace + ".submissions (submitted_at_date, shard, submitted_at, submitter, remote_addr, peer_id, snark_work, block_hash, created_at, graphql_control_port, built_with_commit_sha"
216+
values := []interface{}{submission.SubmittedAtDate, calculateShard(submission.SubmittedAt), submission.SubmittedAt, submission.Submitter, submission.RemoteAddr, submission.PeerId, submission.SnarkWork, submission.BlockHash, submission.CreatedAt, submission.GraphqlControlPort, submission.BuiltWithCommitSha}
206217
if includeRawBlock {
207-
query += ", raw_block) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
218+
query += ", raw_block) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
208219
values = append(values, submission.RawBlock)
209220
} else {
210-
query += ") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
221+
query += ") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
211222
}
212223
return kc.Session.Query(query, values...).Exec()
213224
}

Diff for: src/integration_tests/aws_keyspaces_helper.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
func checkForSubmissions(session *gocql.Session, keyspace, date string) (bool, error) {
1313
var submitter, blockHash, rawBlock string
1414

15-
query := fmt.Sprintf("SELECT submitter, block_hash, raw_block FROM %s.submissions WHERE submitted_at_date='%s' LIMIT 1", keyspace, date)
15+
query := fmt.Sprintf("SELECT submitter, block_hash, raw_block FROM %s.submissions WHERE submitted_at_date='%s' LIMIT 1 ALLOW FILTERING", keyspace, date)
1616

1717
if err := session.Query(query).Scan(&submitter, &blockHash, &rawBlock); err != nil {
1818
if err == gocql.ErrNotFound {

0 commit comments

Comments
 (0)