blob: 6b2a54c7aeb7624d3d89534a316c6cba63ff07b5 [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;
19
Madan Jampani837a3632016-01-21 16:47:26 -080020import org.onosproject.store.service.AsyncAtomicCounter;
Jordan Haltermanc955df72017-02-04 20:43:28 -080021import org.onosproject.store.service.AsyncAtomicCounterMap;
Jordan Halterman5a1053e2017-05-19 18:03:47 -070022import org.onosproject.store.service.AsyncAtomicIdGenerator;
Madan Jampani837a3632016-01-21 16:47:26 -080023import org.onosproject.store.service.AsyncAtomicValue;
24import org.onosproject.store.service.AsyncConsistentMap;
Aaron Kruglikov61582a02016-09-06 13:18:58 -070025import org.onosproject.store.service.AsyncConsistentMultimap;
Aaron Kruglikoved88ff62016-08-01 16:02:09 -070026import org.onosproject.store.service.AsyncConsistentTreeMap;
Madan Jampani837a3632016-01-21 16:47:26 -080027import org.onosproject.store.service.AsyncDistributedSet;
Madan Jampani2914e4e2016-09-13 17:48:56 -070028import org.onosproject.store.service.AsyncDocumentTree;
Madan Jampani47b80ba2016-01-31 23:05:55 -080029import org.onosproject.store.service.AsyncLeaderElector;
Jordan Haltermand0d80352017-08-10 15:08:27 -070030import org.onosproject.store.service.Ordering;
Madan Jampani837a3632016-01-21 16:47:26 -080031import org.onosproject.store.service.Serializer;
Madan Jampani2914e4e2016-09-13 17:48:56 -070032import org.onosproject.store.service.WorkQueue;
Madan Jampani837a3632016-01-21 16:47:26 -080033
34/**
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 Halterman2bf177c2017-06-29 01:49:08 -070048 <K, V> AsyncConsistentMap<K, V> newAsyncConsistentMap(String name, Serializer serializer);
Madan Jampani837a3632016-01-21 16:47:26 -080049
50 /**
Aaron Kruglikoved88ff62016-08-01 16:02:09 -070051 * Creates a new {@code AsyncConsistentTreeMap}.
52 *
53 * @param name tree name
54 * @param serializer serializer to use for serializing/deserializing map entries
55 * @param <V> value type
56 * @return distributedTreeMap
57 */
Jordan Halterman2bf177c2017-06-29 01:49:08 -070058 <V> AsyncConsistentTreeMap<V> newAsyncConsistentTreeMap(String name, Serializer serializer);
Aaron Kruglikov61582a02016-09-06 13:18:58 -070059
60 /**
61 * Creates a new set backed {@code AsyncConsistentMultimap}.
62 *
63 * @param name multimap name
64 * @param serializer serializer to use for serializing/deserializing
65 * @param <K> key type
66 * @param <V> value type
67 * @return set backed distributedMultimap
68 */
Jordan Halterman2bf177c2017-06-29 01:49:08 -070069 <K, V> AsyncConsistentMultimap<K, V> newAsyncConsistentSetMultimap(String name, Serializer serializer);
Aaron Kruglikoved88ff62016-08-01 16:02:09 -070070
71 /**
Jordan Haltermanc955df72017-02-04 20:43:28 -080072 * Creates a new {@code AsyncAtomicCounterMap}.
73 *
74 * @param name counter map name
75 * @param serializer serializer to use for serializing/deserializing keys
76 * @param <K> key type
77 * @return atomic counter map
78 */
Jordan Halterman2bf177c2017-06-29 01:49:08 -070079 <K> AsyncAtomicCounterMap<K> newAsyncAtomicCounterMap(String name, Serializer serializer);
Jordan Haltermanc955df72017-02-04 20:43:28 -080080
81 /**
Madan Jampani837a3632016-01-21 16:47:26 -080082 * Creates a new {@code AsyncAtomicCounter}.
83 *
84 * @param name counter name
85 * @return counter
86 */
Jordan Halterman2bf177c2017-06-29 01:49:08 -070087 AsyncAtomicCounter newAsyncCounter(String name);
Madan Jampani837a3632016-01-21 16:47:26 -080088
89 /**
Jordan Halterman5a1053e2017-05-19 18:03:47 -070090 * Creates a new {@code AsyncAtomixIdGenerator}.
91 *
92 * @param name ID generator name
93 * @return ID generator
94 */
Jordan Halterman2bf177c2017-06-29 01:49:08 -070095 AsyncAtomicIdGenerator newAsyncIdGenerator(String name);
Jordan Halterman5a1053e2017-05-19 18:03:47 -070096
97 /**
Madan Jampani837a3632016-01-21 16:47:26 -080098 * Creates a new {@code AsyncAtomicValue}.
99 *
100 * @param name value name
101 * @param serializer serializer to use for serializing/deserializing value type
102 * @param <V> value type
103 * @return value
104 */
Jordan Halterman2bf177c2017-06-29 01:49:08 -0700105 <V> AsyncAtomicValue<V> newAsyncAtomicValue(String name, Serializer serializer);
Madan Jampani837a3632016-01-21 16:47:26 -0800106
107 /**
Madan Jampani837a3632016-01-21 16:47:26 -0800108 * Creates a new {@code AsyncDistributedSet}.
109 *
110 * @param name set name
111 * @param serializer serializer to use for serializing/deserializing set entries
112 * @param <E> set entry type
113 * @return set
114 */
Jordan Halterman2bf177c2017-06-29 01:49:08 -0700115 <E> AsyncDistributedSet<E> newAsyncDistributedSet(String name, Serializer serializer);
Madan Jampani47b80ba2016-01-31 23:05:55 -0800116
117 /**
118 * Creates a new {@code AsyncLeaderElector}.
119 *
120 * @param name leader elector name
121 * @return leader elector
122 */
Jordan Halterman2bf177c2017-06-29 01:49:08 -0700123 AsyncLeaderElector newAsyncLeaderElector(String name);
Madan Jampanie14a09c2016-02-11 10:43:21 -0800124
125 /**
Madan Jampani35708a92016-07-06 10:48:19 -0700126 * Creates a new {@code WorkQueue}.
127 *
Ray Milkeybb23e0b2016-08-02 17:00:21 -0700128 * @param <E> work element type
Madan Jampani35708a92016-07-06 10:48:19 -0700129 * @param name work queue name
130 * @param serializer serializer
131 * @return work queue
132 */
Jordan Halterman2bf177c2017-06-29 01:49:08 -0700133 <E> WorkQueue<E> newWorkQueue(String name, Serializer serializer);
Madan Jampani35708a92016-07-06 10:48:19 -0700134
135 /**
Madan Jampani2914e4e2016-09-13 17:48:56 -0700136 * Creates a new {@code AsyncDocumentTree}.
137 *
138 * @param <V> document tree node value type
139 * @param name tree name
140 * @param serializer serializer
141 * @return document tree
142 */
Jordan Haltermand0d80352017-08-10 15:08:27 -0700143 default <V> AsyncDocumentTree<V> newAsyncDocumentTree(String name, Serializer serializer) {
144 return newAsyncDocumentTree(name, serializer, Ordering.NATURAL);
145 }
146
147 /**
148 * Creates a new {@code AsyncDocumentTree}.
149 *
150 * @param <V> document tree node value type
151 * @param name tree name
152 * @param serializer serializer
153 * @param ordering tree node ordering
154 * @return document tree
155 */
156 <V> AsyncDocumentTree<V> newAsyncDocumentTree(String name, Serializer serializer, Ordering ordering);
Madan Jampani2914e4e2016-09-13 17:48:56 -0700157
158 /**
Madan Jampanie14a09c2016-02-11 10:43:21 -0800159 * Returns the names of all created {@code AsyncConsistentMap} instances.
160 * @return set of {@code AsyncConsistentMap} names
161 */
162 Set<String> getAsyncConsistentMapNames();
163
164 /**
165 * Returns the names of all created {@code AsyncAtomicCounter} instances.
166 * @return set of {@code AsyncAtomicCounter} names
167 */
168 Set<String> getAsyncAtomicCounterNames();
Madan Jampani35708a92016-07-06 10:48:19 -0700169
170 /**
171 * Returns the names of all created {@code WorkQueue} instances.
172 * @return set of {@code WorkQueue} names
173 */
174 Set<String> getWorkQueueNames();
Ray Milkeybb23e0b2016-08-02 17:00:21 -0700175}