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