@@ -283,6 +283,57 @@ func TestFreezerReadonlyValidate(t *testing.T) {
283
283
}
284
284
}
285
285
286
+ func TestFreezerConcurrentReadonly (t * testing.T ) {
287
+ t .Parallel ()
288
+
289
+ tables := map [string ]bool {"a" : true }
290
+ dir := t .TempDir ()
291
+
292
+ f , err := NewFreezer (dir , "" , false , 2049 , tables )
293
+ if err != nil {
294
+ t .Fatal ("can't open freezer" , err )
295
+ }
296
+ var item = make ([]byte , 1024 )
297
+ batch := f .tables ["a" ].newBatch ()
298
+ items := uint64 (10 )
299
+ for i := uint64 (0 ); i < items ; i ++ {
300
+ require .NoError (t , batch .AppendRaw (i , item ))
301
+ }
302
+ require .NoError (t , batch .commit ())
303
+ if loaded := f .tables ["a" ].items .Load (); loaded != items {
304
+ t .Fatalf ("unexpected number of items in table, want: %d, have: %d" , items , loaded )
305
+ }
306
+ require .NoError (t , f .Close ())
307
+
308
+ var (
309
+ wg sync.WaitGroup
310
+ fs = make ([]* Freezer , 5 )
311
+ errs = make ([]error , 5 )
312
+ )
313
+ for i := 0 ; i < 5 ; i ++ {
314
+ wg .Add (1 )
315
+ go func (i int ) {
316
+ defer wg .Done ()
317
+
318
+ f , err := NewFreezer (dir , "" , true , 2049 , tables )
319
+ if err == nil {
320
+ fs [i ] = f
321
+ } else {
322
+ errs [i ] = err
323
+ }
324
+ }(i )
325
+ }
326
+
327
+ wg .Wait ()
328
+
329
+ for i := range fs {
330
+ if err := errs [i ]; err != nil {
331
+ t .Fatal ("failed to open freezer" , err )
332
+ }
333
+ require .NoError (t , fs [i ].Close ())
334
+ }
335
+ }
336
+
286
337
func newFreezerForTesting (t * testing.T , tables map [string ]bool ) (* Freezer , string ) {
287
338
t .Helper ()
288
339
0 commit comments