blob: 33c3d333d64d7d024438467e1069105ae4781449 [file] [log] [blame]
Madan Jampani837a3632016-01-21 16:47:26 -08001/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Madan Jampani837a3632016-01-21 16:47:26 -08003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.store.primitives;
17
18import org.onosproject.store.service.AsyncAtomicCounter;
Jordan Haltermanc955df72017-02-04 20:43:28 -080019import org.onosproject.store.service.AsyncAtomicCounterMap;
Jordan Halterman5a1053e2017-05-19 18:03:47 -070020import org.onosproject.store.service.AsyncAtomicIdGenerator;
Madan Jampani837a3632016-01-21 16:47:26 -080021import org.onosproject.store.service.AsyncAtomicValue;
22import org.onosproject.store.service.AsyncConsistentMap;
Aaron Kruglikov61582a02016-09-06 13:18:58 -070023import org.onosproject.store.service.AsyncConsistentMultimap;
Aaron Kruglikoved88ff62016-08-01 16:02:09 -070024import org.onosproject.store.service.AsyncConsistentTreeMap;
Madan Jampani837a3632016-01-21 16:47:26 -080025import org.onosproject.store.service.AsyncDistributedSet;
Madan Jampani2914e4e2016-09-13 17:48:56 -070026import org.onosproject.store.service.AsyncDocumentTree;
Madan Jampani47b80ba2016-01-31 23:05:55 -080027import org.onosproject.store.service.AsyncLeaderElector;
Madan Jampani837a3632016-01-21 16:47:26 -080028import org.onosproject.store.service.Serializer;
Madan Jampani2914e4e2016-09-13 17:48:56 -070029import org.onosproject.store.service.WorkQueue;
Madan Jampani837a3632016-01-21 16:47:26 -080030
Jordan Haltermanc955df72017-02-04 20:43:28 -080031import java.util.Set;
Jordan Halterman9bdc24f2017-04-19 23:45:12 -070032import java.util.concurrent.Executor;
33import java.util.function.Supplier;
Jordan Haltermanc955df72017-02-04 20:43:28 -080034
Madan Jampani837a3632016-01-21 16:47:26 -080035/**
36 * Interface for entity that can create instances of different distributed primitives.
37 */
38public interface DistributedPrimitiveCreator {
39
40 /**
41 * Creates a new {@code AsyncConsistentMap}.
42 *
43 * @param name map name
44 * @param serializer serializer to use for serializing/deserializing map entries
45 * @param <K> key type
46 * @param <V> value type
47 * @return map
48 */
Jordan Halterman9bdc24f2017-04-19 23:45:12 -070049 default <K, V> AsyncConsistentMap<K, V> newAsyncConsistentMap(String name, Serializer serializer) {
50 return newAsyncConsistentMap(name, serializer, null);
51 }
52
53 /**
54 * Creates a new {@code AsyncConsistentMap}.
55 *
56 * @param name map name
57 * @param serializer serializer to use for serializing/deserializing map entries
58 * @param executorSupplier a callback that returns an executor to be used for each partition
59 * @param <K> key type
60 * @param <V> value type
61 * @return map
62 */
63 <K, V> AsyncConsistentMap<K, V> newAsyncConsistentMap(
64 String name, Serializer serializer, Supplier<Executor> executorSupplier);
Madan Jampani837a3632016-01-21 16:47:26 -080065
66 /**
Aaron Kruglikoved88ff62016-08-01 16:02:09 -070067 * Creates a new {@code AsyncConsistentTreeMap}.
68 *
69 * @param name tree name
70 * @param serializer serializer to use for serializing/deserializing map entries
71 * @param <V> value type
72 * @return distributedTreeMap
73 */
Jordan Halterman9bdc24f2017-04-19 23:45:12 -070074 default <V> AsyncConsistentTreeMap<V> newAsyncConsistentTreeMap(
75 String name, Serializer serializer) {
76 return newAsyncConsistentTreeMap(name, serializer, null);
77 }
78
79 /**
80 * Creates a new {@code AsyncConsistentTreeMap}.
81 *
82 * @param name tree name
83 * @param serializer serializer to use for serializing/deserializing map entries
84 * @param executorSupplier a callback that returns an executor to be used for each partition
85 * @param <V> value type
86 * @return distributedTreeMap
87 */
Aaron Kruglikov61582a02016-09-06 13:18:58 -070088 <V> AsyncConsistentTreeMap<V> newAsyncConsistentTreeMap(
Jordan Halterman9bdc24f2017-04-19 23:45:12 -070089 String name, Serializer serializer, Supplier<Executor> executorSupplier);
Aaron Kruglikov61582a02016-09-06 13:18:58 -070090
91 /**
92 * Creates a new set backed {@code AsyncConsistentMultimap}.
93 *
94 * @param name multimap name
95 * @param serializer serializer to use for serializing/deserializing
96 * @param <K> key type
97 * @param <V> value type
98 * @return set backed distributedMultimap
99 */
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700100 default <K, V> AsyncConsistentMultimap<K, V> newAsyncConsistentSetMultimap(
101 String name, Serializer serializer) {
102 return newAsyncConsistentSetMultimap(name, serializer, null);
103 }
104
105 /**
106 * Creates a new set backed {@code AsyncConsistentMultimap}.
107 *
108 * @param name multimap name
109 * @param serializer serializer to use for serializing/deserializing
110 * @param executorSupplier a callback that returns an executor to be used for each partition
111 * @param <K> key type
112 * @param <V> value type
113 * @return set backed distributedMultimap
114 */
Aaron Kruglikov61582a02016-09-06 13:18:58 -0700115 <K, V> AsyncConsistentMultimap<K, V> newAsyncConsistentSetMultimap(
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700116 String name, Serializer serializer, Supplier<Executor> executorSupplier);
Aaron Kruglikoved88ff62016-08-01 16:02:09 -0700117
118 /**
Jordan Haltermanc955df72017-02-04 20:43:28 -0800119 * Creates a new {@code AsyncAtomicCounterMap}.
120 *
121 * @param name counter map name
122 * @param serializer serializer to use for serializing/deserializing keys
123 * @param <K> key type
124 * @return atomic counter map
125 */
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700126 default <K> AsyncAtomicCounterMap<K> newAsyncAtomicCounterMap(
127 String name, Serializer serializer) {
128 return newAsyncAtomicCounterMap(name, serializer, null);
129 }
130
131 /**
132 * Creates a new {@code AsyncAtomicCounterMap}.
133 *
134 * @param name counter map name
135 * @param serializer serializer to use for serializing/deserializing keys
136 * @param executorSupplier a callback that returns an executor to be used for each partition
137 * @param <K> key type
138 * @return atomic counter map
139 */
Jordan Haltermanc955df72017-02-04 20:43:28 -0800140 <K> AsyncAtomicCounterMap<K> newAsyncAtomicCounterMap(
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700141 String name, Serializer serializer, Supplier<Executor> executorSupplier);
Jordan Haltermanc955df72017-02-04 20:43:28 -0800142
143 /**
Madan Jampani837a3632016-01-21 16:47:26 -0800144 * Creates a new {@code AsyncAtomicCounter}.
145 *
146 * @param name counter name
147 * @return counter
148 */
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700149 default AsyncAtomicCounter newAsyncCounter(String name) {
150 return newAsyncCounter(name, null);
151 }
152
153 /**
154 * Creates a new {@code AsyncAtomicCounter}.
155 *
156 * @param name counter name
157 * @param executorSupplier a callback that returns an executor to be used asynchronous callbacks
158 * @return counter
159 */
160 AsyncAtomicCounter newAsyncCounter(String name, Supplier<Executor> executorSupplier);
Madan Jampani837a3632016-01-21 16:47:26 -0800161
162 /**
Jordan Halterman5a1053e2017-05-19 18:03:47 -0700163 * Creates a new {@code AsyncAtomixIdGenerator}.
164 *
165 * @param name ID generator name
166 * @return ID generator
167 */
168 default AsyncAtomicIdGenerator newAsyncIdGenerator(String name) {
169 return newAsyncIdGenerator(name, null);
170 }
171
172 /**
173 * Creates a new {@code AsyncAtomixIdGenerator}.
174 *
175 * @param name ID generator name
176 * @param executorSupplier a callback that returns an executor to be used asynchronous callbacks
177 * @return ID generator
178 */
179 AsyncAtomicIdGenerator newAsyncIdGenerator(String name, Supplier<Executor> executorSupplier);
180
181 /**
Madan Jampani837a3632016-01-21 16:47:26 -0800182 * Creates a new {@code AsyncAtomicValue}.
183 *
184 * @param name value name
185 * @param serializer serializer to use for serializing/deserializing value type
186 * @param <V> value type
187 * @return value
188 */
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700189 default <V> AsyncAtomicValue<V> newAsyncAtomicValue(String name, Serializer serializer) {
190 return newAsyncAtomicValue(name, serializer, null);
191 }
192
193 /**
194 * Creates a new {@code AsyncAtomicValue}.
195 *
196 * @param name value name
197 * @param serializer serializer to use for serializing/deserializing value type
198 * @param executorSupplier a callback that returns an executor to be used asynchronous callbacks
199 * @param <V> value type
200 * @return value
201 */
202 <V> AsyncAtomicValue<V> newAsyncAtomicValue(
203 String name, Serializer serializer, Supplier<Executor> executorSupplier);
Madan Jampani837a3632016-01-21 16:47:26 -0800204
205 /**
Madan Jampani837a3632016-01-21 16:47:26 -0800206 * Creates a new {@code AsyncDistributedSet}.
207 *
208 * @param name set name
209 * @param serializer serializer to use for serializing/deserializing set entries
210 * @param <E> set entry type
211 * @return set
212 */
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700213 default <E> AsyncDistributedSet<E> newAsyncDistributedSet(String name, Serializer serializer) {
214 return newAsyncDistributedSet(name, serializer, null);
215 }
216
217 /**
218 * Creates a new {@code AsyncDistributedSet}.
219 *
220 * @param name set name
221 * @param serializer serializer to use for serializing/deserializing set entries
222 * @param executorSupplier a callback that returns an executor to be used asynchronous callbacks
223 * @param <E> set entry type
224 * @return set
225 */
226 <E> AsyncDistributedSet<E> newAsyncDistributedSet(
227 String name, Serializer serializer, Supplier<Executor> executorSupplier);
Madan Jampani47b80ba2016-01-31 23:05:55 -0800228
229 /**
230 * Creates a new {@code AsyncLeaderElector}.
231 *
232 * @param name leader elector name
233 * @return leader elector
234 */
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700235 default AsyncLeaderElector newAsyncLeaderElector(String name) {
236 return newAsyncLeaderElector(name, null);
237 }
238
239 /**
240 * Creates a new {@code AsyncLeaderElector}.
241 *
242 * @param name leader elector name
243 * @param executorSupplier a callback that returns an executor to be used asynchronous callbacks
244 * @return leader elector
245 */
246 AsyncLeaderElector newAsyncLeaderElector(String name, Supplier<Executor> executorSupplier);
Madan Jampanie14a09c2016-02-11 10:43:21 -0800247
248 /**
Madan Jampani35708a92016-07-06 10:48:19 -0700249 * Creates a new {@code WorkQueue}.
250 *
Ray Milkeybb23e0b2016-08-02 17:00:21 -0700251 * @param <E> work element type
Madan Jampani35708a92016-07-06 10:48:19 -0700252 * @param name work queue name
253 * @param serializer serializer
254 * @return work queue
255 */
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700256 default <E> WorkQueue<E> newWorkQueue(String name, Serializer serializer) {
257 return newWorkQueue(name, serializer, null);
258 }
259
260 /**
261 * Creates a new {@code WorkQueue}.
262 *
263 * @param <E> work element type
264 * @param name work queue name
265 * @param serializer serializer
266 * @param executorSupplier a callback that returns an executor to be used asynchronous callbacks
267 * @return work queue
268 */
269 <E> WorkQueue<E> newWorkQueue(String name, Serializer serializer, Supplier<Executor> executorSupplier);
Madan Jampani35708a92016-07-06 10:48:19 -0700270
271 /**
Madan Jampani2914e4e2016-09-13 17:48:56 -0700272 * Creates a new {@code AsyncDocumentTree}.
273 *
274 * @param <V> document tree node value type
275 * @param name tree name
276 * @param serializer serializer
277 * @return document tree
278 */
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700279 default <V> AsyncDocumentTree<V> newAsyncDocumentTree(String name, Serializer serializer) {
280 return newAsyncDocumentTree(name, serializer, null);
281 }
282
283 /**
284 * Creates a new {@code AsyncDocumentTree}.
285 *
286 * @param <V> document tree node value type
287 * @param name tree name
288 * @param serializer serializer
289 * @param executorSupplier a callback that returns an executor to be used asynchronous callbacks
290 * @return document tree
291 */
292 <V> AsyncDocumentTree<V> newAsyncDocumentTree(
293 String name, Serializer serializer, Supplier<Executor> executorSupplier);
Madan Jampani2914e4e2016-09-13 17:48:56 -0700294
295 /**
Madan Jampanie14a09c2016-02-11 10:43:21 -0800296 * Returns the names of all created {@code AsyncConsistentMap} instances.
297 * @return set of {@code AsyncConsistentMap} names
298 */
299 Set<String> getAsyncConsistentMapNames();
300
301 /**
302 * Returns the names of all created {@code AsyncAtomicCounter} instances.
303 * @return set of {@code AsyncAtomicCounter} names
304 */
305 Set<String> getAsyncAtomicCounterNames();
Madan Jampani35708a92016-07-06 10:48:19 -0700306
307 /**
308 * Returns the names of all created {@code WorkQueue} instances.
309 * @return set of {@code WorkQueue} names
310 */
311 Set<String> getWorkQueueNames();
Ray Milkeybb23e0b2016-08-02 17:00:21 -0700312}