Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 97db3ffa authored by Tej Singh's avatar Tej Singh
Browse files

Fix Statsd rejecting configs

Statsd is rejecting configs for two reasons as a result of the new
puller API:

1. It expected all of the required pullers to be in the puller map when
the config was sent. This is no longer required to be true since the map
is updated as pullers are registered. Most significantly, no pullers
will be present on boot when we parse the config.

2. In metrics_manager_util, we would create a StatsPullerManager on the
local stack and check that for the puller existing, rather than the sp<>
that was passed in. Since we changed the big puller map to be non-static
in ag/10174227, checking the map from the local pullerManager is
guaranteed to fail, since none of the pullers are added to that puller
manager.

This Cl fixes both issues.

Bug: 148405638
Test: added the config used in b/148405638. Made sure it was valid when
pushed on boot, and at some point after boot after the pullers
registered.

Change-Id: If083bda03b5db2822347d518bba23573b573bf89
parent 55c70caa
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -119,9 +119,9 @@ bool StatsPullerManager::PullLocked(int tagId, vector<shared_ptr<LogEvent>>* dat
}

bool StatsPullerManager::PullerForMatcherExists(int tagId) const {
    // Vendor pulled atoms might be registered after we parse the config.
    return isVendorPulledAtom(tagId) ||
           kAllPullAtomInfo.find({.atomTag = tagId}) != kAllPullAtomInfo.end();
    // Pulled atoms might be registered after we parse the config, so just make sure the id is in
    // an appropriate range.
    return isVendorPulledAtom(tagId) || isPulledAtom(tagId);
}

void StatsPullerManager::updateAlarmLocked() {
+6 −0
Original line number Diff line number Diff line
@@ -164,6 +164,12 @@ public:
    // Maximum number of pushed atoms statsd stats will track above kMaxPushedAtomId.
    static const int kMaxNonPlatformPushedAtoms = 100;

    // Atom id that is the start of the pulled atoms.
    static const int kPullAtomStartTag = 10000;

    // Atom id that is the start of vendor atoms.
    static const int kVendorAtomStartTag = 100000;

    // Vendor pulled atom start id.
    static const int32_t kVendorPulledAtomStartTag = 150000;

+2 −3
Original line number Diff line number Diff line
@@ -426,7 +426,6 @@ bool initMetrics(const ConfigKey& key, const StatsdConfig& config, const int64_t
                                config.event_metric_size() + config.gauge_metric_size() +
                                config.value_metric_size();
    allMetricProducers.reserve(allMetricsCount);
    StatsPullerManager statsPullerManager;

    // Construct map from metric id to metric activation index. The map will be used to determine
    // the metric activation corresponding to a metric.
@@ -661,7 +660,7 @@ bool initMetrics(const ConfigKey& key, const StatsdConfig& config, const int64_t
            return false;
        }
        int atomTagId = *(atomMatcher->getAtomIds().begin());
        int pullTagId = statsPullerManager.PullerForMatcherExists(atomTagId) ? atomTagId : -1;
        int pullTagId = pullerManager->PullerForMatcherExists(atomTagId) ? atomTagId : -1;

        int conditionIndex = -1;
        if (metric.has_condition()) {
@@ -753,7 +752,7 @@ bool initMetrics(const ConfigKey& key, const StatsdConfig& config, const int64_t
            return false;
        }
        int atomTagId = *(atomMatcher->getAtomIds().begin());
        int pullTagId = statsPullerManager.PullerForMatcherExists(atomTagId) ? atomTagId : -1;
        int pullTagId = pullerManager->PullerForMatcherExists(atomTagId) ? atomTagId : -1;

        int triggerTrackerIndex;
        int triggerAtomId = -1;
+4 −0
Original line number Diff line number Diff line
@@ -99,6 +99,10 @@ inline bool isVendorPulledAtom(int atomId) {
    return atomId >= StatsdStats::kVendorPulledAtomStartTag && atomId < StatsdStats::kMaxAtomTag;
}

inline bool isPulledAtom(int atomId) {
    return atomId >= StatsdStats::kPullAtomStartTag && atomId < StatsdStats::kVendorAtomStartTag;
}

}  // namespace statsd
}  // namespace os
}  // namespace android