From b9c423b9fe30a8f3b8bb8210d40e7f625fe5b0dd Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Tue, 1 Sep 2026 12:56:30 -0700 Subject: [PATCH] GH Issue 1504: Fix up caching issues related to archiving and restoring containers --- .../org/labkey/api/data/ContainerManager.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/api/src/org/labkey/api/data/ContainerManager.java b/api/src/org/labkey/api/data/ContainerManager.java index 1cd7bd5af0b..92345b346bc 100644 --- a/api/src/org/labkey/api/data/ContainerManager.java +++ b/api/src/org/labkey/api/data/ContainerManager.java @@ -916,6 +916,23 @@ public static void archiveContainer(User user, Container container, boolean arch clearCache(); + // GH Issue 1504: Clear again after the commit has propagated the new state to other threads and transactions. Do this in a + // commit task since the caller may have started (or joined) a transaction; if not, it runs immediately. + CORE.getSchema().getScope().addCommitTask(() -> + { + // Be sure that we've waited until any threads that might be populating the cache have finished, otherwise + // one of them could put the pre-commit LockState back into the cache after we've cleared it + DATABASE_QUERY_LOCK.lock(); + try + { + clearCache(); + } + finally + { + DATABASE_QUERY_LOCK.unlock(); + } + }, DbScope.CommitTaskOption.POSTCOMMIT); + addAuditEvent(user, container, archive ? "Container has been archived." : "Archived container has been restored."); }