blob: 1e68bdb923a207005ac8fa26ddd428ab18af4119 [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 Haltermand0d80352017-08-10 15:08:27 -070032import org.onosproject.store.service.Ordering;
Madan Jampani837a3632016-01-21 16:47:26 -080033import org.onosproject.store.service.Serializer;
Madan Jampani2914e4e2016-09-13 17:48:56 -070034import org.onosproject.store.service.WorkQueue;
Madan Jampani837a3632016-01-21 16:47:26 -080035
Jordan Halterman7b7644f2017-10-16 12:57:55 -070036import static org.onosproject.store.service.DistributedPrimitive.DEFAULT_OPERATION_TIMEOUT_MILLIS;
37
Madan Jampani837a3632016-01-21 16:47:26 -080038/**
39 * Interface for entity that can create instances of different distributed primitives.
40 */
41public interface DistributedPrimitiveCreator {
42
43 /**
44 * Creates a new {@code AsyncConsistentMap}.
45 *
46 * @param name map name
47 * @param serializer serializer to use for serializing/deserializing map entries
48 * @param <K> key type
49 * @param <V> value type
50 * @return map
51 */
Jordan Halterman2bf177c2017-06-29 01:49:08 -070052 <K, V> AsyncConsistentMap<K, V> newAsyncConsistentMap(String name, Serializer serializer);
Madan Jampani837a3632016-01-21 16:47:26 -080053
54 /**
Aaron Kruglikoved88ff62016-08-01 16:02:09 -070055 * Creates a new {@code AsyncConsistentTreeMap}.
56 *
57 * @param name tree name
58 * @param serializer serializer to use for serializing/deserializing map entries
59 * @param <V> value type
60 * @return distributedTreeMap
61 */
Jordan Halterman2bf177c2017-06-29 01:49:08 -070062 <V> AsyncConsistentTreeMap<V> newAsyncConsistentTreeMap(String name, Serializer serializer);
Aaron Kruglikov61582a02016-09-06 13:18:58 -070063
64 /**
65 * Creates a new set backed {@code AsyncConsistentMultimap}.
66 *
67 * @param name multimap name
68 * @param serializer serializer to use for serializing/deserializing
69 * @param <K> key type
70 * @param <V> value type
71 * @return set backed distributedMultimap
72 */
Jordan Halterman2bf177c2017-06-29 01:49:08 -070073 <K, V> AsyncConsistentMultimap<K, V> newAsyncConsistentSetMultimap(String name, Serializer serializer);
Aaron Kruglikoved88ff62016-08-01 16:02:09 -070074
75 /**
Jordan Haltermanc955df72017-02-04 20:43:28 -080076 * Creates a new {@code AsyncAtomicCounterMap}.
77 *
78 * @param name counter map name
79 * @param serializer serializer to use for serializing/deserializing keys
80 * @param <K> key type
81 * @return atomic counter map
82 */
Jordan Halterman2bf177c2017-06-29 01:49:08 -070083 <K> AsyncAtomicCounterMap<K> newAsyncAtomicCounterMap(String name, Serializer serializer);
Jordan Haltermanc955df72017-02-04 20:43:28 -080084
85 /**
Madan Jampani837a3632016-01-21 16:47:26 -080086 * Creates a new {@code AsyncAtomicCounter}.
87 *
88 * @param name counter name
89 * @return counter
90 */
Jordan Halterman2bf177c2017-06-29 01:49:08 -070091 AsyncAtomicCounter newAsyncCounter(String name);
Madan Jampani837a3632016-01-21 16:47:26 -080092
93 /**
Jordan Halterman5a1053e2017-05-19 18:03:47 -070094 * Creates a new {@code AsyncAtomixIdGenerator}.
95 *
96 * @param name ID generator name
97 * @return ID generator
98 */
Jordan Halterman2bf177c2017-06-29 01:49:08 -070099 AsyncAtomicIdGenerator newAsyncIdGenerator(String name);
Jordan Halterman5a1053e2017-05-19 18:03:47 -0700100
101 /**
Madan Jampani837a3632016-01-21 16:47:26 -0800102 * Creates a new {@code AsyncAtomicValue}.
103 *
104 * @param name value name
105 * @param serializer serializer to use for serializing/deserializing value type
106 * @param <V> value type
107 * @return value
108 */
Jordan Halterman2bf177c2017-06-29 01:49:08 -0700109 <V> AsyncAtomicValue<V> newAsyncAtomicValue(String name, Serializer serializer);
Madan Jampani837a3632016-01-21 16:47:26 -0800110
111 /**
Madan Jampani837a3632016-01-21 16:47:26 -0800112 * Creates a new {@code AsyncDistributedSet}.
113 *
114 * @param name set name
115 * @param serializer serializer to use for serializing/deserializing set entries
116 * @param <E> set entry type
117 * @return set
118 */
Jordan Halterman2bf177c2017-06-29 01:49:08 -0700119 <E> AsyncDistributedSet<E> newAsyncDistributedSet(String name, Serializer serializer);
Madan Jampani47b80ba2016-01-31 23:05:55 -0800120
121 /**
Jordan Halterman47432582018-01-25 16:56:45 -0800122 * Creates a new {@code AsyncDistributedLock}.
123 *
124 * @param name lock name
125 * @return lock
126 */
127 AsyncDistributedLock newAsyncDistributedLock(String name);
128
129 /**
Madan Jampani47b80ba2016-01-31 23:05:55 -0800130 * Creates a new {@code AsyncLeaderElector}.
131 *
132 * @param name leader elector name
133 * @return leader elector
134 */
Jordan Halterman7b7644f2017-10-16 12:57:55 -0700135 default AsyncLeaderElector newAsyncLeaderElector(String name) {
136 return newAsyncLeaderElector(name, DEFAULT_OPERATION_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
137 }
138
139 /**
140 * Creates a new {@code AsyncLeaderElector}.
141 *
142 * @param name leader elector name
143 * @param electionTimeout leader election timeout
144 * @param timeUnit leader election timeout time unit
145 * @return leader elector
146 */
147 AsyncLeaderElector newAsyncLeaderElector(String name, long electionTimeout, TimeUnit timeUnit);
Madan Jampanie14a09c2016-02-11 10:43:21 -0800148
149 /**
Madan Jampani35708a92016-07-06 10:48:19 -0700150 * Creates a new {@code WorkQueue}.
151 *
Ray Milkeybb23e0b2016-08-02 17:00:21 -0700152 * @param <E> work element type
Madan Jampani35708a92016-07-06 10:48:19 -0700153 * @param name work queue name
154 * @param serializer serializer
155 * @return work queue
156 */
Jordan Halterman2bf177c2017-06-29 01:49:08 -0700157 <E> WorkQueue<E> newWorkQueue(String name, Serializer serializer);
Madan Jampani35708a92016-07-06 10:48:19 -0700158
159 /**
Madan Jampani2914e4e2016-09-13 17:48:56 -0700160 * Creates a new {@code AsyncDocumentTree}.
161 *
162 * @param <V> document tree node value type
163 * @param name tree name
164 * @param serializer serializer
165 * @return document tree
166 */
Jordan Haltermand0d80352017-08-10 15:08:27 -0700167 default <V> AsyncDocumentTree<V> newAsyncDocumentTree(String name, Serializer serializer) {
168 return newAsyncDocumentTree(name, serializer, Ordering.NATURAL);
169 }
170
171 /**
172 * Creates a new {@code AsyncDocumentTree}.
173 *
174 * @param <V> document tree node value type
175 * @param name tree name
176 * @param serializer serializer
177 * @param ordering tree node ordering
178 * @return document tree
179 */
180 <V> AsyncDocumentTree<V> newAsyncDocumentTree(String name, Serializer serializer, Ordering ordering);
Madan Jampani2914e4e2016-09-13 17:48:56 -0700181
182 /**
Madan Jampanie14a09c2016-02-11 10:43:21 -0800183 * Returns the names of all created {@code AsyncConsistentMap} instances.
184 * @return set of {@code AsyncConsistentMap} names
185 */
186 Set<String> getAsyncConsistentMapNames();
187
188 /**
189 * Returns the names of all created {@code AsyncAtomicCounter} instances.
190 * @return set of {@code AsyncAtomicCounter} names
191 */
192 Set<String> getAsyncAtomicCounterNames();
Madan Jampani35708a92016-07-06 10:48:19 -0700193
194 /**
195 * Returns the names of all created {@code WorkQueue} instances.
196 * @return set of {@code WorkQueue} names
197 */
198 Set<String> getWorkQueueNames();
Ray Milkeybb23e0b2016-08-02 17:00:21 -0700199}