diff --git a/index/scorch/scorch.go b/index/scorch/scorch.go index 3f3d8bffc..2641b3b19 100644 --- a/index/scorch/scorch.go +++ b/index/scorch/scorch.go @@ -312,7 +312,7 @@ func (s *Scorch) Batch(batch *index.Batch) (err error) { // FIXME could sort ids list concurrent with analysis? - if len(batch.IndexOps) > 0 { + if numUpdates > 0 { go func() { for _, doc := range batch.IndexOps { if doc != nil { diff --git a/index/upsidedown/upsidedown.go b/index/upsidedown/upsidedown.go index e4bc3d8f0..7992ac1d9 100644 --- a/index/upsidedown/upsidedown.go +++ b/index/upsidedown/upsidedown.go @@ -810,7 +810,7 @@ func (udc *UpsideDownCouch) Batch(batch *index.Batch) (err error) { } } - if len(batch.IndexOps) > 0 { + if numUpdates > 0 { go func() { for _, doc := range batch.IndexOps { if doc != nil { diff --git a/index_test.go b/index_test.go index d1351dc29..65ddedaa8 100644 --- a/index_test.go +++ b/index_test.go @@ -2184,3 +2184,35 @@ func TestDataRaceBug1092(t *testing.T) { batch.Reset() } } + +func TestBatchRaceBug1149(t *testing.T) { + defer func() { + err := os.RemoveAll("testidx") + if err != nil { + t.Fatal(err) + } + }() + i, err := New("testidx", NewIndexMapping()) + //i, err := NewUsing("testidx", NewIndexMapping(), "scorch", "scorch", nil) + if err != nil { + t.Fatal(err) + } + defer func() { + err := i.Close() + if err != nil { + t.Fatal(err) + } + }() + b := i.NewBatch() + b.Delete("1") + err = i.Batch(b) + if err != nil { + t.Fatal(err) + } + b.Reset() + err = i.Batch(b) + if err != nil { + t.Fatal(err) + } + b.Reset() +}