Write data to file when StatsCompanionSerivice (system_server) crashes

Bug: 73352867
Change-Id: Iecbb1ae3e29264975771155a878b368cfc2f50f0
Test: statsd_test
This commit is contained in:
yro
2018-03-07 17:59:13 -08:00
parent c8a6305ddf
commit 1cf2ac5241
3 changed files with 14 additions and 10 deletions

View File

@@ -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());

View File

@@ -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);

View File

@@ -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.