From e47c89b1a83351e9d89bf4a1a22f93b1d5b8f5cc Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Fri, 17 Jan 2025 09:22:25 -0700
Subject: [PATCH] test executor methods

---
 .../earthquake/nshmp/www/PrimingResource.java |  2 +-
 .../earthquake/nshmp/www/ServletUtil.java     | 30 ++++++++++++-------
 .../nshmp/www/hazard/DisaggController.java    |  5 +++-
 .../nshmp/www/hazard/HazardController.java    |  5 +++-
 .../nshmp/www/source/RateController.java      |  5 +++-
 5 files changed, 33 insertions(+), 14 deletions(-)

diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/PrimingResource.java b/src/main/java/gov/usgs/earthquake/nshmp/www/PrimingResource.java
index 27e36f1f..66800031 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/PrimingResource.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/PrimingResource.java
@@ -54,7 +54,7 @@ public class PrimingResource implements OrderedResource {
   @Override
   public void afterRestore(Context<? extends Resource> context) throws Exception {
     // Reset executors on restore as Shutdown event does not fire on AWS lambda
-    ServletUtil.resetExecutors();
+    // ServletUtil.resetExecutors();
   }
 
   private static AwsProxyRequest getAwsProxyRequest(String path) {
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/ServletUtil.java b/src/main/java/gov/usgs/earthquake/nshmp/www/ServletUtil.java
index 5f75c7c2..8676183b 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/ServletUtil.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/ServletUtil.java
@@ -67,8 +67,8 @@ public class ServletUtil {
 
   static {
     THREAD_COUNT = getRuntime().availableProcessors();
-    CALC_EXECUTOR = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(THREAD_COUNT));
-    TASK_EXECUTOR = Executors.newSingleThreadExecutor();
+    // CALC_EXECUTOR = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(THREAD_COUNT));
+    // TASK_EXECUTOR = Executors.newSingleThreadExecutor();
     GSON = new GsonBuilder()
         .registerTypeAdapter(Imt.class, new WsUtils.EnumSerializer<Imt>())
         .registerTypeAdapter(ValueFormat.class, new WsUtils.EnumSerializer<ValueFormat>())
@@ -94,14 +94,24 @@ public class ServletUtil {
   /**
    * Reset executors on AWS Lambda SnapStart restore
    */
-  static void resetExecutors() {
-    CALC_EXECUTOR.shutdown();
-    TASK_EXECUTOR.shutdown();
+  // static void resetExecutors() {
+  //   CALC_EXECUTOR.shutdown();
+  //   TASK_EXECUTOR.shutdown();
 
+  //   CALC_EXECUTOR = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(THREAD_COUNT));
+  //   TASK_EXECUTOR = Executors.newSingleThreadExecutor();
+  // }
+
+  public static void startExecutors() {
     CALC_EXECUTOR = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(THREAD_COUNT));
     TASK_EXECUTOR = Executors.newSingleThreadExecutor();
   }
 
+  public static void shutdownExecutors() {
+    CALC_EXECUTOR.shutdown();
+    TASK_EXECUTOR.shutdown();
+  }
+
   static void model(HazardModel model) {
     HAZARD_MODEL = model;
   }
@@ -110,11 +120,11 @@ public class ServletUtil {
     return HAZARD_MODEL;
   }
 
-  @EventListener
-  void shutdown(ShutdownEvent event) {
-    CALC_EXECUTOR.shutdown();
-    TASK_EXECUTOR.shutdown();
-  }
+  // @EventListener
+  // void shutdown(ShutdownEvent event) {
+  //   CALC_EXECUTOR.shutdown();
+  //   TASK_EXECUTOR.shutdown();
+  // }
 
   @EventListener
   void startup(StartupEvent event) {
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggController.java
index 1d7c49c5..54234fa4 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggController.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/DisaggController.java
@@ -109,11 +109,14 @@ public class DisaggController {
       @QueryValue @Nullable Set<Imt> imt,
       @QueryValue @Nullable Set<DisaggDataType> out) {
     try {
+      ServletUtil.startExecutors();
       Set<Imt> imts = HazardService.readImts(http);
       Set<DataType> dataTypes = HazardService.readDataTypes(http);
       DisaggService.RequestRp request = new DisaggService.RequestRp(
           http, longitude, latitude, vs30, imts, returnPeriod, dataTypes);
-      return DisaggService.getDisaggRp(request);
+      var response = DisaggService.getDisaggRp(request);
+      ServletUtil.shutdownExecutors();
+      return response;
     } catch (Exception e) {
       return ServletUtil.error(
           DisaggService.LOG, e,
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardController.java
index 15c4de0d..30fd865a 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardController.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/hazard/HazardController.java
@@ -103,10 +103,13 @@ public class HazardController {
           defaultValue = "false") @Nullable Boolean maxdir,
       @QueryValue @Nullable Set<Imt> imt) {
     try {
+      ServletUtil.startExecutors();
       Set<Imt> imts = HazardService.readImts(http);
       HazardService.Request request = new HazardService.Request(
           http, longitude, latitude, vs30, imts, truncate, maxdir);
-      return HazardService.getHazard(request);
+      var response = HazardService.getHazard(request);
+      ServletUtil.shutdownExecutors();
+      return response;
     } catch (Exception e) {
       return ServletUtil.error(
           HazardService.LOG, e,
diff --git a/src/main/java/gov/usgs/earthquake/nshmp/www/source/RateController.java b/src/main/java/gov/usgs/earthquake/nshmp/www/source/RateController.java
index 1ad8fa73..489dbc51 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/www/source/RateController.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/www/source/RateController.java
@@ -86,9 +86,12 @@ public class RateController {
           minimum = "0.01",
           maximum = "1000") @PathVariable double distance) {
     try {
+      ServletUtil.startExecutors();
       RateService.Request request = new RateService.Request(
           http, longitude, latitude, distance);
-      return RateService.getRate(request);
+      var response = RateService.getRate(request);
+      ServletUtil.shutdownExecutors();
+      return response;
     } catch (Exception e) {
       return ServletUtil.error(
           RateService.LOG, e,
-- 
GitLab