@@ -228,19 +228,23 @@ func NewSize(logger log.Logger, reg prometheus.Registerer, dir string, segmentSi
228
228
}
229
229
// Fresh dir, no segments yet.
230
230
if j == - 1 {
231
- if w .segment , err = CreateSegment (w .dir , 0 ); err != nil {
231
+ segment , err := CreateSegment (w .dir , 0 )
232
+ if err != nil {
232
233
return nil , err
233
234
}
234
- } else {
235
- if w . segment , err = OpenWriteSegment ( logger , w . dir , j ); err != nil {
235
+
236
+ if err := w . setSegment ( segment ); err != nil {
236
237
return nil , err
237
238
}
238
- // Correctly initialize donePages.
239
- stat , err := w . segment . Stat ( )
239
+ } else {
240
+ segment , err := OpenWriteSegment ( logger , w . dir , j )
240
241
if err != nil {
241
242
return nil , err
242
243
}
243
- w .donePages = int (stat .Size () / pageSize )
244
+
245
+ if err := w .setSegment (segment ); err != nil {
246
+ return nil , err
247
+ }
244
248
}
245
249
go w .run ()
246
250
@@ -331,7 +335,9 @@ func (w *WAL) Repair(origErr error) error {
331
335
if err != nil {
332
336
return err
333
337
}
334
- w .segment = s
338
+ if err := w .setSegment (s ); err != nil {
339
+ return err
340
+ }
335
341
336
342
f , err := os .Open (tmpfn )
337
343
if err != nil {
@@ -382,8 +388,9 @@ func (w *WAL) nextSegment() error {
382
388
return errors .Wrap (err , "create new segment file" )
383
389
}
384
390
prev := w .segment
385
- w .segment = next
386
- w .donePages = 0
391
+ if err := w .setSegment (next ); err != nil {
392
+ return err
393
+ }
387
394
388
395
// Don't block further writes by fsyncing the last segment.
389
396
w .actorc <- func () {
@@ -397,6 +404,19 @@ func (w *WAL) nextSegment() error {
397
404
return nil
398
405
}
399
406
407
+ func (w * WAL ) setSegment (segment * Segment ) error {
408
+ w .segment = segment
409
+
410
+ // Correctly initialize donePages.
411
+ stat , err := segment .Stat ()
412
+ if err != nil {
413
+ return err
414
+ }
415
+ w .donePages = int (stat .Size () / pageSize )
416
+
417
+ return nil
418
+ }
419
+
400
420
// flushPage writes the new contents of the page to disk. If no more records will fit into
401
421
// the page, the remaining bytes will be set to zero and a new page will be started.
402
422
// If clear is true, this is enforced regardless of how many bytes are left in the page.
0 commit comments