Satish K
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
...@@ -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 }
......