This is an automated email from the ASF dual-hosted git repository.
trohrmann pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git
The following commit(s) were added to refs/heads/master by this push:
new fda7e5f [FLINK-12636] Check if proper JAR file in
JobWithJars#checkJarFile
fda7e5f is described below
commit fda7e5f97c28ff3c020070523812590f34f98ea3
Author: tianchen <[email protected]>
AuthorDate: Mon May 27 16:36:46 2019 +0800
[FLINK-12636] Check if proper JAR file in JobWithJars#checkJarFile
This closes #8552.
---
.../java/org/apache/flink/client/program/JobWithJars.java | 14 ++++++++++----
.../org/apache/flink/client/program/PackagedProgram.java | 2 +-
.../runtime/webmonitor/handlers/JarRunHandlerTest.java | 4 ++--
3 files changed, 13 insertions(+), 7 deletions(-)
diff --git
a/flink-clients/src/main/java/org/apache/flink/client/program/JobWithJars.java
b/flink-clients/src/main/java/org/apache/flink/client/program/JobWithJars.java
index 768de87..6e1bf99 100644
---
a/flink-clients/src/main/java/org/apache/flink/client/program/JobWithJars.java
+++
b/flink-clients/src/main/java/org/apache/flink/client/program/JobWithJars.java
@@ -28,6 +28,7 @@ import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.jar.JarFile;
/**
* A JobWithJars is a Flink dataflow plan, together with a bunch of JAR files
that contain
@@ -114,15 +115,20 @@ public class JobWithJars {
try {
jarFile = new File(jar.toURI());
} catch (URISyntaxException e) {
- throw new IOException("JAR file path is invalid '" +
jar + "'");
+ throw new IOException("JAR file path is invalid '" +
jar + '\'');
}
if (!jarFile.exists()) {
- throw new IOException("JAR file does not exist '" +
jarFile.getAbsolutePath() + "'");
+ throw new IOException("JAR file does not exist '" +
jarFile.getAbsolutePath() + '\'');
}
if (!jarFile.canRead()) {
- throw new IOException("JAR file can't be read '" +
jarFile.getAbsolutePath() + "'");
+ throw new IOException("JAR file can't be read '" +
jarFile.getAbsolutePath() + '\'');
+ }
+
+ try (JarFile ignored = new JarFile(jarFile)) {
+ // verify that we can open the Jar file
+ } catch (IOException e) {
+ throw new IOException("Error while opening jar file '"
+ jarFile.getAbsolutePath() + '\'', e);
}
- // TODO: Check if proper JAR file
}
public static ClassLoader buildUserCodeClassLoader(List<URL> jars,
List<URL> classpaths, ClassLoader parent) {
diff --git
a/flink-clients/src/main/java/org/apache/flink/client/program/PackagedProgram.java
b/flink-clients/src/main/java/org/apache/flink/client/program/PackagedProgram.java
index cc5c960..3218393 100644
---
a/flink-clients/src/main/java/org/apache/flink/client/program/PackagedProgram.java
+++
b/flink-clients/src/main/java/org/apache/flink/client/program/PackagedProgram.java
@@ -820,7 +820,7 @@ public class PackagedProgram {
JobWithJars.checkJarFile(jarfile);
}
catch (IOException e) {
- throw new ProgramInvocationException(e.getMessage());
+ throw new ProgramInvocationException(e.getMessage(), e);
}
catch (Throwable t) {
throw new ProgramInvocationException("Cannot access jar
file" + (t.getMessage() == null ? "." : ": " + t.getMessage()), t);
diff --git
a/flink-runtime-web/src/test/java/org/apache/flink/runtime/webmonitor/handlers/JarRunHandlerTest.java
b/flink-runtime-web/src/test/java/org/apache/flink/runtime/webmonitor/handlers/JarRunHandlerTest.java
index 1b23635..b4182c7 100644
---
a/flink-runtime-web/src/test/java/org/apache/flink/runtime/webmonitor/handlers/JarRunHandlerTest.java
+++
b/flink-runtime-web/src/test/java/org/apache/flink/runtime/webmonitor/handlers/JarRunHandlerTest.java
@@ -93,10 +93,10 @@ public class JarRunHandlerTest extends TestLogger {
// implies the job was actually
submitted
assertTrue(expected.get().getMessage().contains("ProgramInvocationException"));
// original cause is preserved
in stack trace
-
assertThat(expected.get().getMessage(), containsString("ZipException"));
+
assertThat(expected.get().getMessage(), containsString("ZipException: zip file
is empty"));
// implies the jar was
registered for the job graph (otherwise the jar name would not occur in the
exception)
// implies the jar was uploaded
(otherwise the file would not be found at all)
-
assertTrue(expected.get().getMessage().contains("empty.jar'. zip file is
empty"));
+
assertTrue(expected.get().getMessage().contains("empty.jar"));
} else {
throw e;
}