Don't perform compactions when clean time has not been advanced Due to KUDU-2233 we might not advance safe time, and thus clean time, at bootstrap causing possible corruption or crashes.
This patch adds a check to make sure that clean time has been advanced at all before performing a compaction. This is temporary fix until we have a more strict check like the one proposed in https://gerrit.cloudera.org/#/c/8887/. Change-Id: Ia74abdf7d806efc4239dc9cff4a5da28621d331a Reviewed-on: http://gerrit.cloudera.org:8080/9436 Reviewed-by: Todd Lipcon <t...@apache.org> Tested-by: David Ribeiro Alves <davidral...@gmail.com> Project: http://git-wip-us.apache.org/repos/asf/kudu/repo Commit: http://git-wip-us.apache.org/repos/asf/kudu/commit/00815045 Tree: http://git-wip-us.apache.org/repos/asf/kudu/tree/00815045 Diff: http://git-wip-us.apache.org/repos/asf/kudu/diff/00815045 Branch: refs/heads/master Commit: 00815045fc3295c12023fd7ae7ad220645a10c3a Parents: 09298f3 Author: David Alves <dral...@apache.org> Authored: Thu Feb 22 09:38:29 2018 -0800 Committer: David Ribeiro Alves <davidral...@gmail.com> Committed: Fri Feb 23 23:06:45 2018 +0000 ---------------------------------------------------------------------- src/kudu/tablet/tablet.cc | 7 +++++++ 1 file changed, 7 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kudu/blob/00815045/src/kudu/tablet/tablet.cc ---------------------------------------------------------------------- diff --git a/src/kudu/tablet/tablet.cc b/src/kudu/tablet/tablet.cc index 431de32..86182ab 100644 --- a/src/kudu/tablet/tablet.cc +++ b/src/kudu/tablet/tablet.cc @@ -1675,6 +1675,13 @@ Status Tablet::Compact(CompactFlags flags) { void Tablet::UpdateCompactionStats(MaintenanceOpStats* stats) { + if (mvcc_.GetCleanTimestamp() == Timestamp::kInitialTimestamp) { + KLOG_EVERY_N_SECS(WARNING, 30) << LogPrefix() << "Can't schedule compaction. Clean time has " + << "not been advanced past its initial value."; + stats->set_runnable(false); + return; + } + // TODO: use workload statistics here to find out how "hot" the tablet has // been in the last 5 minutes, and somehow scale the compaction quality // based on that, so we favor hot tablets.