[infinispan-dev] JGRP-1877

Bela Ban bban at redhat.com
Wed Sep 10 09:04:32 EDT 2014


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 <afield at redhat.com
> <mailto:afield at 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" <bban at redhat.com <mailto:bban at redhat.com>>
>      > To: infinispan-dev at lists.jboss.org
>     <mailto:infinispan-dev at 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 at lists.jboss.org
>     <mailto:infinispan-dev at lists.jboss.org>
>      > https://lists.jboss.org/mailman/listinfo/infinispan-dev
>      >
>     _______________________________________________
>     infinispan-dev mailing list
>     infinispan-dev at lists.jboss.org <mailto:infinispan-dev at 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 at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-dev
>

-- 
Bela Ban, JGroups lead (http://www.jgroups.org)


More information about the infinispan-dev mailing list