blob: 5a81ca686839074af2f3f9b3a427627307b4cc09 [file] [log] [blame]
Madan Jampani619453b2015-07-22 23:47:09 -07001/*
2 * Copyright 2015 Open Networking Laboratory
3 *
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 */
Madan Jampanif4c88502016-01-21 12:35:36 -080016package org.onosproject.store.primitives.impl;
Madan Jampanif1b8e172015-03-23 11:42:02 -070017
Madan Jampanif1b8e172015-03-23 11:42:02 -070018import org.onosproject.store.service.AsyncConsistentMap;
19import org.onosproject.store.service.ConsistentMap;
20import org.onosproject.store.service.ConsistentMapBuilder;
Madan Jampanif1b8e172015-03-23 11:42:02 -070021
Flavio Castro41b1f3a2015-07-31 13:51:32 -070022import static com.google.common.base.Preconditions.checkState;
23
Madan Jampanif1b8e172015-03-23 11:42:02 -070024/**
25 * Default Consistent Map builder.
26 *
27 * @param <K> type for map key
28 * @param <V> type for map value
29 */
Madan Jampani538be742016-02-10 14:55:38 -080030public class DefaultConsistentMapBuilder<K, V> extends ConsistentMapBuilder<K, V> {
Madan Jampanif1b8e172015-03-23 11:42:02 -070031
Madan Jampani50589ac2015-06-08 11:38:46 -070032 private final DatabaseManager manager;
Madan Jampanif1b8e172015-03-23 11:42:02 -070033
Madan Jampani50589ac2015-06-08 11:38:46 -070034 public DefaultConsistentMapBuilder(DatabaseManager manager) {
35 this.manager = manager;
Madan Jampanif1b8e172015-03-23 11:42:02 -070036 }
37
Madan Jampanie8af1cc2015-06-23 14:23:31 -070038 private void validateInputs() {
Madan Jampani538be742016-02-10 14:55:38 -080039 checkState(name() != null, "name must be specified");
40 checkState(serializer() != null, "serializer must be specified");
41 if (purgeOnUninstall()) {
42 checkState(applicationId() != null, "ApplicationId must be specified when purgeOnUninstall is enabled");
Madan Jampanie8af1cc2015-06-23 14:23:31 -070043 }
Madan Jampanif1b8e172015-03-23 11:42:02 -070044 }
45
46 @Override
47 public ConsistentMap<K, V> build() {
Madan Jampani538be742016-02-10 14:55:38 -080048 return buildAndRegisterMap().asConsistentMap();
Madan Jampanif1b8e172015-03-23 11:42:02 -070049 }
50
51 @Override
52 public AsyncConsistentMap<K, V> buildAsyncMap() {
Madan Jampani50589ac2015-06-08 11:38:46 -070053 return buildAndRegisterMap();
54 }
55
56 private DefaultAsyncConsistentMap<K, V> buildAndRegisterMap() {
Madan Jampanie8af1cc2015-06-23 14:23:31 -070057 validateInputs();
Madan Jampani538be742016-02-10 14:55:38 -080058 Database database = partitionsDisabled() ? manager.inMemoryDatabase : manager.partitionedDatabase;
59 if (relaxedReadConsistency()) {
Madan Jampani3d6a2f62015-08-12 07:19:07 -070060 return manager.registerMap(
Madan Jampani538be742016-02-10 14:55:38 -080061 new AsyncCachingConsistentMap<>(name(),
62 applicationId(),
Madan Jampani3d6a2f62015-08-12 07:19:07 -070063 database,
Madan Jampani538be742016-02-10 14:55:38 -080064 serializer(),
65 readOnly(),
66 purgeOnUninstall(),
67 meteringEnabled()));
Madan Jampani3d6a2f62015-08-12 07:19:07 -070068 } else {
69 return manager.registerMap(
Madan Jampani538be742016-02-10 14:55:38 -080070 new DefaultAsyncConsistentMap<>(name(),
71 applicationId(),
Madan Jampani3d6a2f62015-08-12 07:19:07 -070072 database,
Madan Jampani538be742016-02-10 14:55:38 -080073 serializer(),
74 readOnly(),
75 purgeOnUninstall(),
76 meteringEnabled()));
Madan Jampani3d6a2f62015-08-12 07:19:07 -070077 }
Madan Jampanif1b8e172015-03-23 11:42:02 -070078 }
79}