diff --git a/nameserver/entry.go b/nameserver/entry.go index d1c8f830..6d6ba08c 100644 --- a/nameserver/entry.go +++ b/nameserver/entry.go @@ -131,6 +131,7 @@ func (es *Entries) merge(incoming Entries) Entries { return newEntries } +// f returning true means keep the entry. func (es *Entries) tombstone(ourname router.PeerName, f func(*Entry) bool) Entries { es.checkAndPanic() defer es.checkAndPanic() diff --git a/nameserver/nameserver.go b/nameserver/nameserver.go index be4c4987..b56b1dfd 100644 --- a/nameserver/nameserver.go +++ b/nameserver/nameserver.go @@ -176,7 +176,7 @@ func (n *Nameserver) deleteTombstones() { defer n.Unlock() now := time.Now().Unix() n.entries.filter(func(e *Entry) bool { - return now-e.Tombstone <= int64(tombstoneTimeout/time.Second) + return e.Tombstone == 0 || now-e.Tombstone <= int64(tombstoneTimeout/time.Second) }) } diff --git a/nameserver/nameserver_test.go b/nameserver/nameserver_test.go index f0a71ba0..d8884959 100644 --- a/nameserver/nameserver_test.go +++ b/nameserver/nameserver_test.go @@ -230,6 +230,9 @@ func TestTombstoneDeletion(t *testing.T) { require.Nil(t, err) require.Equal(t, []address.Address{0}, nameserver.Lookup("hostname")) + nameserver.deleteTombstones() + require.Equal(t, []address.Address{0}, nameserver.Lookup("hostname")) + err = nameserver.Delete("hostname", "containerid", "", address.Address(0)) require.Nil(t, err) require.Equal(t, []address.Address{}, nameserver.Lookup("hostname"))