@@ -251,7 +251,7 @@ public final class StorageContainerManager extends ServiceRuntimeInfoImpl
251251 private PipelineManager pipelineManager ;
252252 private ContainerManager containerManager ;
253253 private BlockManager scmBlockManager ;
254- private final SCMStorageConfig scmStorageConfig ;
254+ private SCMStorageConfig scmStorageConfig ;
255255 private NodeDecommissionManager scmDecommissionManager ;
256256 private WritableContainerFactory writableContainerFactory ;
257257 private FinalizationManager finalizationManager ;
@@ -383,6 +383,14 @@ private StorageContainerManager(OzoneConfiguration conf,
383383 "failure." , ResultCodes .SCM_NOT_INITIALIZED );
384384 }
385385
386+ // Initialize Ratis if needed.
387+ // This is for the clusters which got upgraded from older version of Ozone.
388+ // We enable Ratis by default.
389+ if (!scmStorageConfig .isSCMHAEnabled ()) {
390+ // Since we have initialized Ratis, we have to reload StorageConfig
391+ scmStorageConfig = initializeRatis (conf );
392+ }
393+
386394 threadNamePrefix = getScmNodeDetails ().threadNamePrefix ();
387395 primaryScmNodeId = scmStorageConfig .getPrimaryScmNodeId ();
388396
@@ -1253,15 +1261,13 @@ public static boolean scmInit(OzoneConfiguration conf,
12531261 StorageState state = scmStorageConfig .getState ();
12541262 final SCMHANodeDetails haDetails = SCMHANodeDetails .loadSCMHAConfig (conf ,
12551263 scmStorageConfig );
1256- String primordialSCM = SCMHAUtils .getPrimordialSCM (conf );
1264+ final String primordialSCM = SCMHAUtils .getPrimordialSCM (conf );
12571265 final String selfNodeId = haDetails .getLocalNodeDetails ().getNodeId ();
12581266 final String selfHostName = haDetails .getLocalNodeDetails ().getHostName ();
1259- if (primordialSCM != null && SCMHAUtils .isSCMHAEnabled (conf )
1260- && !SCMHAUtils .isPrimordialSCM (conf , selfNodeId , selfHostName )) {
1261- LOG .info (
1262- "SCM init command can only be executed in Primordial SCM {}, "
1263- + "self id {} "
1264- + "Ignoring it." , primordialSCM , selfNodeId );
1267+ if (primordialSCM != null &&
1268+ !SCMHAUtils .isPrimordialSCM (conf , selfNodeId , selfHostName )) {
1269+ LOG .info ("SCM init command can only be executed on Primordial SCM. " +
1270+ "Primordial SCM ID: {}. Self ID: {}." , primordialSCM , selfNodeId );
12651271 return true ;
12661272 }
12671273 if (state != StorageState .INITIALIZED ) {
@@ -1291,16 +1297,7 @@ public static boolean scmInit(OzoneConfiguration conf,
12911297
12921298 scmStorageConfig .setPrimaryScmNodeId (scmStorageConfig .getScmId ());
12931299 scmStorageConfig .initialize ();
1294-
1295- if (SCMHAUtils .isSCMHAEnabled (conf )) {
1296- SCMRatisServerImpl .initialize (scmStorageConfig .getClusterID (),
1297- scmStorageConfig .getScmId (), haDetails .getLocalNodeDetails (),
1298- conf );
1299- scmStorageConfig = new SCMStorageConfig (conf );
1300- scmStorageConfig .setSCMHAFlag (true );
1301- // Do force initialize to persist SCM_HA flag.
1302- scmStorageConfig .forceInitialize ();
1303- }
1300+ scmStorageConfig = initializeRatis (conf );
13041301
13051302 LOG .info ("SCM initialization succeeded. Current cluster id for sd={}"
13061303 + "; cid={}; layoutVersion={}; scmId={}" ,
@@ -1312,26 +1309,19 @@ public static boolean scmInit(OzoneConfiguration conf,
13121309 return false ;
13131310 }
13141311 } else {
1315- clusterId = scmStorageConfig .getClusterID ();
1316- final boolean isSCMHAEnabled = scmStorageConfig .isSCMHAEnabled ();
13171312
13181313 // Initialize security if security is enabled later.
13191314 initializeSecurityIfNeeded (conf , scmStorageConfig , selfHostName , true );
13201315
1321- if (SCMHAUtils .isSCMHAEnabled (conf ) && !isSCMHAEnabled ) {
1322- SCMRatisServerImpl .initialize (scmStorageConfig .getClusterID (),
1323- scmStorageConfig .getScmId (), haDetails .getLocalNodeDetails (),
1324- conf );
1325- scmStorageConfig .setSCMHAFlag (true );
1326- scmStorageConfig .setPrimaryScmNodeId (scmStorageConfig .getScmId ());
1327- scmStorageConfig .forceInitialize ();
1316+ // Enable Ratis if it's not already enabled.
1317+ if (!scmStorageConfig .isSCMHAEnabled ()) {
1318+ scmStorageConfig = initializeRatis (conf );
13281319
13291320 /*
1330- * Since Ratis is initialized on an existing cluster, we have to
1321+ * Since Ratis can be initialized on an existing cluster, we have to
13311322 * trigger Ratis snapshot so that this SCM can send the latest scm.db
13321323 * to the bootstrapping SCMs later.
13331324 */
1334-
13351325 try {
13361326 SCMHAUtils .setRatisEnabled (true );
13371327 StorageContainerManager scm = createSCM (conf );
@@ -1342,18 +1332,29 @@ public static boolean scmInit(OzoneConfiguration conf,
13421332 } catch (AuthenticationException e ) {
13431333 throw new IOException (e );
13441334 }
1345- LOG .info ("Enabled SCM HA" );
13461335 }
13471336
13481337 LOG .info ("SCM already initialized. Reusing existing cluster id for sd={}"
13491338 + ";cid={}; layoutVersion={}; HAEnabled={}" ,
1350- scmStorageConfig .getStorageDir (), clusterId ,
1351- scmStorageConfig .getLayoutVersion (),
1352- scmStorageConfig .isSCMHAEnabled ());
1339+ scmStorageConfig .getStorageDir (), scmStorageConfig .getClusterID (),
1340+ scmStorageConfig .getLayoutVersion (), scmStorageConfig .isSCMHAEnabled ());
13531341 return true ;
13541342 }
13551343 }
13561344
1345+ private static SCMStorageConfig initializeRatis (OzoneConfiguration conf )
1346+ throws IOException {
1347+ final SCMStorageConfig storageConfig = new SCMStorageConfig (conf );
1348+ final SCMHANodeDetails haDetails = SCMHANodeDetails .loadSCMHAConfig (conf , storageConfig );
1349+ SCMRatisServerImpl .initialize (storageConfig .getClusterID (),
1350+ storageConfig .getScmId (), haDetails .getLocalNodeDetails (), conf );
1351+ storageConfig .setSCMHAFlag (true );
1352+ storageConfig .setPrimaryScmNodeId (storageConfig .getScmId ());
1353+ storageConfig .forceInitialize ();
1354+ LOG .info ("Enabled Ratis!" );
1355+ return storageConfig ;
1356+ }
1357+
13571358 private static InetSocketAddress getScmAddress (SCMHANodeDetails haDetails ,
13581359 ConfigurationSource conf ) throws IOException {
13591360 List <SCMNodeInfo > scmNodeInfoList = SCMNodeInfo .buildNodeInfo (
0 commit comments