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

    https://github.com/apache/brooklyn-server/pull/816#discussion_r141603195
  
    --- Diff: 
core/src/main/java/org/apache/brooklyn/util/core/task/ValueResolver.java ---
    @@ -434,7 +434,11 @@ protected boolean isEvaluatingImmediately() {
                             // (should discourage this in favour of task 
factories which can be transiently interrupted?)
                             BrooklynTaskTags.addTagDynamically(task, 
BrooklynTaskTags.NON_TRANSIENT_TASK_TAG);
                         }
    -                    exec.submit(task);
    +                    if (timer!=null || 
Thread.currentThread().isInterrupted()) {
    +                        exec.submit(task);
    +                    } else {
    +                        exec.get(task);
    --- End diff --
    
    I'm not sure how this relates to `isEvaluatingImmediately()`. For the 
`instanceof Future` case, that checks explicitly for immediately. Here, it will 
just call `exec.get()`. Previously, it would have done `submit` and then gone 
into the next if block because Task extends Future. I think you should guard 
this to only do `exec.submit` if also not `!isEvaluatingImmediately()`.
    
    I'm guessing you might be relying on immediately having set the thread to 
interrupted first? I'm uncomfortable about that because we call 
`Tasks.resolving()...immediately(true)...getMaybe()`in a few places. That won't 
have gone through the `executionContext.getImmediately` code.
    
    It's really hard to reason about whether this code will work, and how it's 
used, because it's all so weakly typed with `Object` and `instanceof` all over 
the place. If I recall correctly, `immediately` with a `Task` never quite 
worked properly but I can't find any appropriate tests in `ValueResolverTest`.
    
    My general feeling is that we try to (accidentally?!) support way too many 
things by taking `Object` and then adding a bunch of instanceof checks, and a 
bunch of flags to customize the behaviour (which grow over time).


---

Reply via email to