Fix lock expired errors
This commit is contained in:
1 parent
6962cedba9
commit
450fc6fe53
3 files changed
+20
-5
No files matched your search
@@ -69,6 +69,7 @@ if (!cluster.worker) {
|
|||||||
onClientError: cwmp.onClientError,
|
onClientError: cwmp.onClientError,
|
||||||
timeout: 30000,
|
timeout: 30000,
|
||||||
keepAliveTimeout: 0,
|
keepAliveTimeout: 0,
|
||||||
|
requestTimeout: cwmp.REQUEST_TIMEOUT,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Need this for Node < 15
|
// Need this for Node < 15
|
||||||
|
|||||||
+15
-5
@@ -58,6 +58,10 @@ const REALM = "GenieACS";
|
|||||||
const MAX_CYCLES = 4;
|
const MAX_CYCLES = 4;
|
||||||
const MAX_CONCURRENT_REQUESTS = +config.get("MAX_CONCURRENT_REQUESTS");
|
const MAX_CONCURRENT_REQUESTS = +config.get("MAX_CONCURRENT_REQUESTS");
|
||||||
|
|
||||||
|
const MAX_SESSION_DURATION = 300000;
|
||||||
|
const LOCK_REFRESH_INTERVAL = 10000;
|
||||||
|
export const REQUEST_TIMEOUT = 10000;
|
||||||
|
|
||||||
const currentSessions = new WeakMap<Socket, SessionContext>();
|
const currentSessions = new WeakMap<Socket, SessionContext>();
|
||||||
const sessionsNonces = new WeakMap<Socket, string>();
|
const sessionsNonces = new WeakMap<Socket, string>();
|
||||||
|
|
||||||
@@ -207,10 +211,10 @@ async function writeResponse(
|
|||||||
sessionContext.lastActivity = now;
|
sessionContext.lastActivity = now;
|
||||||
currentSessions.set(connection, sessionContext);
|
currentSessions.set(connection, sessionContext);
|
||||||
if (now >= sessionContext.extendLock) {
|
if (now >= sessionContext.extendLock) {
|
||||||
sessionContext.extendLock = now + 10000;
|
sessionContext.extendLock = now + LOCK_REFRESH_INTERVAL;
|
||||||
const lockToken = await lock.acquireLock(
|
const lockToken = await lock.acquireLock(
|
||||||
`cwmp_session_${sessionContext.deviceId}`,
|
`cwmp_session_${sessionContext.deviceId}`,
|
||||||
sessionContext.timeout * 1000 + 15000,
|
sessionContext.timeout * 1000 + LOCK_REFRESH_INTERVAL + REQUEST_TIMEOUT,
|
||||||
0,
|
0,
|
||||||
`cwmp_session_${sessionContext.sessionId}`,
|
`cwmp_session_${sessionContext.sessionId}`,
|
||||||
);
|
);
|
||||||
@@ -865,7 +869,12 @@ async function sendAcsRequest(
|
|||||||
|
|
||||||
// When socket closes, store active sessions in cache
|
// When socket closes, store active sessions in cache
|
||||||
export async function onConnection(socket: Socket): Promise<void> {
|
export async function onConnection(socket: Socket): Promise<void> {
|
||||||
await once(socket, "close", 300000);
|
try {
|
||||||
|
await once(socket, "close", MAX_SESSION_DURATION);
|
||||||
|
} catch {
|
||||||
|
socket.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
const sessionContext = currentSessions.get(socket);
|
const sessionContext = currentSessions.get(socket);
|
||||||
if (!sessionContext) return;
|
if (!sessionContext) return;
|
||||||
currentSessions.delete(socket);
|
currentSessions.delete(socket);
|
||||||
@@ -1056,10 +1065,11 @@ async function processRequest(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sessionContext.extendLock = sessionContext.timestamp + 10000;
|
sessionContext.extendLock =
|
||||||
|
sessionContext.timestamp + LOCK_REFRESH_INTERVAL;
|
||||||
const lockToken = await lock.acquireLock(
|
const lockToken = await lock.acquireLock(
|
||||||
`cwmp_session_${sessionContext.deviceId}`,
|
`cwmp_session_${sessionContext.deviceId}`,
|
||||||
sessionContext.timeout * 1000 + 15000,
|
sessionContext.timeout * 1000 + LOCK_REFRESH_INTERVAL + REQUEST_TIMEOUT,
|
||||||
0,
|
0,
|
||||||
`cwmp_session_${sessionContext.sessionId}`,
|
`cwmp_session_${sessionContext.sessionId}`,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ interface ServerOptions {
|
|||||||
ssl?: { key: string; cert: string };
|
ssl?: { key: string; cert: string };
|
||||||
timeout?: number;
|
timeout?: number;
|
||||||
keepAliveTimeout?: number;
|
keepAliveTimeout?: number;
|
||||||
|
requestTimeout?: number;
|
||||||
onConnection?: (socket: Socket) => void;
|
onConnection?: (socket: Socket) => void;
|
||||||
onClientError?: (err: Error, socket: Socket) => void;
|
onClientError?: (err: Error, socket: Socket) => void;
|
||||||
}
|
}
|
||||||
@@ -152,6 +153,9 @@ export function start(
|
|||||||
server.timeout = options.timeout || 0;
|
server.timeout = options.timeout || 0;
|
||||||
if (options.keepAliveTimeout != null)
|
if (options.keepAliveTimeout != null)
|
||||||
server.keepAliveTimeout = options.keepAliveTimeout;
|
server.keepAliveTimeout = options.keepAliveTimeout;
|
||||||
|
if (options.requestTimeout != null)
|
||||||
|
server.requestTimeout = options.requestTimeout;
|
||||||
|
|
||||||
server.listen({ port: options.port, host: options.host });
|
server.listen({ port: options.port, host: options.host });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user