Merge "Fix statsd crash due to bad bucket index" into pi-dev

This commit is contained in:
TreeHugger Robot
2018-03-09 03:23:17 +00:00
committed by Android (Google) Code Review
2 changed files with 9 additions and 5 deletions

View File

@@ -59,6 +59,12 @@ void AnomalyTracker::resetStorage() {
}
size_t AnomalyTracker::index(int64_t bucketNum) const {
if (bucketNum < 0) {
// To support this use-case, we can easily modify index to wrap around. But currently
// AnomalyTracker should never need this, so if it happens, it's a bug we should log.
// TODO: Audit this.
ALOGE("index() was passed a negative bucket number (%lld)!", (long long)bucketNum);
}
return bucketNum % mNumOfPastBuckets;
}
@@ -72,9 +78,7 @@ void AnomalyTracker::flushPastBuckets(const int64_t& latestPastBucketNum) {
// The past packets are ancient. Empty out old mPastBuckets[i] values and reset
// mSumOverPastBuckets.
if (latestPastBucketNum - mMostRecentBucketNum >= mNumOfPastBuckets) {
mPastBuckets.clear();
mPastBuckets.resize(mNumOfPastBuckets);
mSumOverPastBuckets.clear();
resetStorage();
} else {
for (int64_t i = std::max(0LL, (long long)(mMostRecentBucketNum - mNumOfPastBuckets + 1));
i <= latestPastBucketNum - mNumOfPastBuckets; i++) {
@@ -150,7 +154,7 @@ void AnomalyTracker::addBucketToSum(const shared_ptr<DimToValMap>& bucket) {
int64_t AnomalyTracker::getPastBucketValue(const MetricDimensionKey& key,
const int64_t& bucketNum) const {
if (mNumOfPastBuckets == 0) {
if (mNumOfPastBuckets == 0 || bucketNum < 0) {
return 0;
}

View File

@@ -110,7 +110,7 @@ protected:
// Number of past buckets. One less than the total number of buckets needed
// for the anomaly detection (since the current bucket is not in the past).
int mNumOfPastBuckets;
const int mNumOfPastBuckets;
// The existing bucket list.
std::vector<shared_ptr<DimToValMap>> mPastBuckets;