aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrumeet <yuuta@yuuta.moe>2021-04-03 16:27:20 -0700
committerTrumeet <yuuta@yuuta.moe>2021-04-03 16:27:20 -0700
commitf06016a4173b180a9f2ba6767c0309333d2e6b2b (patch)
treef635dade4c04862798e2a325046222a938895eba
parent78794e70902fcf020e5438ba2a258ef34a7f46fd (diff)
downloaddn42peering-f06016a4173b180a9f2ba6767c0309333d2e6b2b.tar
dn42peering-f06016a4173b180a9f2ba6767c0309333d2e6b2b.tar.gz
dn42peering-f06016a4173b180a9f2ba6767c0309333d2e6b2b.tar.bz2
dn42peering-f06016a4173b180a9f2ba6767c0309333d2e6b2b.zip
refactor(agent): clarify steps and parallel
-rw-r--r--agent/src/main/java/moe/yuuta/dn42peering/agent/provision/BGPProvisioner.java40
1 files changed, 19 insertions, 21 deletions
diff --git a/agent/src/main/java/moe/yuuta/dn42peering/agent/provision/BGPProvisioner.java b/agent/src/main/java/moe/yuuta/dn42peering/agent/provision/BGPProvisioner.java
index 74cf49c..1ae8a2b 100644
--- a/agent/src/main/java/moe/yuuta/dn42peering/agent/provision/BGPProvisioner.java
+++ b/agent/src/main/java/moe/yuuta/dn42peering/agent/provision/BGPProvisioner.java
@@ -122,33 +122,31 @@ public class BGPProvisioner implements IProvisioner<BGPConfig> {
@Override
public Future<List<Change>> calculateChanges(@Nonnull Node node, @Nonnull List<BGPConfig> allDesired) {
// All of these calculations can be done in parallel but we must wait all of them to finish.
- final Future<List<Change>> addOrModifyChanges =
- CompositeFuture.join(allDesired.stream()
+ // The three major steps above must be done in sequence.
+ // Step 1: Calculate individual BGP changes in parallel and combine them into a single future.
+ return CompositeFuture.join(allDesired.stream()
.map(this::calculateSingleChange)
.collect(Collectors.toList()))
.compose(compositeFuture -> {
final List<Change> changes = new ArrayList<>();
- for(int i = 0; i < compositeFuture.size(); i ++)
+ for (int i = 0; i < compositeFuture.size(); i++)
changes.addAll(compositeFuture.resultAt(i));
return Future.succeededFuture(changes);
+ })
+ // Step 2: Calculate things to delete.
+ .compose(changes -> {
+ return calculateDeleteChanges(allDesired).compose(deleteChangeList -> {
+ changes.addAll(deleteChangeList);
+ return Future.succeededFuture(changes);
+ });
+ })
+ // Step 3: Reload at last
+ .compose(changes -> {
+ return Future.succeededFuture(Collections.singletonList(
+ new CommandChange(new String[]{"birdc", "configure"}))).compose(reloadChangeList -> {
+ changes.addAll(reloadChangeList);
+ return Future.succeededFuture(changes);
+ });
});
- final Future<List<Change>> deleteChanges =
- calculateDeleteChanges(allDesired);
- final Future<List<Change>> reloadChange =
- Future.succeededFuture(Collections.singletonList(
- new CommandChange(new String[] { "birdc", "configure" })));
-
- // The three major steps above must be done in sequence.
- return addOrModifyChanges.compose(changes -> {
- return deleteChanges.compose(deleteChangeList -> {
- changes.addAll(deleteChangeList);
- return Future.succeededFuture(changes);
- });
- }).compose(changes -> {
- return reloadChange.compose(reloadChangeList -> {
- changes.addAll(reloadChangeList);
- return Future.succeededFuture(changes);
- });
- });
}
}