ACCUMULO-3249 Extra comments about issuing updates to replication status for WALs.
Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/6a713aa4 Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/6a713aa4 Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/6a713aa4 Branch: refs/heads/master Commit: 6a713aa4282ddfd658de7af05a801f5791cd4eec Parents: ceb131c Author: Josh Elser <[email protected]> Authored: Wed Oct 22 14:53:19 2014 -0400 Committer: Josh Elser <[email protected]> Committed: Thu Oct 23 11:18:59 2014 -0400 ---------------------------------------------------------------------- .../apache/accumulo/tserver/tablet/DatafileManager.java | 3 ++- .../java/org/apache/accumulo/tserver/tablet/Tablet.java | 10 +++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/accumulo/blob/6a713aa4/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/DatafileManager.java ---------------------------------------------------------------------- diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/DatafileManager.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/DatafileManager.java index a84f092..5cdc1af 100644 --- a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/DatafileManager.java +++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/DatafileManager.java @@ -422,7 +422,8 @@ class DatafileManager { // Mark that we have data we want to replicate // This WAL could still be in use by other Tablets *from the same table*, so we can only mark that there is data to replicate, - // but it is *not* closed + // but it is *not* closed. We know it is not closed by the fact that this MinC triggered. A MinC cannot happen unless the + // tablet is online and thus these WALs are referenced by that tablet. Therefore, the WAL replication status cannot be 'closed'. if (replicate) { if (log.isDebugEnabled()) { log.debug("Recording that data has been ingested into " + tablet.getExtent() + " using " + logFileOnly); http://git-wip-us.apache.org/repos/asf/accumulo/blob/6a713aa4/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java ---------------------------------------------------------------------- diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java index 8ba72b7..d82827e 100644 --- a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java +++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java @@ -621,11 +621,19 @@ public class Tablet implements TabletCommitter { log.debug("No replayed mutations applied, removing unused entries for " + extent); MetadataTableUtil.removeUnusedWALEntries(extent, logEntries, tabletServer.getLock()); + // No replication update to be made because the fact that this tablet didn't use any mutations + // from the WAL implies nothing about use of this WAL by other tablets. Do nothing. + logEntries.clear(); } else if (ReplicationConfigurationUtil.isEnabled(extent, tabletServer.getTableConfiguration(extent))) { - // The logs are about to be re-used, we need to record that they have data for this extent, + // The logs are about to be re-used by this tablet, we need to record that they have data for this extent, // but that they may get more data. logEntries is not cleared which will cause the elements // in logEntries to be added to the currentLogs for this Tablet below. + // + // This update serves the same purpose as an update during a MinC. We know that the WAL was defined + // (written when the WAL was opened) but this lets us know there are mutations written to this WAL + // that could potentially be replicated. Because the Tablet is using this WAL, we can be sure that + // the WAL isn't closed (WRT replication Status) and thus we're safe to update its progress. Status status = StatusUtil.openWithUnknownLength(); for (LogEntry logEntry : logEntries) { log.debug("Writing updated status to metadata table for " + logEntry.logSet + " " + ProtobufUtil.toString(status));
