diff --git a/datatype/labelmap/mutate.go b/datatype/labelmap/mutate.go index 12a1ba09..0a21ca9c 100644 --- a/datatype/labelmap/mutate.go +++ b/datatype/labelmap/mutate.go @@ -105,6 +105,10 @@ func (d *Data) MergeLabels(v dvid.VersionID, op labels.MergeOp, info dvid.ModInf return } delta.MergedVoxels = mergeIdx.NumVoxels() + if delta.MergedVoxels == 0 { + err = fmt.Errorf("can't merge labels with no voxels: %s", op.Merged) + return + } jsonBytes, _ := json.Marshal(msginfo) if err := d.PublishKafkaMsg(jsonBytes); err != nil { diff --git a/datatype/labelmap/mutate_test.go b/datatype/labelmap/mutate_test.go index 41c03881..36b2c6f4 100644 --- a/datatype/labelmap/mutate_test.go +++ b/datatype/labelmap/mutate_test.go @@ -945,6 +945,11 @@ func TestMergeLabels(t *testing.T) { if err := retrieved.equals(expected); err != nil { t.Errorf("Merged label volume: %v\n", err) } + + // Make sure we can't merge the previously merged body again. + if err := testMerge.sendErr(t, uuid, "labels"); err == nil { + t.Fatalf("Expected error on re-merge of bodies, got none\n") + } } func TestSplitLabel(t *testing.T) {