kezhuw commented on a change in pull request #15557: URL: https://github.com/apache/flink/pull/15557#discussion_r613244353
########## File path: flink-runtime/src/main/java/org/apache/flink/runtime/operators/coordination/OperatorEventValve.java ########## @@ -96,42 +94,44 @@ public boolean isShut() { * (because it gets dropped through a call to {@link #reset()} or {@link #resetForTask(int)}, * then the returned future till be completed exceptionally. */ - public CompletableFuture<Acknowledge> sendEvent( - SerializedValue<OperatorEvent> event, int subtask) { - synchronized (lock) { - if (!shut) { - return eventSender.apply(event, subtask); - } - - final List<BlockedEvent> eventsForTask = - blockedEvents.computeIfAbsent(subtask, (key) -> new ArrayList<>()); - final CompletableFuture<Acknowledge> future = new CompletableFuture<>(); - eventsForTask.add(new BlockedEvent(event, subtask, future)); - return future; + public void sendEvent( + SerializedValue<OperatorEvent> event, + int subtask, + CompletableFuture<Acknowledge> result) { + checkRunsInMainThread(); + + if (!shut) { + final CompletableFuture<Acknowledge> ack = eventSender.apply(event, subtask); Review comment: Skimming through `sendOperatorEvent`, I think it is thread safe for `SubtaskGateway`. The points are: * After `subtaskReady` and `RUNNING`(or `INITIALIZING`), `assignedResource` is visible anyway. Thus, not sending will lose. * Up failing, which kind of failure actually does not matter. Though, this "thread-safe" could be an accident. -- 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. For queries about this service, please contact Infrastructure at: us...@infra.apache.org