diff --git a/storage/store/database/database.go b/storage/store/database/database.go index 9b5e467e..8e67227f 100644 --- a/storage/store/database/database.go +++ b/storage/store/database/database.go @@ -20,9 +20,9 @@ import ( const ( arraySeparator = "|~|" - uptimeCleanUpThreshold = 10 * 24 * time.Hour // Maximum uptime age before triggering a clean up - eventsCleanUpThreshold = core.MaximumNumberOfEvents * 2 // Maximum number of events before triggering a clean up - resultsCleanUpThreshold = core.MaximumNumberOfResults * 2 // Maximum number of results before triggering a clean up + uptimeCleanUpThreshold = 10 * 24 * time.Hour // Maximum uptime age before triggering a clean up + eventsCleanUpThreshold = core.MaximumNumberOfEvents + 10 // Maximum number of events before triggering a clean up + resultsCleanUpThreshold = core.MaximumNumberOfResults + 10 // Maximum number of results before triggering a clean up uptimeRetention = 7 * 24 * time.Hour ) @@ -258,7 +258,7 @@ func (s *Store) Insert(service *core.Service, result *core.Result) { // Clean up old events if there's more than twice the maximum number of events // This lets us both keep the table clean without impacting performance too much // (since we're only deleting MaximumNumberOfEvents at a time instead of 1) - if numberOfEvents > resultsCleanUpThreshold { + if numberOfEvents > eventsCleanUpThreshold { if err = s.deleteOldServiceEvents(tx, serviceID); err != nil { log.Printf("[database][Insert] Failed to delete old events for group=%s; service=%s: %s", service.Group, service.Name, err.Error()) } @@ -275,7 +275,7 @@ func (s *Store) Insert(service *core.Service, result *core.Result) { if err != nil { log.Printf("[database][Insert] Failed to retrieve total number of results for group=%s; service=%s: %s", service.Group, service.Name, err.Error()) } else { - if numberOfResults > eventsCleanUpThreshold { + if numberOfResults > resultsCleanUpThreshold { if err = s.deleteOldServiceResults(tx, serviceID); err != nil { log.Printf("[database][Insert] Failed to delete old results for group=%s; service=%s: %s", service.Group, service.Name, err.Error()) } diff --git a/storage/store/database/database_test.go b/storage/store/database/database_test.go index 2c230ea6..89c2163f 100644 --- a/storage/store/database/database_test.go +++ b/storage/store/database/database_test.go @@ -296,3 +296,19 @@ func TestStore_InsertCleansUpOldUptimeEntriesProperly(t *testing.T) { t.Errorf("oldest service uptime entry should've been ~8 hours old, was %s", oldest) } } + +func TestStore_InsertCleansUpProperly(t *testing.T) { + store, _ := NewStore("sqlite", t.TempDir()+"/TestStore_deleteOldServiceResults.db") + defer store.db.Close() + for i := 0; i < resultsCleanUpThreshold+eventsCleanUpThreshold; i++ { + store.Insert(&testService, &testSuccessfulResult) + store.Insert(&testService, &testUnsuccessfulResult) + ss := store.GetServiceStatusByKey(testService.Key(), paging.NewServiceStatusParams().WithResults(1, core.MaximumNumberOfResults*5).WithEvents(1, core.MaximumNumberOfEvents*5)) + if len(ss.Results) > resultsCleanUpThreshold+1 { + t.Errorf("number of results shouldn't have exceeded %d, reached %d", resultsCleanUpThreshold, len(ss.Results)) + } + if len(ss.Events) > eventsCleanUpThreshold+1 { + t.Errorf("number of events shouldn't have exceeded %d, reached %d", eventsCleanUpThreshold, len(ss.Events)) + } + } +}