Skip to content

Commit 553936b

Browse files
route_check: Fix hanging & logging level (#1520)
Fix for hanging: Enforce max len on string to be printed to stdout. With huge mismatch, the message to print can be too long to hang python print statement. Lower logging level: The log for "details of route mismatch" is lowered to WARNING. The caller of the route_check may log error, as it sees it fit. The failure of route_check is indicated to caller via exit code. How to verify it Simulate error (route-mismatch), and verify a) message len does not exceed set MAX b) log level is WARNING
1 parent ed45412 commit 553936b

File tree

2 files changed

+28
-9
lines changed

2 files changed

+28
-9
lines changed

scripts/route_check.py

+15-7
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@
6868
MIN_SCAN_INTERVAL = 10 # Every 10 seconds
6969
MAX_SCAN_INTERVAL = 3600 # An hour
7070

71+
PRINT_MSG_LEN_MAX = 1000
72+
7173
class Level(Enum):
7274
ERR = 'ERR'
7375
INFO = 'INFO'
@@ -77,7 +79,7 @@ def __str__(self):
7779
return self.value
7880

7981

80-
report_level = syslog.LOG_ERR
82+
report_level = syslog.LOG_WARNING
8183
write_to_syslog = False
8284

8385
def handler(signum, frame):
@@ -113,14 +115,20 @@ def print_message(lvl, *args):
113115
:param args: message as list of strings or convertible to string
114116
:return None
115117
"""
118+
msg = ""
116119
if (lvl <= report_level):
117-
msg = ""
118120
for arg in args:
119-
msg += " " + str(arg)
121+
rem_len = PRINT_MSG_LEN_MAX - len(msg)
122+
if rem_len <= 0:
123+
break
124+
msg += str(arg)[0:rem_len]
125+
120126
print(msg)
121127
if write_to_syslog:
122128
syslog.syslog(lvl, msg)
123129

130+
return msg
131+
124132

125133
def add_prefix(ip):
126134
"""
@@ -421,10 +429,10 @@ def check_routes():
421429
results["Unaccounted_ROUTE_ENTRY_TABLE_entries"] = rt_asic_miss
422430

423431
if results:
424-
print_message(syslog.LOG_ERR, "Failure results: {", json.dumps(results, indent=4), "}")
425-
print_message(syslog.LOG_ERR, "Failed. Look at reported mismatches above")
426-
print_message(syslog.LOG_ERR, "add: {", json.dumps(adds, indent=4), "}")
427-
print_message(syslog.LOG_ERR, "del: {", json.dumps(deletes, indent=4), "}")
432+
print_message(syslog.LOG_WARNING, "Failure results: {", json.dumps(results, indent=4), "}")
433+
print_message(syslog.LOG_WARNING, "Failed. Look at reported mismatches above")
434+
print_message(syslog.LOG_WARNING, "add: {", json.dumps(adds, indent=4), "}")
435+
print_message(syslog.LOG_WARNING, "del: {", json.dumps(deletes, indent=4), "}")
428436
return -1, results
429437
else:
430438
print_message(syslog.LOG_INFO, "All good!")

tests/route_check_test.py

+13-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import json
33
import os
44
import sys
5+
import syslog
56
import time
67
from unittest.mock import MagicMock, patch
78

@@ -442,8 +443,18 @@ def test_server(self, mock_subs, mock_sel, mock_table, mock_conn):
442443
assert ex_str == expect, "{} != {}".format(ex_str, expect)
443444
assert ex_raised, "Exception expected"
444445

445-
446-
446+
# Test print_msg
447+
route_check.PRINT_MSG_LEN_MAX = 5
448+
msg = route_check.print_message(syslog.LOG_ERR, "abcdefghi")
449+
assert len(msg) == 5
450+
msg = route_check.print_message(syslog.LOG_ERR, "ab")
451+
assert len(msg) == 2
452+
msg = route_check.print_message(syslog.LOG_ERR, "abcde")
453+
assert len(msg) == 5
454+
msg = route_check.print_message(syslog.LOG_ERR, "a", "b", "c", "d", "e", "f")
455+
assert len(msg) == 5
456+
457+
447458

448459

449460

0 commit comments

Comments
 (0)