Keep retrying until Database table is ready.
Change-Id: Idd696e3807435c65a422064e078cf5993a216df1
Showing
2 changed files
with
32 additions
and
20 deletions
| ... | @@ -104,33 +104,32 @@ public class DistributedLinkResourceStore implements LinkResourceStore { | ... | @@ -104,33 +104,32 @@ public class DistributedLinkResourceStore implements LinkResourceStore { |
| 104 | private StoreSerializer serializer; | 104 | private StoreSerializer serializer; |
| 105 | 105 | ||
| 106 | 106 | ||
| 107 | - @Activate | 107 | + void createTable(String tableName) { |
| 108 | - public void activate() { | 108 | + boolean tableReady = false; |
| 109 | - | ||
| 110 | - serializer = new KryoSerializer(); | ||
| 111 | - | ||
| 112 | - Set<String> tables = null; | ||
| 113 | - int retries = 0; | ||
| 114 | do { | 109 | do { |
| 115 | try { | 110 | try { |
| 116 | - tables = databaseAdminService.listTables(); | 111 | + if (!databaseAdminService.listTables().contains(tableName)) { |
| 117 | - } catch (DatabaseException e) { | 112 | + databaseAdminService.createTable(tableName); |
| 118 | - log.debug("DatabaseException", e); | ||
| 119 | - retries++; | ||
| 120 | - if (retries > 10) { | ||
| 121 | - log.error("Failed to list tables, moving on", e); | ||
| 122 | - tables = new HashSet<>(); | ||
| 123 | } | 113 | } |
| 114 | + tableReady = true; | ||
| 115 | + } catch (DatabaseException e) { | ||
| 116 | + log.debug("Failed creating table, retrying", e); | ||
| 117 | + try { | ||
| 118 | + Thread.sleep(200); | ||
| 119 | + } catch (InterruptedException e1) { | ||
| 120 | + throw new DatabaseException(e1); | ||
| 124 | } | 121 | } |
| 125 | - } while (tables == null); | ||
| 126 | - | ||
| 127 | - if (!tables.contains(LINK_RESOURCE_ALLOCATIONS)) { | ||
| 128 | - databaseAdminService.createTable(LINK_RESOURCE_ALLOCATIONS); | ||
| 129 | } | 122 | } |
| 130 | - if (!tables.contains(INTENT_ALLOCATIONS)) { | 123 | + } while (!tableReady); |
| 131 | - databaseAdminService.createTable(INTENT_ALLOCATIONS); | ||
| 132 | } | 124 | } |
| 133 | 125 | ||
| 126 | + @Activate | ||
| 127 | + public void activate() { | ||
| 128 | + | ||
| 129 | + serializer = new KryoSerializer(); | ||
| 130 | + | ||
| 131 | + createTable(LINK_RESOURCE_ALLOCATIONS); | ||
| 132 | + createTable(INTENT_ALLOCATIONS); | ||
| 134 | 133 | ||
| 135 | log.info("Started"); | 134 | log.info("Started"); |
| 136 | } | 135 | } | ... | ... |
| ... | @@ -23,6 +23,7 @@ import java.util.Map; | ... | @@ -23,6 +23,7 @@ import java.util.Map; |
| 23 | 23 | ||
| 24 | import org.onlab.onos.store.serializers.StoreSerializer; | 24 | import org.onlab.onos.store.serializers.StoreSerializer; |
| 25 | import org.onlab.onos.store.service.DatabaseAdminService; | 25 | import org.onlab.onos.store.service.DatabaseAdminService; |
| 26 | +import org.onlab.onos.store.service.DatabaseException; | ||
| 26 | import org.onlab.onos.store.service.DatabaseService; | 27 | import org.onlab.onos.store.service.DatabaseService; |
| 27 | import org.onlab.onos.store.service.VersionedValue; | 28 | import org.onlab.onos.store.service.VersionedValue; |
| 28 | 29 | ||
| ... | @@ -70,9 +71,21 @@ public class CMap<K, V> { | ... | @@ -70,9 +71,21 @@ public class CMap<K, V> { |
| 70 | this.tableName = checkNotNull(tableName); | 71 | this.tableName = checkNotNull(tableName); |
| 71 | this.serializer = checkNotNull(serializer); | 72 | this.serializer = checkNotNull(serializer); |
| 72 | 73 | ||
| 74 | + boolean tableReady = false; | ||
| 75 | + do { | ||
| 76 | + try { | ||
| 73 | if (!dbAdminService.listTables().contains(tableName)) { | 77 | if (!dbAdminService.listTables().contains(tableName)) { |
| 74 | dbAdminService.createTable(tableName); | 78 | dbAdminService.createTable(tableName); |
| 75 | } | 79 | } |
| 80 | + tableReady = true; | ||
| 81 | + } catch (DatabaseException e) { | ||
| 82 | + try { | ||
| 83 | + Thread.sleep(200); | ||
| 84 | + } catch (InterruptedException e1) { | ||
| 85 | + throw new DatabaseException(e1); | ||
| 86 | + } | ||
| 87 | + } | ||
| 88 | + } while (!tableReady); | ||
| 76 | 89 | ||
| 77 | keyCache = CacheBuilder.newBuilder() | 90 | keyCache = CacheBuilder.newBuilder() |
| 78 | .softValues() | 91 | .softValues() | ... | ... |
-
Please register or login to post a comment