DatabaseClient: fixed to use copycat instance instead
Change-Id: If13ec051f362e0d3bc8311dc30e2c0f70e55c42e
Showing
2 changed files
with
19 additions
and
101 deletions
1 | package org.onlab.onos.store.service.impl; | 1 | package org.onlab.onos.store.service.impl; |
2 | 2 | ||
3 | -import java.util.Arrays; | 3 | +import static com.google.common.base.Preconditions.checkNotNull; |
4 | + | ||
4 | import java.util.List; | 5 | import java.util.List; |
5 | -import java.util.UUID; | ||
6 | import java.util.concurrent.CompletableFuture; | 6 | import java.util.concurrent.CompletableFuture; |
7 | import java.util.concurrent.ExecutionException; | 7 | import java.util.concurrent.ExecutionException; |
8 | 8 | ||
9 | -import net.kuujo.copycat.protocol.Response.Status; | 9 | +import net.kuujo.copycat.Copycat; |
10 | -import net.kuujo.copycat.protocol.SubmitRequest; | ||
11 | -import net.kuujo.copycat.protocol.SubmitResponse; | ||
12 | -import net.kuujo.copycat.spi.protocol.ProtocolClient; | ||
13 | 10 | ||
14 | import org.onlab.onos.store.service.DatabaseException; | 11 | import org.onlab.onos.store.service.DatabaseException; |
15 | import org.onlab.onos.store.service.ReadRequest; | 12 | import org.onlab.onos.store.service.ReadRequest; |
... | @@ -20,31 +17,17 @@ import org.onlab.onos.store.service.WriteRequest; | ... | @@ -20,31 +17,17 @@ import org.onlab.onos.store.service.WriteRequest; |
20 | */ | 17 | */ |
21 | public class DatabaseClient { | 18 | public class DatabaseClient { |
22 | 19 | ||
23 | - private final ProtocolClient client; | 20 | + private final Copycat copycat; |
24 | - | ||
25 | - public DatabaseClient(ProtocolClient client) { | ||
26 | - this.client = client; | ||
27 | - } | ||
28 | 21 | ||
29 | - private static String nextId() { | 22 | + public DatabaseClient(Copycat copycat) { |
30 | - return UUID.randomUUID().toString(); | 23 | + this.copycat = checkNotNull(copycat); |
31 | } | 24 | } |
32 | 25 | ||
33 | public boolean createTable(String tableName) { | 26 | public boolean createTable(String tableName) { |
34 | 27 | ||
35 | - SubmitRequest request = | 28 | + CompletableFuture<Boolean> future = copycat.submit("createTable", tableName); |
36 | - new SubmitRequest( | ||
37 | - nextId(), | ||
38 | - "createTable", | ||
39 | - Arrays.asList(tableName)); | ||
40 | - CompletableFuture<SubmitResponse> future = client.submit(request); | ||
41 | try { | 29 | try { |
42 | - final SubmitResponse submitResponse = future.get(); | 30 | + return future.get(); |
43 | - if (submitResponse.status() == Status.OK) { | ||
44 | - return (boolean) submitResponse.result(); | ||
45 | - } else { | ||
46 | - throw new DatabaseException(submitResponse.error()); | ||
47 | - } | ||
48 | } catch (InterruptedException | ExecutionException e) { | 31 | } catch (InterruptedException | ExecutionException e) { |
49 | throw new DatabaseException(e); | 32 | throw new DatabaseException(e); |
50 | } | 33 | } |
... | @@ -52,17 +35,9 @@ public class DatabaseClient { | ... | @@ -52,17 +35,9 @@ public class DatabaseClient { |
52 | 35 | ||
53 | public void dropTable(String tableName) { | 36 | public void dropTable(String tableName) { |
54 | 37 | ||
55 | - SubmitRequest request = | 38 | + CompletableFuture<Void> future = copycat.submit("dropTable", tableName); |
56 | - new SubmitRequest( | ||
57 | - nextId(), | ||
58 | - "dropTable", | ||
59 | - Arrays.asList(tableName)); | ||
60 | - CompletableFuture<SubmitResponse> future = client.submit(request); | ||
61 | try { | 39 | try { |
62 | - if (future.get().status() != Status.OK) { | 40 | + future.get(); |
63 | - throw new DatabaseException(future.get().toString()); | ||
64 | - } | ||
65 | - | ||
66 | } catch (InterruptedException | ExecutionException e) { | 41 | } catch (InterruptedException | ExecutionException e) { |
67 | throw new DatabaseException(e); | 42 | throw new DatabaseException(e); |
68 | } | 43 | } |
... | @@ -70,79 +45,39 @@ public class DatabaseClient { | ... | @@ -70,79 +45,39 @@ public class DatabaseClient { |
70 | 45 | ||
71 | public void dropAllTables() { | 46 | public void dropAllTables() { |
72 | 47 | ||
73 | - SubmitRequest request = | 48 | + CompletableFuture<Void> future = copycat.submit("dropAllTables"); |
74 | - new SubmitRequest( | ||
75 | - nextId(), | ||
76 | - "dropAllTables", | ||
77 | - Arrays.asList()); | ||
78 | - CompletableFuture<SubmitResponse> future = client.submit(request); | ||
79 | try { | 49 | try { |
80 | - if (future.get().status() != Status.OK) { | 50 | + future.get(); |
81 | - throw new DatabaseException(future.get().toString()); | ||
82 | - } | ||
83 | } catch (InterruptedException | ExecutionException e) { | 51 | } catch (InterruptedException | ExecutionException e) { |
84 | throw new DatabaseException(e); | 52 | throw new DatabaseException(e); |
85 | } | 53 | } |
86 | } | 54 | } |
87 | 55 | ||
88 | - @SuppressWarnings("unchecked") | ||
89 | public List<String> listTables() { | 56 | public List<String> listTables() { |
90 | 57 | ||
91 | - SubmitRequest request = | 58 | + CompletableFuture<List<String>> future = copycat.submit("listTables"); |
92 | - new SubmitRequest( | ||
93 | - nextId(), | ||
94 | - "listTables", | ||
95 | - Arrays.asList()); | ||
96 | - CompletableFuture<SubmitResponse> future = client.submit(request); | ||
97 | try { | 59 | try { |
98 | - final SubmitResponse submitResponse = future.get(); | 60 | + return future.get(); |
99 | - if (submitResponse.status() == Status.OK) { | ||
100 | - return (List<String>) submitResponse.result(); | ||
101 | - } else { | ||
102 | - throw new DatabaseException(submitResponse.error()); | ||
103 | - } | ||
104 | } catch (InterruptedException | ExecutionException e) { | 61 | } catch (InterruptedException | ExecutionException e) { |
105 | throw new DatabaseException(e); | 62 | throw new DatabaseException(e); |
106 | } | 63 | } |
107 | } | 64 | } |
108 | 65 | ||
109 | - @SuppressWarnings("unchecked") | ||
110 | public List<InternalReadResult> batchRead(List<ReadRequest> requests) { | 66 | public List<InternalReadResult> batchRead(List<ReadRequest> requests) { |
111 | 67 | ||
112 | - SubmitRequest request = new SubmitRequest( | 68 | + CompletableFuture<List<InternalReadResult>> future = copycat.submit("read", requests); |
113 | - nextId(), | ||
114 | - "read", | ||
115 | - Arrays.asList(requests)); | ||
116 | - | ||
117 | - CompletableFuture<SubmitResponse> future = client.submit(request); | ||
118 | try { | 69 | try { |
119 | - final SubmitResponse submitResponse = future.get(); | 70 | + return future.get(); |
120 | - if (submitResponse.status() == Status.OK) { | ||
121 | - return (List<InternalReadResult>) submitResponse.result(); | ||
122 | - } else { | ||
123 | - throw new DatabaseException(submitResponse.error()); | ||
124 | - } | ||
125 | } catch (InterruptedException | ExecutionException e) { | 71 | } catch (InterruptedException | ExecutionException e) { |
126 | throw new DatabaseException(e); | 72 | throw new DatabaseException(e); |
127 | } | 73 | } |
128 | } | 74 | } |
129 | 75 | ||
130 | - @SuppressWarnings("unchecked") | ||
131 | public List<InternalWriteResult> batchWrite(List<WriteRequest> requests) { | 76 | public List<InternalWriteResult> batchWrite(List<WriteRequest> requests) { |
132 | 77 | ||
133 | - SubmitRequest request = new SubmitRequest( | 78 | + CompletableFuture<List<InternalWriteResult>> future = copycat.submit("write", requests); |
134 | - nextId(), | ||
135 | - "write", | ||
136 | - Arrays.asList(requests)); | ||
137 | - | ||
138 | - CompletableFuture<SubmitResponse> future = client.submit(request); | ||
139 | try { | 79 | try { |
140 | - final SubmitResponse submitResponse = future.get(); | 80 | + return future.get(); |
141 | - if (submitResponse.status() == Status.OK) { | ||
142 | - return (List<InternalWriteResult>) submitResponse.result(); | ||
143 | - } else { | ||
144 | - throw new DatabaseException(submitResponse.error()); | ||
145 | - } | ||
146 | } catch (InterruptedException | ExecutionException e) { | 81 | } catch (InterruptedException | ExecutionException e) { |
147 | throw new DatabaseException(e); | 82 | throw new DatabaseException(e); |
148 | } | 83 | } | ... | ... |
... | @@ -25,7 +25,6 @@ import net.kuujo.copycat.cluster.TcpMember; | ... | @@ -25,7 +25,6 @@ import net.kuujo.copycat.cluster.TcpMember; |
25 | import net.kuujo.copycat.log.InMemoryLog; | 25 | import net.kuujo.copycat.log.InMemoryLog; |
26 | import net.kuujo.copycat.log.Log; | 26 | import net.kuujo.copycat.log.Log; |
27 | 27 | ||
28 | -import org.apache.commons.lang3.RandomUtils; | ||
29 | import org.apache.felix.scr.annotations.Activate; | 28 | import org.apache.felix.scr.annotations.Activate; |
30 | import org.apache.felix.scr.annotations.Component; | 29 | import org.apache.felix.scr.annotations.Component; |
31 | import org.apache.felix.scr.annotations.Deactivate; | 30 | import org.apache.felix.scr.annotations.Deactivate; |
... | @@ -53,7 +52,6 @@ import org.onlab.packet.IpAddress; | ... | @@ -53,7 +52,6 @@ import org.onlab.packet.IpAddress; |
53 | import org.slf4j.Logger; | 52 | import org.slf4j.Logger; |
54 | 53 | ||
55 | import com.google.common.collect.ImmutableList; | 54 | import com.google.common.collect.ImmutableList; |
56 | -import com.google.common.collect.Iterables; | ||
57 | 55 | ||
58 | /** | 56 | /** |
59 | * Strongly consistent and durable state management service based on | 57 | * Strongly consistent and durable state management service based on |
... | @@ -125,30 +123,16 @@ public class DatabaseManager implements DatabaseService, DatabaseAdminService { | ... | @@ -125,30 +123,16 @@ public class DatabaseManager implements DatabaseService, DatabaseAdminService { |
125 | } | 123 | } |
126 | 124 | ||
127 | final ControllerNode localNode = clusterService.getLocalNode(); | 125 | final ControllerNode localNode = clusterService.getLocalNode(); |
128 | - TcpMember clientHandler = null; | ||
129 | for (ControllerNode member : defaultMember) { | 126 | for (ControllerNode member : defaultMember) { |
130 | final TcpMember tcpMember = new TcpMember(member.ip().toString(), | 127 | final TcpMember tcpMember = new TcpMember(member.ip().toString(), |
131 | member.tcpPort()); | 128 | member.tcpPort()); |
132 | if (localNode.equals(member)) { | 129 | if (localNode.equals(member)) { |
133 | - clientHandler = tcpMember; | ||
134 | clusterConfig.setLocalMember(tcpMember); | 130 | clusterConfig.setLocalMember(tcpMember); |
135 | } else { | 131 | } else { |
136 | clusterConfig.addRemoteMember(tcpMember); | 132 | clusterConfig.addRemoteMember(tcpMember); |
137 | } | 133 | } |
138 | } | 134 | } |
139 | 135 | ||
140 | - // TODO should be removed after DatabaseClient refactoring | ||
141 | - if (clientHandler == null) { | ||
142 | - Set<TcpMember> members = clusterConfig.getMembers(); | ||
143 | - if (members.isEmpty()) { | ||
144 | - log.error("No member found in [{}] tablet configuration.", | ||
145 | - DEFAULT_TABLET); | ||
146 | - throw new IllegalStateException("No member found in tablet configuration"); | ||
147 | - } | ||
148 | - int position = RandomUtils.nextInt(0, members.size()); | ||
149 | - clientHandler = Iterables.get(members, position); | ||
150 | - } | ||
151 | - | ||
152 | // note: from this point beyond, clusterConfig requires synchronization | 136 | // note: from this point beyond, clusterConfig requires synchronization |
153 | clusterEventLatch = new CountDownLatch(1); | 137 | clusterEventLatch = new CountDownLatch(1); |
154 | clusterEventListener = new InternalClusterEventListener(); | 138 | clusterEventListener = new InternalClusterEventListener(); |
... | @@ -182,8 +166,7 @@ public class DatabaseManager implements DatabaseService, DatabaseAdminService { | ... | @@ -182,8 +166,7 @@ public class DatabaseManager implements DatabaseService, DatabaseAdminService { |
182 | copycat = new Copycat(stateMachine, consensusLog, cluster, copycatMessagingProtocol); | 166 | copycat = new Copycat(stateMachine, consensusLog, cluster, copycatMessagingProtocol); |
183 | copycat.start(); | 167 | copycat.start(); |
184 | 168 | ||
185 | - // FIXME Redo DatabaseClient. Needs fall back mechanism etc. | 169 | + client = new DatabaseClient(copycat); |
186 | - client = new DatabaseClient(copycatMessagingProtocol.createClient(clientHandler)); | ||
187 | 170 | ||
188 | log.info("Started."); | 171 | log.info("Started."); |
189 | } | 172 | } | ... | ... |
-
Please register or login to post a comment