The GitHub Actions job "CI" on grails-core.git/fix/autotimestamp-thread-safety has succeeded. Run started by GitHub user codeconsole (triggered by codeconsole).
Head commit for run: b0d7fe489d44ae4e266c1f36f2cff55ff4c0fe1b / Scott Murphy Heiberg <[email protected]> Make AutoTimestampEventListener temporary disabling thread-safe Fixes #14510. The withoutTimestamps, withoutDateCreated and withoutLastUpdated methods disabled timestamping by mutating the listener-wide entity maps (capturing each entry and setting it to Optional.empty()), which is JVM-global state. Overlapping windows on concurrent threads corrupted each other: a thread leaving its window re-enabled timestamping for every other thread still inside one, so historical dateCreated/lastUpdated values were silently overwritten. An exception inside the closure also left timestamping permanently disabled because the previous state was restored without try/finally. Suppression is now tracked per thread: the property-name getters consult a ThreadLocal holding an all-entities nesting depth plus the set of entity names disabled by per-class scopes. Each scope only re-enables the names it added, so nested and overlapping scopes restore correctly, and try/finally guarantees restoration when the closure throws. The shared metadata maps are no longer mutated. Behavioral note: disabling is now scoped to the calling thread; threads spawned inside the closure are no longer affected. The GORM auto-timestamping guide documents this. The spec now exercises the listener through beforeInsert/beforeUpdate and covers cross-thread isolation, overlapping windows, nested and overlapping same-class scopes, exception restoration and concurrent use. Report URL: https://github.com/apache/grails-core/actions/runs/29069671796 With regards, GitHub Actions via GitBox
