TisonKun commented on a change in pull request #10526: [FLINK-15090][build] 
Reverse the dependency from flink-streaming-java to flink-client
URL: https://github.com/apache/flink/pull/10526#discussion_r390812271
 
 

 ##########
 File path: 
flink-clients/src/main/java/org/apache/flink/client/program/OptimizerPlanEnvironment.java
 ##########
 @@ -22,143 +22,39 @@
 import org.apache.flink.api.java.ExecutionEnvironment;
 import org.apache.flink.api.java.ExecutionEnvironmentFactory;
 import org.apache.flink.core.execution.JobClient;
-import org.apache.flink.util.Preconditions;
-
-import javax.annotation.Nullable;
-
-import java.io.ByteArrayOutputStream;
-import java.io.PrintStream;
 
 /**
- * An {@link ExecutionEnvironment} that never executes a job but only extracts 
the {@link
- * org.apache.flink.api.dag.Pipeline}.
+ * An {@link ExecutionEnvironment} that never executes a job but only extracts 
the {@link Pipeline}.
  */
 public class OptimizerPlanEnvironment extends ExecutionEnvironment {
 
-       private Pipeline pipeline;
+       private static Pipeline pipeline;
 
 Review comment:
   What if users write code
   
   ```java
   ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
   
   parallel-n {
     env.execute();
   }
   ```
   
   In this case, the whole function is not thread transparent. And even with 
master branch we might miss the exception. Here, already we make some 
assumption that user calls `env.execute` in the same thread he runs `main` and 
doesn't caught `ProgramAbortException`.
   
   If we keep `OptimizerPlanEnvironment` as is, then we go into the problem you 
mention above for ContextEnvironment. What if
   
   ```java
   ExecutionEnvironment env1 = ExecutionEnvironment.getExecutionEnvironment();
   ExecutionEnvironment env2 = ExecutionEnvironment.getExecutionEnvironment();
   
   env1 ...
   env2 ...
   
   env1.execute()
   ```
   
   Actually `env1` & `env2` is the same environment.
   
   Either way, we make some implications. And if you compare master 
`OptimizerPlanEnvironment` and `StreamPlanEnvironment`, you will find that they 
are different.
   
   - `OptimizerPlanEnvironment.setAsContext` always set the same instance
   - `StreamPlanEnvironment.setAsContext` always set a new instance, though it 
finally set StreamGraph to the single `OptimizerPlanEnvironment`, but different 
`StreamPlanEnvironment` instance has different configuration and the first one 
call `execute()` wins. If you put it in multi-threaded environment, the one 
runs as the same thread of `main` and first call `execute()` wins.

----------------------------------------------------------------
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


With regards,
Apache Git Services

Reply via email to