From 30b62449889fbed432c05bfec3aaa228197b8d54 Mon Sep 17 00:00:00 2001 From: James Agnew Date: Wed, 2 Dec 2020 08:44:06 -0500 Subject: [PATCH] Avoid blocking on shutdown (#2206) --- .../ResourceChangeListenerCacheRefresherImpl.java | 13 +++++++++---- ...esourceChangeListenerCacheRefresherImplTest.java | 13 +++++++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/hapi-fhir-jpaserver-searchparam/src/main/java/ca/uhn/fhir/jpa/cache/ResourceChangeListenerCacheRefresherImpl.java b/hapi-fhir-jpaserver-searchparam/src/main/java/ca/uhn/fhir/jpa/cache/ResourceChangeListenerCacheRefresherImpl.java index ca5473ef1e8..cabc4cd7791 100644 --- a/hapi-fhir-jpaserver-searchparam/src/main/java/ca/uhn/fhir/jpa/cache/ResourceChangeListenerCacheRefresherImpl.java +++ b/hapi-fhir-jpaserver-searchparam/src/main/java/ca/uhn/fhir/jpa/cache/ResourceChangeListenerCacheRefresherImpl.java @@ -103,17 +103,22 @@ public class ResourceChangeListenerCacheRefresherImpl implements IResourceChange return retval; } + @Override public ResourceChangeResult refreshCacheAndNotifyListener(IResourceChangeListenerCache theCache) { - ResourceChangeResult retval = new ResourceChangeResult(); + ResourceChangeResult retVal = new ResourceChangeResult(); + if (mySchedulerService.isStopping()) { + ourLog.info("Scheduler service is stopping, aborting cache refresh"); + return retVal; + } if (!myResourceChangeListenerRegistry.contains(theCache)) { ourLog.warn("Requesting cache refresh for unregistered listener {}. Aborting.", theCache); - return new ResourceChangeResult(); + return retVal; } SearchParameterMap searchParamMap = theCache.getSearchParameterMap(); ResourceVersionMap newResourceVersionMap = myResourceVersionSvc.getVersionMap(theCache.getResourceName(), searchParamMap); - retval = retval.plus(notifyListener(theCache, newResourceVersionMap)); + retVal = retVal.plus(notifyListener(theCache, newResourceVersionMap)); - return retval; + return retVal; } /** diff --git a/hapi-fhir-jpaserver-searchparam/src/test/java/ca/uhn/fhir/jpa/cache/ResourceChangeListenerCacheRefresherImplTest.java b/hapi-fhir-jpaserver-searchparam/src/test/java/ca/uhn/fhir/jpa/cache/ResourceChangeListenerCacheRefresherImplTest.java index c2323d119e9..a42f678655b 100644 --- a/hapi-fhir-jpaserver-searchparam/src/test/java/ca/uhn/fhir/jpa/cache/ResourceChangeListenerCacheRefresherImplTest.java +++ b/hapi-fhir-jpaserver-searchparam/src/test/java/ca/uhn/fhir/jpa/cache/ResourceChangeListenerCacheRefresherImplTest.java @@ -22,6 +22,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; +import static org.mockito.Mockito.when; @ExtendWith(SpringExtension.class) @@ -70,4 +71,16 @@ class ResourceChangeListenerCacheRefresherImplTest { assertTrue(cache.isInitialized()); verifyNoInteractions(listener); } + + @Test + public void testNoActionOnStoppingScheduler() { + when(mySchedulerService.isStopping()).thenReturn(true); + + IResourceChangeListener listener = mock(IResourceChangeListener.class); + ResourceChangeListenerCache cache = new ResourceChangeListenerCache(PATIENT_RESOURCE_NAME, listener, ourMap, TEST_REFRESH_INTERVAL_MS); + myResourceChangeListenerCacheRefresher.refreshCacheAndNotifyListener(cache); + + verify(myResourceVersionSvc, times(0)).getVersionMap(any(), any()); + } + }