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

Commit 8b46bc11 authored by Tej Singh's avatar Tej Singh
Browse files

Update Alarms/Subscriptions

This is the same as initializing because alarms have no state to carry
over. We can just replace them all without losing anything.

Test: atest statsd_test
Bug: 162323547
Change-Id: Ia2fb33e9ac79476babce57e2e0fb1ca49091e260
parent d07d0ff0
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -73,6 +73,7 @@ protected:

    FRIEND_TEST(AlarmTrackerTest, TestTriggerTimestamp);
    FRIEND_TEST(AlarmE2eTest, TestMultipleAlarms);
    FRIEND_TEST(ConfigUpdateTest, TestUpdateAlarms);
};

}  // namespace statsd
+6 −3
Original line number Diff line number Diff line
@@ -211,6 +211,7 @@ bool MetricsManager::updateConfig(const StatsdConfig& config, const int64_t time
    unordered_map<int64_t, int> newMetricProducerMap;
    vector<sp<AnomalyTracker>> newAnomalyTrackers;
    unordered_map<int64_t, int> newAlertTrackerMap;
    vector<sp<AlarmTracker>> newPeriodicAlarmTrackers;
    mTagIds.clear();
    mConditionToMetricMap.clear();
    mTrackerToMetricMap.clear();
@@ -226,9 +227,10 @@ bool MetricsManager::updateConfig(const StatsdConfig& config, const int64_t time
            mAllAnomalyTrackers, mAlertTrackerMap, mStateProtoHashes, mTagIds,
            newAtomMatchingTrackers, newAtomMatchingTrackerMap, newConditionTrackers,
            newConditionTrackerMap, newMetricProducers, newMetricProducerMap, newAnomalyTrackers,
            newAlertTrackerMap, mConditionToMetricMap, mTrackerToMetricMap, mTrackerToConditionMap,
            mActivationAtomTrackerToMetricMap, mDeactivationAtomTrackerToMetricMap,
            mMetricIndexesWithActivation, newStateProtoHashes, mNoReportMetricIds);
            newAlertTrackerMap, newPeriodicAlarmTrackers, mConditionToMetricMap,
            mTrackerToMetricMap, mTrackerToConditionMap, mActivationAtomTrackerToMetricMap,
            mDeactivationAtomTrackerToMetricMap, mMetricIndexesWithActivation, newStateProtoHashes,
            mNoReportMetricIds);
    mAllAtomMatchingTrackers = newAtomMatchingTrackers;
    mAtomMatchingTrackerMap = newAtomMatchingTrackerMap;
    mAllConditionTrackers = newConditionTrackers;
@@ -238,6 +240,7 @@ bool MetricsManager::updateConfig(const StatsdConfig& config, const int64_t time
    mStateProtoHashes = newStateProtoHashes;
    mAllAnomalyTrackers = newAnomalyTrackers;
    mAlertTrackerMap = newAlertTrackerMap;
    mAllPeriodicAlarmTrackers = newPeriodicAlarmTrackers;
    return mConfigValid;
}

+7 −0
Original line number Diff line number Diff line
@@ -1017,6 +1017,7 @@ bool updateStatsdConfig(const ConfigKey& key, const StatsdConfig& config, const
                        unordered_map<int64_t, int>& newMetricProducerMap,
                        vector<sp<AnomalyTracker>>& newAnomalyTrackers,
                        unordered_map<int64_t, int>& newAlertTrackerMap,
                        vector<sp<AlarmTracker>>& newPeriodicAlarmTrackers,
                        unordered_map<int, vector<int>>& conditionToMetricMap,
                        unordered_map<int, vector<int>>& trackerToMetricMap,
                        unordered_map<int, vector<int>>& trackerToConditionMap,
@@ -1081,6 +1082,12 @@ bool updateStatsdConfig(const ConfigKey& key, const StatsdConfig& config, const
        return false;
    }

    // Alarms do not have any state, so we can reuse the initialization logic.
    if (!initAlarms(config, key, periodicAlarmMonitor, timeBaseNs, currentTimeNs,
                    newPeriodicAlarmTrackers)) {
        ALOGE("initAlarms failed");
        return false;
    }
    return true;
}

+2 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
#include <vector>

#include "anomaly/AlarmMonitor.h"
#include "anomaly/AlarmTracker.h"
#include "condition/ConditionTracker.h"
#include "external/StatsPullerManager.h"
#include "matchers/AtomMatchingTracker.h"
@@ -253,6 +254,7 @@ bool updateStatsdConfig(const ConfigKey& key, const StatsdConfig& config, const
                        std::unordered_map<int64_t, int>& newMetricProducerMap,
                        std::vector<sp<AnomalyTracker>>& newAlertTrackers,
                        std::unordered_map<int64_t, int>& newAlertTrackerMap,
                        std::vector<sp<AlarmTracker>>& newPeriodicAlarmTrackers,
                        std::unordered_map<int, std::vector<int>>& conditionToMetricMap,
                        std::unordered_map<int, std::vector<int>>& trackerToMetricMap,
                        std::unordered_map<int, std::vector<int>>& trackerToConditionMap,
+3 −18
Original line number Diff line number Diff line
@@ -1143,25 +1143,10 @@ bool initAlarms(const StatsdConfig& config, const ConfigKey& key,
        allAlarmTrackers.push_back(
                new AlarmTracker(startMillis, currentTimeMillis, alarm, key, periodicAlarmMonitor));
    }
    for (int i = 0; i < config.subscription_size(); ++i) {
        const Subscription& subscription = config.subscription(i);
        if (subscription.rule_type() != Subscription::ALARM) {
            continue;
        }
        if (subscription.subscriber_information_case() ==
            Subscription::SubscriberInformationCase::SUBSCRIBER_INFORMATION_NOT_SET) {
            ALOGW("subscription \"%lld\" has no subscriber info.\"", (long long)subscription.id());
    if (!initSubscribersForSubscriptionType(config, Subscription::ALARM, alarmTrackerMap,
                                            allAlarmTrackers)) {
        return false;
    }
        const auto& itr = alarmTrackerMap.find(subscription.rule_id());
        if (itr == alarmTrackerMap.end()) {
            ALOGW("subscription \"%lld\" has unknown rule id: \"%lld\"",
                  (long long)subscription.id(), (long long)subscription.rule_id());
            return false;
        }
        const int trackerIndex = itr->second;
        allAlarmTrackers[trackerIndex]->addSubscription(subscription);
    }
    return true;
}

Loading