logplus/Workflow/WFEngine/WorkflowEngine/include/MultiJobDecompose.h
2026-01-16 17:18:41 +08:00

123 lines
4.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* MultiJobDecompose.h
*
* Created on: Mar 14, 2015
* Author: dev
*/
#ifndef PAI_FRAME_WORKFLOWENGINE_MULTIJOBDECOMPOSE_H
#define PAI_FRAME_WORKFLOWENGINE_MULTIJOBDECOMPOSE_H
#include "WorkFlowFileWrapper.h"
#include "WorkFlowFile.h"
#include "WorkFlowDecompose.h"
#include <vector>
#include <string>
class CMultiJobDecomposeDecomposeTest;
namespace pai{
namespace workflow{
class CMultiJobDecompose:public CWorkFlowDecompose
{
public:
CMultiJobDecompose(const int &startModuleId);
virtual ~CMultiJobDecompose();
/**
* @brief 拆分工作流的入口函数,其他类需要实现此函数进行分类处理
* @param[in] workflowFileWrapper
*/
virtual void DecomposeWorkFlowFile(CWorkFlowFileWrapper* workflowFileWrapper);
private:
/**
* @brief 处理特殊模块
*@param[in] workflowFileWrapper 原始的CWorkFlowFile的封装对象
*/
void InternalDecomposeWorkFlowFile(CWorkFlowFile* workflowFile);
/**
* @brief sourceWorkflowFile中包含静矫正应用类型的模块
* 从sourceWorkflowFile中moduleID及其上游的模块复制出一个新的工作流并返回。
*@param[in] sourceWorkflowFile
*@param[in] moduleID 特殊模块的id
*@return 返回新建的workflowfile对象
*/
CStatApplyWorkFlowFile* ProcessStaticApplyJobType(CWorkFlowFile* workflowFile, const int moduleID);
/**
* @brief sourceWorkflowFile中包含偏移多hadoop作业类型的模块
* 从sourceWorkflowFile中moduleID及其上游的模块拆分出一个新的工作流
* 并返回sourceWorkflowFile中剩下moduleID及其其他模块。
*@param[in] sourceWorkflowFile
*@param[in] moduleID 特殊模块的id
*@param[in] isMultiJob 是否是多作业类型
*@return 返回新建的workflowfile对象
*/
COffsetWorkFlowFile* ProcessOffsetJobType(CWorkFlowFile* workflowFile, const int moduleID, bool isMultiJob);
/**
* @brief 从workflowFile中获取所有特殊模块
*@param[in] workflowFile
*@return
*/
std::vector<int> GetSpecialModuleIDs(CWorkFlowFile* workflowFile);
/**
* @brief 获取特殊模块的处理方法
*@param[in] workflowFile
*@param[in] moduleID 特殊模块的id
*@return 1 处理统计-应用类型模块的工作流 2 处理偏移多hadoop作业类型模块的工作流 3 处理偏移单hadoop作业类型模块的工作流
*/
virtual int GetSpecialModuleProcessType(CWorkFlowFile* workflowFile, const int moduleID);
/**
* @brief 获取工作流中的模块id作为key模块信息作为value的映射
* @param[in] workflow 工作流对象
* @param[out] moduleMap 模块信息映射
* pair<moduleId, CModuleInformation* >
*/
void GetModulesMap(const CWorkFlowFile *workflow, map<int, CModuleInformation *> &moduleMap);
/**
* @brief 获取工作流中以模块id作为key该模块作为dest模块的连接作为value的向上的连接信息映射
* 获取工作流中以模块id作为key该模块作为source模块的连接作为value的向下的连接信息映射
* @param[in] workflow 工作流对象
* @param[out] parentMap 工作流中各个模块向上的连接信息映射
* @param[out] childMap 工作流中各个模块向下的连接信息映射
*/
void GetParentAndChildConnMap(const CWorkFlowFile *workflow, map<int, vector<CModuleConnection *> > &parentMap, map<int, vector<CModuleConnection *> > &childMap);
/**
* @brief 将一个工作流中的模块和连接填充到另一个工作流中
* @param[in] src 源工作流
* @param[out] dest 目标工作流
*/
void FillOriModulesAndConns(CWorkFlowFile *src, CWorkFlowFile *dest);
/**
* @brief 向工作流中填充以指定模块为基础的上游所有模块和连接
* @param[in] id 模块id
* @param[in] connMap 工作流中各个模块向上的连接信息映射
* @param[in] moduleMap 工作流模块信息映射
* @param[out] workflow 需要填充的工作流
*/
void FillParentModulesAndConns(const int &id, map<int, vector<CModuleConnection *> > &connMap, map<int, CModuleInformation *> &moduleMap, CWorkFlowFile *workflow);
/**
* @brief 向工作流中填充以指定模块为基础的上游所有模块和连接
* @param[in] id 模块id
* @param[in] connMap 工作流中各个模块向下的连接信息映射
* @param[in] moduleMap 工作流模块信息映射
* @param[out] workflow 需要填充的工作流
*/
void FillChildModulesAndConns(const int &id, map<int, vector<CModuleConnection *> > &connMap, map<int, CModuleInformation *> &moduleMap, CWorkFlowFile *workflow);
private:
std::vector<std::string> spcialModuleNameList;
friend class ::CMultiJobDecomposeDecomposeTest;
};
}
}
#endif /* MULTIJOBDECOMPOSE_H_ */