mirror of
https://github.com/louislam/uptime-kuma.git
synced 2025-06-19 10:46:48 +02:00
![]() This commit resolves duplicate key errors that occur when multiple monitors attempt to insert statistics simultaneously into stat_* tables. The fix addresses three interconnected issues: 1. **Circular Dependency Resolution**: database.js imports UptimeCalculator at module level, but UptimeCalculator needs Database.dbConfig. Fixed by using local imports in UptimeCalculator methods to ensure Database.dbConfig is properly initialized when accessed. 2. **Database Configuration Initialization**: Database.dbConfig was not set in the catch block when db-config.json is missing, causing undefined access errors. Fixed by ensuring Database.dbConfig is always set. 3. **Schema Column Naming Mismatch**: RedBean ORM uses camelCase (pingMin/pingMax) but Knex migrations create snake_case columns (ping_min/ping_max). Fixed by using correct snake_case column names in SQL queries. 4. **Atomic Upsert Operations**: Implemented database-specific upsert logic: - SQLite: INSERT ... ON CONFLICT DO UPDATE - MariaDB: INSERT ... ON DUPLICATE KEY UPDATE The solution maintains backward compatibility by falling back to R.store() when upsert fails, ensuring no data loss while eliminating race conditions for users with many monitors (200+). Fixes #5357 |
||
---|---|---|
.. | ||
jobs | ||
model | ||
modules | ||
monitor-conditions | ||
monitor-types | ||
notification-providers | ||
routers | ||
socket-handlers | ||
utils | ||
2fa.js | ||
auth.js | ||
check-version.js | ||
client.js | ||
config.js | ||
database.js | ||
docker.js | ||
embedded-mariadb.js | ||
google-analytics.js | ||
image-data-uri.js | ||
jobs.js | ||
notification.js | ||
password-hash.js | ||
prometheus.js | ||
proxy.js | ||
rate-limiter.js | ||
remote-browser.js | ||
server.js | ||
settings.js | ||
setup-database.js | ||
uptime-calculator.js | ||
uptime-kuma-server.js | ||
util-server.js |