2019独角兽企业重金招聘Python工程师标准>>>

上节,我们加载了job的描述属性 + 正确性验证 !

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

stop in azkaban.project.DirectoryFlowLoader.resolveDependencies

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

这个也很简单,比如有个Hello.job,World.job

指定了world依赖Hello

则最后在

private HashMap<String, Map<String, Edge>> nodeDependencies;

这种结构里存的是什么呢?

HashMap<

String, ---World

Map<

String, ---Hello

Edge ---<Hello,World>

>

>

是不是很简单,没啥可说的!

接下来是

// Create the flows.

buildFlowsFromDependencies();

到目前为止,我们装载了点+校验正确性+边。有了点和边,其实就有了图,有了图,我们就可以构建Flow了

这也正是我们下面要做的事情!

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

细节略

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

最后就是生成报告,只要写的没问题,都通过!

然后就是数据库的操作,这是我们需要关心的!

---

synchronized (project) {

int newVersion = projectLoader.getLatestProjectVersion(project) + 1;

Map<String, Flow> flows = loader.getFlowMap();

for (Flow flow : flows.values()) {

flow.setProjectId(project.getId());

flow.setVersion(newVersion);

}

logger.info("Uploading file to db " + archive.getName());

projectLoader.uploadProjectFile(project, newVersion, fileType, archive.getName(), archive,

uploader.getUserId());

logger.info("Uploading flow to db " + archive.getName());

projectLoader.uploadFlows(project, newVersion, flows.values());

logger.info("Changing project versions " + archive.getName());

projectLoader.changeProjectVersion(project, newVersion, uploader.getUserId());

project.setFlows(flows);

logger.info("Uploading Job properties");

projectLoader.uploadProjectProperties(project, new ArrayList<Props>(jobProps.values()));

logger.info("Uploading Props properties");

projectLoader.uploadProjectProperties(project, propProps);

}

logger.info("Uploaded project files. Cleaning up temp files.");

projectLoader.postEvent(project, EventType.UPLOADED, uploader.getUserId(),

"Uploaded project files zip " + archive.getName());

try {

FileUtils.deleteDirectory(file);

} catch (IOException e) {

file.deleteOnExit();

e.printStackTrace();

}

logger.info("Cleaning up old install files older than " + (project.getVersion() - projectVersionRetention));

projectLoader.cleanOlderProjectVersion(project.getId(), project.getVersion() - projectVersionRetention);

return reports;

}

首先是查询出最大版本号,+1最为最新值。

---

1)上传文件,分段,10M为1个单位,相关表---Project-files

2) project_versions

3)project_flows :记录根据file分析出来的拓扑图信息

比如一个可能的拓扑图如下:

json = "{"metadata":{},"project.id":9,"nodes":[{"layout":{"level":0},"propSource":null,"jobSource":"Hello.job","expectedRuntime":1,"id":"Hello","jobType":"command"},{"layout":{"level":1},"propSource":null,"jobSource":"World.job","expectedRuntime":1,"id":"World","jobType":"command"}],"edges":[{"source":"Hello","target":"World"}],"failure.email":[],"success.email":[],"id":"World","type":"flow","version":11,"mailCreator":"default","props":[],"layedout":false}"

转载于:https://my.oschina.net/qiangzigege/blog/655836

Azkaban的Web Server源码探究系列20:resolvebuildFlow相关推荐

  1. Azkaban的Web Server源码探究系列22: 一次性执行execute的提交准备

    2019独角兽企业重金招聘Python工程师标准>>> 首先,触发按钮 会弹出一个页面 可以看到有个exec id 1 为什么会发生这一切?  通过抓包,我们得知 所以需要研究 st ...

  2. Azkaban的Web Server源码探究系列7: ExecutorManager的初始化

    2019独角兽企业重金招聘Python工程师标准>>> 很好,到目前为止,一切都很顺利! 下面分析ExecutorManager的初始化过程 ==================== ...

  3. jQuery源码分析系列

    声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://git ...

  4. [转]jQuery源码分析系列

    文章转自:jQuery源码分析系列-Aaron 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://github.com/JsAaro ...

  5. 【SpringCloud系列】服务注册与发现 - Eureka Server源码分析(2)

    3.6.Eureka Server 源码分析 上一篇文章简单介绍了 Eureka 的一些概念,今天咱们来看看其原理和源码,首先先看 Eureka Server 的原理. 3.6.1.Eureka Se ...

  6. Tomcat源码解析系列二:Tomcat总体架构

    Tomcat即是一个HTTP服务器,也是一个servlet容器,主要目的就是包装servlet,并对请求响应相应的servlet,纯servlet的web应用似乎很好理解Tomcat是如何装载serv ...

  7. 从Spring源码探究AOP代码织入的过程

    随着不断地使用Spring,以及后续的Boot.cloud,不断的体会到这个拯救Java的生态体系的强大,也使我对于这个框架有了极大的好奇心,以至于产生了我为什么不能写一个这样的框架的思考. 通过自学 ...

  8. 从Spring源码探究DI属性注入流程

    随着不断地使用Spring,以及后续的Boot.cloud,不断的体会到这个拯救Java的生态体系的强大,也使我对于这个框架有了极大的好奇心,以至于产生了我为什么不能写一个这样的框架的思考. 通过自学 ...

  9. 【2021软件创新实验室暑假集训】SpringMVC框架(设计原理、简单使用、源码探究)

    系列文章目录 20级 Java篇 [2021软件创新实验室暑假集训]计算机的起源与大致原理 [2021软件创新实验室暑假集训]Java基础(一) [2021软件创新实验室暑假集训]Java基础(二) ...

最新文章

  1. 阿里二面,原来我对自动化测试的理解太浅了
  2. Metasploit makerc命令技巧
  3. SpringBoot 源码解析 —— SpringApplication 源码分析
  4. 【Python3】Python模块与包的导入
  5. VTK:相互作用之DoubleClick
  6. 20165234 《Java程序设计》第五周学习总结
  7. Node中的fs模块
  8. 个别学生计算机辅导计划,网络学院计算机基础统考辅导计划.doc
  9. MySQL不走联合索引_mysql group by 多列优化思路?为什么不走联合索引?
  10. 1-4 无监督学习(Unsupervised Learning)
  11. word中填充效果锁定纵横比_【文艺范】Word文档中的首字下沉效果
  12. 买买买!iPhone 13全系曝光:价格给力
  13. 顶会|关于数据库顶级会议 SIGMOD 2018,看这一篇就够了!
  14. WinPmem:跨平台内存采集工具
  15. Airtest网易自动化测试工具初探(一)
  16. 信息系统项目管理师学习笔记
  17. # Idea,2.5,软件安装,提示If you already have a 64-bit JDK installed ,defined a JAVA_HOME variable in Compu
  18. 百度 嵌入式Linux软件研发工程师面试记录
  19. 关于Windows下模拟Shift+END(功能键)无效问题
  20. 苹果手机有护眼模式吗_调节明暗度等于手机护眼模式?看完真懂了

热门文章

  1. ITK:添加点和边到网格
  2. OpenGL 光照贴图Lighting maps
  3. C语言以递归求斐波那契数列(附完整源码)
  4. C语言二进制转换为八进制(附完整源码)
  5. QT绘制带有负条的条形图。
  6. QT的QSslPreSharedKeyAuthenticator类的使用
  7. 6.支持向量机(SVM)、什么是SVM、支持向量机基本原理与思想、基本原理、课程中关于SVM介绍
  8. Clickhouse Engine kafka 将kafka数据同步clickhouse
  9. 2.cocos2d-x坐标体系(UI坐标系,GL坐标系,本地坐标,世界坐标,节点坐标)
  10. 指针,c语言关键字,作用域,生命周期,内存数据存储