Uploaded image for project: 'VOLTHA'
  1. VOLTHA
  2. VOL-3913

Group sink add/remove operations expire in InOrderFlowObjectiveManager

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Resolved (View Workflow)
    • Priority: High
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: VOLTHA v2.8
    • Component/s: onos-olt
    • Labels:
      None
    • Story Points:
      2

      Description

      Exception:

      08:55:42.425 WARN [InOrderFlowObjectiveManager] Flow objective onError DefaultNextObjective{id=1, type=BROADCAST, op=ADD_TO_EXISTING, priority=0, nextTreatments=[DefaultNextTreatment{treatment=DefaultTrafficTreatment{immediate=[OUTPUT:4240], deferred=[], transition=None, meter=[], cleared=false, StatTrigger=null, metadata=null}}], meta=DefaultTrafficSelector {criteria=[VLAN_VID:4000, IPV4_DST:224.0.0.22/32]}, appId=DefaultApplicationId{id=199, name=org.opencord.mcast} , permanent=false, timeout=0}. Reason = INSTALLATIONTIMEOUT
      08:55:42.431 DEBUG [CordMcast] Next Objective 1 failed, because INSTALLATIONTIMEOUT

      Root cause:

      InnerGroupListener of OltPipeline listens to group events. When a group event is received, It notifies InOrderFlowObjectiveManager through the pass() method and removes the group from the pendingGroups cache respectively. Pass() method tells InOrderFlowObjectiveManager that the current operation for this group has been succeeded. In this case, InOrderFlowObjectiveManager removes the current operation for this group from its internal FIFO queue and starts consuming the next waiting one, if any. If there is a waiting operation in the queue, InOrderFlowObjectiveManager sends it to OltPipeline and OltPipeline puts this operation into the pendingGroups queue (actually overwrites the existing one in this case). Having called pass() method successfully, InnerGroupListener removes the group from pendingGroups cache. At this point, in fact, it invalidates the next group operation since InOrderFlowObjectiveManager has just consumed the next event and put it into the pendingGroups cache.

      In this situation, InOrderFlowObjectiveManager waits for the result of the current group operation but it never comes. Because InnerGroupListener cannot process group events for the related groups since it has been removed from the pendingGroups cache. After 500secs, the current group operation in InOrderFlowObjectiveManager expires and ends with INSTALLATIONTIMEOUT exception. Note that, the other sink add/removed operations issued for this group wait in the InOrderFlowObjectiveManager's queue to be processed until the timeout occurs for the current operation. The situation completely blocks the sink add/remove operations for this group for 500secs.

      private class InnerGroupListener implements GroupListener {
          @Override
          public void event(GroupEvent event) {
              GroupKey key = event.subject().appCookie();
              NextObjective obj = pendingGroups.getIfPresent(key);
              if (obj == null) {
                  log.debug("No pending group for {}, moving on", key);
                  return;
              }
              log.trace("Event {} for group {}, handling pending" +
                                "NextGroup {}", event.type(), key, obj.id());
              if (event.type() == GroupEvent.Type.GROUP_ADDED ||
                      event.type() == GroupEvent.Type.GROUP_UPDATED) {
                      flowObjectiveStore.putNextGroup(obj.id(), new OLTPipelineGroup(key));
                      pass(obj);
                      pendingGroups.invalidate(key);
              } else if (event.type() == GroupEvent.Type.GROUP_REMOVED) {
                      flowObjectiveStore.removeNextGroup(obj.id());
                      pass(obj);
                      pendingGroups.invalidate(key);
              }
          }
      }
      

        Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

          Activity

            People

            Assignee:
            esinka Esin Karaman
            Reporter:
            esinka Esin Karaman
            Watchers:
            1 Start watching this issue

              Dates

              Created:
              Updated:
              Resolved: