blob: 5fa88a754fb7f2d2c2a1e6651c0a781df3a26c06 [file] [log] [blame]
Madan Jampani837a3632016-01-21 16:47:26 -08001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2016-present Open Networking Foundation
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
Jordan Halterman2bf177c2017-06-29 01:49:08 -070018import java.util.Set;
Jordan Halterman7b7644f2017-10-16 12:57:55 -070019import java.util.concurrent.TimeUnit;
Jordan Halterman2bf177c2017-06-29 01:49:08 -070020
Madan Jampani837a3632016-01-21 16:47:26 -080021import org.onosproject.store.service.AsyncAtomicCounter;
Jordan Haltermanc955df72017-02-04 20:43:28 -080022import org.onosproject.store.service.AsyncAtomicCounterMap;
Jordan Halterman5a1053e2017-05-19 18:03:47 -070023import org.onosproject.store.service.AsyncAtomicIdGenerator;
Madan Jampani837a3632016-01-21 16:47:26 -080024import org.onosproject.store.service.AsyncAtomicValue;
25import org.onosproject.store.service.AsyncConsistentMap;
Aaron Kruglikov61582a02016-09-06 13:18:58 -070026import org.onosproject.store.service.AsyncConsistentMultimap;
Aaron Kruglikoved88ff62016-08-01 16:02:09 -070027import org.onosproject.store.service.AsyncConsistentTreeMap;
Jordan Halterman47432582018-01-25 16:56:45 -080028import org.onosproject.store.service.AsyncDistributedLock;
Madan Jampani837a3632016-01-21 16:47:26 -080029import org.onosproject.store.service.AsyncDistributedSet;
Madan Jampani2914e4e2016-09-13 17:48:56 -070030import org.onosproject.store.service.AsyncDocumentTree;
Madan Jampani47b80ba2016-01-31 23:05:55 -080031import org.onosproject.store.service.AsyncLeaderElector;
Jordan Halterman2c045992018-03-20 21:33:00 -070032import org.onosproject.store.service.AtomicCounterMapOptions;
33import org.onosproject.store.service.AtomicCounterOptions;
34import org.onosproject.store.service.AtomicIdGeneratorOptions;
35import org.onosproject.store.service.AtomicValueOptions;
36import org.onosproject.store.service.ConsistentMapOptions;
37import org.onosproject.store.service.ConsistentMultimapOptions;
38import org.onosproject.store.service.ConsistentTreeMapOptions;
39import org.onosproject.store.service.DistributedLockOptions;
40import org.onosproject.store.service.DistributedSetOptions;
41import org.onosproject.store.service.DocumentTreeOptions;
42import org.onosproject.store.service.LeaderElectorOptions;
Jordan Haltermand0d80352017-08-10 15:08:27 -070043import org.onosproject.store.service.Ordering;
Madan Jampani837a3632016-01-21 16:47:26 -080044import org.onosproject.store.service.Serializer;
Madan Jampani2914e4e2016-09-13 17:48:56 -070045import org.onosproject.store.service.WorkQueue;
Jordan Halterman2c045992018-03-20 21:33:00 -070046import org.onosproject.store.service.WorkQueueOptions;
Madan Jampani837a3632016-01-21 16:47:26 -080047
Jordan Halterman7b7644f2017-10-16 12:57:55 -070048import static org.onosproject.store.service.DistributedPrimitive.DEFAULT_OPERATION_TIMEOUT_MILLIS;
49
Madan Jampani837a3632016-01-21 16:47:26 -080050/**
51 * Interface for entity that can create instances of different distributed primitives.
52 */
53public interface DistributedPrimitiveCreator {
54
55 /**
56 * Creates a new {@code AsyncConsistentMap}.
57 *
58 * @param name map name
59 * @param serializer serializer to use for serializing/deserializing map entries
60 * @param <K> key type
61 * @param <V> value type
62 * @return map
Jordan Halterman2c045992018-03-20 21:33:00 -070063 * @deprecated in Nightingale Release (1.13)
Madan Jampani837a3632016-01-21 16:47:26 -080064 */
Jordan Halterman2c045992018-03-20 21:33:00 -070065 @Deprecated
66 default <K, V> AsyncConsistentMap<K, V> newAsyncConsistentMap(String name, Serializer serializer) {
67 return newAsyncConsistentMap((ConsistentMapOptions) new ConsistentMapOptions() {
68 }.withName(name).withSerializer(serializer));
69 }
70
71 /**
72 * Creates a new {@code AsyncConsistentMap}.
73 *
74 * @param options map options
75 * @param <K> key type
76 * @param <V> value type
77 * @return map
78 */
79 <K, V> AsyncConsistentMap<K, V> newAsyncConsistentMap(ConsistentMapOptions options);
Madan Jampani837a3632016-01-21 16:47:26 -080080
81 /**
Aaron Kruglikoved88ff62016-08-01 16:02:09 -070082 * Creates a new {@code AsyncConsistentTreeMap}.
83 *
84 * @param name tree name
85 * @param serializer serializer to use for serializing/deserializing map entries
86 * @param <V> value type
87 * @return distributedTreeMap
Jordan Halterman2c045992018-03-20 21:33:00 -070088 * @deprecated in Nightingale Release (1.13)
Aaron Kruglikoved88ff62016-08-01 16:02:09 -070089 */
Jordan Halterman2c045992018-03-20 21:33:00 -070090 @Deprecated
91 default <V> AsyncConsistentTreeMap<V> newAsyncConsistentTreeMap(String name, Serializer serializer) {
92 return newAsyncConsistentTreeMap((ConsistentTreeMapOptions) new ConsistentTreeMapOptions() {
93 }.withName(name).withSerializer(serializer));
94 }
95
96 /**
97 * Creates a new {@code AsyncConsistentTreeMap}.
98 *
99 * @param options tree map options
100 * @param <V> value type
101 * @return distributedTreeMap
102 */
103 <V> AsyncConsistentTreeMap<V> newAsyncConsistentTreeMap(ConsistentTreeMapOptions options);
Aaron Kruglikov61582a02016-09-06 13:18:58 -0700104
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 <K> key type
111 * @param <V> value type
112 * @return set backed distributedMultimap
Jordan Halterman2c045992018-03-20 21:33:00 -0700113 * @deprecated in Nightingale Release (1.13)
Aaron Kruglikov61582a02016-09-06 13:18:58 -0700114 */
Jordan Halterman2c045992018-03-20 21:33:00 -0700115 @Deprecated
116 default <K, V> AsyncConsistentMultimap<K, V> newAsyncConsistentSetMultimap(String name, Serializer serializer) {
117 return newAsyncConsistentSetMultimap((ConsistentMultimapOptions) new ConsistentMultimapOptions() {
118 }.withName(name).withSerializer(serializer));
119 }
120
121 /**
122 * Creates a new set backed {@code AsyncConsistentMultimap}.
123 *
124 * @param options multimap options
125 * @param <K> key type
126 * @param <V> value type
127 * @return set backed distributedMultimap
128 */
129 <K, V> AsyncConsistentMultimap<K, V> newAsyncConsistentSetMultimap(ConsistentMultimapOptions options);
Aaron Kruglikoved88ff62016-08-01 16:02:09 -0700130
131 /**
Jordan Haltermanc955df72017-02-04 20:43:28 -0800132 * Creates a new {@code AsyncAtomicCounterMap}.
133 *
134 * @param name counter map name
135 * @param serializer serializer to use for serializing/deserializing keys
136 * @param <K> key type
137 * @return atomic counter map
Jordan Halterman2c045992018-03-20 21:33:00 -0700138 * @deprecated in Nightingale Release (1.13)
Jordan Haltermanc955df72017-02-04 20:43:28 -0800139 */
Jordan Halterman2c045992018-03-20 21:33:00 -0700140 @Deprecated
141 default <K> AsyncAtomicCounterMap<K> newAsyncAtomicCounterMap(String name, Serializer serializer) {
142 return newAsyncAtomicCounterMap((AtomicCounterMapOptions) new AtomicCounterMapOptions() {
143 }.withName(name).withSerializer(serializer));
144 }
145
146 /**
147 * Creates a new {@code AsyncAtomicCounterMap}.
148 *
149 * @param options counter map options
150 * @param <K> key type
151 * @return atomic counter map
152 */
153 <K> AsyncAtomicCounterMap<K> newAsyncAtomicCounterMap(AtomicCounterMapOptions options);
Jordan Haltermanc955df72017-02-04 20:43:28 -0800154
155 /**
Madan Jampani837a3632016-01-21 16:47:26 -0800156 * Creates a new {@code AsyncAtomicCounter}.
157 *
158 * @param name counter name
159 * @return counter
Jordan Halterman2c045992018-03-20 21:33:00 -0700160 * @deprecated in Nightingale Release (1.13)
Madan Jampani837a3632016-01-21 16:47:26 -0800161 */
Jordan Halterman2c045992018-03-20 21:33:00 -0700162 @Deprecated
163 default AsyncAtomicCounter newAsyncCounter(String name) {
164 return newAsyncCounter((AtomicCounterOptions) new AtomicCounterOptions() {
165 }.withName(name));
166 }
167
168 /**
169 * Creates a new {@code AsyncAtomicCounter}.
170 *
171 * @param options counter options
172 * @return counter
173 */
174 AsyncAtomicCounter newAsyncCounter(AtomicCounterOptions options);
Madan Jampani837a3632016-01-21 16:47:26 -0800175
176 /**
Jordan Halterman5a1053e2017-05-19 18:03:47 -0700177 * Creates a new {@code AsyncAtomixIdGenerator}.
178 *
179 * @param name ID generator name
180 * @return ID generator
Jordan Halterman2c045992018-03-20 21:33:00 -0700181 * @deprecated in Nightingale Release (1.13)
Jordan Halterman5a1053e2017-05-19 18:03:47 -0700182 */
Jordan Halterman2c045992018-03-20 21:33:00 -0700183 @Deprecated
184 default AsyncAtomicIdGenerator newAsyncIdGenerator(String name) {
185 return newAsyncIdGenerator((AtomicIdGeneratorOptions) new AtomicIdGeneratorOptions() {
186 }.withName(name));
187 }
188
189 /**
190 * Creates a new {@code AsyncAtomixIdGenerator}.
191 *
192 * @param options ID generator options
193 * @return ID generator
194 */
195 AsyncAtomicIdGenerator newAsyncIdGenerator(AtomicIdGeneratorOptions options);
Jordan Halterman5a1053e2017-05-19 18:03:47 -0700196
197 /**
Madan Jampani837a3632016-01-21 16:47:26 -0800198 * Creates a new {@code AsyncAtomicValue}.
199 *
200 * @param name value name
201 * @param serializer serializer to use for serializing/deserializing value type
202 * @param <V> value type
203 * @return value
Jordan Halterman2c045992018-03-20 21:33:00 -0700204 * @deprecated in Nightingale Release (1.13)
Madan Jampani837a3632016-01-21 16:47:26 -0800205 */
Jordan Halterman2c045992018-03-20 21:33:00 -0700206 @Deprecated
207 default <V> AsyncAtomicValue<V> newAsyncAtomicValue(String name, Serializer serializer) {
208 return newAsyncAtomicValue((AtomicValueOptions) new AtomicValueOptions() {
209 }.withName(name).withSerializer(serializer));
210 }
211
212 /**
213 * Creates a new {@code AsyncAtomicValue}.
214 *
215 * @param options value options
216 * @param <V> value type
217 * @return value
218 */
219 <V> AsyncAtomicValue<V> newAsyncAtomicValue(AtomicValueOptions options);
Madan Jampani837a3632016-01-21 16:47:26 -0800220
221 /**
Madan Jampani837a3632016-01-21 16:47:26 -0800222 * Creates a new {@code AsyncDistributedSet}.
223 *
224 * @param name set name
225 * @param serializer serializer to use for serializing/deserializing set entries
226 * @param <E> set entry type
227 * @return set
Jordan Halterman2c045992018-03-20 21:33:00 -0700228 * @deprecated in Nightingale Release (1.13)
Madan Jampani837a3632016-01-21 16:47:26 -0800229 */
Jordan Halterman2c045992018-03-20 21:33:00 -0700230 @Deprecated
231 default <E> AsyncDistributedSet<E> newAsyncDistributedSet(String name, Serializer serializer) {
232 return newAsyncDistributedSet((DistributedSetOptions) new DistributedSetOptions() {
233 }.withName(name).withSerializer(serializer));
234 }
235
236 /**
237 * Creates a new {@code AsyncDistributedSet}.
238 *
239 * @param options set options
240 * @param <E> set entry type
241 * @return set
242 */
243 <E> AsyncDistributedSet<E> newAsyncDistributedSet(DistributedSetOptions options);
Madan Jampani47b80ba2016-01-31 23:05:55 -0800244
245 /**
Jordan Halterman47432582018-01-25 16:56:45 -0800246 * Creates a new {@code AsyncDistributedLock}.
247 *
248 * @param name lock name
249 * @return lock
Jordan Halterman2c045992018-03-20 21:33:00 -0700250 * @deprecated in Nightingale Release (1.13)
Jordan Halterman47432582018-01-25 16:56:45 -0800251 */
Jordan Halterman2c045992018-03-20 21:33:00 -0700252 @Deprecated
253 default AsyncDistributedLock newAsyncDistributedLock(String name) {
254 return newAsyncDistributedLock((DistributedLockOptions) new DistributedLockOptions() {
255 }.withName(name));
256 }
257
258 /**
259 * Creates a new {@code AsyncDistributedLock}.
260 *
261 * @param options lock options
262 * @return lock
263 */
264 AsyncDistributedLock newAsyncDistributedLock(DistributedLockOptions options);
Jordan Halterman47432582018-01-25 16:56:45 -0800265
266 /**
Madan Jampani47b80ba2016-01-31 23:05:55 -0800267 * Creates a new {@code AsyncLeaderElector}.
268 *
269 * @param name leader elector name
270 * @return leader elector
Jordan Halterman2c045992018-03-20 21:33:00 -0700271 * @deprecated in Nightingale Release (1.13)
Madan Jampani47b80ba2016-01-31 23:05:55 -0800272 */
Jordan Halterman2c045992018-03-20 21:33:00 -0700273 @Deprecated
Jordan Halterman7b7644f2017-10-16 12:57:55 -0700274 default AsyncLeaderElector newAsyncLeaderElector(String name) {
275 return newAsyncLeaderElector(name, DEFAULT_OPERATION_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
276 }
277
278 /**
279 * Creates a new {@code AsyncLeaderElector}.
280 *
281 * @param name leader elector name
282 * @param electionTimeout leader election timeout
283 * @param timeUnit leader election timeout time unit
284 * @return leader elector
Jordan Halterman2c045992018-03-20 21:33:00 -0700285 * @deprecated in Nightingale Release (1.13)
Jordan Halterman7b7644f2017-10-16 12:57:55 -0700286 */
Jordan Halterman2c045992018-03-20 21:33:00 -0700287 @Deprecated
288 default AsyncLeaderElector newAsyncLeaderElector(String name, long electionTimeout, TimeUnit timeUnit) {
289 LeaderElectorOptions options = new LeaderElectorOptions() {
290 };
291 options.withName(name);
292 options.withElectionTimeout(electionTimeout, timeUnit);
293 return newAsyncLeaderElector(options);
294 }
295
296 /**
297 * Creates a new {@code AsyncLeaderElector}.
298 *
299 * @param options leader elector options
300 * @return leader elector
301 */
302 AsyncLeaderElector newAsyncLeaderElector(LeaderElectorOptions options);
Madan Jampanie14a09c2016-02-11 10:43:21 -0800303
304 /**
Madan Jampani35708a92016-07-06 10:48:19 -0700305 * Creates a new {@code WorkQueue}.
306 *
Ray Milkeybb23e0b2016-08-02 17:00:21 -0700307 * @param <E> work element type
Madan Jampani35708a92016-07-06 10:48:19 -0700308 * @param name work queue name
309 * @param serializer serializer
310 * @return work queue
Jordan Halterman2c045992018-03-20 21:33:00 -0700311 * @deprecated in Nightingale Release (1.13)
Madan Jampani35708a92016-07-06 10:48:19 -0700312 */
Jordan Halterman2c045992018-03-20 21:33:00 -0700313 @Deprecated
314 default <E> WorkQueue<E> newWorkQueue(String name, Serializer serializer) {
315 return newWorkQueue((WorkQueueOptions) new WorkQueueOptions() {
316 }.withName(name).withSerializer(serializer));
317 }
318
319 /**
320 * Creates a new {@code WorkQueue}.
321 *
322 * @param <E> work element type
323 * @param options work queue options
324 * @return work queue
325 */
326 <E> WorkQueue<E> newWorkQueue(WorkQueueOptions options);
Madan Jampani35708a92016-07-06 10:48:19 -0700327
328 /**
Madan Jampani2914e4e2016-09-13 17:48:56 -0700329 * Creates a new {@code AsyncDocumentTree}.
330 *
331 * @param <V> document tree node value type
332 * @param name tree name
333 * @param serializer serializer
334 * @return document tree
Jordan Halterman2c045992018-03-20 21:33:00 -0700335 * @deprecated in Nightingale Release (1.13)
Madan Jampani2914e4e2016-09-13 17:48:56 -0700336 */
Jordan Halterman2c045992018-03-20 21:33:00 -0700337 @Deprecated
Jordan Haltermand0d80352017-08-10 15:08:27 -0700338 default <V> AsyncDocumentTree<V> newAsyncDocumentTree(String name, Serializer serializer) {
339 return newAsyncDocumentTree(name, serializer, Ordering.NATURAL);
340 }
341
342 /**
343 * Creates a new {@code AsyncDocumentTree}.
344 *
345 * @param <V> document tree node value type
346 * @param name tree name
347 * @param serializer serializer
348 * @param ordering tree node ordering
349 * @return document tree
Jordan Halterman2c045992018-03-20 21:33:00 -0700350 * @deprecated in Nightingale Release (1.13)
Jordan Haltermand0d80352017-08-10 15:08:27 -0700351 */
Jordan Halterman2c045992018-03-20 21:33:00 -0700352 @Deprecated
353 default <V> AsyncDocumentTree<V> newAsyncDocumentTree(String name, Serializer serializer, Ordering ordering) {
354 DocumentTreeOptions options = new DocumentTreeOptions() {
355 };
356 options.withName(name);
357 options.withSerializer(serializer);
358 options.withOrdering(ordering);
359 return newAsyncDocumentTree(options);
360 }
361
362 /**
363 * Creates a new {@code AsyncDocumentTree}.
364 *
365 * @param <V> document tree node value type
366 * @param options tree options
367 * @return document tree
368 */
369 <V> AsyncDocumentTree<V> newAsyncDocumentTree(DocumentTreeOptions options);
Madan Jampani2914e4e2016-09-13 17:48:56 -0700370
371 /**
Madan Jampanie14a09c2016-02-11 10:43:21 -0800372 * Returns the names of all created {@code AsyncConsistentMap} instances.
373 * @return set of {@code AsyncConsistentMap} names
374 */
375 Set<String> getAsyncConsistentMapNames();
376
377 /**
378 * Returns the names of all created {@code AsyncAtomicCounter} instances.
379 * @return set of {@code AsyncAtomicCounter} names
380 */
381 Set<String> getAsyncAtomicCounterNames();
Madan Jampani35708a92016-07-06 10:48:19 -0700382
383 /**
384 * Returns the names of all created {@code WorkQueue} instances.
385 * @return set of {@code WorkQueue} names
386 */
387 Set<String> getWorkQueueNames();
Ray Milkeybb23e0b2016-08-02 17:00:21 -0700388}