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 27e36f1f44028463008651453e842f9223888f0d..668000317467ebe6cc361cc4d594a5d5a0704ee3 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 5f75c7c280d85548f3a875cd6d89ceb6be164c48..8676183b159c12afae108216a2ae94ed57a8a61a 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 1d7c49c58a2f408c68fd0057062ffbdfe64bed69..54234fa443f000a1511fecebf8f59db64de9546f 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 15c4de0d62f79441ff0542301824af19d44e893a..30fd865a0bad98e2e0bea93ebce7315a0e3de138 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 1ad8fa730622f2cf06cfbbceb64b6a522d5d2fcf..489dbc519fcb3e071c111099a3a399948971e200 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,