package com.hqyg.disjob.register.center;
import org.apache.zookeeper.KeeperException.ConnectionLossException;
import org.apache.zookeeper.KeeperException.NoNodeException;
import org.apache.zookeeper.KeeperException.NodeExistsException;
import com.hqyg.disjob.common.exception.ZKNodeException;
import com.hqyg.disjob.common.util.LoggerUtil;
/**
* 抛出RegException的异常处理类.
* @author Disjob
*/
public final class RegistryExceptionHandler {
/**
* 处理掉中断和连接失效异常并继续抛出RegException.
* @param cause 待处理的异常.
*/
public static void handleException(final Exception cause) {
if (isIgnoredException(cause) || isIgnoredException(cause.getCause())) {
LoggerUtil.warn("ejob: ignored exception for: {}", cause.getMessage());
} else if (cause instanceof InterruptedException) {
Thread.currentThread().interrupt();
} else {
throw new ZKNodeException(cause);
}
}
private static boolean isIgnoredException(final Throwable cause) {
return null != cause && (cause instanceof ConnectionLossException || cause instanceof NoNodeException || cause instanceof NodeExistsException);
}
}