Keep retrying until Database table is ready.
Change-Id: Idd696e3807435c65a422064e078cf5993a216df1
Showing
2 changed files
with
35 additions
and
23 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)) { |
112 | + databaseAdminService.createTable(tableName); | ||
113 | + } | ||
114 | + tableReady = true; | ||
117 | } catch (DatabaseException e) { | 115 | } catch (DatabaseException e) { |
118 | - log.debug("DatabaseException", e); | 116 | + log.debug("Failed creating table, retrying", e); |
119 | - retries++; | 117 | + try { |
120 | - if (retries > 10) { | 118 | + Thread.sleep(200); |
121 | - log.error("Failed to list tables, moving on", e); | 119 | + } catch (InterruptedException e1) { |
122 | - tables = new HashSet<>(); | 120 | + throw new DatabaseException(e1); |
123 | } | 121 | } |
124 | } | 122 | } |
125 | - } while (tables == null); | 123 | + } while (!tableReady); |
124 | + } | ||
126 | 125 | ||
127 | - if (!tables.contains(LINK_RESOURCE_ALLOCATIONS)) { | 126 | + @Activate |
128 | - databaseAdminService.createTable(LINK_RESOURCE_ALLOCATIONS); | 127 | + public void activate() { |
129 | - } | 128 | + |
130 | - if (!tables.contains(INTENT_ALLOCATIONS)) { | 129 | + serializer = new KryoSerializer(); |
131 | - databaseAdminService.createTable(INTENT_ALLOCATIONS); | ||
132 | - } | ||
133 | 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 | ||
73 | - if (!dbAdminService.listTables().contains(tableName)) { | 74 | + boolean tableReady = false; |
74 | - dbAdminService.createTable(tableName); | 75 | + do { |
75 | - } | 76 | + try { |
77 | + if (!dbAdminService.listTables().contains(tableName)) { | ||
78 | + dbAdminService.createTable(tableName); | ||
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