blob: 6ee43e503a7a620a5aa687526c3bef35f5369e18 [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;
Madan Jampani837a3632016-01-21 16:47:26 -080020import org.onosproject.store.service.AsyncAtomicValue;
21import org.onosproject.store.service.AsyncConsistentMap;
Aaron Kruglikov61582a02016-09-06 13:18:58 -070022import org.onosproject.store.service.AsyncConsistentMultimap;
Aaron Kruglikoved88ff62016-08-01 16:02:09 -070023import org.onosproject.store.service.AsyncConsistentTreeMap;
Madan Jampani837a3632016-01-21 16:47:26 -080024import org.onosproject.store.service.AsyncDistributedSet;
Madan Jampani2914e4e2016-09-13 17:48:56 -070025import org.onosproject.store.service.AsyncDocumentTree;
Madan Jampani47b80ba2016-01-31 23:05:55 -080026import org.onosproject.store.service.AsyncLeaderElector;
Madan Jampani837a3632016-01-21 16:47:26 -080027import org.onosproject.store.service.Serializer;
Madan Jampani2914e4e2016-09-13 17:48:56 -070028import org.onosproject.store.service.WorkQueue;
Madan Jampani837a3632016-01-21 16:47:26 -080029
Jordan Haltermanc955df72017-02-04 20:43:28 -080030import java.util.Set;
Jordan Halterman9bdc24f2017-04-19 23:45:12 -070031import java.util.concurrent.Executor;
32import java.util.function.Supplier;
Jordan Haltermanc955df72017-02-04 20:43:28 -080033
Madan Jampani837a3632016-01-21 16:47:26 -080034/**
35 * Interface for entity that can create instances of different distributed primitives.
36 */
37public interface DistributedPrimitiveCreator {
38
39 /**
40 * Creates a new {@code AsyncConsistentMap}.
41 *
42 * @param name map name
43 * @param serializer serializer to use for serializing/deserializing map entries
44 * @param <K> key type
45 * @param <V> value type
46 * @return map
47 */
Jordan Halterman9bdc24f2017-04-19 23:45:12 -070048 default <K, V> AsyncConsistentMap<K, V> newAsyncConsistentMap(String name, Serializer serializer) {
49 return newAsyncConsistentMap(name, serializer, null);
50 }
51
52 /**
53 * Creates a new {@code AsyncConsistentMap}.
54 *
55 * @param name map name
56 * @param serializer serializer to use for serializing/deserializing map entries
57 * @param executorSupplier a callback that returns an executor to be used for each partition
58 * @param <K> key type
59 * @param <V> value type
60 * @return map
61 */
62 <K, V> AsyncConsistentMap<K, V> newAsyncConsistentMap(
63 String name, Serializer serializer, Supplier<Executor> executorSupplier);
Madan Jampani837a3632016-01-21 16:47:26 -080064
65 /**
Aaron Kruglikoved88ff62016-08-01 16:02:09 -070066 * Creates a new {@code AsyncConsistentTreeMap}.
67 *
68 * @param name tree name
69 * @param serializer serializer to use for serializing/deserializing map entries
70 * @param <V> value type
71 * @return distributedTreeMap
72 */
Jordan Halterman9bdc24f2017-04-19 23:45:12 -070073 default <V> AsyncConsistentTreeMap<V> newAsyncConsistentTreeMap(
74 String name, Serializer serializer) {
75 return newAsyncConsistentTreeMap(name, serializer, null);
76 }
77
78 /**
79 * Creates a new {@code AsyncConsistentTreeMap}.
80 *
81 * @param name tree name
82 * @param serializer serializer to use for serializing/deserializing map entries
83 * @param executorSupplier a callback that returns an executor to be used for each partition
84 * @param <V> value type
85 * @return distributedTreeMap
86 */
Aaron Kruglikov61582a02016-09-06 13:18:58 -070087 <V> AsyncConsistentTreeMap<V> newAsyncConsistentTreeMap(
Jordan Halterman9bdc24f2017-04-19 23:45:12 -070088 String name, Serializer serializer, Supplier<Executor> executorSupplier);
Aaron Kruglikov61582a02016-09-06 13:18:58 -070089
90 /**
91 * Creates a new set backed {@code AsyncConsistentMultimap}.
92 *
93 * @param name multimap name
94 * @param serializer serializer to use for serializing/deserializing
95 * @param <K> key type
96 * @param <V> value type
97 * @return set backed distributedMultimap
98 */
Jordan Halterman9bdc24f2017-04-19 23:45:12 -070099 default <K, V> AsyncConsistentMultimap<K, V> newAsyncConsistentSetMultimap(
100 String name, Serializer serializer) {
101 return newAsyncConsistentSetMultimap(name, serializer, null);
102 }
103
104 /**
105 * Creates a new set backed {@code AsyncConsistentMultimap}.
106 *
107 * @param name multimap name
108 * @param serializer serializer to use for serializing/deserializing
109 * @param executorSupplier a callback that returns an executor to be used for each partition
110 * @param <K> key type
111 * @param <V> value type
112 * @return set backed distributedMultimap
113 */
Aaron Kruglikov61582a02016-09-06 13:18:58 -0700114 <K, V> AsyncConsistentMultimap<K, V> newAsyncConsistentSetMultimap(
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700115 String name, Serializer serializer, Supplier<Executor> executorSupplier);
Aaron Kruglikoved88ff62016-08-01 16:02:09 -0700116
117 /**
Jordan Haltermanc955df72017-02-04 20:43:28 -0800118 * Creates a new {@code AsyncAtomicCounterMap}.
119 *
120 * @param name counter map name
121 * @param serializer serializer to use for serializing/deserializing keys
122 * @param <K> key type
123 * @return atomic counter map
124 */
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700125 default <K> AsyncAtomicCounterMap<K> newAsyncAtomicCounterMap(
126 String name, Serializer serializer) {
127 return newAsyncAtomicCounterMap(name, serializer, null);
128 }
129
130 /**
131 * Creates a new {@code AsyncAtomicCounterMap}.
132 *
133 * @param name counter map name
134 * @param serializer serializer to use for serializing/deserializing keys
135 * @param executorSupplier a callback that returns an executor to be used for each partition
136 * @param <K> key type
137 * @return atomic counter map
138 */
Jordan Haltermanc955df72017-02-04 20:43:28 -0800139 <K> AsyncAtomicCounterMap<K> newAsyncAtomicCounterMap(
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700140 String name, Serializer serializer, Supplier<Executor> executorSupplier);
Jordan Haltermanc955df72017-02-04 20:43:28 -0800141
142 /**
Madan Jampani837a3632016-01-21 16:47:26 -0800143 * Creates a new {@code AsyncAtomicCounter}.
144 *
145 * @param name counter name
146 * @return counter
147 */
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700148 default AsyncAtomicCounter newAsyncCounter(String name) {
149 return newAsyncCounter(name, null);
150 }
151
152 /**
153 * Creates a new {@code AsyncAtomicCounter}.
154 *
155 * @param name counter name
156 * @param executorSupplier a callback that returns an executor to be used asynchronous callbacks
157 * @return counter
158 */
159 AsyncAtomicCounter newAsyncCounter(String name, Supplier<Executor> executorSupplier);
Madan Jampani837a3632016-01-21 16:47:26 -0800160
161 /**
162 * Creates a new {@code AsyncAtomicValue}.
163 *
164 * @param name value name
165 * @param serializer serializer to use for serializing/deserializing value type
166 * @param <V> value type
167 * @return value
168 */
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700169 default <V> AsyncAtomicValue<V> newAsyncAtomicValue(String name, Serializer serializer) {
170 return newAsyncAtomicValue(name, serializer, null);
171 }
172
173 /**
174 * Creates a new {@code AsyncAtomicValue}.
175 *
176 * @param name value name
177 * @param serializer serializer to use for serializing/deserializing value type
178 * @param executorSupplier a callback that returns an executor to be used asynchronous callbacks
179 * @param <V> value type
180 * @return value
181 */
182 <V> AsyncAtomicValue<V> newAsyncAtomicValue(
183 String name, Serializer serializer, Supplier<Executor> executorSupplier);
Madan Jampani837a3632016-01-21 16:47:26 -0800184
185 /**
Madan Jampani837a3632016-01-21 16:47:26 -0800186 * Creates a new {@code AsyncDistributedSet}.
187 *
188 * @param name set name
189 * @param serializer serializer to use for serializing/deserializing set entries
190 * @param <E> set entry type
191 * @return set
192 */
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700193 default <E> AsyncDistributedSet<E> newAsyncDistributedSet(String name, Serializer serializer) {
194 return newAsyncDistributedSet(name, serializer, null);
195 }
196
197 /**
198 * Creates a new {@code AsyncDistributedSet}.
199 *
200 * @param name set name
201 * @param serializer serializer to use for serializing/deserializing set entries
202 * @param executorSupplier a callback that returns an executor to be used asynchronous callbacks
203 * @param <E> set entry type
204 * @return set
205 */
206 <E> AsyncDistributedSet<E> newAsyncDistributedSet(
207 String name, Serializer serializer, Supplier<Executor> executorSupplier);
Madan Jampani47b80ba2016-01-31 23:05:55 -0800208
209 /**
210 * Creates a new {@code AsyncLeaderElector}.
211 *
212 * @param name leader elector name
213 * @return leader elector
214 */
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700215 default AsyncLeaderElector newAsyncLeaderElector(String name) {
216 return newAsyncLeaderElector(name, null);
217 }
218
219 /**
220 * Creates a new {@code AsyncLeaderElector}.
221 *
222 * @param name leader elector name
223 * @param executorSupplier a callback that returns an executor to be used asynchronous callbacks
224 * @return leader elector
225 */
226 AsyncLeaderElector newAsyncLeaderElector(String name, Supplier<Executor> executorSupplier);
Madan Jampanie14a09c2016-02-11 10:43:21 -0800227
228 /**
Madan Jampani35708a92016-07-06 10:48:19 -0700229 * Creates a new {@code WorkQueue}.
230 *
Ray Milkeybb23e0b2016-08-02 17:00:21 -0700231 * @param <E> work element type
Madan Jampani35708a92016-07-06 10:48:19 -0700232 * @param name work queue name
233 * @param serializer serializer
234 * @return work queue
235 */
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700236 default <E> WorkQueue<E> newWorkQueue(String name, Serializer serializer) {
237 return newWorkQueue(name, serializer, null);
238 }
239
240 /**
241 * Creates a new {@code WorkQueue}.
242 *
243 * @param <E> work element type
244 * @param name work queue name
245 * @param serializer serializer
246 * @param executorSupplier a callback that returns an executor to be used asynchronous callbacks
247 * @return work queue
248 */
249 <E> WorkQueue<E> newWorkQueue(String name, Serializer serializer, Supplier<Executor> executorSupplier);
Madan Jampani35708a92016-07-06 10:48:19 -0700250
251 /**
Madan Jampani2914e4e2016-09-13 17:48:56 -0700252 * Creates a new {@code AsyncDocumentTree}.
253 *
254 * @param <V> document tree node value type
255 * @param name tree name
256 * @param serializer serializer
257 * @return document tree
258 */
Jordan Halterman9bdc24f2017-04-19 23:45:12 -0700259 default <V> AsyncDocumentTree<V> newAsyncDocumentTree(String name, Serializer serializer) {
260 return newAsyncDocumentTree(name, serializer, null);
261 }
262
263 /**
264 * Creates a new {@code AsyncDocumentTree}.
265 *
266 * @param <V> document tree node value type
267 * @param name tree name
268 * @param serializer serializer
269 * @param executorSupplier a callback that returns an executor to be used asynchronous callbacks
270 * @return document tree
271 */
272 <V> AsyncDocumentTree<V> newAsyncDocumentTree(
273 String name, Serializer serializer, Supplier<Executor> executorSupplier);
Madan Jampani2914e4e2016-09-13 17:48:56 -0700274
275 /**
Madan Jampanie14a09c2016-02-11 10:43:21 -0800276 * Returns the names of all created {@code AsyncConsistentMap} instances.
277 * @return set of {@code AsyncConsistentMap} names
278 */
279 Set<String> getAsyncConsistentMapNames();
280
281 /**
282 * Returns the names of all created {@code AsyncAtomicCounter} instances.
283 * @return set of {@code AsyncAtomicCounter} names
284 */
285 Set<String> getAsyncAtomicCounterNames();
Madan Jampani35708a92016-07-06 10:48:19 -0700286
287 /**
288 * Returns the names of all created {@code WorkQueue} instances.
289 * @return set of {@code WorkQueue} names
290 */
291 Set<String> getWorkQueueNames();
Ray Milkeybb23e0b2016-08-02 17:00:21 -0700292}