From 38a79b7f593255ab15588baafe4c705d2bd9c7aa Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Mon, 21 Mar 2016 15:37:46 +0000 Subject: [PATCH] Pick entry with newer tombstone to merge --- nameserver/entry.go | 3 +++ nameserver/entry_test.go | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/nameserver/entry.go b/nameserver/entry.go index 89a48ca7..9781e178 100644 --- a/nameserver/entry.go +++ b/nameserver/entry.go @@ -93,6 +93,9 @@ func (e1 *Entry) merge(e2 *Entry) bool { e1.Version = e2.Version e1.Tombstone = e2.Tombstone return true + } else if e2.Version == e1.Version && e2.Tombstone > e1.Tombstone { + e1.Tombstone = e2.Tombstone + return true } return false } diff --git a/nameserver/entry_test.go b/nameserver/entry_test.go index 57dfde02..582dab4b 100644 --- a/nameserver/entry_test.go +++ b/nameserver/entry_test.go @@ -86,6 +86,21 @@ func TestTombstone(t *testing.T) { Entry{Hostname: "B", Version: 1, Tombstone: 1234}, }) require.Equal(t, expected, es) + + // Now try a merge including two entries which differ only in tombstone + e2 := make(Entries, len(es)) + copy(e2, es) + e2[1].Tombstone = 5555 + + diff := es.merge(e2) + + expected2 := l(Entries{ + Entry{Hostname: "A"}, + Entry{Hostname: "B", Version: 1, Tombstone: 5555}, + }) + require.Equal(t, expected2, es) + expectedDiff := l(Entries{Entry{Hostname: "B", Version: 1, Tombstone: 5555}}) + require.Equal(t, expectedDiff, diff) } func TestDelete(t *testing.T) {