in streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ApplicationServiceImpl.java [751:831]
public Long copy(Application appParam) {
boolean existsByJobName = this.existsByJobName(appParam.getJobName());
ApiAlertException.throwIfFalse(
!existsByJobName,
"[StreamPark] Application names can't be repeated, copy application failed.");
Application oldApp = getById(appParam.getId());
Application newApp = new Application();
String jobName = appParam.getJobName();
newApp.setJobName(jobName);
newApp.setClusterId(
ExecutionMode.isSessionMode(oldApp.getExecutionModeEnum())
? oldApp.getClusterId()
: jobName);
newApp.setArgs(appParam.getArgs() != null ? appParam.getArgs() : oldApp.getArgs());
newApp.setVersionId(oldApp.getVersionId());
newApp.setFlinkClusterId(oldApp.getFlinkClusterId());
newApp.setRestartSize(oldApp.getRestartSize());
newApp.setJobType(oldApp.getJobType());
newApp.setOptions(oldApp.getOptions());
newApp.setDynamicProperties(oldApp.getDynamicProperties());
newApp.setResolveOrder(oldApp.getResolveOrder());
newApp.setExecutionMode(oldApp.getExecutionMode());
newApp.setFlinkImage(oldApp.getFlinkImage());
newApp.setK8sNamespace(oldApp.getK8sNamespace());
newApp.setK8sRestExposedType(oldApp.getK8sRestExposedType());
newApp.setK8sPodTemplate(oldApp.getK8sPodTemplate());
newApp.setK8sJmPodTemplate(oldApp.getK8sJmPodTemplate());
newApp.setK8sTmPodTemplate(oldApp.getK8sTmPodTemplate());
newApp.setK8sHadoopIntegration(oldApp.getK8sHadoopIntegration());
newApp.setDescription(oldApp.getDescription());
newApp.setAlertId(oldApp.getAlertId());
newApp.setCpFailureAction(oldApp.getCpFailureAction());
newApp.setCpFailureRateInterval(oldApp.getCpFailureRateInterval());
newApp.setCpMaxFailureInterval(oldApp.getCpMaxFailureInterval());
newApp.setMainClass(oldApp.getMainClass());
newApp.setAppType(oldApp.getAppType());
newApp.setResourceFrom(oldApp.getResourceFrom());
newApp.setProjectId(oldApp.getProjectId());
newApp.setModule(oldApp.getModule());
newApp.setUserId(commonService.getUserId());
newApp.setState(FlinkAppState.ADDED.getValue());
newApp.setRelease(ReleaseState.NEED_RELEASE.get());
newApp.setOptionState(OptionState.NONE.getValue());
newApp.setCreateTime(new Date());
newApp.setHotParams(oldApp.getHotParams());
newApp.setJar(oldApp.getJar());
newApp.setJarCheckSum(oldApp.getJarCheckSum());
newApp.setTags(oldApp.getTags());
newApp.setTeamId(oldApp.getTeamId());
boolean saved = save(newApp);
if (saved) {
if (newApp.isFlinkSqlJob()) {
FlinkSql copyFlinkSql = flinkSqlService.getLatestFlinkSql(appParam.getId(), true);
newApp.setFlinkSql(copyFlinkSql.getSql());
newApp.setTeamResource(copyFlinkSql.getTeamResource());
newApp.setDependency(copyFlinkSql.getDependency());
FlinkSql flinkSql = new FlinkSql(newApp);
flinkSqlService.create(flinkSql);
}
ApplicationConfig copyConfig = configService.getEffective(appParam.getId());
if (copyConfig != null) {
ApplicationConfig config = new ApplicationConfig();
config.setAppId(newApp.getId());
config.setFormat(copyConfig.getFormat());
config.setContent(copyConfig.getContent());
config.setCreateTime(new Date());
config.setVersion(1);
configService.save(config);
configService.setLatestOrEffective(true, config.getId(), newApp.getId());
}
return newApp.getId();
} else {
throw new ApiAlertException(
"create application from copy failed, copy source app: " + oldApp.getJobName());
}
}