文档章节

Azkaban的Web Server源码探究系列18:上传flow涉及的过程分析

强子大叔的码田
 强子大叔的码田
发布于 2016/04/09 10:31
字数 225
阅读 449
收藏 0

上节涉及到上传flow,图为

对应的servlet是:

root.addServlet(new ServletHolder(new ProjectManagerServlet()), "/manager");


stop in azkaban.webapp.servlet.ProjectManagerServlet.doPost

下面来debug这个过程!

================================================================================

首先是request的文件提取,代码为:

 @SuppressWarnings("unchecked")

  public Map<String, Object> parseMultipart(HttpServletRequest request)

      throws IOException, ServletException {

  // org.apache.commons.fileupload.servlet.ServletFileUpload

    ServletFileUpload upload = new ServletFileUpload(_uploadItemFactory);

    List<FileItem> items = null;

    try {

     //基于commons-upload解析

      items = upload.parseRequest(request);

    } catch (FileUploadException e) {

      throw new ServletException(e);

    }

 

    Map<String, Object> params = new HashMap<String, Object>();

    for (FileItem item : items) {

     //开始遍历

      if (item.isFormField())

        params.put(item.getFieldName(), item.getString());

      else

        params.put(item.getFieldName(), item);

    }

    return params;

  }

Step completed: "thread=2067661130@qtp-1640296160-4", azkaban.webapp.servlet.MultipartParser.parseMultipart(), line=57 bci=102

57            params.put(item.getFieldName(), item);

 

2067661130@qtp-1640296160-4[1] print item

 item = "name=firstflow.zip, StoreLocation=/tmp/upload_517889bb_131b_4a07_b77b_d926a43bd759_00000000.tmp, size=375 bytes, isFormField=false, FieldName=file"

 

上面都是上传文件的东西,没啥好说的,azkaban会把zip文件解压缩

然后传给validator来解析,这里是DirectoryFlowLoader验证

这个要分几个小节来说,下回分解!



© 著作权归作者所有

强子大叔的码田

强子大叔的码田

粉丝 910
博文 1439
码字总数 1221048
作品 9
南京
架构师
私信 提问
加载中

评论(1)

是麦兜啊
是麦兜啊
博主,求咨询下,
Azkaban在解析zip文件的时候,如果.job中有中文,插入到mysql数据库时会有乱码。
这个问题你之前有碰到过吗?

谢谢
Azkaban的Web Server源码探究系列21: Flow执行前的准备工作

之前说到的上传flow,到最后都转化为数据库里的若干记录,当然是多个表的数据一起来全方位阐述这个你上传的flow. 那么,flow到底如何执行呢? 今天就开始研究flow的执行过程! ==============...

强子哥哥
2016/04/10
201
0
Azkaban的Web Server源码探究系列17:Creating Flows

到目前为止,一切还比较顺利!工程Project已经创建完毕,下面来尝试创建一个flow. === 什么是 flow? A job is a process you want to run in Azkaban. Jobs can be set up to be dependent ...

强子哥哥
2016/04/09
302
0
Azkaban的Web Server源码探究系列23: 一次性执行execute的正式提交

下面正式提交 String message = executorManager.submitExecutableFlow(exflow, user.getUserId()); 那么,到底executorManager是如何处理的呢? ========================================......

强子哥哥
2016/04/10
352
0
Azkaban 工作流调度器

1、Azkaban是什么 我们在工作中应该都遇到过这样的场景:有一个任务,这个任务可以划分成多个较小的任务完成,之所以进行划分是因为小任务之间可以并发的进行,例如是一个shell脚本执行的命令...

张欢19933
2016/11/23
478
0
Azkaban的Web Server源码探究系列20:resolve&buildFlow

上节,我们加载了job的描述属性 + 正确性验证 ! ============================================================== stop in azkaban.project.DirectoryFlowLoader.resolveDependencies ===......

强子哥哥
2016/04/09
243
0

没有更多内容

加载失败,请刷新页面

加载更多

c++ 虚基类

c++ 虚基类 p556

天王盖地虎626
16分钟前
10
0
Java中的面向对象

一、面向对象 面向对象和面向过程的区别 过程就是函数,就是写方法,就是方法的一种实现。 对象就是将函数,属性的一种封装。用人们思考习惯的方式思考问题。 如何自定义类 修饰符 类名{ //成...

zhiruochujian
24分钟前
3
0
k8s删除Terminating状态的命名空间

背景: 我们都知道在k8s中namespace有两种常见的状态,即Active和Terminating状态,其中后者一般会比较少见,只有当对应的命名空间下还存在运行的资源,但是该命名空间被删除时才会出现所谓的...

Andy-xu
27分钟前
20
0
seata源码阅读笔记

seata源码阅读笔记 本文没有seata的使用方法,怎么使用seata可以参考官方示例,详细的很。 本文基于v0.8.0版本,本文没贴代码。 seata中的三个重要部分: TC:事务协调器,维护全局事务和分支...

东都大狼狗
40分钟前
7
0
Rust:最小化窗口后 CPU占用率高 (winit,glutin,imgui-rust)

最近试着用 imgui-rust 绘制界面,发现窗口最小化后CPU占用会增大。 查询的资料如下: https://github.com/rust-windowing/winit/issues/783 https://github.com/ocornut/imgui/issues/1151 ...

reter
44分钟前
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部