[clsi] make last access tracking more robust (#32192)

* [clsi] do not overwrite last access during initial scan

* [clsi] cleanup submission cache 5-10min after startup

* [clsi] address review comments

GitOrigin-RevId: e03beec1b3deaee50629ada72b0242a8a2b2ae66
This commit is contained in:
Jakob Ackermann
2026-03-18 09:07:10 +00:00
committed by Copybot
parent a9c413857a
commit d5b55b831d
@@ -22,6 +22,11 @@ import { LAST_ACCESS } from './LastProjectAccess.js'
let ProjectPersistenceManager
const oneDay = 24 * 60 * 60 * 1000
function setLastAccessIfNewer(id, ts) {
const prev = LAST_ACCESS.get(id) ?? 0
LAST_ACCESS.set(id, Math.max(ts, prev))
}
let ANY_DISK_LOW = false
let ANY_DISK_CRITICAL_LOW = false
@@ -118,14 +123,23 @@ export default ProjectPersistenceManager = {
Settings.path.compilesDir,
projectAndUserId
)
if (!/^[a-f0-9]{24}(-[a-f0-9]{24})?$/.test(projectAndUserId)) {
// Submissions etc. Schedule for cleanup in 5-10min with jitter.
const delay = (5 + 5 * Math.random()) * 60_000
setLastAccessIfNewer(
projectAndUserId,
Date.now() - ProjectPersistenceManager.EXPIRY_TIMEOUT + delay
)
return cb()
}
const projectId = projectAndUserId.slice(0, 24)
fs.stat(compileDir, (err, stats) => {
if (err) {
// Schedule for immediate cleanup
LAST_ACCESS.set(projectId, 0)
setLastAccessIfNewer(projectId, 0)
} else {
// Cleanup eventually.
LAST_ACCESS.set(projectId, stats.mtime.getTime())
setLastAccessIfNewer(projectId, stats.mtime.getTime())
}
cb()
})