Skip to content

Commit c9fe669

Browse files
authored
HDDS-14672. Remove SCM finalization checkpoints (#9955)
1 parent 020f8aa commit c9fe669

17 files changed

Lines changed: 66 additions & 868 deletions

hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMContext.java

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import org.apache.hadoop.hdds.scm.safemode.SCMSafeModeManager.SafeModeStatus;
2525
import org.apache.hadoop.hdds.scm.server.OzoneStorageContainerManager;
2626
import org.apache.hadoop.hdds.scm.server.StorageContainerManager;
27-
import org.apache.hadoop.hdds.scm.server.upgrade.FinalizationCheckpoint;
2827
import org.apache.ratis.protocol.exceptions.NotLeaderException;
2928
import org.slf4j.Logger;
3029
import org.slf4j.LoggerFactory;
@@ -64,16 +63,10 @@ public final class SCMContext {
6463
private final OzoneStorageContainerManager scm;
6564
private final ReadWriteLock lock = new ReentrantReadWriteLock();
6665

67-
/**
68-
* Tracks the last crossed SCM upgrade finalization checkpoint.
69-
*/
70-
private volatile FinalizationCheckpoint finalizationCheckpoint;
71-
7266
private SCMContext(Builder b) {
7367
isLeader = b.isLeader;
7468
term = b.term;
7569
safeModeStatus = b.safeModeStatus;
76-
finalizationCheckpoint = b.finalizationCheckpoint;
7770
scm = b.scm;
7871
threadNamePrefix = b.threadNamePrefix;
7972
}
@@ -128,15 +121,6 @@ public void setLeaderReady() {
128121
}
129122
}
130123

131-
public void setFinalizationCheckpoint(FinalizationCheckpoint checkpoint) {
132-
lock.writeLock().lock();
133-
try {
134-
this.finalizationCheckpoint = checkpoint;
135-
} finally {
136-
lock.writeLock().unlock();
137-
}
138-
}
139-
140124
/**
141125
* Check whether current SCM is leader or not.
142126
*
@@ -246,15 +230,6 @@ public boolean isPreCheckComplete() {
246230
}
247231
}
248232

249-
public FinalizationCheckpoint getFinalizationCheckpoint() {
250-
lock.readLock().lock();
251-
try {
252-
return this.finalizationCheckpoint;
253-
} finally {
254-
lock.readLock().unlock();
255-
}
256-
}
257-
258233
/**
259234
* @return StorageContainerManager
260235
*/
@@ -278,7 +253,6 @@ public static class Builder {
278253
private long term = INVALID_TERM;
279254
private SafeModeStatus safeModeStatus = SafeModeStatus.OUT_OF_SAFE_MODE;
280255
private OzoneStorageContainerManager scm = null;
281-
private FinalizationCheckpoint finalizationCheckpoint = FinalizationCheckpoint.FINALIZATION_COMPLETE;
282256
private String threadNamePrefix = "";
283257

284258
public Builder setLeader(boolean leader) {
@@ -302,12 +276,6 @@ public Builder setSCM(
302276
return this;
303277
}
304278

305-
public Builder setFinalizationCheckpoint(
306-
FinalizationCheckpoint checkpoint) {
307-
this.finalizationCheckpoint = checkpoint;
308-
return this;
309-
}
310-
311279
public SCMContext.Builder setThreadNamePrefix(String prefix) {
312280
this.threadNamePrefix = prefix;
313281
return this;

hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMStateMachine.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,6 @@ public void notifyLeaderReady() {
391391
// leader ready in SCMContext.
392392
scm.getScmContext().setLeaderReady();
393393
scm.getSCMServiceManager().notifyStatusChanged();
394-
scm.getFinalizationManager().onLeaderReady();
395394
}
396395

397396
@Override

hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/SCMNodeManager.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -760,19 +760,14 @@ protected void sendFinalizeToDatanodeIfNeeded(DatanodeDetails datanodeDetails,
760760
datanodeDetails.getHostName(), dnSlv, scmSlv);
761761
}
762762

763-
if (FinalizationManager.shouldTellDatanodesToFinalize(
764-
scmContext.getFinalizationCheckpoint())) {
765-
// Because we have crossed the MLV_EQUALS_SLV checkpoint, SCM metadata
766-
// layout version will not change. We can now compare it to the
767-
// datanodes' metadata layout versions to tell them to finalize.
763+
if (FinalizationManager.shouldTellDatanodesToFinalize(scmLayoutVersionManager)) {
764+
// Because the finalizationManager / versionManager says finalization is not needed
765+
// it means any DN that is reporting a metadata layout version less than the SCM's metadata layout version
766+
// can be finalized.
768767
int scmMlv = scmLayoutVersionManager.getMetadataLayoutVersion();
769768

770-
// If the datanode mlv < scm mlv, it can not be allowed to be part of
771-
// any pipeline. However it can be allowed to join the cluster
772769
if (dnMlv < scmMlv) {
773-
LOG.warn("Data node {} can not be used in any pipeline in the " +
774-
"cluster. " + "DataNode MetadataLayoutVersion = {}, SCM " +
775-
"MetadataLayoutVersion = {}",
770+
LOG.warn("Data node {} has a MetadataLayoutVersion = {}, SCM MetadataLayoutVersion = {}. Sending finalize",
776771
datanodeDetails.getHostName(), dnMlv, scmMlv);
777772

778773
FinalizeNewLayoutVersionCommand finalizeCmd =

hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -730,7 +730,6 @@ private void initializeSystemManagers(OzoneConfiguration conf,
730730
.setSafeModeStatus(SCMSafeModeManager.SafeModeStatus.INITIAL)
731731
.setSCM(this)
732732
.setThreadNamePrefix(threadNamePrefix)
733-
.setFinalizationCheckpoint(finalizationManager.getCheckpoint())
734733
.build();
735734
}
736735

hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/FinalizationCheckpoint.java

Lines changed: 0 additions & 87 deletions
This file was deleted.

hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/FinalizationManager.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,18 +42,13 @@ UpgradeFinalization.StatusAndMessages queryUpgradeFinalizationProgress(
4242
BasicUpgradeFinalizer<SCMUpgradeFinalizationContext, HDDSLayoutVersionManager>
4343
getUpgradeFinalizer();
4444

45-
FinalizationCheckpoint getCheckpoint();
46-
4745
void buildUpgradeContext(NodeManager nodeManager,
4846
SCMContext scmContext);
4947

5048
void reinitialize(Table<String, String> finalizationStore) throws IOException;
5149

52-
void onLeaderReady();
53-
54-
static boolean shouldTellDatanodesToFinalize(
55-
FinalizationCheckpoint checkpoint) {
56-
return checkpoint.hasCrossed(FinalizationCheckpoint.MLV_EQUALS_SLV);
50+
static boolean shouldTellDatanodesToFinalize(HDDSLayoutVersionManager versionManager) {
51+
return !versionManager.needsFinalization();
5752
}
5853

5954
}

hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/FinalizationManagerImpl.java

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,9 @@
1818
package org.apache.hadoop.hdds.scm.server.upgrade;
1919

2020
import com.google.common.annotations.VisibleForTesting;
21-
import com.google.common.util.concurrent.ThreadFactoryBuilder;
2221
import java.io.IOException;
2322
import java.util.Collections;
2423
import java.util.Objects;
25-
import java.util.concurrent.Executors;
26-
import java.util.concurrent.ThreadFactory;
2724
import org.apache.hadoop.hdds.scm.ha.SCMContext;
2825
import org.apache.hadoop.hdds.scm.ha.SCMHAManager;
2926
import org.apache.hadoop.hdds.scm.node.NodeManager;
@@ -34,22 +31,16 @@
3431
import org.apache.hadoop.ozone.upgrade.DefaultUpgradeFinalizationExecutor;
3532
import org.apache.hadoop.ozone.upgrade.UpgradeFinalization;
3633
import org.apache.hadoop.ozone.upgrade.UpgradeFinalizationExecutor;
37-
import org.apache.ratis.util.ExitUtils;
38-
import org.slf4j.Logger;
39-
import org.slf4j.LoggerFactory;
4034

4135
/**
4236
* Class to initiate SCM finalization and query its progress.
4337
*/
4438
public class FinalizationManagerImpl implements FinalizationManager {
45-
private static final Logger LOG = LoggerFactory
46-
.getLogger(FinalizationManagerImpl.class);
4739

4840
private SCMUpgradeFinalizer upgradeFinalizer;
4941
private SCMUpgradeFinalizationContext context;
5042
private SCMStorageConfig storage;
5143
private final FinalizationStateManager finalizationStateManager;
52-
private ThreadFactory threadFactory;
5344

5445
/**
5546
* For test classes to inject their own state manager.
@@ -88,11 +79,6 @@ public void buildUpgradeContext(NodeManager nodeManager,
8879
.build();
8980

9081
finalizationStateManager.setUpgradeContext(this.context);
91-
92-
String prefix = scmContext != null ? scmContext.threadNamePrefix() : "";
93-
this.threadFactory = new ThreadFactoryBuilder()
94-
.setNameFormat(prefix + "FinalizationManager-%d")
95-
.build();
9682
}
9783

9884
@Override
@@ -121,42 +107,12 @@ HDDSLayoutVersionManager> getUpgradeFinalizer() {
121107
return upgradeFinalizer;
122108
}
123109

124-
@Override
125-
public FinalizationCheckpoint getCheckpoint() {
126-
return finalizationStateManager.getFinalizationCheckpoint();
127-
}
128-
129110
@Override
130111
public void reinitialize(Table<String, String> finalizationStore)
131112
throws IOException {
132113
finalizationStateManager.reinitialize(finalizationStore);
133114
}
134115

135-
@Override
136-
public void onLeaderReady() {
137-
// Launch a background thread to drive finalization.
138-
Executors.newSingleThreadExecutor(threadFactory).submit(() -> {
139-
FinalizationCheckpoint currentCheckpoint = getCheckpoint();
140-
if (currentCheckpoint.hasCrossed(
141-
FinalizationCheckpoint.FINALIZATION_STARTED) &&
142-
!currentCheckpoint.hasCrossed(
143-
FinalizationCheckpoint.FINALIZATION_COMPLETE)) {
144-
LOG.info("SCM became leader. Resuming upgrade finalization from" +
145-
" current checkpoint {}.", currentCheckpoint);
146-
try {
147-
finalizeUpgrade("resume-finalization-as-leader");
148-
} catch (IOException ex) {
149-
ExitUtils.terminate(1,
150-
"Resuming upgrade finalization failed on SCM leader change.",
151-
ex, true, LOG);
152-
}
153-
} else if (LOG.isDebugEnabled()) {
154-
LOG.debug("SCM became leader. No upgrade finalization action" +
155-
" required for current checkpoint {}", currentCheckpoint);
156-
}
157-
});
158-
}
159-
160116
/**
161117
* Builds a {@link FinalizationManagerImpl}.
162118
*/

hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/FinalizationStateManager.java

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,25 +26,10 @@
2626
*/
2727
public interface FinalizationStateManager {
2828

29-
@Replicate
30-
void addFinalizingMark() throws IOException;
31-
32-
@Replicate
33-
void removeFinalizingMark() throws IOException;
34-
3529
@Replicate
3630
void finalizeLayoutFeatures(Integer toLayoutVersion)
3731
throws IOException;
3832

39-
/**
40-
* @param query The checkpoint to check for being crossed.
41-
* @return true if SCM's disk state indicates this checkpoint has been
42-
* crossed. False otherwise.
43-
*/
44-
boolean crossedCheckpoint(FinalizationCheckpoint query);
45-
46-
FinalizationCheckpoint getFinalizationCheckpoint();
47-
4833
void setUpgradeContext(SCMUpgradeFinalizationContext context);
4934

5035
/**

0 commit comments

Comments
 (0)