How do you disable it? I mean, how do you make sure that it does not affect performance when it is turned off?
D. On Fri, Jan 29, 2016 at 12:31 PM, Vladimir Ozerov <voze...@gridgain.com> wrote: > Folks, > > Quite often we face some concurrency or performance issues. And what is > worse, sometimes they spread across several nodes making them hard to > debug. > > We do various things to debug such problems. We add System.outs, measure > latencies between algorithm steps, etc.. And once the problem is resolved, > we throw away all debugging code. > > What if add a kind of tracing component to Ignite, so that convenient > debugging infrastructure wiil always be ready for use? > > E.g., assume that we have performance issue in cache operation. Tracing > framework could be used as follows: > > /** Register tracer. */ > Cache.onStart() { > ... > ctx.trace().createProfile("cache_problem"); > } > > /** Put trace inside problematic code. */ > Cache.get(...) { > TraceEvent traceEvt = ctx.trace().start("cache_problem"); > ... > traceEvt.checkpoint("LOCKED", [optional args and identifiers]); > ... > traceEvt.checkpoint("COMMITTED", ...); > } > > /** In the end we dump problematic events. */ > Cache.onStop() { > ... > ctx.profile("cache_problem").dump(System.out, [FILTER PREDICATE]); > } > > Result: > 23:20:01.234 [LOCKED=20ms, COMMITTED=152ms, FINISHED=153ms] > 23:20:03.211 [LOCKED= 1ms, COMMITTED= 1ms, FINISHED= 2ms] > > I believe lots of you already did something like this during debug. The > idea is to have some reusable component, so that we do not need to reinvent > the wheel over and over again. > > Thoughts? > > Vladimir. >