Skip to content

Commit 5fbd9b1

Browse files
committed
avoid sorting in CertStore.Put
1 parent 9a853e6 commit 5fbd9b1

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

certstore/snapshot.go

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,29 +111,44 @@ func importSnapshotToDatastoreWithTestingPowerTableFrequency(ctx context.Context
111111
return err
112112
}
113113
ptm := certs.PowerTableArrayToMap(header.InitialPowerTable)
114-
for {
114+
for i := header.FirstInstance; ; i += 1 {
115115
certBytes, err := readSnapshotBlockBytes(snapshot)
116116
if err == io.EOF {
117117
break
118118
} else if err != nil {
119119
return fmt.Errorf("failed to decode finality certificate: %w", err)
120120
}
121+
121122
var cert certs.FinalityCertificate
122-
cert.UnmarshalCBOR(bytes.NewReader(certBytes))
123-
if err = cs.Put(ctx, &cert); err != nil {
123+
if err = cert.UnmarshalCBOR(bytes.NewReader(certBytes)); err != nil {
124124
return err
125125
}
126+
127+
if i != cert.GPBFTInstance {
128+
return fmt.Errorf("the certificate of instance %d is missing", i)
129+
}
130+
131+
if i > header.LatestInstance {
132+
return fmt.Errorf("certificate of instance %d is found, expected latest instance %d", i, header.LatestInstance)
133+
}
134+
135+
if err := cs.ds.Put(ctx, cs.keyForCert(cert.GPBFTInstance), certBytes); err != nil {
136+
return err
137+
}
138+
126139
if ptm, err = certs.ApplyPowerTableDiffsToMap(ptm, cert.PowerTableDelta); err != nil {
127140
return err
128141
}
142+
129143
if (cert.GPBFTInstance+1)%cs.powerTableFrequency == 0 {
130144
pt := certs.PowerTableMapToArray(ptm)
131145
if err := cs.putPowerTable(ctx, cert.GPBFTInstance+1, pt); err != nil {
132146
return err
133147
}
134148
}
135149
}
136-
return nil
150+
151+
return cs.writeInstanceNumber(ctx, certStoreLatestKey, header.LatestInstance)
137152
}
138153

139154
type SnapshotHeader struct {

0 commit comments

Comments
 (0)