[
https://issues.apache.org/jira/browse/FLINK-2068?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14556391#comment-14556391
]
ASF GitHub Bot commented on FLINK-2068:
---------------------------------------
Github user rmetzger commented on a diff in the pull request:
https://github.com/apache/flink/pull/707#discussion_r30909390
--- Diff:
flink-clients/src/main/java/org/apache/flink/client/web/JobsServlet.java ---
@@ -1,212 +1,226 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package org.apache.flink.client.web;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.GregorianCalendar;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.fileupload.FileItem;
-import org.apache.commons.fileupload.FileUploadException;
-import org.apache.commons.fileupload.disk.DiskFileItemFactory;
-import org.apache.commons.fileupload.servlet.ServletFileUpload;
-
-/**
- * A servlet that accepts uploads of pact programs, returns a listing of
the
- * directory containing the job jars, and deleting these jars.
- */
-public class JobsServlet extends HttpServlet {
- /**
- * Serial UID for serialization interoperability.
- */
- private static final long serialVersionUID = -1373210261957434273L;
-
- //
------------------------------------------------------------------------
-
- private static final String ACTION_PARAM_NAME = "action";
-
- private static final String ACTION_LIST_VALUE = "list";
-
- private static final String ACTION_DELETE_VALUE = "delete";
-
- private static final String FILENAME_PARAM_NAME = "filename";
-
- private static final String CONTENT_TYPE_PLAIN = "text/plain";
-
- private static final Comparator<File> FILE_SORTER = new
Comparator<File>() {
- @Override
- public int compare(File o1, File o2) {
- return o1.getName().compareTo(o2.getName());
- }
-
- };
-
- //
------------------------------------------------------------------------
-
- /**
- * The file object for the directory for temporary files.
- */
- private final File tmpDir;
-
- /**
- * The file object for the directory for the submitted jars.
- */
- private final File destinationDir;
-
- /**
- * The name of the file to redirect to after the upload.
- */
- private final String targetPage;
-
- //
------------------------------------------------------------------------
-
- /**
- * Creates a new <tt>JobServlet</tt>, configured with the given
directories
- * and the given result page.
- *
- * @param jobsDir
- * The directory to store uploaded jobs in.
- * @param tmpDir
- * The directory for temporary files.
- * @param targetPage
- * The page to redirect to after a successful upload.
- */
- public JobsServlet(File jobsDir, File tmpDir, String targetPage) {
- this.tmpDir = tmpDir;
- this.destinationDir = jobsDir;
- this.targetPage = targetPage;
- }
-
- //
------------------------------------------------------------------------
-
- public void init(ServletConfig config) throws ServletException {
- super.init(config);
-
- if (!(tmpDir.isDirectory() && tmpDir.canWrite())) {
- throw new ServletException(tmpDir.getAbsolutePath() + "
is not a writable directory");
- }
-
- if (!(destinationDir.isDirectory() &&
destinationDir.canWrite())) {
- throw new
ServletException(destinationDir.getAbsolutePath() + " is not a writable
directory");
- }
- }
-
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
- String action = req.getParameter(ACTION_PARAM_NAME);
-
- if (action.equals(ACTION_LIST_VALUE)) {
- GregorianCalendar cal = new GregorianCalendar();
-
- File[] files = destinationDir.listFiles();
- Arrays.<File> sort(files, FILE_SORTER);
-
- resp.setStatus(HttpServletResponse.SC_OK);
- resp.setContentType(CONTENT_TYPE_PLAIN);
-
- PrintWriter writer = resp.getWriter();
- for (int i = 0; i < files.length; i++) {
- if (!files[i].getName().endsWith(".jar")) {
- continue;
- }
-
- cal.setTimeInMillis(files[i].lastModified());
- writer.println(files[i].getName() + '\t' +
(cal.get(GregorianCalendar.MONTH) + 1) + '/'
- +
cal.get(GregorianCalendar.DAY_OF_MONTH) + '/' + cal.get(GregorianCalendar.YEAR)
+ ' '
- +
cal.get(GregorianCalendar.HOUR_OF_DAY) + ':' +
cal.get(GregorianCalendar.MINUTE) + ':'
- + cal.get(GregorianCalendar.SECOND));
- }
- } else if (action.equals(ACTION_DELETE_VALUE)) {
- String filename = req.getParameter(FILENAME_PARAM_NAME);
-
- if (filename == null || filename.length() == 0) {
-
resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
- } else {
- File f = new File(destinationDir, filename);
- if (!f.exists() || f.isDirectory()) {
-
resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
- }
- f.delete();
- resp.setStatus(HttpServletResponse.SC_OK);
- }
- } else {
- resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
- }
- }
-
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
- // check, if we are doing the right request
- if (!ServletFileUpload.isMultipartContent(req)) {
- resp.sendError(HttpServletResponse.SC_BAD_REQUEST);
- return;
- }
-
- // create the disk file factory, limiting the file size to 20 MB
- DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
- fileItemFactory.setSizeThreshold(20 * 1024 * 1024); // 20 MB
- fileItemFactory.setRepository(tmpDir);
-
- String filename = null;
-
- // parse the request
- ServletFileUpload uploadHandler = new
ServletFileUpload(fileItemFactory);
- try {
- Iterator<FileItem> itr = ((List<FileItem>)
uploadHandler.parseRequest(req)).iterator();
-
- // go over the form fields and look for our file
- while (itr.hasNext()) {
- FileItem item = itr.next();
- if (!item.isFormField()) {
- if
(item.getFieldName().equals("upload_jar_file")) {
-
- // found the file, store it to
the specified location
- filename = item.getName();
- File file = new
File(destinationDir, filename);
- item.write(file);
- break;
- }
- }
- }
- } catch (FileUploadException ex) {
- resp.sendError(HttpServletResponse.SC_NOT_ACCEPTABLE,
"Invalid Fileupload.");
- return;
- } catch (Exception ex) {
-
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
- "An unknown error occurred during the file
upload.");
- return;
- }
-
- // write the okay message
- resp.sendRedirect(targetPage);
- }
-
-}
+/*
--- End diff --
I just checked and indeed, the line endings were wrong in that file ...
> WebUI support multiple jobs per jar file
> ----------------------------------------
>
> Key: FLINK-2068
> URL: https://issues.apache.org/jira/browse/FLINK-2068
> Project: Flink
> Issue Type: Improvement
> Components: Webfrontend
> Reporter: Matthias J. Sax
> Assignee: Matthias J. Sax
> Priority: Minor
>
> Currently, WebUI cannot deal with multiple jobs within a single jar file.
> Thus, only the plan of the job specified via "program-class" parameter in
> Manifest file can be displayed.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)