Github user pnowojski commented on a diff in the pull request:

    https://github.com/apache/flink/pull/5105#discussion_r156928873
  
    --- Diff: 
flink-runtime/src/test/java/org/apache/flink/runtime/io/network/buffer/LocalBufferPoolDestroyTest.java
 ---
    @@ -104,11 +104,10 @@ public void testDestroyWhileBlockingRequest() throws 
Exception {
         * @return Flag indicating whether the Thread is in a blocking buffer
         * request or not
         */
    -   private boolean isInBlockingBufferRequest(StackTraceElement[] 
stackTrace) {
    +   public static boolean isInBlockingBufferRequest(StackTraceElement[] 
stackTrace) {
                if (stackTrace.length >= 3) {
                        return stackTrace[0].getMethodName().equals("wait") &&
    -                                   
stackTrace[1].getMethodName().equals("requestBuffer") &&
    -                                   
stackTrace[2].getMethodName().equals("requestBufferBlocking");
    +                                   
stackTrace[1].getClassName().equals(LocalBufferPool.class.getName());
    --- End diff --
    
    I do not like this test in a first place, but I couldn't come up with a 
better solution. This change make it at least less implementation dependent. 
The same logic as in my "crusade" against mockito. If you put such specific 
condition as it was before (blocking on `requestBuffer`) in one more test, you 
have to manually fix it in one more place during refactoring/adding features 
etc, which drastically increases the cost of maintaining the project and just 
doesn't scale up with the project size :( 
    
    On the other hand you can argue that if after a refactor, we add more 
waiting conditions (if `LocalBufferPool` can block in two different places 
depending on some internal condition), broader check like this is might also be 
the better choice/condition.


---

Reply via email to