ONOS-4403 Remove intents using appId when apps get deactivated.
Change-Id: Ieaea8aeff2f2c29287a3e2eea33654fa22d38c09
Showing
5 changed files
with
40 additions
and
6 deletions
| ... | @@ -16,6 +16,7 @@ | ... | @@ -16,6 +16,7 @@ |
| 16 | 16 | ||
| 17 | package org.onosproject.routing; | 17 | package org.onosproject.routing; |
| 18 | 18 | ||
| 19 | +import org.onosproject.core.ApplicationId; | ||
| 19 | import org.onosproject.net.intent.Intent; | 20 | import org.onosproject.net.intent.Intent; |
| 20 | 21 | ||
| 21 | /** | 22 | /** |
| ... | @@ -48,4 +49,12 @@ public interface IntentSynchronizationService { | ... | @@ -48,4 +49,12 @@ public interface IntentSynchronizationService { |
| 48 | * @param intent intent to withdraw | 49 | * @param intent intent to withdraw |
| 49 | */ | 50 | */ |
| 50 | void withdraw(Intent intent); | 51 | void withdraw(Intent intent); |
| 52 | + | ||
| 53 | + /** | ||
| 54 | + * Withdraws intents by app Id. | ||
| 55 | + * | ||
| 56 | + * @param applicationId the Id of the application that created the intents | ||
| 57 | + * to be removed | ||
| 58 | + */ | ||
| 59 | + void removeIntentsByAppId(ApplicationId applicationId); | ||
| 51 | } | 60 | } | ... | ... |
| ... | @@ -143,6 +143,28 @@ public class IntentSynchronizer implements IntentSynchronizationService, | ... | @@ -143,6 +143,28 @@ public class IntentSynchronizer implements IntentSynchronizationService, |
| 143 | } | 143 | } |
| 144 | 144 | ||
| 145 | @Override | 145 | @Override |
| 146 | + public void removeIntentsByAppId(ApplicationId appId) { | ||
| 147 | + if (!isElectedLeader) { | ||
| 148 | + // Only leader will withdraw intents | ||
| 149 | + return; | ||
| 150 | + } | ||
| 151 | + | ||
| 152 | + log.debug("Withdrawing intents for app {}...", | ||
| 153 | + appId); | ||
| 154 | + | ||
| 155 | + intents.entrySet() | ||
| 156 | + .stream() | ||
| 157 | + .filter(intent -> intent.getValue().appId().equals(appId)) | ||
| 158 | + .forEach(intent -> { | ||
| 159 | + log.debug("Intent Synchronizer withdrawing intent: {}", | ||
| 160 | + intent); | ||
| 161 | + intentService.withdraw(intent.getValue()); | ||
| 162 | + intents.remove(intent.getKey(), intent.getValue()); | ||
| 163 | + log.info("Tried to clean intents for app: {}", appId); | ||
| 164 | + }); | ||
| 165 | + } | ||
| 166 | + | ||
| 167 | + @Override | ||
| 146 | public void submit(Intent intent) { | 168 | public void submit(Intent intent) { |
| 147 | synchronized (this) { | 169 | synchronized (this) { |
| 148 | intents.put(intent.key(), intent); | 170 | intents.put(intent.key(), intent); | ... | ... |
| ... | @@ -89,9 +89,9 @@ public class SdnIp { | ... | @@ -89,9 +89,9 @@ public class SdnIp { |
| 89 | interfaceService); | 89 | interfaceService); |
| 90 | peerConnectivity.start(); | 90 | peerConnectivity.start(); |
| 91 | 91 | ||
| 92 | - // TODO fix removing intents | 92 | + applicationService.registerDeactivateHook(appId, () -> { |
| 93 | - applicationService.registerDeactivateHook(appId, | 93 | + intentSynchronizer.removeIntentsByAppId(appId); |
| 94 | - intentSynchronizerAdmin::removeIntents); | 94 | + }); |
| 95 | 95 | ||
| 96 | log.info("SDN-IP started"); | 96 | log.info("SDN-IP started"); |
| 97 | } | 97 | } | ... | ... |
| ... | @@ -92,8 +92,9 @@ public class Vpls { | ... | @@ -92,8 +92,9 @@ public class Vpls { |
| 92 | intentService, | 92 | intentService, |
| 93 | intentSynchronizer); | 93 | intentSynchronizer); |
| 94 | 94 | ||
| 95 | - applicationService.registerDeactivateHook(appId, | 95 | + applicationService.registerDeactivateHook(appId, () -> { |
| 96 | - intentSynchronizerAdmin::removeIntents); | 96 | + intentSynchronizer.removeIntentsByAppId(appId); |
| 97 | + }); | ||
| 97 | 98 | ||
| 98 | hostService.addListener(hostListener); | 99 | hostService.addListener(hostListener); |
| 99 | interfaceService.addListener(interfaceListener); | 100 | interfaceService.addListener(interfaceListener); | ... | ... |
| ... | @@ -666,12 +666,14 @@ public class VplsTest { | ... | @@ -666,12 +666,14 @@ public class VplsTest { |
| 666 | 666 | ||
| 667 | @Override | 667 | @Override |
| 668 | public void modifyPrimary(boolean isPrimary) { | 668 | public void modifyPrimary(boolean isPrimary) { |
| 669 | - | ||
| 670 | } | 669 | } |
| 671 | 670 | ||
| 672 | @Override | 671 | @Override |
| 673 | public void removeIntents() { | 672 | public void removeIntents() { |
| 673 | + } | ||
| 674 | 674 | ||
| 675 | + @Override | ||
| 676 | + public void removeIntentsByAppId(ApplicationId applicationId) { | ||
| 675 | } | 677 | } |
| 676 | } | 678 | } |
| 677 | 679 | ... | ... |
-
Please register or login to post a comment