diff --git a/src/test/recovery/t/007_sync_rep.pl b/src/test/recovery/t/007_sync_rep.pl
index c257b6e..908fe49 100644
--- a/src/test/recovery/t/007_sync_rep.pl
+++ b/src/test/recovery/t/007_sync_rep.pl
@@ -22,8 +22,28 @@ sub test_sync_state
 		$self->reload;
 	}
 
-	my $result = $self->safe_psql('postgres', $check_sql);
-	is($result, $expected, $msg);
+	my $timeout_max = 30;
+	my $timeout = 0;
+	my $test_passed = 0;
+
+	# A reload may take some time to take effect on busy machines,
+	# hence use a loop with a timeout to give some room for the test
+	# to pass.
+	while ($timeout < $timeout_max)
+	{
+		my $result = $self->safe_psql('postgres', $check_sql);
+
+		if ($result eq $expected)
+		{
+			$test_passed = 1;
+			last;
+		}
+
+		$timeout++;
+		sleep 1;
+	}
+
+	ok($test_passed, $msg);
 }
 
 # Initialize master node
