fix: avoid flushing to monitor logs concurrently (#32552)
This commit is contained in:
parent
26b279864f
commit
a6c73dfdbe
1 changed files with 13 additions and 12 deletions
|
|
@ -11,6 +11,7 @@ import rq
|
|||
|
||||
import frappe
|
||||
from frappe.utils.data import cint
|
||||
from frappe.utils.synchronization import filelock
|
||||
|
||||
MONITOR_REDIS_KEY = "monitor-transactions"
|
||||
MONITOR_MAX_ENTRIES = 1000000
|
||||
|
|
@ -122,15 +123,15 @@ class Monitor:
|
|||
|
||||
|
||||
def flush():
|
||||
try:
|
||||
# Fetch all the logs without removing from cache
|
||||
logs = frappe.cache.lrange(MONITOR_REDIS_KEY, 0, -1)
|
||||
if logs:
|
||||
logs = list(map(frappe.safe_decode, logs))
|
||||
with open(log_file(), "a") as f:
|
||||
f.write("\n".join(logs))
|
||||
f.write("\n")
|
||||
# Remove fetched entries from cache
|
||||
frappe.cache.ltrim(MONITOR_REDIS_KEY, len(logs) - 1, -1)
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
logs = frappe.cache.lrange(MONITOR_REDIS_KEY, 0, -1)
|
||||
if not logs:
|
||||
return
|
||||
|
||||
logs = list(map(frappe.safe_decode, logs))
|
||||
with filelock("monitor_flush", is_global=True, timeout=5):
|
||||
with open(log_file(), "a") as f:
|
||||
f.write("\n".join(logs))
|
||||
f.write("\n")
|
||||
|
||||
# Remove fetched entries from cache
|
||||
frappe.cache.ltrim(MONITOR_REDIS_KEY, len(logs) - 1, -1)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue