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)) {
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()
......