From: Amos Jeffries Date: Fri, 6 Nov 2015 07:34:54 +0000 (-0800) Subject: Convert cacheDigestBitUtil to a method X-Git-Tag: SQUID_4_0_3~18^2~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6fbd1d41ba6f1e7b7d21407c66dbbb59ef7e6554;p=thirdparty%2Fsquid.git Convert cacheDigestBitUtil to a method Also, convert from int output to double. Avoiding implicit cast wrap, overflow and signed/unsigned data inaccuracy. --- diff --git a/src/CacheDigest.cc b/src/CacheDigest.cc index 7ea910791b..ed9700e038 100644 --- a/src/CacheDigest.cc +++ b/src/CacheDigest.cc @@ -192,13 +192,12 @@ cacheDigestStats(const CacheDigest * cd, CacheDigestStats * stats) stats->bseq_count = seq_count; } -int -cacheDigestBitUtil(const CacheDigest * cd) +double +CacheDigest::usedMaskPercent() const { CacheDigestStats stats; - assert(cd); - cacheDigestStats(cd, &stats); - return xpercentInt(stats.bit_on_count, stats.bit_count); + cacheDigestStats(this, &stats); + return xpercent(stats.bit_on_count, stats.bit_count); } void diff --git a/src/CacheDigest.h b/src/CacheDigest.h index 2611d7ceac..ee5d383b85 100644 --- a/src/CacheDigest.h +++ b/src/CacheDigest.h @@ -40,6 +40,9 @@ public: /// \returns true if the key belongs to the digest bool test(const cache_key * key) const; + /// percentage of mask bits which are used + double usedMaskPercent() const; + /// calculate the size of mask required to digest up to /// a specified capacity and bitsize. static size_t CalcMaskSize(int cap, int bpe); @@ -54,7 +57,6 @@ public: int del_count; /* number of deletions performed so far */ }; -int cacheDigestBitUtil(const CacheDigest * cd); void cacheDigestGuessStatsUpdate(CacheDigestGuessStats * stats, int real_hit, int guess_hit); void cacheDigestGuessStatsReport(const CacheDigestGuessStats * stats, StoreEntry * sentry, const char *label); void cacheDigestReport(CacheDigest * cd, const char *label, StoreEntry * e); diff --git a/src/peer_digest.cc b/src/peer_digest.cc index 8b235335c8..12db88d9c0 100644 --- a/src/peer_digest.cc +++ b/src/peer_digest.cc @@ -1024,12 +1024,11 @@ static int peerDigestUseful(const PeerDigest * pd) { /* TODO: we should calculate the prob of a false hit instead of bit util */ - const int bit_util = cacheDigestBitUtil(pd->cd); + const auto bit_util = pd->cd->usedMaskPercent(); - if (bit_util > 65) { + if (bit_util > 65.0) { debugs(72, DBG_CRITICAL, "Warning: " << pd->host << - " peer digest has too many bits on (" << bit_util << "%%)."); - + " peer digest has too many bits on (" << bit_util << "%)."); return 0; } diff --git a/src/tests/stub_CacheDigest.cc b/src/tests/stub_CacheDigest.cc index 3a615d149d..60202798d8 100644 --- a/src/tests/stub_CacheDigest.cc +++ b/src/tests/stub_CacheDigest.cc @@ -25,7 +25,7 @@ void CacheDigest::updateCapacity(int) STUB bool CacheDigest::test(const cache_key *) const STUB_RETVAL(false) void CacheDigest::add(const cache_key *) STUB void CacheDigest::remove(const cache_key *) STUB -int cacheDigestBitUtil(const CacheDigest *) STUB_RETVAL(0) +double CacheDigest::usedMaskPercent() const STUB_RETVAL(0.0) void cacheDigestGuessStatsUpdate(CacheDigestGuessStats *, int, int) STUB void cacheDigestGuessStatsReport(const CacheDigestGuessStats *, StoreEntry *, const char *) STUB void cacheDigestReport(CacheDigest *, const char *, StoreEntry *) STUB