From 7c8093a37a8dbb57600e4c6e0587ed4b5023f3b0 Mon Sep 17 00:00:00 2001 From: labkey-jeckels Date: Sat, 3 Oct 2026 11:00:58 -0700 Subject: [PATCH] Reduce per-container memory; cache by GUID not Container --- .../labkey/specimen/SpecimenRequestManager.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/specimen/src/org/labkey/specimen/SpecimenRequestManager.java b/specimen/src/org/labkey/specimen/SpecimenRequestManager.java index 0e601503..69d7b324 100644 --- a/specimen/src/org/labkey/specimen/SpecimenRequestManager.java +++ b/specimen/src/org/labkey/specimen/SpecimenRequestManager.java @@ -29,6 +29,7 @@ import org.labkey.api.collections.LongArrayList; import org.labkey.api.data.ColumnInfo; import org.labkey.api.data.Container; +import org.labkey.api.data.ContainerManager; import org.labkey.api.data.DatabaseCache; import org.labkey.api.data.DbScope; import org.labkey.api.data.RuntimeSQLException; @@ -905,7 +906,7 @@ public void setViewColumnName(String viewColumnName) } } - private final BlockingCache>> GROUPED_VALUES_CACHE = DatabaseCache.get(SpecimenSchema.get().getScope(), 10, 8 * CacheManager.HOUR, "Specimen grouped values", new GroupedValuesCacheLoader()); + private final BlockingCache>> GROUPED_VALUES_CACHE = DatabaseCache.get(SpecimenSchema.get().getScope(), 10, 8 * CacheManager.HOUR, "Specimen grouped values", new GroupedValuesCacheLoader()); private static class GroupedResults { @@ -918,24 +919,25 @@ private static class GroupedResults public void clearGroupedValuesForColumn(Container container) { - GROUPED_VALUES_CACHE.remove(container); + GROUPED_VALUES_CACHE.remove(container.getEntityId()); } @NotNull public Map> getGroupedValuesForColumn(Container container, User user, ArrayList groupings) { - return GROUPED_VALUES_CACHE.get(container, Pair.of(user, groupings)); + return GROUPED_VALUES_CACHE.get(container.getEntityId(), Pair.of(user, groupings)); } - private class GroupedValuesCacheLoader implements CacheLoader>> + private class GroupedValuesCacheLoader implements CacheLoader>> { @Override - public Map> load(@NotNull Container c, @Nullable Object argument) + public Map> load(@NotNull GUID containerId, @Nullable Object argument) { Map> groupedValues = new HashMap<>(); // ColumnName and filter names are "QueryView" names; map them to actual table names before building query - Study study = StudyService.get().getStudy(c); + Container c = ContainerManager.getForId(containerId); + Study study = null != c ? StudyService.get().getStudy(c) : null; if (study != null) { @SuppressWarnings("unchecked") Pair> pair = (Pair>)argument;