From a9b41f10d0bf55dc6f6bbe7bf5bc15a5519aa101 Mon Sep 17 00:00:00 2001 From: mahlashrifi Date: Sun, 8 Sep 2024 13:24:03 +0330 Subject: [PATCH 01/14] Add base image for Java benchmarks on OpenWhisk --- config/systems.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/config/systems.json b/config/systems.json index bf095d3f..3fbfe706 100644 --- a/config/systems.json +++ b/config/systems.json @@ -243,6 +243,24 @@ "minio": "7.0.16" } } + }, + "java": { + "base_images": { + "8": "openwhisk/actionloop-java-v8", + }, + "images": [ + "function" + ], + "username": "docker_user", + "deployment": { + "files": [ + "index.js", + "storage.js" + ], + "packages": { + "minio": "8.5.9" + } + } } } } From b0e04838bf77855aba2cc6c608ef14f99885d238 Mon Sep 17 00:00:00 2001 From: mahlashrifi Date: Sun, 8 Sep 2024 17:55:11 +0330 Subject: [PATCH 02/14] Add Dockerfile for running Java benchmarks on OpenWhisk --- dockerfiles/openwhisk/java/Dockerfile.function | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 dockerfiles/openwhisk/java/Dockerfile.function diff --git a/dockerfiles/openwhisk/java/Dockerfile.function b/dockerfiles/openwhisk/java/Dockerfile.function new file mode 100644 index 00000000..d86cd461 --- /dev/null +++ b/dockerfiles/openwhisk/java/Dockerfile.function @@ -0,0 +1,8 @@ +ARG BASE_IMAGE +FROM $BASE_IMAGE +COPY . /function/ + +RUN apt-get update && apt-get install -y maven + +# Check if pom.xml exists before running Maven +RUN if [ -f ./pom.xml ]; then mvn clean install; else echo "pom.xml not found, aborting build." && exit 1; fi From f9db75555b70bf37f48756e4d855a1a1b6dc985a Mon Sep 17 00:00:00 2001 From: mahlashrifi Date: Sun, 8 Sep 2024 19:30:20 +0330 Subject: [PATCH 03/14] Update base image of java on OpenWhisk --- config/systems.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/systems.json b/config/systems.json index 3fbfe706..757ad388 100644 --- a/config/systems.json +++ b/config/systems.json @@ -246,7 +246,7 @@ }, "java": { "base_images": { - "8": "openwhisk/actionloop-java-v8", + "8": "openwhisk/java8action" }, "images": [ "function" @@ -254,8 +254,8 @@ "username": "docker_user", "deployment": { "files": [ - "index.js", - "storage.js" + "Main.java", + "Storage.java" ], "packages": { "minio": "8.5.9" From b1307e138eb9652f473a7349b68f9c8049c54dff Mon Sep 17 00:00:00 2001 From: mahlashrifi Date: Tue, 10 Sep 2024 21:02:36 +0330 Subject: [PATCH 04/14] Add Java-based handler for OpenWhisk --- benchmarks/wrappers/openwhisk/java/Main.java | 55 ++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 benchmarks/wrappers/openwhisk/java/Main.java diff --git a/benchmarks/wrappers/openwhisk/java/Main.java b/benchmarks/wrappers/openwhisk/java/Main.java new file mode 100644 index 00000000..d21960ae --- /dev/null +++ b/benchmarks/wrappers/openwhisk/java/Main.java @@ -0,0 +1,55 @@ +import com.google.gson.JsonObject; +import java.util.faas.Function; +import java.time.Instant; +import java.time.Duration; +import java.io.File; +import java.io.IOException; + + +public class Main { + public static JsonObject main(JsonObject args) { + + // Logger logger = Logger.getLogger(FunctionHandler.class.getName()); + // logger.setLevel(Level.INFO); + + Gson gson = new Gson(); + Function function = new Function(); + + Instant begin = Instant.now(); + JsonObject result = function.handler(args); + Instant end = Instant.now(); + + long computeTime = Duration.between(begin, end).toNanos() / 1000; // Convert nanoseconds to microseconds + + boolean isCold = false; + String fileName = "/cold_run"; + + File file = new File(fileName); + if (!file.exists()) { + isCold = true; + try { + file.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + // Convert to Unix timestamp in seconds.microseconds + String formattedBegin = String.format("%d.%06d", begin.getEpochSecond(), begin.getNano() / 1000); // Convert nanoseconds to microseconds + String formattedEnd = String.format("%d.%06d", end.getEpochSecond(), end.getNano() / 1000); + + String requestId = System.getenv("__OW_ACTIVATION_ID"); + + JsonObject jsonResult = new JsonObject(); + jsonObject.put("begin", formattedBegin); + jsonObject.put("end", formattedEnd); + jsonObject.put("request_id", "requestId"); + jsonObject.put("compute_time", computeTime); + jsonObject.put("is_cold", isCold); + jsonObject.put("result", result); + return jsonResult; + } +} + + + \ No newline at end of file From 29e7d3fbca67b84c8999edd0ebaa1b92c6e18a27 Mon Sep 17 00:00:00 2001 From: mahlashrifi Date: Thu, 19 Sep 2024 03:35:44 +0330 Subject: [PATCH 05/14] Add example config file for running java benchmarks on OpenWhisk --- config/example2.json | 69 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 config/example2.json diff --git a/config/example2.json b/config/example2.json new file mode 100644 index 00000000..1cf21c81 --- /dev/null +++ b/config/example2.json @@ -0,0 +1,69 @@ +{ + "experiments": { + "deployment": "openwhisk", + "update_code": false, + "update_storage": false, + "download_results": false, + "runtime": { + "language": "java", + "version": "8" + }, + "type": "invocation-overhead", + "perf-cost": { + "benchmark": "110.dynamic-html", + "experiments": ["cold", "warm", "burst", "sequential"], + "input-size": "test", + "repetitions": 50, + "concurrent-invocations": 50, + "memory-sizes": [128, 256] + }, + "network-ping-pong": { + "invocations": 50, + "repetitions": 1000, + "threads": 1 + }, + "invocation-overhead": { + "repetitions": 5, + "N": 20, + "type": "payload", + "payload_begin": 1024, + "payload_end": 6251000, + "payload_points": 20, + "code_begin": 1048576, + "code_end": 261619712, + "code_points": 20 + }, + "eviction-model": { + "invocations": 1, + "function_copy_idx": 0, + "repetitions": 5, + "sleep": 1 + } + }, + "deployment": { + "openwhisk": { + "shutdownStorage": false, + "removeCluster": false, + "wskBypassSecurity": "true", + "wskExec": "wsk", + "experimentalManifest": false, + "docker_registry": { + "registry": "", + "username": "", + "password": "" + }, + "storage": { + "address": "", + "mapped_port": 9011, + "access_key": "", + "secret_key": "", + "instance_id": "", + "output_buckets": [], + "input_buckets": [], + "type": "minio" + } + + } + } + } + \ No newline at end of file From bced3067ba65fdda399faf093facad7e87fa69c6 Mon Sep 17 00:00:00 2001 From: mahlashrifi Date: Thu, 19 Sep 2024 03:41:50 +0330 Subject: [PATCH 06/14] Add JAVA enum to list of languages --- sebs/faas/function.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sebs/faas/function.py b/sebs/faas/function.py index c2226cee..b58e9785 100644 --- a/sebs/faas/function.py +++ b/sebs/faas/function.py @@ -263,6 +263,7 @@ def deserialize(cached_config: dict) -> "Trigger": class Language(Enum): PYTHON = "python" NODEJS = "nodejs" + JAVA = "java" # FIXME: 3.7+ python with future annotations @staticmethod @@ -299,7 +300,7 @@ def serialize(self) -> dict: @staticmethod def deserialize(config: dict) -> Runtime: - languages = {"python": Language.PYTHON, "nodejs": Language.NODEJS} + languages = {"python": Language.PYTHON, "nodejs": Language.NODEJS, "java": Language.JAVA} return Runtime(language=languages[config["language"]], version=config["version"]) From 3c53e5f4eb20d98d8402a980d2acfd7d4978106d Mon Sep 17 00:00:00 2001 From: mahlashrifi Date: Thu, 19 Sep 2024 03:45:34 +0330 Subject: [PATCH 07/14] Add config of 601.hello-world (A simple java benchmark) --- benchmarks/600.java/601.hello-world/config.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 benchmarks/600.java/601.hello-world/config.json diff --git a/benchmarks/600.java/601.hello-world/config.json b/benchmarks/600.java/601.hello-world/config.json new file mode 100644 index 00000000..0c5d480e --- /dev/null +++ b/benchmarks/600.java/601.hello-world/config.json @@ -0,0 +1,6 @@ +{ + "timeout": 120, + "memory": 512, + "languages": ["java"] + } + \ No newline at end of file From 49deef789b01e05dfcb1318016f2b61b4900958c Mon Sep 17 00:00:00 2001 From: mahlashrifi Date: Thu, 19 Sep 2024 04:12:42 +0330 Subject: [PATCH 08/14] Init maven structure of 601.hello-world and add some codes for running java benchmarks --- benchmarks/600.java/601.hello-world/java/pom.xml | 0 .../601.hello-world/java/src/java/Function.java | 0 benchmarks/wrappers/openwhisk/java/Storage.java | 0 sebs.py | 2 +- sebs/benchmark.py | 14 ++++++++++++++ 5 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 benchmarks/600.java/601.hello-world/java/pom.xml create mode 100644 benchmarks/600.java/601.hello-world/java/src/java/Function.java create mode 100644 benchmarks/wrappers/openwhisk/java/Storage.java diff --git a/benchmarks/600.java/601.hello-world/java/pom.xml b/benchmarks/600.java/601.hello-world/java/pom.xml new file mode 100644 index 00000000..e69de29b diff --git a/benchmarks/600.java/601.hello-world/java/src/java/Function.java b/benchmarks/600.java/601.hello-world/java/src/java/Function.java new file mode 100644 index 00000000..e69de29b diff --git a/benchmarks/wrappers/openwhisk/java/Storage.java b/benchmarks/wrappers/openwhisk/java/Storage.java new file mode 100644 index 00000000..e69de29b diff --git a/sebs.py b/sebs.py index ff7f7769..bef07717 100755 --- a/sebs.py +++ b/sebs.py @@ -63,7 +63,7 @@ def simplified_common_params(func): @click.option( "--language", default=None, - type=click.Choice(["python", "nodejs"]), + type=click.Choice(["python", "nodejs", "java"]), help="Benchmark language", ) @click.option("--language-version", default=None, type=str, help="Benchmark language version") diff --git a/sebs/benchmark.py b/sebs/benchmark.py index 90eed6ae..7900c741 100644 --- a/sebs/benchmark.py +++ b/sebs/benchmark.py @@ -250,6 +250,8 @@ def copy_code(self, output_dir): FILES = { "python": ["*.py", "requirements.txt*"], "nodejs": ["*.js", "package.json"], + "java": ["pom.xml"], + } path = os.path.join(self.benchmark_path, self.language_name) for file_type in FILES[self.language_name]: @@ -288,6 +290,16 @@ def add_deployment_files(self, output_dir): for file in handlers: shutil.copy2(file, os.path.join(output_dir)) + def add_deployment_package_java(self, output_dir): + # append to the end of requirements file + packages = self._system_config.deployment_packages( + self._deployment_name, self.language_name + ) + if len(packages): + with open(os.path.join(output_dir, "requirements.txt"), "a") as out: + for package in packages: + out.write(package) + def add_deployment_package_python(self, output_dir): # append to the end of requirements file packages = self._system_config.deployment_packages( @@ -319,6 +331,8 @@ def add_deployment_package(self, output_dir): self.add_deployment_package_python(output_dir) elif self.language == Language.NODEJS: self.add_deployment_package_nodejs(output_dir) + elif self.language == Language.JAVA: + self.add_deployment_package_java(output_dir) else: raise NotImplementedError From 722b447565b39905db02dc6b35e42f2d57bf9c69 Mon Sep 17 00:00:00 2001 From: mahlashrifi Date: Fri, 20 Sep 2024 00:46:17 +0330 Subject: [PATCH 09/14] Sync hello-world maven paroject with the wrapper of openwhisk --- .../600.java/601.hello-world/my-app/pom.xml | 18 +++++++++ .../main/java/com/example/project/App.java | 17 +++++++++ .../java/com/example/project/AppTest.java | 38 +++++++++++++++++++ benchmarks/wrappers/openwhisk/java/Main.java | 4 +- 4 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 benchmarks/600.java/601.hello-world/my-app/pom.xml create mode 100644 benchmarks/600.java/601.hello-world/my-app/src/main/java/com/example/project/App.java create mode 100644 benchmarks/600.java/601.hello-world/my-app/src/test/java/com/example/project/AppTest.java diff --git a/benchmarks/600.java/601.hello-world/my-app/pom.xml b/benchmarks/600.java/601.hello-world/my-app/pom.xml new file mode 100644 index 00000000..f61b9e7f --- /dev/null +++ b/benchmarks/600.java/601.hello-world/my-app/pom.xml @@ -0,0 +1,18 @@ + + 4.0.0 + com.example.project + my-app + jar + 1.0-SNAPSHOT + my-app + http://maven.apache.org + + + junit + junit + 3.8.1 + test + + + diff --git a/benchmarks/600.java/601.hello-world/my-app/src/main/java/com/example/project/App.java b/benchmarks/600.java/601.hello-world/my-app/src/main/java/com/example/project/App.java new file mode 100644 index 00000000..f59864ee --- /dev/null +++ b/benchmarks/600.java/601.hello-world/my-app/src/main/java/com/example/project/App.java @@ -0,0 +1,17 @@ +package com.example.project; +import com.google.gson.JsonObject; + +/** + * Hello world! + * + */ +public class App +{ + + + public JsonObject handler( String[] args ) + { + JsonObject jsonResult = new JsonObject(); + jsonObject.put("my string=", "heloooo worlddd!"); + } +} diff --git a/benchmarks/600.java/601.hello-world/my-app/src/test/java/com/example/project/AppTest.java b/benchmarks/600.java/601.hello-world/my-app/src/test/java/com/example/project/AppTest.java new file mode 100644 index 00000000..b3a7066d --- /dev/null +++ b/benchmarks/600.java/601.hello-world/my-app/src/test/java/com/example/project/AppTest.java @@ -0,0 +1,38 @@ +package com.example.project; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +/** + * Unit test for simple App. + */ +public class AppTest + extends TestCase +{ + /** + * Create the test case + * + * @param testName name of the test case + */ + public AppTest( String testName ) + { + super( testName ); + } + + /** + * @return the suite of tests being tested + */ + public static Test suite() + { + return new TestSuite( AppTest.class ); + } + + /** + * Rigourous Test :-) + */ + public void testApp() + { + assertTrue( true ); + } +} diff --git a/benchmarks/wrappers/openwhisk/java/Main.java b/benchmarks/wrappers/openwhisk/java/Main.java index d21960ae..828aa64f 100644 --- a/benchmarks/wrappers/openwhisk/java/Main.java +++ b/benchmarks/wrappers/openwhisk/java/Main.java @@ -1,5 +1,5 @@ import com.google.gson.JsonObject; -import java.util.faas.Function; +import com.example.project.App ; import java.time.Instant; import java.time.Duration; import java.io.File; @@ -13,7 +13,7 @@ public static JsonObject main(JsonObject args) { // logger.setLevel(Level.INFO); Gson gson = new Gson(); - Function function = new Function(); + App function = new App(); Instant begin = Instant.now(); JsonObject result = function.handler(args); From 930813e4014622615300bd223b994a56f99e1234 Mon Sep 17 00:00:00 2001 From: mahlashrifi Date: Tue, 24 Sep 2024 01:21:32 +0330 Subject: [PATCH 10/14] Example config file for running 601.hello-world on openwhisk --- config/example2.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/example2.json b/config/example2.json index 1cf21c81..3575d601 100644 --- a/config/example2.json +++ b/config/example2.json @@ -10,7 +10,7 @@ }, "type": "invocation-overhead", "perf-cost": { - "benchmark": "110.dynamic-html", + "benchmark": "601.hello-world", "experiments": ["cold", "warm", "burst", "sequential"], "input-size": "test", "repetitions": 50, From f295e01417dd3b0bb4eebeb9f5984f227510168c Mon Sep 17 00:00:00 2001 From: mahlashrifi Date: Tue, 24 Sep 2024 01:23:03 +0330 Subject: [PATCH 11/14] Correct Structure of maven project in 601.hello-world benchmark --- .../600.java/601.hello-world/java/pom.xml | 38 +++++++++++++++++++ .../java/src/java/Function.java | 0 .../java/src/main/java/faas/App.java | 7 ++++ .../600.java/601.hello-world/my-app/pom.xml | 18 --------- .../main/java/com/example/project/App.java | 17 --------- .../java/com/example/project/AppTest.java | 38 ------------------- 6 files changed, 45 insertions(+), 73 deletions(-) delete mode 100644 benchmarks/600.java/601.hello-world/java/src/java/Function.java create mode 100644 benchmarks/600.java/601.hello-world/java/src/main/java/faas/App.java delete mode 100644 benchmarks/600.java/601.hello-world/my-app/pom.xml delete mode 100644 benchmarks/600.java/601.hello-world/my-app/src/main/java/com/example/project/App.java delete mode 100644 benchmarks/600.java/601.hello-world/my-app/src/test/java/com/example/project/AppTest.java diff --git a/benchmarks/600.java/601.hello-world/java/pom.xml b/benchmarks/600.java/601.hello-world/java/pom.xml index e69de29b..eb4f359e 100644 --- a/benchmarks/600.java/601.hello-world/java/pom.xml +++ b/benchmarks/600.java/601.hello-world/java/pom.xml @@ -0,0 +1,38 @@ + + + 4.0.0 + + + faas + 601.hello-world + 1.0-SNAPSHOT + jar + + + + 1.8 + 1.8 + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.2.0 + + + + faas.App + + + + + + + + diff --git a/benchmarks/600.java/601.hello-world/java/src/java/Function.java b/benchmarks/600.java/601.hello-world/java/src/java/Function.java deleted file mode 100644 index e69de29b..00000000 diff --git a/benchmarks/600.java/601.hello-world/java/src/main/java/faas/App.java b/benchmarks/600.java/601.hello-world/java/src/main/java/faas/App.java new file mode 100644 index 00000000..365a6201 --- /dev/null +++ b/benchmarks/600.java/601.hello-world/java/src/main/java/faas/App.java @@ -0,0 +1,7 @@ +package faas; + +public class App { + public static void main(String[] args) { + System.out.println("Hellooooooooooooooooooo, World!"); + } +} \ No newline at end of file diff --git a/benchmarks/600.java/601.hello-world/my-app/pom.xml b/benchmarks/600.java/601.hello-world/my-app/pom.xml deleted file mode 100644 index f61b9e7f..00000000 --- a/benchmarks/600.java/601.hello-world/my-app/pom.xml +++ /dev/null @@ -1,18 +0,0 @@ - - 4.0.0 - com.example.project - my-app - jar - 1.0-SNAPSHOT - my-app - http://maven.apache.org - - - junit - junit - 3.8.1 - test - - - diff --git a/benchmarks/600.java/601.hello-world/my-app/src/main/java/com/example/project/App.java b/benchmarks/600.java/601.hello-world/my-app/src/main/java/com/example/project/App.java deleted file mode 100644 index f59864ee..00000000 --- a/benchmarks/600.java/601.hello-world/my-app/src/main/java/com/example/project/App.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.example.project; -import com.google.gson.JsonObject; - -/** - * Hello world! - * - */ -public class App -{ - - - public JsonObject handler( String[] args ) - { - JsonObject jsonResult = new JsonObject(); - jsonObject.put("my string=", "heloooo worlddd!"); - } -} diff --git a/benchmarks/600.java/601.hello-world/my-app/src/test/java/com/example/project/AppTest.java b/benchmarks/600.java/601.hello-world/my-app/src/test/java/com/example/project/AppTest.java deleted file mode 100644 index b3a7066d..00000000 --- a/benchmarks/600.java/601.hello-world/my-app/src/test/java/com/example/project/AppTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.example.project; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; - -/** - * Unit test for simple App. - */ -public class AppTest - extends TestCase -{ - /** - * Create the test case - * - * @param testName name of the test case - */ - public AppTest( String testName ) - { - super( testName ); - } - - /** - * @return the suite of tests being tested - */ - public static Test suite() - { - return new TestSuite( AppTest.class ); - } - - /** - * Rigourous Test :-) - */ - public void testApp() - { - assertTrue( true ); - } -} From 0fa43be50f395bd1a054d33f442f49974e71033d Mon Sep 17 00:00:00 2001 From: mahlashrifi Date: Tue, 24 Sep 2024 01:23:55 +0330 Subject: [PATCH 12/14] Expand add_code functions for maven java rojects --- sebs/benchmark.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/sebs/benchmark.py b/sebs/benchmark.py index 7900c741..771fde7f 100644 --- a/sebs/benchmark.py +++ b/sebs/benchmark.py @@ -251,12 +251,23 @@ def copy_code(self, output_dir): "python": ["*.py", "requirements.txt*"], "nodejs": ["*.js", "package.json"], "java": ["pom.xml"], - } path = os.path.join(self.benchmark_path, self.language_name) + for file_type in FILES[self.language_name]: for f in glob.glob(os.path.join(path, file_type)): shutil.copy2(os.path.join(path, f), output_dir) + + # copy src folder of java (java benchmarks are maven project and need directories) + if self.language_name == "java": + output_src_dir = os.path.join(output_dir, "src") + + if os.path.exists(output_src_dir): + # If src dir in output exist, remove the directory and all its contents + shutil.rmtree(output_src_dir) + #To have contents of src directory in the direcory named src located in output + shutil.copytree(os.path.join(path, "src"), output_src_dir) + # support node.js benchmarks with language specific packages nodejs_package_json = os.path.join(path, f"package.json.{self.language_version}") if os.path.exists(nodejs_package_json): From 3fb661f7f5bb55e8d69f0ceb25ece21d986d55da Mon Sep 17 00:00:00 2001 From: mahlashrifi Date: Tue, 24 Sep 2024 01:26:57 +0330 Subject: [PATCH 13/14] Exclude Java main wrapper from Docker directory created in runtimes. --- sebs/openwhisk/openwhisk.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sebs/openwhisk/openwhisk.py b/sebs/openwhisk/openwhisk.py index 00660de9..d49f3e19 100644 --- a/sebs/openwhisk/openwhisk.py +++ b/sebs/openwhisk/openwhisk.py @@ -168,7 +168,7 @@ def build_base_image( ) for fn in os.listdir(directory): - if fn not in ("index.js", "__main__.py"): + if fn not in ("index.js", "__main__.py", "Main.java"): file = os.path.join(directory, fn) shutil.move(file, build_dir) @@ -219,6 +219,7 @@ def package_code( CONFIG_FILES = { "python": ["__main__.py"], "nodejs": ["index.js"], + "nodejs": ["Main.java"], } package_config = CONFIG_FILES[language_name] From a14d0a0b67e5e959f632557ecf3029facad4cbeb Mon Sep 17 00:00:00 2001 From: mahlashrifi Date: Wed, 25 Sep 2024 13:31:49 +0330 Subject: [PATCH 14/14] Fix a big --- sebs/openwhisk/openwhisk.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sebs/openwhisk/openwhisk.py b/sebs/openwhisk/openwhisk.py index d49f3e19..01684ed3 100644 --- a/sebs/openwhisk/openwhisk.py +++ b/sebs/openwhisk/openwhisk.py @@ -219,7 +219,7 @@ def package_code( CONFIG_FILES = { "python": ["__main__.py"], "nodejs": ["index.js"], - "nodejs": ["Main.java"], + "java": ["Main.java"], } package_config = CONFIG_FILES[language_name]