From 65f639219cdb0892ff661fb2dd44bb54370549aa Mon Sep 17 00:00:00 2001 From: sbalineni Date: Sun, 5 Jan 2014 16:57:53 +0000 Subject: [PATCH] Make sure that Cloudstack DB should be atleast once synced with contrail api server Signed-off-by: Sheng Yang --- .../contrail/management/ContrailManager.java | 2 +- .../management/ContrailManagerImpl.java | 3 ++- .../contrail/management/ServerDBSync.java | 2 +- .../contrail/management/ServerDBSyncImpl.java | 3 ++- .../management/NetworkProviderTest.java | 20 +++++++++++-------- 5 files changed, 18 insertions(+), 12 deletions(-) diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManager.java b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManager.java index 550abb7c0e4..6489da9d042 100644 --- a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManager.java +++ b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManager.java @@ -54,7 +54,7 @@ public interface ContrailManager { public NetworkOffering getRouterOffering(); public NetworkOffering getPublicRouterOffering(); - public void syncNetworkDB(short syncMode) throws IOException; + public void syncNetworkDB(short syncMode) throws Exception; public boolean isManagedPhysicalNetwork(Network network); diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManagerImpl.java b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManagerImpl.java index eea5026a977..b7c0023cecf 100644 --- a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManagerImpl.java +++ b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ContrailManagerImpl.java @@ -416,7 +416,7 @@ public class ContrailManagerImpl extends ManagerBase implements ContrailManager } - public void syncNetworkDB(short syncMode) throws IOException { + public void syncNetworkDB(short syncMode) throws Exception { if (_dbSync.syncAll(syncMode) == ServerDBSync.SYNC_STATE_OUT_OF_SYNC) { if (syncMode == DBSyncGeneric.SYNC_MODE_CHECK) { s_logger.info("# Cloudstack DB & VNC are out of sync #"); @@ -440,6 +440,7 @@ public class ContrailManagerImpl extends ManagerBase implements ContrailManager } catch (Exception ex) { s_logger.debug(ex); s_logger.info("Unable to sync network db"); + //resync will be done after _dbSyncInterval seconds since _syncMode is still set to SYNC_MODE_UPDATE } } } diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServerDBSync.java b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServerDBSync.java index fea9a951e68..68319774c9f 100644 --- a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServerDBSync.java +++ b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServerDBSync.java @@ -32,7 +32,7 @@ public interface ServerDBSync { * API for syncing all classes of vnc objects with cloudstack * Sync cloudstack and vnc objects. */ - public short syncAll(short syncMode); + public short syncAll(short syncMode) throws Exception; public void syncClass(Class cls); public void createProject(ProjectVO project, StringBuffer syncLogMesg) throws IOException; public void createDomain(DomainVO domain, StringBuffer logMesg)throws IOException; diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServerDBSyncImpl.java b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServerDBSyncImpl.java index f8a8d978862..22c726abc85 100644 --- a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServerDBSyncImpl.java +++ b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ServerDBSyncImpl.java @@ -117,7 +117,7 @@ public class ServerDBSyncImpl implements ServerDBSync { * Order has to be maintained */ @Override - public short syncAll(short syncMode) { + public short syncAll(short syncMode) throws Exception { short syncState = SYNC_STATE_IN_SYNC; /* vnc classes need to be synchronized with cloudstack */ @@ -158,6 +158,7 @@ public class ServerDBSyncImpl implements ServerDBSync { if (_lockSyncMode.isLocked()) { _lockSyncMode.unlock(); } + throw ex; } return syncState; diff --git a/plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/NetworkProviderTest.java b/plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/NetworkProviderTest.java index 930ac4d6c15..89294cca078 100644 --- a/plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/NetworkProviderTest.java +++ b/plugins/network-elements/juniper-contrail/test/org/apache/cloudstack/network/contrail/management/NetworkProviderTest.java @@ -462,15 +462,19 @@ public class NetworkProviderTest extends TestCase { } catch (IOException ex) { fail(ex.getMessage()); } - + //now db sync - if (_dbSync.syncAll(DBSyncGeneric.SYNC_MODE_UPDATE) == ServerDBSync.SYNC_STATE_OUT_OF_SYNC) { - s_logger.info("# Cloudstack DB & VNC are out of sync - resync done"); - } - - if (_dbSync.syncAll(DBSyncGeneric.SYNC_MODE_CHECK) == ServerDBSync.SYNC_STATE_OUT_OF_SYNC) { - s_logger.info("# Cloudstack DB & VNC are still out of sync"); - fail("DB Sync failed"); + try { + if (_dbSync.syncAll(DBSyncGeneric.SYNC_MODE_UPDATE) == ServerDBSync.SYNC_STATE_OUT_OF_SYNC) { + s_logger.info("# Cloudstack DB & VNC are out of sync - resync done"); + } + + if (_dbSync.syncAll(DBSyncGeneric.SYNC_MODE_CHECK) == ServerDBSync.SYNC_STATE_OUT_OF_SYNC) { + s_logger.info("# Cloudstack DB & VNC are still out of sync"); + fail("DB Sync failed"); + } + } catch (Exception ex) { + fail(ex.getMessage()); } }