xyuanlu commented on code in PR #2106:
URL: https://github.com/apache/helix/pull/2106#discussion_r879728909
##########
helix-core/src/main/java/org/apache/helix/controller/dataproviders/BaseControllerDataProvider.java:
##########
@@ -241,11 +244,85 @@ private void refreshClusterConfig(final HelixDataAccessor
accessor,
if
(_propertyDataChangedMap.get(HelixConstants.ChangeType.CLUSTER_CONFIG).getAndSet(false))
{
_clusterConfig =
accessor.getProperty(accessor.keyBuilder().clusterConfig());
refreshedType.add(HelixConstants.ChangeType.CLUSTER_CONFIG);
+ // TODO: This is a temp function to clean up incompatible batched
disabled instances format.
+ // Remove in later version.
+ if (needReformatBatchedDIsabledInstance(_clusterConfig) &&
updateBatchDisableFormat(
+ accessor)) {
+ // read from zkz one more time
+ LogUtil.logInfo(logger, getClusterEventId(), String
+ .format("Clean ClusterConfig change for cluster %s, pipeline %s",
_clusterName,
+ getPipelineName()));
+ _clusterConfig =
accessor.getProperty(accessor.keyBuilder().clusterConfig());
+ }
refreshAbnormalStateResolverMap(_clusterConfig);
} else {
- LogUtil.logInfo(logger, getClusterEventId(), String.format(
- "No ClusterConfig change for cluster %s, pipeline %s", _clusterName,
getPipelineName()));
+ LogUtil.logDebug(logger, getClusterEventId(), String
+ .format("No ClusterConfig change for cluster %s, pipeline %s",
_clusterName,
+ getPipelineName()));
+ }
+ }
+
+ // TODO: This function is used to clean up incompatible batched disabled
instances format for
+ // "DISABLED_INSTANCES" introduced in 1.0.3.0. This temp change shoul dbe
reverted after 1.0.5.0 \
+ // or later version.
+ private boolean updateBatchDisableFormat(final HelixDataAccessor accessor) {
+ return accessor
+ .updateProperty(accessor.keyBuilder().clusterConfig(), new
DataUpdater<ZNRecord>() {
+ @Override
+ public ZNRecord update(ZNRecord currentData) {
+ if (currentData == null) {
+ throw new HelixException(
+ "Cluster: " + _clusterConfig.getClusterName() + ": cluster
config is null");
+ }
+
+ ClusterConfig clusterConfig = new ClusterConfig(currentData);
+ Map<String, String> disabledInstances =
clusterConfig.getDisabledInstances();
+ Map<String, String> disabledInstancesWithInfo =
+ clusterConfig.getDisabledInstancesWithInfo();
+
+ ClusterConfig newClusterConfig = new ClusterConfig(currentData);
+ Map<String, String> newDisabledInstances =
+ new TreeMap<>(newClusterConfig.getDisabledInstances());
Review Comment:
This is a valid concern. This change will not add a lot load to pipeline
because:
1. `refreshClusterConfig` will be a no-op if there is no clusterConfig
change callback. clusterConfig change callback will only be triggered in a. the
ever first pipeline run or b. there is actual update to clusterConfig.
2. If the format in clusterConfig do not need rewrite (due to one of the
following reason: a. The format is clean to begin with, b. the format is
already rewritten), `needReformatBatchedDIsabledInstance` will return false and
there will be no write back to ZK.
3. This is a temporary clean up fix. This change will be rolled back in
next+ version (probably 1.0.5.0).
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]