Skip to content

Commit

Permalink
ISPN-9113 Fail sync backup request if remote site is unreachable
Browse files Browse the repository at this point in the history
  • Loading branch information
danberindei authored and tristantarrant committed May 10, 2018
1 parent e77c75b commit e6a4f99
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 10 deletions.
Expand Up @@ -16,6 +16,7 @@
import org.infinispan.remoting.CacheUnreachableException;
import org.infinispan.remoting.responses.ExceptionResponse;
import org.infinispan.remoting.responses.Response;
import org.infinispan.remoting.responses.ValidResponse;
import org.infinispan.remoting.transport.BackupResponse;
import org.infinispan.util.TimeService;
import org.infinispan.util.concurrent.TimeoutException;
Expand All @@ -32,7 +33,7 @@ public class JGroupsBackupResponse implements BackupResponse {

private static Log log = LogFactory.getLog(JGroupsBackupResponse.class);

private final Map<XSiteBackup, Future<Response>> syncBackupCalls;
private final Map<XSiteBackup, Future<ValidResponse>> syncBackupCalls;
private Map<String, Throwable> errors;
private Set<String> communicationErrors;
private final TimeService timeService;
Expand All @@ -41,7 +42,7 @@ public class JGroupsBackupResponse implements BackupResponse {
// happens. Track that and adjust the timeouts accordingly.
private long sendTimeNanos;

public JGroupsBackupResponse(Map<XSiteBackup, Future<Response>> syncBackupCalls, TimeService timeService) {
public JGroupsBackupResponse(Map<XSiteBackup, Future<ValidResponse>> syncBackupCalls, TimeService timeService) {
this.syncBackupCalls = syncBackupCalls;
this.timeService = timeService;
sendTimeNanos = timeService.time();
Expand All @@ -52,8 +53,7 @@ public void waitForBackupToFinish() throws Exception {
long deductFromTimeout = timeService.timeDuration(sendTimeNanos, MILLISECONDS);
errors = new HashMap<>(syncBackupCalls.size());
long elapsedTime = 0;
for (Map.Entry<XSiteBackup, Future<Response>> entry : syncBackupCalls.entrySet()) {

for (Map.Entry<XSiteBackup, Future<ValidResponse>> entry : syncBackupCalls.entrySet()) {
XSiteBackup xSiteBackup = entry.getKey();
long timeout = xSiteBackup.getTimeout();
String siteName = xSiteBackup.getSiteName();
Expand Down
Expand Up @@ -62,6 +62,7 @@
import org.infinispan.remoting.responses.ExceptionResponse;
import org.infinispan.remoting.responses.Response;
import org.infinispan.remoting.responses.SuccessfulResponse;
import org.infinispan.remoting.responses.ValidResponse;
import org.infinispan.remoting.rpc.ResponseFilter;
import org.infinispan.remoting.rpc.ResponseMode;
import org.infinispan.remoting.transport.AbstractRequest;
Expand All @@ -71,10 +72,10 @@
import org.infinispan.remoting.transport.impl.MapResponseCollector;
import org.infinispan.remoting.transport.impl.MultiTargetRequest;
import org.infinispan.remoting.transport.impl.Request;
import org.infinispan.remoting.transport.impl.PassthroughSingleResponseCollector;
import org.infinispan.remoting.transport.impl.RequestRepository;
import org.infinispan.remoting.transport.ResponseCollector;
import org.infinispan.remoting.transport.Transport;
import org.infinispan.remoting.transport.impl.SingleResponseCollector;
import org.infinispan.remoting.transport.impl.SingleTargetRequest;
import org.infinispan.remoting.transport.impl.SingletonMapResponseCollector;
import org.infinispan.util.TimeService;
Expand Down Expand Up @@ -309,16 +310,15 @@ public BackupResponse backupRemotely(Collection<XSiteBackup> backups, XSiteRepli
if (trace)
log.tracef("About to send to backups %s, command %s", backups, command);
boolean rsvp = isRsvpCommand(command);
Map<XSiteBackup, Future<Response>> syncBackupCalls = new HashMap<>(backups.size());
Map<XSiteBackup, Future<ValidResponse>> syncBackupCalls = new HashMap<>(backups.size());
for (XSiteBackup xsb : backups) {
Address recipient = JGroupsAddressCache.fromJGroupsAddress(new SiteMaster(xsb.getSiteName()));
if (xsb.isSync()) {
long timeout = xsb.getTimeout();
long requestId = requests.newRequestId();
logRequest(requestId, command, recipient);
SingleSiteRequest<Response> request =
new SingleSiteRequest<>(PassthroughSingleResponseCollector.INSTANCE, requestId, requests,
xsb.getSiteName());
SingleSiteRequest<ValidResponse> request =
new SingleSiteRequest<>(SingleResponseCollector.validOnly(), requestId, requests, xsb.getSiteName());
addRequest(request);

try {
Expand Down
Expand Up @@ -12,7 +12,7 @@
import org.infinispan.util.logging.LogFactory;

/**
* Request implementation that waits for a response from a single target node.
* Request implementation that waits for a response from a single target site.
*
* @author Dan Berindei
* @since 9.1
Expand Down

0 comments on commit e6a4f99

Please sign in to comment.