From 127c891526020baf3efff638ce50ea72f27080b7 Mon Sep 17 00:00:00 2001 From: Jakob Borg Date: Wed, 16 May 2018 09:26:20 +0200 Subject: [PATCH] cmd/stdiscosrv: Delete records for abandoned devices (#4957) Once a device has been missing for a long time, and noone has asked about it for a long time, delete the record. --- cmd/stdiscosrv/database.go | 12 ++++++++++++ cmd/stdiscosrv/stats.go | 1 + 2 files changed, 13 insertions(+) diff --git a/cmd/stdiscosrv/database.go b/cmd/stdiscosrv/database.go index 9b7eec4fa..33234ea45 100644 --- a/cmd/stdiscosrv/database.go +++ b/cmd/stdiscosrv/database.go @@ -195,6 +195,7 @@ func (s *levelDBStore) statisticsServe(trigger <-chan struct{}, done chan<- stru nowNanos := t0.UnixNano() cutoff24h := t0.Add(-24 * time.Hour).UnixNano() cutoff1w := t0.Add(-7 * 24 * time.Hour).UnixNano() + cutoff2Mon := t0.Add(-60 * 24 * time.Hour).UnixNano() current, last24h, last1w, inactive, errors := 0, 0, 0, 0, 0 iter := s.db.NewIterator(&util.Range{}, nil) @@ -217,6 +218,17 @@ func (s *levelDBStore) statisticsServe(trigger <-chan struct{}, done chan<- stru last24h++ case rec.Seen > cutoff1w: last1w++ + case rec.Seen > cutoff2Mon: + inactive++ + case rec.Missed < cutoff2Mon: + // It hasn't been seen lately and we haven't recorded + // someone asking for this device in a long time either; + // delete the record. + if err := s.db.Delete(iter.Key(), nil); err != nil { + databaseOperations.WithLabelValues(dbOpDelete, dbResError).Inc() + } else { + databaseOperations.WithLabelValues(dbOpDelete, dbResSuccess).Inc() + } default: inactive++ } diff --git a/cmd/stdiscosrv/stats.go b/cmd/stdiscosrv/stats.go index 6367f47c2..ba2e12948 100644 --- a/cmd/stdiscosrv/stats.go +++ b/cmd/stdiscosrv/stats.go @@ -95,6 +95,7 @@ const ( dbOpGet = "get" dbOpPut = "put" dbOpMerge = "merge" + dbOpDelete = "delete" dbResSuccess = "success" dbResNotFound = "not_found" dbResError = "error"