Madan Jampani | 08822c4 | 2014-11-04 17:17:46 -0800 | [diff] [blame] | 1 | package org.onlab.onos.store.service.impl; |
| 2 | |
Yuta HIGUCHI | f846844 | 2014-11-11 10:09:20 -0800 | [diff] [blame^] | 3 | import static com.google.common.base.Preconditions.checkNotNull; |
| 4 | |
Madan Jampani | 08822c4 | 2014-11-04 17:17:46 -0800 | [diff] [blame] | 5 | import java.util.List; |
Madan Jampani | 08822c4 | 2014-11-04 17:17:46 -0800 | [diff] [blame] | 6 | import java.util.concurrent.CompletableFuture; |
| 7 | import java.util.concurrent.ExecutionException; |
| 8 | |
Yuta HIGUCHI | f846844 | 2014-11-11 10:09:20 -0800 | [diff] [blame^] | 9 | import net.kuujo.copycat.Copycat; |
Madan Jampani | 08822c4 | 2014-11-04 17:17:46 -0800 | [diff] [blame] | 10 | |
Madan Jampani | 08822c4 | 2014-11-04 17:17:46 -0800 | [diff] [blame] | 11 | import org.onlab.onos.store.service.DatabaseException; |
| 12 | import org.onlab.onos.store.service.ReadRequest; |
| 13 | import org.onlab.onos.store.service.WriteRequest; |
| 14 | |
Madan Jampani | 686fa18 | 2014-11-04 23:16:27 -0800 | [diff] [blame] | 15 | /** |
| 16 | * Client for interacting with the Copycat Raft cluster. |
| 17 | */ |
Madan Jampani | 08822c4 | 2014-11-04 17:17:46 -0800 | [diff] [blame] | 18 | public class DatabaseClient { |
| 19 | |
Yuta HIGUCHI | f846844 | 2014-11-11 10:09:20 -0800 | [diff] [blame^] | 20 | private final Copycat copycat; |
Madan Jampani | 08822c4 | 2014-11-04 17:17:46 -0800 | [diff] [blame] | 21 | |
Yuta HIGUCHI | f846844 | 2014-11-11 10:09:20 -0800 | [diff] [blame^] | 22 | public DatabaseClient(Copycat copycat) { |
| 23 | this.copycat = checkNotNull(copycat); |
Madan Jampani | 08822c4 | 2014-11-04 17:17:46 -0800 | [diff] [blame] | 24 | } |
| 25 | |
Madan Jampani | 08822c4 | 2014-11-04 17:17:46 -0800 | [diff] [blame] | 26 | public boolean createTable(String tableName) { |
| 27 | |
Yuta HIGUCHI | f846844 | 2014-11-11 10:09:20 -0800 | [diff] [blame^] | 28 | CompletableFuture<Boolean> future = copycat.submit("createTable", tableName); |
Madan Jampani | 08822c4 | 2014-11-04 17:17:46 -0800 | [diff] [blame] | 29 | try { |
Yuta HIGUCHI | f846844 | 2014-11-11 10:09:20 -0800 | [diff] [blame^] | 30 | return future.get(); |
Madan Jampani | 08822c4 | 2014-11-04 17:17:46 -0800 | [diff] [blame] | 31 | } catch (InterruptedException | ExecutionException e) { |
| 32 | throw new DatabaseException(e); |
| 33 | } |
| 34 | } |
| 35 | |
| 36 | public void dropTable(String tableName) { |
| 37 | |
Yuta HIGUCHI | f846844 | 2014-11-11 10:09:20 -0800 | [diff] [blame^] | 38 | CompletableFuture<Void> future = copycat.submit("dropTable", tableName); |
Madan Jampani | 08822c4 | 2014-11-04 17:17:46 -0800 | [diff] [blame] | 39 | try { |
Yuta HIGUCHI | f846844 | 2014-11-11 10:09:20 -0800 | [diff] [blame^] | 40 | future.get(); |
Madan Jampani | 08822c4 | 2014-11-04 17:17:46 -0800 | [diff] [blame] | 41 | } catch (InterruptedException | ExecutionException e) { |
| 42 | throw new DatabaseException(e); |
| 43 | } |
| 44 | } |
| 45 | |
| 46 | public void dropAllTables() { |
| 47 | |
Yuta HIGUCHI | f846844 | 2014-11-11 10:09:20 -0800 | [diff] [blame^] | 48 | CompletableFuture<Void> future = copycat.submit("dropAllTables"); |
Madan Jampani | 08822c4 | 2014-11-04 17:17:46 -0800 | [diff] [blame] | 49 | try { |
Yuta HIGUCHI | f846844 | 2014-11-11 10:09:20 -0800 | [diff] [blame^] | 50 | future.get(); |
Madan Jampani | 08822c4 | 2014-11-04 17:17:46 -0800 | [diff] [blame] | 51 | } catch (InterruptedException | ExecutionException e) { |
| 52 | throw new DatabaseException(e); |
| 53 | } |
| 54 | } |
| 55 | |
Madan Jampani | 08822c4 | 2014-11-04 17:17:46 -0800 | [diff] [blame] | 56 | public List<String> listTables() { |
| 57 | |
Yuta HIGUCHI | f846844 | 2014-11-11 10:09:20 -0800 | [diff] [blame^] | 58 | CompletableFuture<List<String>> future = copycat.submit("listTables"); |
Madan Jampani | 08822c4 | 2014-11-04 17:17:46 -0800 | [diff] [blame] | 59 | try { |
Yuta HIGUCHI | f846844 | 2014-11-11 10:09:20 -0800 | [diff] [blame^] | 60 | return future.get(); |
Madan Jampani | 08822c4 | 2014-11-04 17:17:46 -0800 | [diff] [blame] | 61 | } catch (InterruptedException | ExecutionException e) { |
| 62 | throw new DatabaseException(e); |
| 63 | } |
| 64 | } |
| 65 | |
Madan Jampani | 08822c4 | 2014-11-04 17:17:46 -0800 | [diff] [blame] | 66 | public List<InternalReadResult> batchRead(List<ReadRequest> requests) { |
| 67 | |
Yuta HIGUCHI | f846844 | 2014-11-11 10:09:20 -0800 | [diff] [blame^] | 68 | CompletableFuture<List<InternalReadResult>> future = copycat.submit("read", requests); |
Madan Jampani | 08822c4 | 2014-11-04 17:17:46 -0800 | [diff] [blame] | 69 | try { |
Yuta HIGUCHI | f846844 | 2014-11-11 10:09:20 -0800 | [diff] [blame^] | 70 | return future.get(); |
Madan Jampani | 08822c4 | 2014-11-04 17:17:46 -0800 | [diff] [blame] | 71 | } catch (InterruptedException | ExecutionException e) { |
| 72 | throw new DatabaseException(e); |
| 73 | } |
| 74 | } |
| 75 | |
Madan Jampani | 08822c4 | 2014-11-04 17:17:46 -0800 | [diff] [blame] | 76 | public List<InternalWriteResult> batchWrite(List<WriteRequest> requests) { |
| 77 | |
Yuta HIGUCHI | f846844 | 2014-11-11 10:09:20 -0800 | [diff] [blame^] | 78 | CompletableFuture<List<InternalWriteResult>> future = copycat.submit("write", requests); |
Madan Jampani | 08822c4 | 2014-11-04 17:17:46 -0800 | [diff] [blame] | 79 | try { |
Yuta HIGUCHI | f846844 | 2014-11-11 10:09:20 -0800 | [diff] [blame^] | 80 | return future.get(); |
Madan Jampani | 08822c4 | 2014-11-04 17:17:46 -0800 | [diff] [blame] | 81 | } catch (InterruptedException | ExecutionException e) { |
| 82 | throw new DatabaseException(e); |
| 83 | } |
| 84 | } |
| 85 | } |