From 955ac3a6700a94f18fb1d0d781aff26c60d6edc3 Mon Sep 17 00:00:00 2001 From: Benjamin Phillippe Date: Tue, 2 Sep 2014 10:22:59 -0500 Subject: [PATCH] Issue #3560 Registry objects not re-sent after fully sync Change-Id: Id38989cf953aacb985d627422c043f8768df2ed0 Former-commit-id: 15e57fc58bee1045c5574e4d66a727a672ac83cb --- .../registry/web/IRegistryFederationManager.java | 6 ++++++ .../registry/dao/ReplicationEventDao.java | 16 +++++++++++++--- .../federation/RegistryFederationManager.java | 16 +++++++++++++++- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/edexOsgi/com.raytheon.uf.common.datadelivery.registry/src/com/raytheon/uf/common/datadelivery/registry/web/IRegistryFederationManager.java b/edexOsgi/com.raytheon.uf.common.datadelivery.registry/src/com/raytheon/uf/common/datadelivery/registry/web/IRegistryFederationManager.java index 460c40fe65..29ba1ad3c3 100644 --- a/edexOsgi/com.raytheon.uf.common.datadelivery.registry/src/com/raytheon/uf/common/datadelivery/registry/web/IRegistryFederationManager.java +++ b/edexOsgi/com.raytheon.uf.common.datadelivery.registry/src/com/raytheon/uf/common/datadelivery/registry/web/IRegistryFederationManager.java @@ -36,6 +36,7 @@ import javax.ws.rs.PathParam; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * 2/27/2014 2769 bphillip Initial Creation + * 8/27/2014 3560 bphillip Added updateRegistryEvents method * * * @author bphillip @@ -105,5 +106,10 @@ public interface IRegistryFederationManager { @Path("synchronizeWithRegistry/{registryId}") public void synchronizeWithRegistry( @PathParam("registryId") String registryId) throws Exception; + + @GET + @Path("updateRegistryEvents/{registryId}/{time}") + public void updateRegistryEvents( + @PathParam("registryId") String registryId, @PathParam("time") String time); } diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.registry/src/com/raytheon/uf/edex/datadelivery/registry/dao/ReplicationEventDao.java b/edexOsgi/com.raytheon.uf.edex.datadelivery.registry/src/com/raytheon/uf/edex/datadelivery/registry/dao/ReplicationEventDao.java index 05e5bfab7e..2d8d1f3b26 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.registry/src/com/raytheon/uf/edex/datadelivery/registry/dao/ReplicationEventDao.java +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.registry/src/com/raytheon/uf/edex/datadelivery/registry/dao/ReplicationEventDao.java @@ -37,6 +37,7 @@ import com.raytheon.uf.edex.datadelivery.registry.federation.ReplicationEvent; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * 2/19/2014 2769 bphillip Initial Creation + * 8/27/2014 3560 bphillip Added query by event time method * * * @author bphillip @@ -45,7 +46,12 @@ import com.raytheon.uf.edex.datadelivery.registry.federation.ReplicationEvent; public class ReplicationEventDao extends SessionManagedDao { - private static final String GET_REPLICATION_EVENT_QUERY = "from ReplicationEvent event where (event.source is null or event.source != '%s') and (event.replicatedTo is null or event.replicatedTo not like '%%%s%%') order by event.eventTime asc"; + private static final String GET_REPLICATION_EVENT_QUERY = "from ReplicationEvent event " + + "where (event.source is null or event.source != :source) " + + "and (event.replicatedTo is null or event.replicatedTo not like :registry) " + + "order by event.eventTime asc"; + + private static final String GET_EVENTS_BY_TIME = "from ReplicationEvent event where event.eventTime < :eventTime"; @Override protected Class getEntityClass() { @@ -54,7 +60,11 @@ public class ReplicationEventDao extends @Transactional(propagation = Propagation.MANDATORY, readOnly = true) public List getReplicationEvents(String remoteRegistry, int batchSize) { - return this.executeHQLQuery(String.format(GET_REPLICATION_EVENT_QUERY, - remoteRegistry, remoteRegistry),batchSize); + return this.executeHQLQuery(GET_REPLICATION_EVENT_QUERY,batchSize, + "source", remoteRegistry, "registry", "%"+remoteRegistry+"%"); + } + + public List getEventsBeforeTime(String time){ + return this.executeHQLQuery(GET_EVENTS_BY_TIME, "eventTime", time); } } diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.registry/src/com/raytheon/uf/edex/datadelivery/registry/federation/RegistryFederationManager.java b/edexOsgi/com.raytheon.uf.edex.datadelivery.registry/src/com/raytheon/uf/edex/datadelivery/registry/federation/RegistryFederationManager.java index 1e3fe9ca8a..d95d2b0309 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.registry/src/com/raytheon/uf/edex/datadelivery/registry/federation/RegistryFederationManager.java +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.registry/src/com/raytheon/uf/edex/datadelivery/registry/federation/RegistryFederationManager.java @@ -93,6 +93,7 @@ import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.common.time.util.TimeUtil; +import com.raytheon.uf.common.util.ClusterIdUtil; import com.raytheon.uf.common.util.CollectionUtil; import com.raytheon.uf.common.util.StringUtil; import com.raytheon.uf.edex.core.EDEXUtil; @@ -156,6 +157,7 @@ import com.raytheon.uf.edex.registry.events.CreateAuditTrailEvent; * 2/13/2014 2769 bphillip Refactored registry sync. Created quartz tasks to monitor registry uptime as well as subscription integrity * 4/11/2014 3011 bphillip Removed automatic registry sync check on startup * 4/15/2014 3012 dhladky Merge fixes. + * 8/27/2014 3560 bphillip Added updateRegistryEvents method * * * @author bphillip @@ -535,6 +537,16 @@ public class RegistryFederationManager implements IRegistryFederationManager, } } + + @Transactional + @GET + @Path("updateRegistryEvents/{registryId}/{time}") + public void updateRegistryEvents(@PathParam("registryId") String registryId, @PathParam("time") String time) { + for(ReplicationEvent event: replicationEventDao.getEventsBeforeTime(time)){ + event.addReplicatedTo(registryId); + replicationEventDao.update(event); + } + } /** * Synchronizes this registry's data with the registry at the specified URL @@ -581,6 +593,9 @@ public class RegistryFederationManager implements IRegistryFederationManager, } federatedRegistryMonitor.updateTime(); StringBuilder syncMsg = new StringBuilder(); + + // Update the registry events table on the remote registry so duplicate data is not sent again + dataDeliveryRestClient.getRegistryFederationManager(remoteRegistryUrl).updateRegistryEvents(ClusterIdUtil.getId(), String.valueOf(start)); syncMsg.append("Registry synchronization using [") .append(remoteRegistryUrl) @@ -1256,5 +1271,4 @@ public class RegistryFederationManager implements IRegistryFederationManager, public NotificationServers getServers() { return servers; } - }