@@ -66,6 +66,7 @@ func InitializeKeyspaceSession(config *AwsKeyspacesConfig) (*gocql.Session, erro
66
66
67
67
cluster .Consistency = gocql .LocalQuorum
68
68
cluster .DisableInitialHostLookup = false
69
+ cluster .RetryPolicy = & gocql.ExponentialBackoffRetryPolicy {NumRetries : 10 , Min : 100 * time .Millisecond , Max : 10 * time .Second }
69
70
70
71
session , err := cluster .CreateSession ()
71
72
if err != nil {
@@ -200,14 +201,24 @@ func (kc *KeyspaceContext) insertSubmission(submission *Submission) error {
200
201
}, maxRetries , initialBackoff )
201
202
}
202
203
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
+
203
214
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 }
206
217
if includeRawBlock {
207
- query += ", raw_block) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
218
+ query += ", raw_block) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )"
208
219
values = append (values , submission .RawBlock )
209
220
} else {
210
- query += ") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
221
+ query += ") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )"
211
222
}
212
223
return kc .Session .Query (query , values ... ).Exec ()
213
224
}
0 commit comments