From 4e26aac094a1348c3e1662ee88d77a323b1cd1ae Mon Sep 17 00:00:00 2001 From: Richard Davison Date: Thu, 16 Jun 2022 08:37:45 +0200 Subject: [PATCH 1/5] optimize jar discovery --- .../lambda/runtime/api/client/CustomerClassLoader.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/CustomerClassLoader.java b/aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/CustomerClassLoader.java index 3932547d..b0ee525e 100644 --- a/aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/CustomerClassLoader.java +++ b/aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/CustomerClassLoader.java @@ -36,15 +36,14 @@ private static void appendJars(File dir, List result) throws MalformedURLEx if (!dir.isDirectory()) { return; } - String[] names = dir.list(); + String[] names = dir.list((directory, name) -> name.endsWith(".jar")); if (names == null) { return; } Arrays.sort(names, CustomerClassLoader.LEXICAL_SORT_ORDER); - for(String path : names) { - if(path.endsWith(".jar")) { - result.add(newURL(dir, path)); - } + + for (String path : names) { + result.add(newURL(dir, path)); } } From 0b2704601567755e2adfdfd205075f276708f157 Mon Sep 17 00:00:00 2001 From: Richard Davison Date: Thu, 16 Jun 2022 11:02:23 +0200 Subject: [PATCH 2/5] remove lambda implementation --- .../lambda/runtime/api/client/CustomerClassLoader.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/CustomerClassLoader.java b/aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/CustomerClassLoader.java index b0ee525e..5050303d 100644 --- a/aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/CustomerClassLoader.java +++ b/aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/CustomerClassLoader.java @@ -36,10 +36,17 @@ private static void appendJars(File dir, List result) throws MalformedURLEx if (!dir.isDirectory()) { return; } - String[] names = dir.list((directory, name) -> name.endsWith(".jar")); + String[] names = dir.list(); if (names == null) { return; } + List nameList = new ArrayList<>(); + for (String path : names) { + if (path.endsWith(".jar")) { + nameList.add(path); + } + } + names = nameList.toArray(new String[nameList.size()]); Arrays.sort(names, CustomerClassLoader.LEXICAL_SORT_ORDER); for (String path : names) { From d67cf0afc188a759019704d13cfcfe10c38ef4fa Mon Sep 17 00:00:00 2001 From: Richard Davison Date: Thu, 16 Jun 2022 11:04:07 +0200 Subject: [PATCH 3/5] return of no jars are found --- .../lambda/runtime/api/client/CustomerClassLoader.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/CustomerClassLoader.java b/aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/CustomerClassLoader.java index 5050303d..90fab4c1 100644 --- a/aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/CustomerClassLoader.java +++ b/aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/CustomerClassLoader.java @@ -46,6 +46,11 @@ private static void appendJars(File dir, List result) throws MalformedURLEx nameList.add(path); } } + + if (nameList.isEmpty()) { + return; + } + names = nameList.toArray(new String[nameList.size()]); Arrays.sort(names, CustomerClassLoader.LEXICAL_SORT_ORDER); From e3d17db97f684a6c40daa485de28e763018bf2e6 Mon Sep 17 00:00:00 2001 From: Richard Davison Date: Fri, 17 Jun 2022 07:44:58 +0200 Subject: [PATCH 4/5] use static final annon class instead --- .../api/client/CustomerClassLoader.java | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/CustomerClassLoader.java b/aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/CustomerClassLoader.java index 90fab4c1..ebba58eb 100644 --- a/aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/CustomerClassLoader.java +++ b/aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/CustomerClassLoader.java @@ -3,6 +3,7 @@ package com.amazonaws.services.lambda.runtime.api.client; import java.io.File; +import java.io.FilenameFilter; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; @@ -18,6 +19,18 @@ class CustomerClassLoader extends URLClassLoader { * does not depend on the underlying filesystem. */ private final static Comparator LEXICAL_SORT_ORDER = Comparator.comparing(String::toString); + private final static FilenameFilter JAR_FILE_NAME_FILTER = new FilenameFilter() { + + @Override + public boolean accept(File dir, String name) { + int offset = name.length() - 4; + if (offset <= 0) { /* must be at least A.jar */ + return false; + } else { + return name.startsWith(".jar", offset); + } + } + }; CustomerClassLoader(String taskRoot, String optRoot, ClassLoader parent) throws IOException { super(getUrls(taskRoot, optRoot), parent); @@ -36,22 +49,10 @@ private static void appendJars(File dir, List result) throws MalformedURLEx if (!dir.isDirectory()) { return; } - String[] names = dir.list(); + String[] names = dir.list(JAR_FILE_NAME_FILTER); if (names == null) { return; } - List nameList = new ArrayList<>(); - for (String path : names) { - if (path.endsWith(".jar")) { - nameList.add(path); - } - } - - if (nameList.isEmpty()) { - return; - } - - names = nameList.toArray(new String[nameList.size()]); Arrays.sort(names, CustomerClassLoader.LEXICAL_SORT_ORDER); for (String path : names) { From d6f58ecd18d0e80b6c566ee404e0d4cfd072c898 Mon Sep 17 00:00:00 2001 From: Richard Davison Date: Fri, 17 Jun 2022 07:45:45 +0200 Subject: [PATCH 5/5] use static reference for consistency --- .../services/lambda/runtime/api/client/CustomerClassLoader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/CustomerClassLoader.java b/aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/CustomerClassLoader.java index ebba58eb..ee554c14 100644 --- a/aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/CustomerClassLoader.java +++ b/aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/CustomerClassLoader.java @@ -49,7 +49,7 @@ private static void appendJars(File dir, List result) throws MalformedURLEx if (!dir.isDirectory()) { return; } - String[] names = dir.list(JAR_FILE_NAME_FILTER); + String[] names = dir.list(CustomerClassLoader.JAR_FILE_NAME_FILTER); if (names == null) { return; }