I'm building a REST service that leverages Spring Boot and Spring 5's first class support for project reactor in their reactive web tier. DynaTrace purepaths seem to be acknowledging that things are happening asyncronously, however my response times are way off. Responses that ultimately take up to 600ms are showing up in the PurePaths view as taking under 10ms.
Not knowing how response timing is implemented, I'm wondering if it has anything to do with the fact that the Java web request isn't bound to one thread. Reactor streams are non-blocking in nature and will thread hop through the course of the stream's lifecycle. This is explained in summary at http://projectreactor.io/docs/core/release/referen...
Is Dynatrace making an assumption that the Java web request stays on a single thread (and using some kind of ThreadLocal/etc)? If not, are there any other reasons that may explain the inconsistency in response timing?
Not sure if I understand question correctly but I have seen similar issue for chatty application developed in similar technologies. You can first identify your request in "Web Requests" or in "Visits" and then right click to drill down to Purepath. So purepath will show requests only correctponsind to that particular web request or Visits\Actions.
I'm not familiar with reactor, but have seen something similar at another customer. They use a async framework where request are made on one thread, that thread then goes back into the pool and once the answer to the call comes back, it is accepted on another thread.
This is similar to the behaviour you are describing, right?
Dynatrace is able to monitor those thread changes and should still be able to provide an end2end PurePath, you can show the thread name as a column in the PurePath tree.
Could you maybe add a screenshot of an example purepath?
A couple things I would check. First, what is the 'Duration' of your PurePath? The Response Time of the PurePath excludes asynchronous calls and uses only the return time of the first node in the PurePath tree, however Duration includes all asynchronous calls.
Secondly, look in the PurePath tree to see if you are seeing your asynchronous calls, AppMon does follow multi-threaded transactions using the Executor Thread Tagging and Thread Start Tagging Sensor for Java.