@@ -15,9 +15,8 @@ import (
15
15
var ErrResetInProgress = errors .New ("reset already in progress" )
16
16
17
17
const (
18
- opStart opType = iota + lastOp + 1
18
+ opStart opType = iota
19
19
opCleanup
20
- opAltPut
21
20
)
22
21
23
22
type resetOp struct {
@@ -57,8 +56,7 @@ type ResettableKeyStore struct {
57
56
58
57
altDs ds.Batching
59
58
resetInProgress bool
60
- resetSync chan []mh.Multihash // passes keys from worker to reset go routine
61
- resetOps chan resetOp // reset operations that must be run in main go routine
59
+ resetOps chan resetOp // reset operations that must be run in main go routine
62
60
}
63
61
64
62
var _ KeyStore = (* ResettableKeyStore )(nil )
@@ -85,9 +83,8 @@ func NewResettableKeyStore(d ds.Batching, opts ...KeyStoreOption) (*ResettableKe
85
83
close : make (chan struct {}),
86
84
done : make (chan struct {}),
87
85
},
88
- altDs : namespace .Wrap (d , ds .NewKey (cfg .base + "/1" )),
89
- resetOps : make (chan resetOp ),
90
- resetSync : make (chan []mh.Multihash , 128 ), // buffered to avoid blocking
86
+ altDs : namespace .Wrap (d , ds .NewKey (cfg .base + "/1" )),
87
+ resetOps : make (chan resetOp ),
91
88
}
92
89
93
90
// start worker goroutine
@@ -129,11 +126,6 @@ func (s *ResettableKeyStore) worker() {
129
126
case opSize :
130
127
size , err := s .size (op .ctx )
131
128
op .response <- operationResponse {size : size , err : err }
132
-
133
- case opAltPut :
134
- err := s .altPut (op .ctx , op .keys )
135
- op .response <- operationResponse {err : err }
136
-
137
129
}
138
130
case op := <- s .resetOps :
139
131
s .handleResetOp (op )
@@ -147,7 +139,7 @@ func (s *ResettableKeyStore) put(ctx context.Context, keys []mh.Multihash) ([]mh
147
139
if s .resetInProgress {
148
140
// Reset is in progress, write to alternate datastore in addition to
149
141
// current datastore
150
- s .resetSync <- keys
142
+ s .altPut ( ctx , keys )
151
143
}
152
144
return s .keyStore .put (ctx , keys )
153
145
}
@@ -190,15 +182,6 @@ func (s *ResettableKeyStore) handleResetOp(op resetOp) {
190
182
s .ds = s .altDs
191
183
s .altDs = oldDs
192
184
}
193
- // Drain resetSync
194
- drain:
195
- for {
196
- select {
197
- case <- s .resetSync :
198
- default :
199
- break drain
200
- }
201
- }
202
185
// Empty the unused datastore.
203
186
s .resetInProgress = false
204
187
op .response <- empty (context .Background (), s .altDs , s .batchSize )
@@ -254,31 +237,8 @@ func (s *ResettableKeyStore) ResetCids(ctx context.Context, keysChan <-chan cid.
254
237
}
255
238
}()
256
239
257
- rsp := make (chan operationResponse )
258
- batchPut := func (ctx context.Context , keys []mh.Multihash ) error {
259
- select {
260
- case <- s .done :
261
- return ErrKeyStoreClosed
262
- case <- ctx .Done ():
263
- return ctx .Err ()
264
- case s .requests <- operation {op : opAltPut , ctx : ctx , keys : keys , response : rsp }:
265
- return (<- rsp ).err
266
- }
267
- }
268
-
269
240
keys := make ([]mh.Multihash , 0 )
270
241
271
- processNewKeys := func (newKeys ... mh.Multihash ) error {
272
- keys = append (keys , newKeys ... )
273
- if len (keys ) >= s .batchSize {
274
- if err := batchPut (ctx , keys ); err != nil {
275
- return err
276
- }
277
- keys = keys [:0 ]
278
- }
279
- return nil
280
- }
281
-
282
242
// Read all the keys from the channel and write them to the altDs
283
243
loop:
284
244
for {
@@ -287,21 +247,21 @@ loop:
287
247
return ctx .Err ()
288
248
case <- s .done :
289
249
return ErrKeyStoreClosed
290
- case mhs := <- s .resetSync :
291
- if err := processNewKeys (mhs ... ); err != nil {
292
- return err
293
- }
294
250
case c , ok := <- keysChan :
295
251
if ! ok {
296
252
break loop
297
253
}
298
- if err := processNewKeys (c .Hash ()); err != nil {
299
- return err
254
+ keys = append (keys , c .Hash ())
255
+ if len (keys ) >= s .batchSize {
256
+ if err := s .altPut (ctx , keys ); err != nil {
257
+ return err
258
+ }
259
+ keys = keys [:0 ]
300
260
}
301
261
}
302
262
}
303
263
// Put final batch
304
- if err := batchPut (ctx , keys ); err != nil {
264
+ if err := s . altPut (ctx , keys ); err != nil {
305
265
return err
306
266
}
307
267
success = true
0 commit comments