Committed by
Gerrit Code Review
Tunnel Service extenstion to support to create tunnel from APP and also to carr…
…y Label stack as network resource Change-Id: Ie69fd2d824bd40a14012406be3eea5b1449b5cf2
Showing
7 changed files
with
247 additions
and
7 deletions
| 1 | +/* | ||
| 2 | + * Copyright 2016-present 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 | + */ | ||
| 16 | +package org.onosproject.incubator.net.tunnel; | ||
| 17 | + | ||
| 18 | +import com.google.common.base.MoreObjects; | ||
| 19 | +import com.google.common.collect.ImmutableList; | ||
| 20 | +import org.onosproject.incubator.net.resource.label.LabelResourceId; | ||
| 21 | +import java.util.List; | ||
| 22 | +import java.util.Objects; | ||
| 23 | + | ||
| 24 | +/** | ||
| 25 | + * Default implementation of label stack. | ||
| 26 | + */ | ||
| 27 | +public class DefaultLabelStack implements LabelStack { | ||
| 28 | + | ||
| 29 | + private final List<LabelResourceId> labelResources; | ||
| 30 | + | ||
| 31 | + /** | ||
| 32 | + * Creates label stack. | ||
| 33 | + * | ||
| 34 | + * @param labelResources contiguous label ids that comprise the path | ||
| 35 | + */ | ||
| 36 | + public DefaultLabelStack(List<LabelResourceId> labelResources) { | ||
| 37 | + this.labelResources = ImmutableList.copyOf(labelResources); | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | + @Override | ||
| 41 | + public List<LabelResourceId> labelResources() { | ||
| 42 | + return labelResources; | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | + @Override | ||
| 46 | + public String toString() { | ||
| 47 | + return MoreObjects.toStringHelper(this) | ||
| 48 | + .add("labelResources", labelResources) | ||
| 49 | + .toString(); | ||
| 50 | + } | ||
| 51 | + | ||
| 52 | + @Override | ||
| 53 | + public int hashCode() { | ||
| 54 | + return labelResources.hashCode(); | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + @Override | ||
| 58 | + public boolean equals(Object obj) { | ||
| 59 | + if (this == obj) { | ||
| 60 | + return true; | ||
| 61 | + } | ||
| 62 | + if (obj instanceof DefaultLabelStack) { | ||
| 63 | + final DefaultLabelStack other = (DefaultLabelStack) obj; | ||
| 64 | + return Objects.equals(this.labelResources, other.labelResources); | ||
| 65 | + } | ||
| 66 | + return false; | ||
| 67 | + } | ||
| 68 | +} |
| ... | @@ -45,6 +45,7 @@ public final class DefaultTunnel extends AbstractModel implements Tunnel { | ... | @@ -45,6 +45,7 @@ public final class DefaultTunnel extends AbstractModel implements Tunnel { |
| 45 | // ONOS as primary key | 45 | // ONOS as primary key |
| 46 | private final TunnelName tunnelName; // name of a tunnel | 46 | private final TunnelName tunnelName; // name of a tunnel |
| 47 | private final Path path; | 47 | private final Path path; |
| 48 | + private final NetworkResource networkRes; // network resource to carry label stack | ||
| 48 | 49 | ||
| 49 | /** | 50 | /** |
| 50 | * Creates an active infrastructure tunnel using the supplied information. | 51 | * Creates an active infrastructure tunnel using the supplied information. |
| ... | @@ -94,6 +95,61 @@ public final class DefaultTunnel extends AbstractModel implements Tunnel { | ... | @@ -94,6 +95,61 @@ public final class DefaultTunnel extends AbstractModel implements Tunnel { |
| 94 | this.tunnelId = tunnelId; | 95 | this.tunnelId = tunnelId; |
| 95 | this.tunnelName = tunnelName; | 96 | this.tunnelName = tunnelName; |
| 96 | this.path = path; | 97 | this.path = path; |
| 98 | + this.networkRes = null; | ||
| 99 | + } | ||
| 100 | + | ||
| 101 | + /** | ||
| 102 | + * Creates an active infrastructure tunnel using the supplied information. | ||
| 103 | + * | ||
| 104 | + * @param producerName provider identity | ||
| 105 | + * @param src tunnel source | ||
| 106 | + * @param dst tunnel destination | ||
| 107 | + * @param type tunnel type | ||
| 108 | + * @param groupId groupId | ||
| 109 | + * @param tunnelId tunnelId | ||
| 110 | + * @param tunnelName tunnel name | ||
| 111 | + * @param path the path of tunnel | ||
| 112 | + * @param networkRes network resource of tunnel | ||
| 113 | + * @param annotations optional key/value annotations | ||
| 114 | + */ | ||
| 115 | + public DefaultTunnel(ProviderId producerName, TunnelEndPoint src, | ||
| 116 | + TunnelEndPoint dst, Type type, DefaultGroupId groupId, | ||
| 117 | + TunnelId tunnelId, TunnelName tunnelName, Path path, | ||
| 118 | + NetworkResource networkRes, Annotations... annotations) { | ||
| 119 | + this(producerName, src, dst, type, Tunnel.State.ACTIVE, groupId, | ||
| 120 | + tunnelId, tunnelName, path, networkRes, annotations); | ||
| 121 | + } | ||
| 122 | + | ||
| 123 | + /** | ||
| 124 | + * Creates an tunnel using the supplied information. | ||
| 125 | + * | ||
| 126 | + * @param producerName provider identity | ||
| 127 | + * @param src tunnel source | ||
| 128 | + * @param dst tunnel destination | ||
| 129 | + * @param type tunnel type | ||
| 130 | + * @param state tunnel state | ||
| 131 | + * @param groupId groupId | ||
| 132 | + * @param tunnelId tunnelId | ||
| 133 | + * @param tunnelName tunnel name | ||
| 134 | + * @param path the path of tunnel | ||
| 135 | + * @param networkRes network resource of tunnel | ||
| 136 | + * @param annotations optional key/value annotations | ||
| 137 | + */ | ||
| 138 | + public DefaultTunnel(ProviderId producerName, TunnelEndPoint src, | ||
| 139 | + TunnelEndPoint dst, Type type, State state, | ||
| 140 | + DefaultGroupId groupId, TunnelId tunnelId, | ||
| 141 | + TunnelName tunnelName, Path path, NetworkResource networkRes, | ||
| 142 | + Annotations... annotations) { | ||
| 143 | + super(producerName, annotations); | ||
| 144 | + this.src = src; | ||
| 145 | + this.dst = dst; | ||
| 146 | + this.type = type; | ||
| 147 | + this.state = state; | ||
| 148 | + this.groupId = groupId; | ||
| 149 | + this.tunnelId = tunnelId; | ||
| 150 | + this.tunnelName = tunnelName; | ||
| 151 | + this.path = path; | ||
| 152 | + this.networkRes = networkRes; | ||
| 97 | } | 153 | } |
| 98 | 154 | ||
| 99 | @Override | 155 | @Override |
| ... | @@ -118,7 +174,7 @@ public final class DefaultTunnel extends AbstractModel implements Tunnel { | ... | @@ -118,7 +174,7 @@ public final class DefaultTunnel extends AbstractModel implements Tunnel { |
| 118 | 174 | ||
| 119 | @Override | 175 | @Override |
| 120 | public NetworkResource resource() { | 176 | public NetworkResource resource() { |
| 121 | - return null; | 177 | + return networkRes; |
| 122 | } | 178 | } |
| 123 | 179 | ||
| 124 | @Override | 180 | @Override |
| ... | @@ -145,7 +201,7 @@ public final class DefaultTunnel extends AbstractModel implements Tunnel { | ... | @@ -145,7 +201,7 @@ public final class DefaultTunnel extends AbstractModel implements Tunnel { |
| 145 | @Override | 201 | @Override |
| 146 | public int hashCode() { | 202 | public int hashCode() { |
| 147 | return Objects.hash(src, dst, type, groupId, tunnelId, tunnelName, | 203 | return Objects.hash(src, dst, type, groupId, tunnelId, tunnelName, |
| 148 | - state, path); | 204 | + state, path, networkRes); |
| 149 | } | 205 | } |
| 150 | 206 | ||
| 151 | @Override | 207 | @Override |
| ... | @@ -162,7 +218,8 @@ public final class DefaultTunnel extends AbstractModel implements Tunnel { | ... | @@ -162,7 +218,8 @@ public final class DefaultTunnel extends AbstractModel implements Tunnel { |
| 162 | && Objects.equals(this.tunnelId, other.tunnelId) | 218 | && Objects.equals(this.tunnelId, other.tunnelId) |
| 163 | && Objects.equals(this.tunnelName, other.tunnelName) | 219 | && Objects.equals(this.tunnelName, other.tunnelName) |
| 164 | && Objects.equals(this.state, other.state) | 220 | && Objects.equals(this.state, other.state) |
| 165 | - && Objects.equals(this.path, other.path); | 221 | + && Objects.equals(this.path, other.path) |
| 222 | + && Objects.equals(this.networkRes, other.networkRes); | ||
| 166 | } | 223 | } |
| 167 | return false; | 224 | return false; |
| 168 | } | 225 | } |
| ... | @@ -173,6 +230,7 @@ public final class DefaultTunnel extends AbstractModel implements Tunnel { | ... | @@ -173,6 +230,7 @@ public final class DefaultTunnel extends AbstractModel implements Tunnel { |
| 173 | .add("type", type).add("state", state).add("groupId", groupId) | 230 | .add("type", type).add("state", state).add("groupId", groupId) |
| 174 | .add("producerTunnelId", tunnelId) | 231 | .add("producerTunnelId", tunnelId) |
| 175 | .add("tunnelName", tunnelName) | 232 | .add("tunnelName", tunnelName) |
| 176 | - .add("path", path).toString(); | 233 | + .add("path", path) |
| 234 | + .add("networkResource", networkRes).toString(); | ||
| 177 | } | 235 | } |
| 178 | } | 236 | } | ... | ... |
| ... | @@ -18,6 +18,7 @@ package org.onosproject.incubator.net.tunnel; | ... | @@ -18,6 +18,7 @@ package org.onosproject.incubator.net.tunnel; |
| 18 | import com.google.common.annotations.Beta; | 18 | import com.google.common.annotations.Beta; |
| 19 | import org.onosproject.core.DefaultGroupId; | 19 | import org.onosproject.core.DefaultGroupId; |
| 20 | import org.onosproject.net.AbstractDescription; | 20 | import org.onosproject.net.AbstractDescription; |
| 21 | +import org.onosproject.net.NetworkResource; | ||
| 21 | import org.onosproject.net.Path; | 22 | import org.onosproject.net.Path; |
| 22 | import org.onosproject.net.SparseAnnotations; | 23 | import org.onosproject.net.SparseAnnotations; |
| 23 | import org.onosproject.net.provider.ProviderId; | 24 | import org.onosproject.net.provider.ProviderId; |
| ... | @@ -41,6 +42,7 @@ public class DefaultTunnelDescription extends AbstractDescription | ... | @@ -41,6 +42,7 @@ public class DefaultTunnelDescription extends AbstractDescription |
| 41 | private final ProviderId producerName; // tunnel producer name | 42 | private final ProviderId producerName; // tunnel producer name |
| 42 | private final TunnelName tunnelName; // name of a tunnel | 43 | private final TunnelName tunnelName; // name of a tunnel |
| 43 | private final Path path; | 44 | private final Path path; |
| 45 | + private final NetworkResource networkRes; | ||
| 44 | 46 | ||
| 45 | /** | 47 | /** |
| 46 | * Creates a tunnel description using the supplied information. | 48 | * Creates a tunnel description using the supplied information. |
| ... | @@ -71,6 +73,41 @@ public class DefaultTunnelDescription extends AbstractDescription | ... | @@ -71,6 +73,41 @@ public class DefaultTunnelDescription extends AbstractDescription |
| 71 | this.producerName = producerName; | 73 | this.producerName = producerName; |
| 72 | this.tunnelName = tunnelName; | 74 | this.tunnelName = tunnelName; |
| 73 | this.path = path; | 75 | this.path = path; |
| 76 | + this.networkRes = null; | ||
| 77 | + } | ||
| 78 | + | ||
| 79 | + /** | ||
| 80 | + * Creates a tunnel description using the supplied information. | ||
| 81 | + * | ||
| 82 | + * @param id TunnelId | ||
| 83 | + * @param src TunnelPoint source | ||
| 84 | + * @param dst TunnelPoint destination | ||
| 85 | + * @param type tunnel type | ||
| 86 | + * @param groupId groupId | ||
| 87 | + * @param producerName tunnel producer | ||
| 88 | + * @param tunnelName tunnel name | ||
| 89 | + * @param path the path of tunnel | ||
| 90 | + * @param networkRes network resource of tunnel | ||
| 91 | + * @param annotations optional key/value annotations | ||
| 92 | + */ | ||
| 93 | + public DefaultTunnelDescription(TunnelId id, TunnelEndPoint src, | ||
| 94 | + TunnelEndPoint dst, Tunnel.Type type, | ||
| 95 | + DefaultGroupId groupId, | ||
| 96 | + ProviderId producerName, | ||
| 97 | + TunnelName tunnelName, | ||
| 98 | + Path path, | ||
| 99 | + NetworkResource networkRes, | ||
| 100 | + SparseAnnotations... annotations) { | ||
| 101 | + super(annotations); | ||
| 102 | + this.tunnelId = id; | ||
| 103 | + this.src = src; | ||
| 104 | + this.dst = dst; | ||
| 105 | + this.type = type; | ||
| 106 | + this.groupId = groupId; | ||
| 107 | + this.producerName = producerName; | ||
| 108 | + this.tunnelName = tunnelName; | ||
| 109 | + this.path = path; | ||
| 110 | + this.networkRes = networkRes; | ||
| 74 | } | 111 | } |
| 75 | 112 | ||
| 76 | @Override | 113 | @Override |
| ... | @@ -115,6 +152,11 @@ public class DefaultTunnelDescription extends AbstractDescription | ... | @@ -115,6 +152,11 @@ public class DefaultTunnelDescription extends AbstractDescription |
| 115 | } | 152 | } |
| 116 | 153 | ||
| 117 | @Override | 154 | @Override |
| 155 | + public NetworkResource resource() { | ||
| 156 | + return networkRes; | ||
| 157 | + } | ||
| 158 | + | ||
| 159 | + @Override | ||
| 118 | public String toString() { | 160 | public String toString() { |
| 119 | return MoreObjects.toStringHelper(this) | 161 | return MoreObjects.toStringHelper(this) |
| 120 | .add("tunnelId", id()) | 162 | .add("tunnelId", id()) |
| ... | @@ -125,6 +167,7 @@ public class DefaultTunnelDescription extends AbstractDescription | ... | @@ -125,6 +167,7 @@ public class DefaultTunnelDescription extends AbstractDescription |
| 125 | .add("producerName", producerName()) | 167 | .add("producerName", producerName()) |
| 126 | .add("groupId", groupId()) | 168 | .add("groupId", groupId()) |
| 127 | .add("path", path) | 169 | .add("path", path) |
| 170 | + .add("resource", networkRes) | ||
| 128 | .toString(); | 171 | .toString(); |
| 129 | } | 172 | } |
| 130 | } | 173 | } | ... | ... |
| 1 | +/* | ||
| 2 | + * Copyright 2016-present 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 | + */ | ||
| 16 | +package org.onosproject.incubator.net.tunnel; | ||
| 17 | + | ||
| 18 | +import org.onosproject.incubator.net.resource.label.LabelResourceId; | ||
| 19 | +import org.onosproject.net.NetworkResource; | ||
| 20 | + | ||
| 21 | +import java.util.List; | ||
| 22 | + | ||
| 23 | +/** | ||
| 24 | + * Representation of a label stack in a network which represents the network path. | ||
| 25 | + */ | ||
| 26 | +public interface LabelStack extends NetworkResource { | ||
| 27 | + | ||
| 28 | + /** | ||
| 29 | + * Returns sequence of label resources comprising the path. | ||
| 30 | + * | ||
| 31 | + * @return list of links | ||
| 32 | + */ | ||
| 33 | + List<LabelResourceId> labelResources(); | ||
| 34 | +} |
| ... | @@ -20,6 +20,7 @@ import org.onosproject.core.DefaultGroupId; | ... | @@ -20,6 +20,7 @@ import org.onosproject.core.DefaultGroupId; |
| 20 | import org.onosproject.incubator.net.tunnel.Tunnel.Type; | 20 | import org.onosproject.incubator.net.tunnel.Tunnel.Type; |
| 21 | import org.onosproject.net.Annotated; | 21 | import org.onosproject.net.Annotated; |
| 22 | import org.onosproject.net.Description; | 22 | import org.onosproject.net.Description; |
| 23 | +import org.onosproject.net.NetworkResource; | ||
| 23 | import org.onosproject.net.Path; | 24 | import org.onosproject.net.Path; |
| 24 | import org.onosproject.net.provider.ProviderId; | 25 | import org.onosproject.net.provider.ProviderId; |
| 25 | 26 | ||
| ... | @@ -84,4 +85,11 @@ public interface TunnelDescription extends Description, Annotated { | ... | @@ -84,4 +85,11 @@ public interface TunnelDescription extends Description, Annotated { |
| 84 | * @return the path of the tunnel | 85 | * @return the path of the tunnel |
| 85 | */ | 86 | */ |
| 86 | Path path(); | 87 | Path path(); |
| 88 | + | ||
| 89 | + /** | ||
| 90 | + * Returns the network resource backing the tunnel, e.g. lambda, VLAN id, MPLS tag, label stack. | ||
| 91 | + * | ||
| 92 | + * @return backing resource | ||
| 93 | + */ | ||
| 94 | + NetworkResource resource(); | ||
| 87 | } | 95 | } | ... | ... |
| ... | @@ -67,6 +67,7 @@ public class TunnelManager | ... | @@ -67,6 +67,7 @@ public class TunnelManager |
| 67 | implements TunnelService, TunnelAdminService, TunnelProviderRegistry { | 67 | implements TunnelService, TunnelAdminService, TunnelProviderRegistry { |
| 68 | 68 | ||
| 69 | private static final String TUNNNEL_ID_NULL = "Tunnel ID cannot be null"; | 69 | private static final String TUNNNEL_ID_NULL = "Tunnel ID cannot be null"; |
| 70 | + private static final String TUNNNEL_NULL = "Tunnel cannot be null"; | ||
| 70 | 71 | ||
| 71 | private final Logger log = getLogger(getClass()); | 72 | private final Logger log = getLogger(getClass()); |
| 72 | 73 | ||
| ... | @@ -235,13 +236,35 @@ public class TunnelManager | ... | @@ -235,13 +236,35 @@ public class TunnelManager |
| 235 | 236 | ||
| 236 | @Override | 237 | @Override |
| 237 | public TunnelId setupTunnel(ApplicationId producerId, ElementId srcElementId, Tunnel tunnel, Path path) { | 238 | public TunnelId setupTunnel(ApplicationId producerId, ElementId srcElementId, Tunnel tunnel, Path path) { |
| 238 | - // TODO: Insert into store and trigger provider API. | 239 | + // TODO: producerId to check if really required to consider while setup the tunnel. |
| 239 | - return null; | 240 | + checkNotNull(tunnel, TUNNNEL_NULL); |
| 241 | + TunnelId tunnelId = store.createOrUpdateTunnel(tunnel, State.INIT); | ||
| 242 | + if (tunnelId != null) { | ||
| 243 | + Set<ProviderId> ids = getProviders(); | ||
| 244 | + for (ProviderId providerId : ids) { | ||
| 245 | + TunnelProvider provider = getProvider(providerId); | ||
| 246 | + provider.setupTunnel(srcElementId, tunnel, path); | ||
| 247 | + } | ||
| 248 | + } | ||
| 249 | + return tunnelId; | ||
| 240 | } | 250 | } |
| 241 | 251 | ||
| 242 | @Override | 252 | @Override |
| 243 | public boolean downTunnel(ApplicationId producerId, TunnelId tunnelId) { | 253 | public boolean downTunnel(ApplicationId producerId, TunnelId tunnelId) { |
| 244 | - // TODO: Change the tunnel status and trigger provider API. | 254 | + // TODO: producerId to check if really required to consider while deleting the tunnel. |
| 255 | + checkNotNull(tunnelId, TUNNNEL_ID_NULL); | ||
| 256 | + Tunnel tunnel = store.queryTunnel(tunnelId); | ||
| 257 | + if (tunnel != null) { | ||
| 258 | + TunnelId updtTunnelId = store.createOrUpdateTunnel(tunnel, State.INACTIVE); | ||
| 259 | + if (updtTunnelId != null) { | ||
| 260 | + Set<ProviderId> ids = getProviders(); | ||
| 261 | + for (ProviderId providerId : ids) { | ||
| 262 | + TunnelProvider provider = getProvider(providerId); | ||
| 263 | + provider.releaseTunnel(tunnel); | ||
| 264 | + } | ||
| 265 | + } | ||
| 266 | + return true; | ||
| 267 | + } | ||
| 245 | return false; | 268 | return false; |
| 246 | } | 269 | } |
| 247 | 270 | ||
| ... | @@ -324,6 +347,7 @@ public class TunnelManager | ... | @@ -324,6 +347,7 @@ public class TunnelManager |
| 324 | tunnel.id(), | 347 | tunnel.id(), |
| 325 | tunnel.tunnelName(), | 348 | tunnel.tunnelName(), |
| 326 | tunnel.path(), | 349 | tunnel.path(), |
| 350 | + tunnel.resource(), | ||
| 327 | tunnel.annotations()); | 351 | tunnel.annotations()); |
| 328 | return store.createOrUpdateTunnel(storedTunnel); | 352 | return store.createOrUpdateTunnel(storedTunnel); |
| 329 | } | 353 | } |
| ... | @@ -338,6 +362,7 @@ public class TunnelManager | ... | @@ -338,6 +362,7 @@ public class TunnelManager |
| 338 | tunnel.id(), | 362 | tunnel.id(), |
| 339 | tunnel.tunnelName(), | 363 | tunnel.tunnelName(), |
| 340 | tunnel.path(), | 364 | tunnel.path(), |
| 365 | + tunnel.resource(), | ||
| 341 | tunnel.annotations()); | 366 | tunnel.annotations()); |
| 342 | return store.createOrUpdateTunnel(storedTunnel); | 367 | return store.createOrUpdateTunnel(storedTunnel); |
| 343 | } | 368 | } |
| ... | @@ -351,6 +376,7 @@ public class TunnelManager | ... | @@ -351,6 +376,7 @@ public class TunnelManager |
| 351 | tunnel.id(), | 376 | tunnel.id(), |
| 352 | tunnel.tunnelName(), | 377 | tunnel.tunnelName(), |
| 353 | tunnel.path(), | 378 | tunnel.path(), |
| 379 | + tunnel.resource(), | ||
| 354 | tunnel.annotations()); | 380 | tunnel.annotations()); |
| 355 | store.createOrUpdateTunnel(storedTunnel); | 381 | store.createOrUpdateTunnel(storedTunnel); |
| 356 | } | 382 | } |
| ... | @@ -365,6 +391,7 @@ public class TunnelManager | ... | @@ -365,6 +391,7 @@ public class TunnelManager |
| 365 | tunnel.id(), | 391 | tunnel.id(), |
| 366 | tunnel.tunnelName(), | 392 | tunnel.tunnelName(), |
| 367 | tunnel.path(), | 393 | tunnel.path(), |
| 394 | + tunnel.resource(), | ||
| 368 | tunnel.annotations()); | 395 | tunnel.annotations()); |
| 369 | store.createOrUpdateTunnel(storedTunnel, state); | 396 | store.createOrUpdateTunnel(storedTunnel, state); |
| 370 | } | 397 | } | ... | ... |
| ... | @@ -174,6 +174,7 @@ public class DistributedTunnelStore | ... | @@ -174,6 +174,7 @@ public class DistributedTunnelStore |
| 174 | old.tunnelId(), | 174 | old.tunnelId(), |
| 175 | old.tunnelName(), | 175 | old.tunnelName(), |
| 176 | old.path(), | 176 | old.path(), |
| 177 | + old.resource(), | ||
| 177 | DefaultAnnotations.merge(oldAnno, newAnno)); | 178 | DefaultAnnotations.merge(oldAnno, newAnno)); |
| 178 | tunnelIdAsKeyStore.put(tunnel.tunnelId(), newT); | 179 | tunnelIdAsKeyStore.put(tunnel.tunnelId(), newT); |
| 179 | TunnelEvent event = new TunnelEvent(TunnelEvent.Type.TUNNEL_UPDATED, | 180 | TunnelEvent event = new TunnelEvent(TunnelEvent.Type.TUNNEL_UPDATED, |
| ... | @@ -189,6 +190,7 @@ public class DistributedTunnelStore | ... | @@ -189,6 +190,7 @@ public class DistributedTunnelStore |
| 189 | tunnelId, | 190 | tunnelId, |
| 190 | tunnel.tunnelName(), | 191 | tunnel.tunnelName(), |
| 191 | tunnel.path(), | 192 | tunnel.path(), |
| 193 | + tunnel.resource(), | ||
| 192 | tunnel.annotations()); | 194 | tunnel.annotations()); |
| 193 | tunnelIdAsKeyStore.put(tunnelId, newT); | 195 | tunnelIdAsKeyStore.put(tunnelId, newT); |
| 194 | 196 | ... | ... |
-
Please register or login to post a comment