2 updates to storing configs on disk

1. When an existing config is updated, remove the outdated config from
disk to stop accumulating configs.
2. Check disk to remove configs to make sure we delete lingering files
that does not live on memory.

Test: statsd, statsd_test, manual
Change-Id: Iedce4b6eb99a3d36bb5e1d1ccc0d88c84859e8f5
This commit is contained in:
yro
2017-11-19 14:33:56 -08:00
parent b3bd84d71d
commit 9c98c05b6f

View File

@@ -80,15 +80,15 @@ void ConfigManager::RemoveConfig(const ConfigKey& key) {
// Remove from map
mConfigs.erase(it);
// Remove from disk
remove_saved_configs(key);
// Tell everyone
for (auto& listener : mListeners) {
listener->OnConfigRemoved(key);
}
}
// If we didn't find it, just quietly ignore it.
// Remove from disk. There can still be a lingering file on disk so we check
// whether or not the config was on memory.
remove_saved_configs(key);
}
void ConfigManager::remove_saved_configs(const ConfigKey& key) {
@@ -102,9 +102,7 @@ void ConfigManager::remove_saved_configs(const ConfigKey& key) {
while ((de = readdir(dir.get()))) {
char* name = de->d_name;
if (name[0] != '.' && strncmp(name, prefix.c_str(), prefix.size()) == 0) {
if (remove(StringPrintf("%s/%d-%s", STATS_SERVICE_DIR, key.GetUid(),
key.GetName().c_str())
.c_str()) != 0) {
if (remove(StringPrintf("%s/%s", STATS_SERVICE_DIR, name).c_str()) != 0) {
ALOGD("no file found");
}
}
@@ -212,6 +210,11 @@ void ConfigManager::readConfigFromDisk() {
void ConfigManager::update_saved_configs(const ConfigKey& key, const StatsdConfig& config) {
mkdir(STATS_SERVICE_DIR, S_IRWXU);
// If there is a pre-existing config with same key we should first delete it.
remove_saved_configs(key);
// Then we save the latest config.
string file_name = StringPrintf("%s/%d-%s-%ld", STATS_SERVICE_DIR, key.GetUid(),
key.GetName().c_str(), time(nullptr));
int fd = open(file_name.c_str(), O_WRONLY | O_CREAT | O_CLOEXEC, S_IRUSR | S_IWUSR);