/**
* Copyright 2015 StreamSets Inc.
*
* Licensed under the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.streamsets.datacollector.creation;
import com.google.common.collect.ImmutableList;
import com.streamsets.datacollector.config.PipelineState;
import com.streamsets.pipeline.api.Config;
import com.streamsets.pipeline.api.ExecutionMode;
import com.streamsets.pipeline.api.StageException;
import com.streamsets.pipeline.api.StageUpgrader;
import com.streamsets.pipeline.api.impl.Utils;
import java.util.Collections;
import java.util.List;
public class PipelineConfigUpgrader implements StageUpgrader {
@Override
public List<Config> upgrade(String library, String stageName, String stageInstance, int fromVersion, int toVersion,
List<Config> configs) throws StageException {
switch(fromVersion) {
case 0:
// nothing to do from 0 to 1
case 1:
upgradeV1ToV2(configs);
// fall through
case 2:
upgradeV2ToV3(configs);
// fall through
case 3:
upgradeV3ToV4(configs);
// fall through
case 4:
upgradeV4ToV5(configs);
// fall through
case 5:
upgradeV5ToV6(configs);
break;
default:
throw new IllegalStateException(Utils.format("Unexpected fromVersion {}", fromVersion));
}
return configs;
}
private void upgradeV1ToV2(List<Config> configs) {
boolean found = false;
for (Config config : configs) {
if (config.getName().equals("executionMode")) {
found = true;
}
}
if(!found) {
configs.add(new Config("executionMode", ExecutionMode.STANDALONE));
}
}
private void upgradeV3ToV4(List<Config> configs) {
boolean found = false;
int index = 0;
String sourceName = null;
for (int i = 0; i < configs.size(); i++) {
Config config = configs.get(i);
if (config.getName().equals("executionMode")) {
if (config.getValue().equals("CLUSTER")) {
found = true;
index = i;
}
} else if (config.getName().equals("sourceName")) {
sourceName = config.getValue().toString();
}
}
if (found) {
configs.remove(index);
Utils.checkNotNull(sourceName, "Source stage name cannot be null");
configs.add(new Config("executionMode", (sourceName.contains("ClusterHdfsDSource")) ? ExecutionMode.CLUSTER_BATCH
: ExecutionMode.CLUSTER_YARN_STREAMING));
}
}
private void upgradeV2ToV3(List<Config> configs) {
configs.add(new Config("shouldRetry", false));
configs.add(new Config("retryAttempts", -1));
configs.add(new Config("notifyOnStates",
ImmutableList.of(PipelineState.RUN_ERROR, PipelineState.STOPPED, PipelineState.FINISHED)));
configs.add(new Config("emailIDs", Collections.EMPTY_LIST));
}
private void upgradeV4ToV5(List<Config> configs) {
configs.add(new Config("statsAggregatorStage", null));
}
private void upgradeV5ToV6(List<Config> configs) {
configs.add(new Config("webhookConfigs", Collections.EMPTY_LIST));
}
}