logplus/Workflow/WFEngine/WorkflowEngine/include/MultiJobDecompose.h

123 lines
4.6 KiB
C
Raw Normal View History

2026-01-16 17:18:41 +08:00
/*
* 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作为keyvalue的映射
* @param[in] workflow
* @param[out] moduleMap
* pair<moduleId, CModuleInformation* >
*/
void GetModulesMap(const CWorkFlowFile *workflow, map<int, CModuleInformation *> &moduleMap);
/**
* @brief id作为keydest模块的连接作为value的向上的连接信息映射
* id作为keysource模块的连接作为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_ */