Switch Checkpoint health sleep time to ms.

This changes the property from microsecond to milliseconds, as we don't
need that sort of precision here. Also switches from using ulseep, which
has been removed from POSIX, to nanosleep.

Test: Builds, Boots, Times
Change-Id: Iefbaf8489ba05d8d688542fd7d4305efb980e701
This commit is contained in:
Daniel Rosenberg 2019-03-26 14:42:14 -07:00
parent 18d10d4c15
commit b7dddd0a7e

View file

@ -261,8 +261,9 @@ bool cp_needsCheckpoint() {
}
namespace {
const std::string kSleepTimeProp = "ro.sys.cp_usleeptime";
const uint32_t usleeptime_default = 1000000; // 1 s
const std::string kSleepTimeProp = "ro.sys.cp_msleeptime";
const uint32_t msleeptime_default = 1000; // 1 s
const uint32_t max_msleeptime = 3600000; // 1 h
const std::string kMinFreeBytesProp = "ro.sys.cp_min_free_bytes";
const uint64_t min_free_bytes_default = 100 * (1 << 20); // 100 MiB
@ -273,11 +274,15 @@ const bool commit_on_full_default = true;
static void cp_healthDaemon(std::string mnt_pnt, std::string blk_device, bool is_fs_cp) {
struct statvfs data;
uint64_t free_bytes = 0;
uint32_t usleeptime = GetUintProperty(kSleepTimeProp, usleeptime_default, (uint32_t)-1);
uint32_t msleeptime = GetUintProperty(kSleepTimeProp, msleeptime_default, max_msleeptime);
uint64_t min_free_bytes =
GetUintProperty(kMinFreeBytesProp, min_free_bytes_default, (uint64_t)-1);
bool commit_on_full = GetBoolProperty(kCommitOnFullProp, commit_on_full_default);
struct timespec req;
req.tv_sec = msleeptime / 1000;
msleeptime %= 1000;
req.tv_nsec = msleeptime * 1000000;
while (isCheckpointing) {
if (is_fs_cp) {
statvfs(mnt_pnt.c_str(), &data);
@ -302,7 +307,7 @@ static void cp_healthDaemon(std::string mnt_pnt, std::string blk_device, bool is
break;
}
}
usleep(usleeptime);
nanosleep(&req, NULL);
}
}