Github user StefanRRichter commented on a diff in the pull request:
https://github.com/apache/flink/pull/5239#discussion_r168527958
--- Diff:
flink-runtime/src/main/java/org/apache/flink/runtime/state/TaskExecutorLocalStateStoresManager.java
---
@@ -59,58 +71,55 @@ public TaskExecutorLocalStateStoresManager(File[]
localStateRootDirectories) {
}
}
}
- }
- public TaskLocalStateStore localStateStoreForTask(
- JobID jobId,
- JobVertexID jobVertexID,
- int subtaskIndex) {
+ }
- Preconditions.checkNotNull(jobId);
- final JobVertexSubtaskKey taskKey = new
JobVertexSubtaskKey(jobVertexID, subtaskIndex);
+ public TaskLocalStateStore localStateStoreForSubtask(
+ @Nonnull JobID jobId,
+ @Nonnull AllocationID allocationID,
+ @Nonnull JobVertexID jobVertexID,
+ @Nonnegative int subtaskIndex) {
final Map<JobVertexSubtaskKey, TaskLocalStateStore>
taskStateManagers =
- this.taskStateStoresByJobID.computeIfAbsent(jobId, k ->
new HashMap<>());
+
this.taskStateStoresByAllocationID.computeIfAbsent(allocationID, k -> new
ConcurrentHashMap<>());
+
+ final JobVertexSubtaskKey taskKey = new
JobVertexSubtaskKey(jobVertexID, subtaskIndex);
return taskStateManagers.computeIfAbsent(
- taskKey, k -> new TaskLocalStateStore(jobId,
jobVertexID, subtaskIndex, localStateRootDirectories));
+ taskKey,
+ k -> new TaskLocalStateStore(jobId, jobVertexID,
subtaskIndex, localStateRootDirectories, discardExecutor));
}
- public void releaseJob(JobID jobID) {
+ public void releaseLocalStateForAllocationId(@Nonnull AllocationID
allocationID) {
- Map<JobVertexSubtaskKey, TaskLocalStateStore>
cleanupLocalStores = taskStateStoresByJobID.remove(jobID);
+ Map<JobVertexSubtaskKey, TaskLocalStateStore>
cleanupLocalStores =
+ taskStateStoresByAllocationID.remove(allocationID);
if (cleanupLocalStores != null) {
-// doRelease(cleanupLocalStores.values());
+ doRelease(cleanupLocalStores.values());
}
}
public void releaseAll() {
- for (Map<JobVertexSubtaskKey, TaskLocalStateStore>
stateStoreMap : taskStateStoresByJobID.values()) {
-// doRelease(stateStoreMap.values());
+ for (Map<JobVertexSubtaskKey, TaskLocalStateStore>
stateStoreMap : taskStateStoresByAllocationID.values()) {
+ doRelease(stateStoreMap.values());
}
- taskStateStoresByJobID.clear();
+ taskStateStoresByAllocationID.clear();
}
- private void doRelease(Iterable<TaskLocalStateStore> toRelease) throws
Exception {
+ private void doRelease(Iterable<TaskLocalStateStore> toRelease) {
if (toRelease != null) {
- Exception collectedExceptions = null;
-
for (TaskLocalStateStore stateStore : toRelease) {
try {
stateStore.dispose();
} catch (Exception disposeEx) {
- collectedExceptions =
ExceptionUtils.firstOrSuppressed(disposeEx, collectedExceptions);
+ LOG.warn("Exception while disposing
local state store", disposeEx);
--- End diff --
ð
---