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