Yep - meanwhile I just search for System.currentTimeMillis() and System.nanoTime().
On 10/09/14 14:45, Romain Pelisse wrote: > Given the pattern of it, I might be able to produce a PMD checks for > this. This way, you could run it across the code base and check for all > occurences of it. > > On 10 September 2014 13:58, Alan Field <afi...@redhat.com > <mailto:afi...@redhat.com>> wrote: > > Hey Bela, > > > Just a quick heads up. I'm currently working on > >https://issues.jboss.org/browse/JGRP-1877, which it critical as it may: > > - cause RPCs to return prematurely (possibly with a TimeoutException), > or > > - cause RPCs to blocks for a long time (pick which one is worse :-)) > > How frequently can these errors occur? Is this something that is not > very likely to happen or something that requires an external action > to trigger it? (i.e. changing the time via NTP) Just trying to > determine the priority of this issue. > > Thanks, > Alan > > ----- Original Message ----- > > From: "Bela Ban" <b...@redhat.com <mailto:b...@redhat.com>> > > To: infinispan-dev@lists.jboss.org > <mailto:infinispan-dev@lists.jboss.org> > > Sent: Wednesday, September 10, 2014 12:05:11 PM > > Subject: [infinispan-dev] JGRP-1877 > > > > Just a quick heads up. I'm currently working on > > https://issues.jboss.org/browse/JGRP-1877, which it critical as > it may: > > - cause RPCs to return prematurely (possibly with a > TimeoutException), or > > - cause RPCs to blocks for a long time (pick which one is worse :-)) > > > > This is due to my misunderstanding of the semantics of > > System.nanoTime(), I frequently have code like this, which computes a > > future deadline for a timeout: > > > > long wait_time=TimeUnit.NANOSECONDS.convert(timeout, > > TimeUnit.MILLISECONDS); > > final long target_time=System.nanoTime() + wait_time; > > while(wait_time > 0 && !hasResult) { /* Wait for > responses: */ > > wait_time=target_time - System.nanoTime(); > > if(wait_time > 0) { > > try {cond.await(wait_time, > TimeUnit.NANOSECONDS);} > > catch(Exception e) {} > > } > > } > > if(!hasResult && wait_time <= 0) > > throw new TimeoutException(); > > > > Variable target_time can possibly become *negative* if nanoTime() > > returns a negative value. If so, hasResult is false and wait_time > > negative, and therefore a TimeoutException would be thrown ! > > > > While I'm at it, I'll also fix my uses of System.currentTimeMillis(), > > and replace it with nanoTime(). Our good friend Erik has run into > issues > > with RPCs (using currentTimeMillis()) hanging forever when their > > NTP-based servers adjusted the time .... backwards ! > > > > Please be aware of nanoTime() in your own code, e.g. > > long t0=nanoTime(); > > ... > > long t1=nanoTime(); > > > > It is *not* guaranteed that t1 > t0 because of numeric overflow (t0 > > might be Long.MAX_VALUE-1 and t1 Long.MAX_VALUE +2 !). The only > way to > > compare them is t1 - t0 > 0 (t1 is more recent) or < 0 t0 is more > recent. > > > > Just thought I wanted to pass this on, in case somebody made the same > > stupid mistake... > > > > Thanks to David Lloyd for pointing this out ! > > > > -- > > Bela Ban, JGroups lead (http://www.jgroups.org) > > _______________________________________________ > > infinispan-dev mailing list > > infinispan-dev@lists.jboss.org > <mailto:infinispan-dev@lists.jboss.org> > > https://lists.jboss.org/mailman/listinfo/infinispan-dev > > > _______________________________________________ > infinispan-dev mailing list > infinispan-dev@lists.jboss.org <mailto:infinispan-dev@lists.jboss.org> > https://lists.jboss.org/mailman/listinfo/infinispan-dev > > > > > -- > Romain PELISSE, > /"The trouble with having an open mind, of course, is that people will > insist on coming along and trying to put things in it" -- Terry Pratchett/ > Belaran ins Prussia (blog) <http://blog.wordpress.belaran.eu/> (... > finally up and running !) > > > _______________________________________________ > infinispan-dev mailing list > infinispan-dev@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/infinispan-dev > -- Bela Ban, JGroups lead (http://www.jgroups.org) _______________________________________________ infinispan-dev mailing list infinispan-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/infinispan-dev