fixed a bug with multiple HOs
diff --git a/src/main/java/org.onosproject.xran/controller/XranControllerImpl.java b/src/main/java/org.onosproject.xran/controller/XranControllerImpl.java
index 8040cea..47af1f1 100644
--- a/src/main/java/org.onosproject.xran/controller/XranControllerImpl.java
+++ b/src/main/java/org.onosproject.xran/controller/XranControllerImpl.java
@@ -175,6 +175,7 @@
private ConcurrentMap<ECGI, SynchronousQueue<String>> hoMap = new ConcurrentHashMap<>();
private ConcurrentMap<ECGI, SynchronousQueue<String>> rrmcellMap = new ConcurrentHashMap<>();
private ConcurrentMap<CRNTI, SynchronousQueue<String>> scellAddMap = new ConcurrentHashMap<>();
+ // Map used to keep messages in pairs (HO Complete - CTX Update, Adm Status - CTX Update)
private ConcurrentMap<EcgiCrntiPair, ContextUpdateHandler> contextUpdateMap = new ConcurrentHashMap<>();
/* QUEUE */
private BlockingQueue<Long> ueIdQueue = new LinkedBlockingQueue<>();
@@ -890,7 +891,8 @@
v = new ContextUpdateHandler();
}
if (v.setAdmissionStatus(ueAdmissionStatus)) {
- handleContextUpdate(v.getContextUpdate(), ctx, false);
+ handlePairedPackets(v.getContextUpdate(), ctx, false);
+ v.reset();
}
return v;
});
@@ -912,7 +914,7 @@
}
if (v.setContextUpdate(ueContextUpdate)) {
HOComplete hoComplete = v.getHoComplete();
- handleContextUpdate(ueContextUpdate, ctx, hoComplete != null);
+ handlePairedPackets(ueContextUpdate, ctx, hoComplete != null);
if (hoComplete != null) {
try {
hoMap.get(hoComplete.getEcgiS()).put("Hand Over Completed");
@@ -923,6 +925,7 @@
hoMap.remove(hoComplete.getEcgiS());
}
}
+ v.reset();
}
return v;
});
@@ -1049,7 +1052,7 @@
v = new ContextUpdateHandler();
}
if (v.setHoComplete(hoComplete)) {
- handleContextUpdate(v.getContextUpdate(), ctx, true);
+ handlePairedPackets(v.getContextUpdate(), ctx, true);
try {
hoMap.get(hoComplete.getEcgiS()).put("Hand Over Completed");
@@ -1059,6 +1062,7 @@
} finally {
hoMap.remove(hoComplete.getEcgiS());
}
+ v.reset();
}
return v;
});
@@ -1342,7 +1346,7 @@
* @param ctx channel context for the CELL
* @param handoff true if we handle a Hand Off
*/
- private void handleContextUpdate(UEContextUpdate contextUpdate, ChannelHandlerContext ctx, boolean handoff) {
+ private void handlePairedPackets(UEContextUpdate contextUpdate, ChannelHandlerContext ctx, boolean handoff) {
RnibUe ue;
RnibCell cell = xranStore.getCell(contextUpdate.getEcgi());
diff --git a/src/main/java/org.onosproject.xran/identifiers/contextUpdateHandler.java b/src/main/java/org.onosproject.xran/identifiers/contextUpdateHandler.java
index 4372d8b..d1fcfcf 100644
--- a/src/main/java/org.onosproject.xran/identifiers/contextUpdateHandler.java
+++ b/src/main/java/org.onosproject.xran/identifiers/contextUpdateHandler.java
@@ -86,6 +86,12 @@
return contextUpdate != null;
}
+ public void reset() {
+ this.hoComplete = null;
+ this.admissionStatus = null;
+ this.contextUpdate = null;
+ }
+
@Override
public String toString() {
return "ContextUpdateHandler{" +