add retry when dyups timeout

This commit is contained in:
Mengyi Zhou 2016-04-14 17:04:51 +08:00
parent 4c0e8253dc
commit acab98bbe3
4 changed files with 29 additions and 9 deletions

View file

@ -26,7 +26,7 @@ public class LocalClient {
private static final DynamicIntProperty nginxDyupsPort = DynamicPropertyFactory.getInstance().getIntProperty("dyups.port", 8081);
private static final DynamicIntProperty nginxStatusPort = DynamicPropertyFactory.getInstance().getIntProperty("slb.nginx.status-port", 10001);
private static final DynamicIntProperty nginxDyupsTimeout = DynamicPropertyFactory.getInstance().getIntProperty("nginx.dyups.read.timeout", 30000);
private static final DynamicIntProperty nginxDyupsTimeout = DynamicPropertyFactory.getInstance().getIntProperty("nginx.dyups.read.timeout", 500);
private final NginxDyupsClient dyupsClient;
private final NginxStatusClient statusClient;

View file

@ -19,7 +19,7 @@ import java.util.List;
/**
* Created by fanqq on 2016/3/14.
*/
@Service("ninxOpsService")
@Service("nginxOpsService")
public class NginxOpsServiceImpl implements NginxOpsService {
private Logger LOGGER = LoggerFactory.getLogger(this.getClass());
@ -88,9 +88,26 @@ public class NginxOpsServiceImpl implements NginxOpsService {
public List<NginxResponse> dyups(DyUpstreamOpsData[] dyups) throws Exception {
List<NginxResponse> responses = new ArrayList<>();
if (dyups == null) return responses;
for (DyUpstreamOpsData d : dyups) {
NginxResponse response = LocalClient.getInstance().dyups(d.getUpstreamName(), d.getUpstreamCommands());
responses.add(response);
NginxResponse response;
try {
response = LocalClient.getInstance().dyups(d.getUpstreamName(), d.getUpstreamCommands());
responses.add(response);
} catch (Exception ex) {
// retry if get SocketTimeoutException
//TODO do we tolerate failure
if (ex.getCause() instanceof java.net.SocketTimeoutException) {
try {
Thread.sleep(50L);
} catch (InterruptedException e) {
}
response = LocalClient.getInstance().dyups(d.getUpstreamName(), d.getUpstreamCommands());
responses.add(response);
} else {
throw ex;
}
}
LOGGER.info("[DyupsOps] Dyups success. upstreamName:" + d.getUpstreamName());
}
return responses;

View file

@ -132,8 +132,11 @@ public class NginxServiceImpl implements NginxService {
public NginxResponse call() throws Exception {
logger.info("[Push Conf] Start updating conf on server " + ip + ".");
NginxResponse response = nginxClient.update(false);
//TODO lost error info if not logging response
logger.info("[Push Conf] Finish updating conf on server " + ip + ". Success:" + response.getSucceed());
if (!response.getSucceed()) {
logger.error("[Push Conf] Failed to update conf on server " + ip + ". Cause:" + response.toString());
} else {
logger.info("[Push Conf] Finish updating conf on server " + ip + ". Success:" + response.getSucceed() + ".");
}
return response;
}
});
@ -206,7 +209,7 @@ public class NginxServiceImpl implements NginxService {
public NginxResponse call() throws Exception {
logger.info("[Rollback Conf] Start Rollback conf on server " + ip + ".");
NginxResponse response = nginxClient.update(true);
logger.info("[Rollback Conf] Finish Rollback conf on server " + ip + ".");
logger.info("[Rollback Conf] Finish Rollback conf on server " + ip + ". Success:" + response.getSucceed() + ".");
return response;
}
});

View file

@ -71,10 +71,10 @@ public class SlbServerConfManagerImpl implements SlbServerConfManager {
if (slbVersion.equals(serverVersion)) {
return response.setSucceed(true).setServerIp(ip).setOutMsg("[SlbServerConfManagerImpl] slb version == slb server version. Not need to update.");
}
//3. if slbVersion < serverVersion , force rollback to slbVersion
//3. force rollback to slbVersion
//case 1: force refresh or flag needRefresh is true
//case 2: server version is large then slb version
//case 3: version gap large than max span
//case 3: version gap larger than max span
if (refresh || slbVersion < serverVersion || slbVersion - serverVersion > maxSpan.get()) {
try {
//3.1 need reload in case 3