You are viewing a plain text version of this content. The canonical link for it is here.
Posted to reviews@helix.apache.org by GitBox <gi...@apache.org> on 2022/06/03 17:16:48 UTC
[GitHub] [helix] xyuanlu commented on a diff in pull request #2106: Clean format for disabled instances in ClusterConfig
xyuanlu commented on code in PR #2106:
URL: https://github.com/apache/helix/pull/2106#discussion_r889176398
##########
helix-core/src/main/java/org/apache/helix/controller/dataproviders/BaseControllerDataProvider.java:
##########
@@ -241,21 +241,64 @@ 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 (_clusterConfig!=null && needCleanUpBatchedDisabledInstance(_clusterConfig.getRecord())
+ && cleanBatchDisableMapField(accessor)) {
+ LogUtil.logInfo(logger, getClusterEventId(), String
+ .format("Clean ClusterConfig mapField for cluster %s, pipeline %s", _clusterName,
+ getPipelineName()));
+ }
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 batched disabled instances for
+ // "DISABLED_INSTANCES" introduced in 1.0.3.0. This temp change should be reverted after 1.0.5.0 \
+ // or later version.
+ private boolean cleanBatchDisableMapField(final HelixDataAccessor accessor) {
+ boolean successful =
+ 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");
+ }
+ ZNRecord newRecord = new ZNRecord(currentData);
+ String batchDisabledInstanceMapFieldKey =
+ ClusterConfig.ClusterConfigProperty.DISABLED_INSTANCES.name();
+ if (needCleanUpBatchedDisabledInstance(currentData)) {
Review Comment:
It is possible that there is a race condition that 2 pipeline both check clusterConfig that need update. By adding another check in updater, we reduce the race window and updater also garente that only one will write back.
--
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: reviews-unsubscribe@helix.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@helix.apache.org
For additional commands, e-mail: reviews-help@helix.apache.org