blob: 753e38af70ab17b2d1fae39515c54fbad1f20d3d [file] [log] [blame]
Sho SHIMIZUb2b2d982015-09-11 15:35:06 -07001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2015-present Open Networking Foundation
Sho SHIMIZUb2b2d982015-09-11 15:35:06 -07003 *
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.vtnrsc.tenantnetwork.impl;
17
Sho SHIMIZUb2b2d982015-09-11 15:35:06 -070018import org.onosproject.core.ApplicationId;
19import org.onosproject.core.CoreService;
20import org.onosproject.store.serializers.KryoNamespaces;
21import org.onosproject.store.service.Serializer;
22import org.onosproject.store.service.StorageService;
23import org.onosproject.vtnrsc.DefaultTenantNetwork;
24import org.onosproject.vtnrsc.PhysicalNetwork;
25import org.onosproject.vtnrsc.SegmentationId;
26import org.onosproject.vtnrsc.TenantId;
27import org.onosproject.vtnrsc.TenantNetwork;
28import org.onosproject.vtnrsc.TenantNetworkId;
29import org.onosproject.vtnrsc.tenantnetwork.TenantNetworkService;
Ray Milkeyd84f89b2018-08-17 14:54:17 -070030import org.osgi.service.component.annotations.Activate;
31import org.osgi.service.component.annotations.Component;
32import org.osgi.service.component.annotations.Deactivate;
33import org.osgi.service.component.annotations.Reference;
34import org.osgi.service.component.annotations.ReferenceCardinality;
Sho SHIMIZUb2b2d982015-09-11 15:35:06 -070035import org.slf4j.Logger;
36
37import java.util.Arrays;
38import java.util.Collections;
39import java.util.Map;
40
41import static com.google.common.base.Preconditions.checkNotNull;
42import static org.slf4j.LoggerFactory.getLogger;
43
44/**
45 * Provides implementation of the tenantNetworkService.
46 */
Ray Milkeyd84f89b2018-08-17 14:54:17 -070047@Component(immediate = true, service = TenantNetworkService.class)
Sho SHIMIZUb2b2d982015-09-11 15:35:06 -070048public class TenantNetworkManager implements TenantNetworkService {
49
50 private static final String NETWORK_ID_NULL = "Network ID cannot be null";
51 private static final String NETWORK_NOT_NULL = "Network ID cannot be null";
52 private static final String TENANTNETWORK = "vtn-tenant-network-store";
53 private static final String VTNRSC_APP = "org.onosproject.vtnrsc";
54
55 protected Map<TenantNetworkId, TenantNetwork> networkIdAsKeyStore;
56 protected ApplicationId appId;
57
58 private final Logger log = getLogger(getClass());
59
Ray Milkeyd84f89b2018-08-17 14:54:17 -070060 @Reference(cardinality = ReferenceCardinality.MANDATORY)
Sho SHIMIZUb2b2d982015-09-11 15:35:06 -070061 protected StorageService storageService;
62
Ray Milkeyd84f89b2018-08-17 14:54:17 -070063 @Reference(cardinality = ReferenceCardinality.MANDATORY)
Sho SHIMIZUb2b2d982015-09-11 15:35:06 -070064 protected CoreService coreService;
65
66
67 @Activate
68 public void activate() {
69
70 appId = coreService.registerApplication(VTNRSC_APP);
71
72 networkIdAsKeyStore = storageService.<TenantNetworkId, TenantNetwork>consistentMapBuilder()
73 .withName(TENANTNETWORK)
74 .withApplicationId(appId)
75 .withPurgeOnUninstall()
76 .withSerializer(Serializer.using(Arrays.asList(KryoNamespaces.API),
77 TenantNetworkId.class,
78 DefaultTenantNetwork.class,
79 TenantNetwork.State.class,
80 TenantId.class,
81 TenantNetwork.Type.class,
82 PhysicalNetwork.class,
83 SegmentationId.class))
84 .build().asJavaMap();
85
86 log.info("Started");
87 }
88
89 @Deactivate
90 public void deactivate() {
91 log.info("Stopped");
92 }
93
94 @Override
95 public boolean exists(TenantNetworkId networkId) {
96 checkNotNull(networkId, NETWORK_ID_NULL);
97 return networkIdAsKeyStore.containsKey(networkId);
98 }
99
100 @Override
101 public int getNetworkCount() {
102 return networkIdAsKeyStore.size();
103 }
104
105 @Override
106 public Iterable<TenantNetwork> getNetworks() {
107 return Collections.unmodifiableCollection(networkIdAsKeyStore.values());
108 }
109
110 @Override
111 public TenantNetwork getNetwork(TenantNetworkId networkId) {
112 checkNotNull(networkId, NETWORK_ID_NULL);
113 return networkIdAsKeyStore.get(networkId);
114 }
115
116 @Override
117 public boolean createNetworks(Iterable<TenantNetwork> networks) {
118 checkNotNull(networks, NETWORK_NOT_NULL);
119 for (TenantNetwork network : networks) {
120 networkIdAsKeyStore.put(network.id(), network);
121 if (!networkIdAsKeyStore.containsKey(network.id())) {
122 log.debug("The tenantNetwork is created failed which identifier was {}", network.id()
123 .toString());
124 return false;
125 }
126 }
127 return true;
128 }
129
130 @Override
131 public boolean updateNetworks(Iterable<TenantNetwork> networks) {
132 checkNotNull(networks, NETWORK_NOT_NULL);
133 for (TenantNetwork network : networks) {
134 if (!networkIdAsKeyStore.containsKey(network.id())) {
135 log.debug("The tenantNetwork is not exist whose identifier was {} ",
136 network.id().toString());
137 return false;
138 }
139
140 networkIdAsKeyStore.put(network.id(), network);
141
142 if (!network.equals(networkIdAsKeyStore.get(network.id()))) {
143 log.debug("The tenantNetwork is updated failed whose identifier was {} ",
144 network.id().toString());
145 return false;
146 }
147
148 }
149 return true;
150 }
151
152 @Override
153 public boolean removeNetworks(Iterable<TenantNetworkId> networkIds) {
154 checkNotNull(networkIds, NETWORK_NOT_NULL);
155 for (TenantNetworkId networkId : networkIds) {
156 networkIdAsKeyStore.remove(networkId);
157 if (networkIdAsKeyStore.containsKey(networkId)) {
158 log.debug("The tenantNetwork is removed failed whose identifier was {}",
159 networkId.toString());
160 return false;
161 }
162 }
163 return true;
164 }
165}