Committed by
Gerrit Code Review
Bug Fix - Tunnel subsystem 1. After delete the tunnel and then query the tunnel …
…and call provider. Query will always return null. Null Pointer exception. 2. In Borrow Tunnel, Order relationship is added even if the there is no tunnel to borrow. Note only where tunnel manger do not initiate the tunnel creation through provider. 3. In ConsistancyMap when the key (the set) is empty still the map hold the key with empty list and never deleted. Memory leak. Change-Id: Iff8ba662f4828324c0588a9dfc494a2b158bcfce
Showing
2 changed files
with
48 additions
and
42 deletions
... | @@ -93,18 +93,20 @@ public class TunnelManager | ... | @@ -93,18 +93,20 @@ public class TunnelManager |
93 | @Override | 93 | @Override |
94 | public void removeTunnel(TunnelId tunnelId) { | 94 | public void removeTunnel(TunnelId tunnelId) { |
95 | checkNotNull(tunnelId, TUNNNEL_ID_NULL); | 95 | checkNotNull(tunnelId, TUNNNEL_ID_NULL); |
96 | - store.deleteTunnel(tunnelId); | ||
97 | Tunnel tunnel = store.queryTunnel(tunnelId); | 96 | Tunnel tunnel = store.queryTunnel(tunnelId); |
98 | - if (tunnel.providerId() != null) { | 97 | + if (tunnel != null) { |
99 | - TunnelProvider provider = getProvider(tunnel.providerId()); | 98 | + store.deleteTunnel(tunnelId); |
100 | - if (provider != null) { | 99 | + if (tunnel.providerId() != null) { |
101 | - provider.releaseTunnel(tunnel); | 100 | + TunnelProvider provider = getProvider(tunnel.providerId()); |
102 | - } | 101 | + if (provider != null) { |
103 | - } else { | 102 | + provider.releaseTunnel(tunnel); |
104 | - Set<ProviderId> ids = getProviders(); | 103 | + } |
105 | - for (ProviderId providerId : ids) { | 104 | + } else { |
106 | - TunnelProvider provider = getProvider(providerId); | 105 | + Set<ProviderId> ids = getProviders(); |
107 | - provider.releaseTunnel(tunnel); | 106 | + for (ProviderId providerId : ids) { |
107 | + TunnelProvider provider = getProvider(providerId); | ||
108 | + provider.releaseTunnel(tunnel); | ||
109 | + } | ||
108 | } | 110 | } |
109 | } | 111 | } |
110 | } | 112 | } |
... | @@ -129,23 +131,25 @@ public class TunnelManager | ... | @@ -129,23 +131,25 @@ public class TunnelManager |
129 | @Override | 131 | @Override |
130 | public void removeTunnels(TunnelEndPoint src, TunnelEndPoint dst, | 132 | public void removeTunnels(TunnelEndPoint src, TunnelEndPoint dst, |
131 | ProviderId producerName) { | 133 | ProviderId producerName) { |
132 | - store.deleteTunnel(src, dst, producerName); | ||
133 | Collection<Tunnel> setTunnels = store.queryTunnel(src, dst); | 134 | Collection<Tunnel> setTunnels = store.queryTunnel(src, dst); |
134 | - for (Tunnel tunnel : setTunnels) { | 135 | + if (!setTunnels.isEmpty()) { |
135 | - if (producerName != null | 136 | + store.deleteTunnel(src, dst, producerName); |
136 | - && !tunnel.providerId().equals(producerName)) { | 137 | + for (Tunnel tunnel : setTunnels) { |
137 | - continue; | 138 | + if (producerName != null |
138 | - } | 139 | + && !tunnel.providerId().equals(producerName)) { |
139 | - if (tunnel.providerId() != null) { | 140 | + continue; |
140 | - TunnelProvider provider = getProvider(tunnel.providerId()); | ||
141 | - if (provider != null) { | ||
142 | - provider.releaseTunnel(tunnel); | ||
143 | } | 141 | } |
144 | - } else { | 142 | + if (tunnel.providerId() != null) { |
145 | - Set<ProviderId> ids = getProviders(); | 143 | + TunnelProvider provider = getProvider(tunnel.providerId()); |
146 | - for (ProviderId providerId : ids) { | 144 | + if (provider != null) { |
147 | - TunnelProvider provider = getProvider(providerId); | 145 | + provider.releaseTunnel(tunnel); |
148 | - provider.releaseTunnel(tunnel); | 146 | + } |
147 | + } else { | ||
148 | + Set<ProviderId> ids = getProviders(); | ||
149 | + for (ProviderId providerId : ids) { | ||
150 | + TunnelProvider provider = getProvider(providerId); | ||
151 | + provider.releaseTunnel(tunnel); | ||
152 | + } | ||
149 | } | 153 | } |
150 | } | 154 | } |
151 | } | 155 | } |
... | @@ -154,24 +158,26 @@ public class TunnelManager | ... | @@ -154,24 +158,26 @@ public class TunnelManager |
154 | @Override | 158 | @Override |
155 | public void removeTunnels(TunnelEndPoint src, TunnelEndPoint dst, Type type, | 159 | public void removeTunnels(TunnelEndPoint src, TunnelEndPoint dst, Type type, |
156 | ProviderId producerName) { | 160 | ProviderId producerName) { |
157 | - store.deleteTunnel(src, dst, type, producerName); | ||
158 | Collection<Tunnel> setTunnels = store.queryTunnel(src, dst); | 161 | Collection<Tunnel> setTunnels = store.queryTunnel(src, dst); |
159 | - for (Tunnel tunnel : setTunnels) { | 162 | + if (!setTunnels.isEmpty()) { |
160 | - if (producerName != null | 163 | + store.deleteTunnel(src, dst, type, producerName); |
161 | - && !tunnel.providerId().equals(producerName) | 164 | + for (Tunnel tunnel : setTunnels) { |
162 | - || !type.equals(tunnel.type())) { | 165 | + if (producerName != null |
163 | - continue; | 166 | + && !tunnel.providerId().equals(producerName) |
164 | - } | 167 | + || !type.equals(tunnel.type())) { |
165 | - if (tunnel.providerId() != null) { | 168 | + continue; |
166 | - TunnelProvider provider = getProvider(tunnel.providerId()); | ||
167 | - if (provider != null) { | ||
168 | - provider.releaseTunnel(tunnel); | ||
169 | } | 169 | } |
170 | - } else { | 170 | + if (tunnel.providerId() != null) { |
171 | - Set<ProviderId> ids = getProviders(); | 171 | + TunnelProvider provider = getProvider(tunnel.providerId()); |
172 | - for (ProviderId providerId : ids) { | 172 | + if (provider != null) { |
173 | - TunnelProvider provider = getProvider(providerId); | 173 | + provider.releaseTunnel(tunnel); |
174 | - provider.releaseTunnel(tunnel); | 174 | + } |
175 | + } else { | ||
176 | + Set<ProviderId> ids = getProviders(); | ||
177 | + for (ProviderId providerId : ids) { | ||
178 | + TunnelProvider provider = getProvider(providerId); | ||
179 | + provider.releaseTunnel(tunnel); | ||
180 | + } | ||
175 | } | 181 | } |
176 | } | 182 | } |
177 | } | 183 | } | ... | ... |
This diff is collapsed. Click to expand it.
-
Please register or login to post a comment