
and FYI, this was the list it was discussed on (MDC only works in futures in scala not CompletableFutuers in java unless they fix CompletableFuture)...(but perhaps I am not explaining it all correctly)... Martin Buchholz <martinrb@google.com>, Pavel Rappo <pavel.rappo@oracle.com>, concurrency-interest <concurrency-interest@cs.oswego.edu>, core-libs-dev <core-libs-dev@openjdk.java.net> On Thu, Mar 22, 2018 at 8:38 AM, Dean Hiller <dhiller@twitter.com> wrote:
unfortunately, there is no Local.java at this point BUT hopefully this stackoverflow question explains how MDC is broken across CompletableFuture but works fine for twitter Future
https://stackoverflow.com/questions/37933713/does- completablefuture-have-a-corresponding-local-context
NOTE: We swap the MDC with one depending on Local.scala instead of ThreadLocal(threadlocal breaks since many threads execute 1 request when using Future or CompletableFuture).
thanks, Dean
On Thu, Mar 22, 2018 at 8:18 AM, Ceki <ceki@qos.ch> wrote:
Hello Dean,
What is Local.java ? Do you mean thread local? Please show an example of what you would like to happen.
Best regards, -- Ceki
On 22.03.2018 14:51, Dean Hiller wrote:
Has anyone requested the jdk to add Local.java to CompletableFuture.java so that context can be transferred through the .thenApply and .thenCompose methods. ie. can we make MDC work in java-land with CompletableFutures? (it works in scala land with twitter scala Future by swapping the MDC out for the below thing I describe)
let me go into more detail here. We use twitter Future.scala which knows about Local.scala and Local.scala "acts" like a ThreadLocal. I say acts because when you do future.map/flatMap(in java that is thenApply/thenCompose), it transfers the threadlocal through to the next executing function.
soooo, long story short, in twitter servers, I can say MDC.put("requestId", someRequestId) and it works over the .map/.flatMap. This is not possible in java!!!!! ahhhhh....
and I wrote a whole webserver in java with CompletableFutures before I found this out https://github.com/deanhiller/webpieces
ps. their response was that it would be a global. Sure, but I am practical and it solves a huge many platform problems like MDC, and some in my server where I don't know the customers code(and I had to hack around not having a Local type thing available :( ).
Another reason they elude to is some methods they don't know how to handle Local in those cases(yup, well scala had the same thing but it managed to implement it because it was too important and now java is behind :( ).
Anyways, it would be nice if others spoke up before they realize they need it for the MDC to keep working.
thanks, Dean
_______________________________________________ slf4j-dev mailing list slf4j-dev@qos.ch http://mailman.qos.ch/mailman/listinfo/slf4j-dev
-- -- Ceki Gülcü _______________________________________________ slf4j-dev mailing list slf4j-dev@qos.ch http://mailman.qos.ch/mailman/listinfo/slf4j-dev