From 970b6cf6987cfadd108ae0db2cfa6747e345b9c1 Mon Sep 17 00:00:00 2001 From: Eugene Burkov Date: Mon, 22 Aug 2022 14:21:41 +0300 Subject: [PATCH] Pull request: 4850 stats: imp logging Merge in DNS/adguard-home from 4850-imp-stats-logging to master Updates #4850. Squashed commit of the following: commit 3c1ee8dd794fab2b604a0e710a513f75273ed417 Author: Eugene Burkov Date: Mon Aug 22 14:17:56 2022 +0300 all: imp chlog commit 0c7adc72740114eb7ae0105199ccbdbfabf8f9fe Author: Eugene Burkov Date: Mon Aug 22 14:12:01 2022 +0300 stats: fix err check commit d14a5cabecba75e9f0d401e61994d0efd2b324ff Author: Eugene Burkov Date: Mon Aug 22 14:09:15 2022 +0300 stats: imp logging again commit 34fc6663484924466171f46dc320382cf02f360b Author: Eugene Burkov Date: Mon Aug 22 12:49:43 2022 +0300 stats: imp code, logging commit 09aa857a5e449e62c8c870b7eb5c5ce744d78ae7 Merge: 09a732af eccfbf6a Author: Eugene Burkov Date: Fri Aug 19 19:43:45 2022 +0300 Merge branch 'master' into 4850-imp-stats-logging commit 09a732afdc9b6dad4439be83aab7df72c5d68dac Author: Eugene Burkov Date: Fri Aug 19 19:38:51 2022 +0300 stats: imp logging --- CHANGELOG.md | 5 +++++ internal/stats/stats.go | 30 +++++++++++++++++------------- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56360e30..65cc777c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,7 +28,12 @@ and this project adheres to future release. - Go 1.18 support. v0.109.0 will require at least Go 1.19 to build. +### Fixed + +- Unnecessary logging of non-critical statistics errors ([#4850]). + [#2993]: https://github.com/AdguardTeam/AdGuardHome/issues/2993 +[#4850]: https://github.com/AdguardTeam/AdGuardHome/issues/4850 diff --git a/internal/stats/stats.go b/internal/stats/stats.go index e483dbba..aea6d92d 100644 --- a/internal/stats/stats.go +++ b/internal/stats/stats.go @@ -385,35 +385,39 @@ func (s *StatsCtx) flush() (cont bool, sleepFor time.Duration) { return true, 0 } + isCommitable := true tx, err := db.Begin(true) if err != nil { log.Error("stats: opening transaction: %s", err) return true, 0 } + defer func() { + if err = finishTxn(tx, isCommitable); err != nil { + log.Error("stats: %s", err) + } + }() s.curr = newUnit(id) - isCommitable := true - ferr := ptr.serialize().flushUnitToDB(tx, ptr.id) - if ferr != nil { - log.Error("stats: flushing unit: %s", ferr) + flushErr := ptr.serialize().flushUnitToDB(tx, ptr.id) + if flushErr != nil { + log.Error("stats: flushing unit: %s", flushErr) isCommitable = false } - derr := tx.DeleteBucket(idToUnitName(id - limit)) - if derr != nil { - log.Error("stats: deleting unit: %s", derr) - if !errors.Is(derr, bbolt.ErrBucketNotFound) { + delErr := tx.DeleteBucket(idToUnitName(id - limit)) + if delErr != nil { + // TODO(e.burkov): Improve the algorithm of deleting the oldest bucket + // to avoid the error. + if errors.Is(delErr, bbolt.ErrBucketNotFound) { + log.Debug("stats: warning: deleting unit: %s", delErr) + } else { isCommitable = false + log.Error("stats: deleting unit: %s", delErr) } } - err = finishTxn(tx, isCommitable) - if err != nil { - log.Error("stats: %s", err) - } - return true, 0 }