Add nonLeaderCleanUp with tables parameters in PinotTaskGenerator (#13509)
diff --git a/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/minion/PinotTaskManager.java b/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/minion/PinotTaskManager.java
index 621e825..bacaba0 100644
--- a/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/minion/PinotTaskManager.java
+++ b/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/minion/PinotTaskManager.java
@@ -34,6 +34,7 @@
import java.util.concurrent.Executor;
import javax.annotation.Nullable;
import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
import org.apache.helix.AccessOption;
import org.apache.helix.task.TaskState;
import org.apache.helix.zookeeper.zkclient.IZkChildListener;
@@ -702,6 +703,18 @@
}
}
+ @Override
+ protected void nonLeaderCleanup(List<String> tableNamesWithType) {
+ LOGGER.info(
+ "Cleaning up all task generators for tables that the controller is not the leader for. Number of tables to be"
+ + " cleaned up: {}. Printing at most first 10 table names to be cleaned up: [{}].",
+ tableNamesWithType.size(),
+ StringUtils.join(tableNamesWithType.stream().limit(10).map(t -> "\"" + t + "\"").toArray(), ", "));
+ for (String taskType : _taskGeneratorRegistry.getAllTaskTypes()) {
+ _taskGeneratorRegistry.getTaskGenerator(taskType).nonLeaderCleanUp(tableNamesWithType);
+ }
+ }
+
@Nullable
public Scheduler getScheduler() {
return _scheduler;
diff --git a/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/minion/generator/PinotTaskGenerator.java b/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/minion/generator/PinotTaskGenerator.java
index ad42135..fd2a461 100644
--- a/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/minion/generator/PinotTaskGenerator.java
+++ b/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/minion/generator/PinotTaskGenerator.java
@@ -87,6 +87,13 @@
}
/**
+ * Performs necessary cleanups (e.g. remove metrics) when the controller leadership changes,
+ * given a list of tables that the current controller isn't the leader for.
+ */
+ default void nonLeaderCleanUp(List<String> tableNamesWithType) {
+ }
+
+ /**
* Gets the minionInstanceTag for the tableConfig
*/
default String getMinionInstanceTag(TableConfig tableConfig) {