]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
ntp: reset polling interval when replacing sources
authorMiroslav Lichvar <mlichvar@redhat.com>
Tue, 16 May 2023 13:11:22 +0000 (15:11 +0200)
committerMiroslav Lichvar <mlichvar@redhat.com>
Thu, 18 May 2023 08:46:42 +0000 (10:46 +0200)
Set the polling interval to minpoll when changing address of a source,
but only if it is reachable to avoid increasing load on server or
network in case that is the reason for the source being unreachable.

This shortens the time needed to replace a falseticker or
unsynchronized source with a selectable source.

ntp_core.c
test/simulation/137-pool

index 4e2289a3f1c2e57a51d2779c021d3dda71180119..8ce9ed9beabfcecdfcf0d07fea175bbc1845298c 100644 (file)
@@ -833,6 +833,12 @@ NCR_ChangeRemoteAddress(NCR_Instance inst, NTP_Remote_Address *remote_addr, int
     inst->local_addr.sock_fd = NIO_OpenServerSocket(remote_addr);
   }
 
+  /* Reset the polling interval only if the source wasn't unreachable to
+     avoid increasing server/network load in case that is what caused
+     the source to be unreachable */
+  if (SRC_IsReachable(inst->source))
+    NCR_ResetPoll(inst);
+
   /* Update the reference ID and reset the source/sourcestats instances */
   SRC_SetRefid(inst->source, UTI_IPToRefid(&remote_addr->ip_addr),
                &inst->remote_addr.ip_addr);
index de8d77d1af7e5b283499bab6ef9c00af6f49ec3d..41c65d22e8a0b23f67fa982f9839d931a088aa2e 100755 (executable)
@@ -46,4 +46,23 @@ check_sync || test_fail
 check_file_messages "20.*192.168.123.*" 15 17 measurements.log || test_fail
 rm -f tmp/measurements.log
 
+servers=6
+falsetickers=2
+client_server_conf="pool nodes-1-2-3-4-5-6.net1.clk maxsources 5 polltarget 1 iburst"
+wander=1e-12
+jitter=1e-6
+min_sync_time=7
+
+run_test || test_fail
+check_chronyd_exit || test_fail
+check_source_selection || test_fail
+check_packet_interval || test_fail
+check_sync || test_fail
+
+check_log_messages "Detected falseticker" 2 10 || test_fail
+check_log_messages "Source 192.168.123.. replaced with" 1 1 || test_fail
+check_file_messages "20.*192.168.123.* 11.1   6  6 " 15 17 measurements.log || test_fail
+check_file_messages "20.*00:01:.. 192.168.123.* 11.1   6  6 " 1 1 measurements.log || test_fail
+rm -f tmp/measurements.log
+
 test_pass