diff --git a/rosjava/src/main/java/org/ros/time/NtpTimeProvider.java b/rosjava/src/main/java/org/ros/time/NtpTimeProvider.java index e0195352347e88dd01434a0edd89d05f08677052..980e6146b6c31fa49c6a03a6d03aee508e5cfef2 100644 --- a/rosjava/src/main/java/org/ros/time/NtpTimeProvider.java +++ b/rosjava/src/main/java/org/ros/time/NtpTimeProvider.java @@ -63,6 +63,7 @@ public class NtpTimeProvider implements TimeProvider { this.scheduledExecutorService = scheduledExecutorService; wallTimeProvider = new WallTimeProvider(); ntpClient = new NTPUDPClient(); + ntpClient.setDefaultTimeout(500); // timeout to 500ms offset = 0; scheduledFuture = null; } @@ -70,12 +71,19 @@ public class NtpTimeProvider implements TimeProvider { /** * Update the current time offset from the configured NTP host. * - * @throws IOException + * @throws IOException : if ntpClient.getTime() fails too often. */ public void updateTime() throws IOException { List<Long> offsets = Lists.newArrayList(); + int failures = 0; for (int i = 0; i < SAMPLE_SIZE; i++) { - offsets.add(computeOffset()); + try { + offsets.add(computeOffset()); + } catch (IOException e) { + if ( ++failures > SAMPLE_SIZE/2 ) { + throw e; + } + } } offset = CollectionMath.median(offsets); log.info(String.format("NTP time offset: %d ms", offset)); diff --git a/rosjava/src/test/java/org/ros/time/NtpTimeProviderTest.java b/rosjava/src/test/java/org/ros/time/NtpTimeProviderTest.java index ea320ab408ae9cf263d34620bb98128f5b707caa..2ad7e253f9ba1275e27f17e70a3e4d81652f53f0 100644 --- a/rosjava/src/test/java/org/ros/time/NtpTimeProviderTest.java +++ b/rosjava/src/test/java/org/ros/time/NtpTimeProviderTest.java @@ -45,7 +45,7 @@ public class NtpTimeProviderTest extends RosTest { nodeMainExecutor.execute(new AbstractNodeMain() { @Override public GraphName getDefaultNodeName() { - return GraphName.of("node"); + return GraphName.of("ntp_time_provider"); } @Override @@ -53,7 +53,6 @@ public class NtpTimeProviderTest extends RosTest { try { ntpTimeProvider.updateTime(); } catch (IOException e) { - System.out.println("Dude"); // Ignored. This is only a sanity check. } ntpTimeProvider.getCurrentTime(); @@ -62,6 +61,8 @@ public class NtpTimeProviderTest extends RosTest { latch.countDown(); } }, nodeConfiguration); - assertTrue(latch.await(1, TimeUnit.SECONDS)); + boolean result = latch.await(10, TimeUnit.SECONDS); + //System.out.println("Latch waiting : " + latch.getCount() + " " + result + " [" + System.currentTimeMillis() + "]"); + assertTrue(result); } }