Yuta HIGUCHI

Keep retrying until Database table is ready.

Change-Id: Idd696e3807435c65a422064e078cf5993a216df1
...@@ -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()
......