Write data to file when StatsCompanionSerivice (system_server) crashes
Bug: 73352867 Change-Id: Iecbb1ae3e29264975771155a878b368cfc2f50f0 Test: statsd_test
This commit is contained in:
@@ -355,7 +355,6 @@ void StatsLogProcessor::WriteDataToDisk() {
|
||||
const ConfigKey& key = pair.first;
|
||||
vector<uint8_t> data;
|
||||
onDumpReportLocked(key, getElapsedRealtimeNs(), &data);
|
||||
// TODO: Add a guardrail to prevent accumulation of file on disk.
|
||||
string file_name = StringPrintf("%s/%ld_%d_%lld", STATS_DATA_DIR,
|
||||
(long)getWallClockSec(), key.GetUid(), (long long)key.GetId());
|
||||
StorageManager::writeFile(file_name.c_str(), &data[0], data.size());
|
||||
|
||||
@@ -55,18 +55,22 @@ constexpr const char* kPermissionDump = "android.permission.DUMP";
|
||||
class CompanionDeathRecipient : public IBinder::DeathRecipient {
|
||||
public:
|
||||
CompanionDeathRecipient(const sp<AlarmMonitor>& anomalyAlarmMonitor,
|
||||
const sp<AlarmMonitor>& periodicAlarmMonitor) :
|
||||
mAnomalyAlarmMonitor(anomalyAlarmMonitor),
|
||||
mPeriodicAlarmMonitor(periodicAlarmMonitor) {}
|
||||
const sp<AlarmMonitor>& periodicAlarmMonitor,
|
||||
const sp<StatsLogProcessor>& processor)
|
||||
: mAnomalyAlarmMonitor(anomalyAlarmMonitor),
|
||||
mPeriodicAlarmMonitor(periodicAlarmMonitor),
|
||||
mProcessor(processor) {}
|
||||
virtual void binderDied(const wp<IBinder>& who);
|
||||
|
||||
private:
|
||||
sp<AlarmMonitor> mAnomalyAlarmMonitor;
|
||||
sp<AlarmMonitor> mPeriodicAlarmMonitor;
|
||||
sp<AlarmMonitor> mAnomalyAlarmMonitor;
|
||||
sp<AlarmMonitor> mPeriodicAlarmMonitor;
|
||||
sp<StatsLogProcessor> mProcessor;
|
||||
};
|
||||
|
||||
void CompanionDeathRecipient::binderDied(const wp<IBinder>& who) {
|
||||
ALOGW("statscompanion service died");
|
||||
mProcessor->WriteDataToDisk();
|
||||
mAnomalyAlarmMonitor->setStatsCompanionService(nullptr);
|
||||
mPeriodicAlarmMonitor->setStatsCompanionService(nullptr);
|
||||
SubscriberReporter::getInstance().setStatsCompanionService(nullptr);
|
||||
@@ -817,8 +821,9 @@ Status StatsService::statsCompanionReady() {
|
||||
"statscompanion unavailable despite it contacting statsd!");
|
||||
}
|
||||
VLOG("StatsService::statsCompanionReady linking to statsCompanion.");
|
||||
IInterface::asBinder(statsCompanion)->linkToDeath(
|
||||
new CompanionDeathRecipient(mAnomalyAlarmMonitor, mPeriodicAlarmMonitor));
|
||||
IInterface::asBinder(statsCompanion)
|
||||
->linkToDeath(new CompanionDeathRecipient(
|
||||
mAnomalyAlarmMonitor, mPeriodicAlarmMonitor, mProcessor));
|
||||
mAnomalyAlarmMonitor->setStatsCompanionService(statsCompanion);
|
||||
mPeriodicAlarmMonitor->setStatsCompanionService(statsCompanion);
|
||||
SubscriberReporter::getInstance().setStatsCompanionService(statsCompanion);
|
||||
|
||||
@@ -215,10 +215,10 @@ private:
|
||||
*/
|
||||
status_t cmd_dump_memory_info(FILE* out);
|
||||
|
||||
/*
|
||||
/*
|
||||
* Clear all puller cached data
|
||||
*/
|
||||
status_t cmd_clear_puller_cache(FILE* out);
|
||||
status_t cmd_clear_puller_cache(FILE* out);
|
||||
|
||||
/**
|
||||
* Update a configuration.
|
||||
|
||||
Reference in New Issue
Block a user