From 1cf2ac5241b848ea160b65604bc894d08cba8518 Mon Sep 17 00:00:00 2001 From: yro Date: Wed, 7 Mar 2018 17:59:13 -0800 Subject: [PATCH] Write data to file when StatsCompanionSerivice (system_server) crashes Bug: 73352867 Change-Id: Iecbb1ae3e29264975771155a878b368cfc2f50f0 Test: statsd_test --- cmds/statsd/src/StatsLogProcessor.cpp | 1 - cmds/statsd/src/StatsService.cpp | 19 ++++++++++++------- cmds/statsd/src/StatsService.h | 4 ++-- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/cmds/statsd/src/StatsLogProcessor.cpp b/cmds/statsd/src/StatsLogProcessor.cpp index 3127e9439a062..02d4dc985e84c 100644 --- a/cmds/statsd/src/StatsLogProcessor.cpp +++ b/cmds/statsd/src/StatsLogProcessor.cpp @@ -355,7 +355,6 @@ void StatsLogProcessor::WriteDataToDisk() { const ConfigKey& key = pair.first; vector 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()); diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp index 280081ec5a3d9..c5dfc4488c1b9 100644 --- a/cmds/statsd/src/StatsService.cpp +++ b/cmds/statsd/src/StatsService.cpp @@ -55,18 +55,22 @@ constexpr const char* kPermissionDump = "android.permission.DUMP"; class CompanionDeathRecipient : public IBinder::DeathRecipient { public: CompanionDeathRecipient(const sp& anomalyAlarmMonitor, - const sp& periodicAlarmMonitor) : - mAnomalyAlarmMonitor(anomalyAlarmMonitor), - mPeriodicAlarmMonitor(periodicAlarmMonitor) {} + const sp& periodicAlarmMonitor, + const sp& processor) + : mAnomalyAlarmMonitor(anomalyAlarmMonitor), + mPeriodicAlarmMonitor(periodicAlarmMonitor), + mProcessor(processor) {} virtual void binderDied(const wp& who); private: - sp mAnomalyAlarmMonitor; - sp mPeriodicAlarmMonitor; + sp mAnomalyAlarmMonitor; + sp mPeriodicAlarmMonitor; + sp mProcessor; }; void CompanionDeathRecipient::binderDied(const wp& 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); diff --git a/cmds/statsd/src/StatsService.h b/cmds/statsd/src/StatsService.h index e0a1299a9c384..1daec36847843 100644 --- a/cmds/statsd/src/StatsService.h +++ b/cmds/statsd/src/StatsService.h @@ -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.