mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-08-10 21:30:59 +00:00
fix(node-sync): merge client enable with boolean AND for PostgreSQL
The per-client traffic merge built enable = CASE WHEN ? = 0 THEN 0 ELSE enable END, mixing an integer literal with the boolean enable column. PostgreSQL rejects this with SQLSTATE 42804, aborting every node traffic merge transaction every 5s and freezing all up/down/last_online accounting on Postgres main panels. Replace with enable AND ?, which is type-safe on Postgres (boolean AND boolean) and identical in semantics on SQLite: the node may only disable a client, never re-enable one the panel already disabled. Closes #4964
This commit is contained in:
@@ -1760,7 +1760,7 @@ func (s *InboundService) setRemoteTrafficLocked(nodeID int, snap *runtime.Traffi
|
|||||||
// from the node arriving after a central disable would otherwise
|
// from the node arriving after a central disable would otherwise
|
||||||
// overwrite enable=false back to true, letting the client accumulate
|
// overwrite enable=false back to true, letting the client accumulate
|
||||||
// far more traffic than their limit before being disabled again.
|
// far more traffic than their limit before being disabled again.
|
||||||
enableExpr := "CASE WHEN ? = 0 THEN 0 ELSE enable END"
|
enableExpr := "enable AND ?"
|
||||||
if err := tx.Exec(
|
if err := tx.Exec(
|
||||||
fmt.Sprintf(
|
fmt.Sprintf(
|
||||||
`UPDATE client_traffics
|
`UPDATE client_traffics
|
||||||
|
|||||||
Reference in New Issue
Block a user