/*
* Copyright(C) 1999-2010 Alibaba Group Holding Limited All rights reserved. Licensed 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.alibaba.doris.client.operation.failover.impl;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.alibaba.doris.client.AccessException;
import com.alibaba.doris.client.net.DataSource;
import com.alibaba.doris.client.net.NetException;
import com.alibaba.doris.client.operation.failover.PeerCallback;
import com.alibaba.doris.client.operation.failover.PeerCallbackHandler;
/**
* PeerFailoverCallbackHandler
*
* @author Kun He (Raymond He), kun.hek@alibaba-inc.com
* @since 1.0 2011-4-25
*/
public class PeerFailoverCallbackHandler extends PeerBaseFailoverCallbackHandler implements PeerCallbackHandler {
private Log log = LogFactory.getLog(PeerFailoverCallbackHandler.class);
private DataSource dataSource;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public DataSource getDataSource() {
return this.dataSource;
}
public PeerCallback doPeerExecute(PeerCallback callback) throws AccessException {
if (log.isDebugEnabled()) {
log.debug("execute " + operationData.getOperation().getName() + " in " + dataSource.getNo() + " for "
+ operationData.getKey());
}
PeerCallback pcb = null;
boolean failed = true;
for (int i = 1; i <= 10; i++) {
try {
pcb = callback.execute();
failed = false;
break;
} catch (AccessException e) {
if( e.getCause() instanceof NetException) {
processAccessException(i, callback);
}else {
throw e;
}
}
}
if (failed) {
throw new AccessException("Coundn't connect data server:" + callback.getDataSource());
}
return pcb;
}
}