package com.eucalyptus.loadbalancing.workflow;
/*************************************************************************
* (c) Copyright 2016 Hewlett Packard Enterprise Development Company LP
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see http://www.gnu.org/licenses/.
************************************************************************/
import com.amazonaws.services.simpleworkflow.flow.ActivityTaskTimedOutException;
import com.amazonaws.services.simpleworkflow.flow.core.Settable;
import com.amazonaws.services.simpleworkflow.flow.core.TryCatchFinally;
import com.eucalyptus.component.annotation.ComponentPart;
import com.eucalyptus.loadbalancing.common.LoadBalancing;
import com.eucalyptus.simpleworkflow.common.client.Once;
import org.apache.log4j.Logger;
import java.util.concurrent.CancellationException;
/**
* @author Sang-Min Park (sangmin.park@hpe.com)
*
*/
@ComponentPart(LoadBalancing.class)
@Once(value = UpgradeLoadBalancerWorkflowStarter.class, dependsOn = LoadBalancing.class)
public class UpgradeLoadBalancerWorkflowImpl implements UpgradeLoadBalancerWorkflow {
private static Logger LOG =
Logger.getLogger( UpgradeLoadBalancerWorkflowImpl.class );
private final LoadBalancingActivitiesClient client =
new LoadBalancingActivitiesClientImpl();
private ElbWorkflowState state =
ElbWorkflowState.WORKFLOW_RUNNING;
private TryCatchFinally task = null;
@Override
public void upgradeLoadBalancer() {
final Settable<Boolean> exception = new Settable<Boolean>();
task = new TryCatchFinally() {
@Override
protected void doTry() throws Throwable {
client.upgrade4_4();
}
@Override
protected void doCatch(final Throwable ex) throws Throwable {
if (ex instanceof ActivityTaskTimedOutException) {
LOG.warn("Workflow for upgrading loadbalancers has timed-out");
}else if (ex instanceof CancellationException) {
LOG.warn("Workflow for upgrading loadbalancers has been cancelled");
}else {
LOG.warn("Workflow for upgrading loadbalancers has failed");
}
state = ElbWorkflowState.WORKFLOW_FAILED;
exception.set(true);
throw ex;
}
@Override
protected void doFinally() throws Throwable {
if (state == ElbWorkflowState.WORKFLOW_RUNNING)
state = ElbWorkflowState.WORKFLOW_SUCCESS;
}
};
}
@Override
public ElbWorkflowState getState() {
return state;
}
}