From 3049667d95ea0ab8e6dd69facf0a6dfdb9be89aa Mon Sep 17 00:00:00 2001 From: chenson42 Date: Tue, 30 Aug 2011 01:35:28 +0000 Subject: [PATCH] Better error handling on failed registration. Don't load an error when a virutal batch can't be updated. --- .../service/impl/DataLoaderService.java | 21 ++++++++++++------- .../service/impl/RegistrationService.java | 7 ++++++- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataLoaderService.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataLoaderService.java index 447e27f417..db5cf0c003 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataLoaderService.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataLoaderService.java @@ -51,6 +51,7 @@ import org.jumpmind.symmetric.load.IDataLoaderContext; import org.jumpmind.symmetric.load.IDataLoaderFilter; import org.jumpmind.symmetric.load.IDataLoaderStatistics; +import org.jumpmind.symmetric.model.BatchInfo; import org.jumpmind.symmetric.model.ChannelMap; import org.jumpmind.symmetric.model.IncomingBatch; import org.jumpmind.symmetric.model.IncomingBatch.Status; @@ -150,14 +151,17 @@ public void loadDataFromPull(Node remote, RemoteNodeStatus status) if (list.size() > 0) { status.updateIncomingStatus(list); local = nodeService.findIdentity(); - localSecurity = nodeService.findNodeSecurity(local.getNodeId()); - if (StringUtils.isNotBlank(transport.getRedirectionUrl())) { - // we were redirected for the pull, we need to redirect for the ack - String url = transport.getRedirectionUrl(); - url = url.replace(HttpTransportManager.buildRegistrationUrl("", local), ""); - remote.setSyncUrl(url); + if (local != null) { + localSecurity = nodeService.findNodeSecurity(local.getNodeId()); + if (StringUtils.isNotBlank(transport.getRedirectionUrl())) { + // we were redirected for the pull, we need to redirect + // for the ack + String url = transport.getRedirectionUrl(); + url = url.replace(HttpTransportManager.buildRegistrationUrl("", local), ""); + remote.setSyncUrl(url); + } + sendAck(remote, local, localSecurity, list); } - sendAck(remote, local, localSecurity, list); } } catch (RegistrationRequiredException e) { @@ -260,7 +264,8 @@ protected List loadDataAndReturnBatches(IIncomingTransport transp for (IncomingBatch incomingBatch : batchesProcessed) { // TODO I wonder if there is a way to avoid the second update? - if (incomingBatchService.updateIncomingBatch(incomingBatch) == 0) { + if (incomingBatch.getBatchId() != BatchInfo.VIRTUAL_BATCH_FOR_REGISTRATION && + incomingBatchService.updateIncomingBatch(incomingBatch) == 0) { log.error("LoaderFailedToUpdateBatch", incomingBatch.getBatchId()); } } diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RegistrationService.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RegistrationService.java index 0f837906d6..6527f4693e 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RegistrationService.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RegistrationService.java @@ -280,7 +280,6 @@ public void registerWithServer() { maxNumberOfAttempts--; if (!registered && (maxNumberOfAttempts < 0 || maxNumberOfAttempts > 0)) { - sleepBeforeRegistrationRetry(); registered = isRegisteredWithServer(); } else { Node node = nodeService.findIdentity(); @@ -288,10 +287,16 @@ public void registerWithServer() { log.info("NodeRegistered", node.getNodeId()); } else if (!errorOccurred) { log.error("NodeRegisteringFailedIdentityMissing"); + registered = false; } else { log.error("NodeRegisteringFailedUnavailable"); + registered = false; } } + + if (!registered) { + sleepBeforeRegistrationRetry(); + } } if (!registered) {