Skip to content

Commit af0db51

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

File tree

1 file changed

+22
-7
lines changed

1 file changed

+22
-7
lines changed

certstore/snapshot.go

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -104,36 +104,51 @@ func importSnapshotToDatastoreWithTestingPowerTableFrequency(ctx context.Context
104104
dsb := autobatch.NewAutoBatching(ds, 1000)
105105
defer dsb.Flush(ctx)
106106
cs, err := OpenOrCreateStore(ctx, dsb, header.FirstInstance, header.InitialPowerTable)
107-
if testingPowerTableFrequency > 0 {
108-
cs.powerTableFrequency = testingPowerTableFrequency
109-
}
110107
if err != nil {
111108
return err
112109
}
110+
if testingPowerTableFrequency > 0 {
111+
cs.powerTableFrequency = testingPowerTableFrequency
112+
}
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)