diff --git a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/AbstractWorkflow.java b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/AbstractWorkflow.java index 30e50dbbca..5fb894379a 100644 --- a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/AbstractWorkflow.java +++ b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/AbstractWorkflow.java @@ -57,5 +57,4 @@ public abstract class AbstractWorkflow implements Workflow { .data(data) .build(); } - } diff --git a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/ContextEventMapStore.java b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/ContextEventMapStore.java index 389352c649..4b54cf3c64 100644 --- a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/ContextEventMapStore.java +++ b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/ContextEventMapStore.java @@ -33,21 +33,11 @@ public interface ContextEventMapStore { * @param eventType the class name of event * @param eventHintSet Set of event hint string value of the event * @param contextName workflow context name - * @param programCounter the program counter of workflow + * @param programCounterString the program counter of workflow * @throws WorkflowException workflow exception */ void registerEventMap(String eventType, Set eventHintSet, - String contextName, ProgramCounter programCounter) throws WorkflowException; - - /** - * Registers workflow trigger flag. - * @param eventType the class name of event - * @param eventHintSet Set of event hint string value of the event - * @param contextName workflow context name - * @throws WorkflowException workflow exception - */ - void registerTriggerFlag(String eventType, Set eventHintSet, - String contextName) throws WorkflowException; + String contextName, String programCounterString) throws WorkflowException; /** * Unregisters workflow context event mapping. @@ -62,10 +52,10 @@ public interface ContextEventMapStore { * Returns workflow context event mapping. * @param eventType the class name of event * @param eventHint vent hint string value of the event - * @return Map of workflow context and value (WorkflowEventMetaData) + * @return Map of workflow context and value (program counter) * @throws WorkflowException workflow exception */ - Map getEventMapByHint(String eventType, + Map getEventMapByHint(String eventType, String eventHint) throws WorkflowException; /** @@ -75,24 +65,13 @@ public interface ContextEventMapStore { */ boolean isEventMapPresent(String contextName); - /** - * Returns true or false depending on trigger flag for the workflow. - * @param eventType the class name of event - * @param eventHint vent hint string value of the event - * @param contextName name of workflow context - * @return Boolean true or false depending on trigger flag for the workflow - * @throws WorkflowException workflow exception - */ - boolean isTriggerSet(String eventType, String eventHint, - String contextName) throws WorkflowException; - /** * Returns child nodes on document tree path. * @param path document tree path including eventType and Hint * @return children under document tree path * @throws WorkflowException workflow exception */ - Map> getChildren(String path) throws WorkflowException; + Map> getChildren(String path) throws WorkflowException; /** * Returns document path. diff --git a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/DefaultWorkflowContext.java b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/DefaultWorkflowContext.java index 977a9787f6..603790add4 100644 --- a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/DefaultWorkflowContext.java +++ b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/DefaultWorkflowContext.java @@ -91,12 +91,6 @@ public class DefaultWorkflowContext extends WorkflowContext { */ private transient WorkplaceStore workplaceStore; - /** - * Service reference for eventMap store. - */ - private transient ContextEventMapStore eventMapStore; - - /** * Constructor of DefaultWorkflowContext. * @param builder default workflow context builder @@ -186,7 +180,7 @@ public class DefaultWorkflowContext extends WorkflowContext { @Override public void waitAnyCompletion(Class eventType, Set eventHint, - WorkExecutor eventGenerator, long timeoutMs) { + WorkExecutor eventGenerator, long timeoutMs) { this.completionEventType = eventType; this.completionEventHintSet = new HashSet<>(); this.completionEventHintSet.addAll(eventHint); @@ -219,11 +213,6 @@ public class DefaultWorkflowContext extends WorkflowContext { return completionEventTimeoutMs; } - @Override - public void registerTriggerEvent(Class event, Set eventHintSet) throws WorkflowException { - eventMapStore.registerTriggerFlag(event.getName(), eventHintSet, this.name()); - } - @Override public void setWorkflowExecutionService(WorkflowExecutionService workflowExecutionService) { this.workflowExecutionService = workflowExecutionService; @@ -254,17 +243,6 @@ public class DefaultWorkflowContext extends WorkflowContext { return workplaceStore; } - - @Override - public void setEventMapStore(ContextEventMapStore contextEventMapStore) { - this.eventMapStore = contextEventMapStore; - } - - @Override - public ContextEventMapStore eventMapStore() { - return eventMapStore; - } - public T getService(Class serviceClass) throws WorkflowException { T service; try { diff --git a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/ImmutableListWorkflow.java b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/ImmutableListWorkflow.java index f167b94dbb..5819f117d2 100644 --- a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/ImmutableListWorkflow.java +++ b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/ImmutableListWorkflow.java @@ -28,7 +28,6 @@ import java.net.URI; import java.util.ArrayList; import java.util.List; import java.util.Objects; -import java.util.Optional; import java.util.Set; import static org.onosproject.workflow.api.CheckCondition.check; @@ -56,8 +55,6 @@ public final class ImmutableListWorkflow extends AbstractWorkflow { private static JsonDataModelInjector dataModelInjector = new JsonDataModelInjector(); private static StaticDataModelInjector staticDataModelInjector = new StaticDataModelInjector(); - private Optional triggerWorkletClassName = Optional.empty(); - /** * Constructor of ImmutableListWorkflow. * @@ -65,17 +62,11 @@ public final class ImmutableListWorkflow extends AbstractWorkflow { */ private ImmutableListWorkflow(Builder builder) { super(builder.id); - triggerWorkletClassName = builder.triggerWorkletClassName; this.initWorkletType = builder.initWorkletType; program = ImmutableList.copyOf(builder.workletDescList); attributes = ImmutableSet.copyOf(builder.attributes); } - @Override - public Optional getTriggerWorkletClassName() { - return triggerWorkletClassName; - } - @Override public Worklet init(WorkflowContext context) throws WorkflowException { if (Objects.isNull(initWorkletType)) { @@ -217,12 +208,6 @@ public final class ImmutableListWorkflow extends AbstractWorkflow { return pcList; } - @Override - public Worklet getTriggerWorkletInstance(String workletType) throws WorkflowException { - return getWorkletInstance(workletType); - } - - @Override public WorkletDescription getWorkletDesc(ProgramCounter pc) { @@ -312,7 +297,6 @@ public final class ImmutableListWorkflow extends AbstractWorkflow { public static class Builder { private URI id; - private Optional triggerWorkletClassName = Optional.empty(); private String initWorkletType; private final List workletDescList = Lists.newArrayList(); private final Set attributes = Sets.newHashSet(); @@ -329,17 +313,6 @@ public final class ImmutableListWorkflow extends AbstractWorkflow { return this; } - /** - * Sets trigger flag of immutable list workflow. - * - * @param triggerWorkletClassName name of trigger worklet class - * @return builder - */ - public Builder trigger(String triggerWorkletClassName) { - this.triggerWorkletClassName = Optional.of(triggerWorkletClassName); - return this; - } - /** * Sets init worklet class name of immutable list workflow. * diff --git a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/TriggerWorklet.java b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/TriggerWorklet.java deleted file mode 100644 index 39316934b6..0000000000 --- a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/TriggerWorklet.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2019-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.onosproject.workflow.api; - - -import org.onosproject.event.Event; - -/** - * Abstract class for Trigger worklet. - */ -public abstract class TriggerWorklet implements Worklet { - - @Override - public String tag() { - return this.getClass().getName(); - } - - /** - * Registers trigger event for a workflow under the workflow context. - * @param context workflow context - * @throws WorkflowException workflow exception - */ - public abstract void register(WorkflowContext context) throws WorkflowException; - - /** - * Validates trigger event for a given workflow context. - * @param context workflow context - * @param event trigger event - * @return true/false based on trigger event's validity - * @throws WorkflowException workflow exception - */ - public abstract boolean isTriggerValid(WorkflowContext context, Event event) throws WorkflowException; - - @Override - public boolean isCompleted(WorkflowContext context, Event event)throws WorkflowException { - throw new WorkflowException("(" + tag() + ").isCompleted should not be called"); - } - - @Override - public boolean isNext(WorkflowContext context) throws WorkflowException { - throw new WorkflowException("(" + tag() + ").isNext should not be called"); - } - - @Override - public void timeout(WorkflowContext context) throws WorkflowException { - throw new WorkflowException("(" + tag() + ").timeout should not be called"); - } - - @Override - public void process(WorkflowContext context) throws WorkflowException { - throw new WorkflowException("(" + tag() + ").process should not be called"); - } -} - diff --git a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WfTriggerEventTask.java b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WfTriggerEventTask.java deleted file mode 100644 index 8febd3877a..0000000000 --- a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WfTriggerEventTask.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright 2018-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.onosproject.workflow.api; - -import com.google.common.base.MoreObjects; -import org.onosproject.event.Event; - -import java.util.Objects; - -import static org.onosproject.workflow.api.CheckCondition.check; - -/** - * Class for WorkFlow Trigger event task. - */ -public final class WfTriggerEventTask extends HandlerTask { - - /** - * Event triggering event task. - */ - private final Event event; - - /** - * Constructor of event task. - * @param builder builder of event task - */ - private WfTriggerEventTask(Builder builder) { - super(builder); - this.event = builder.event; - } - - - /** - * Gets event of event task. - * @return event triggering event task - */ - public Event event() { - return event; - } - - @Override - public int hashCode() { - return Objects.hash(this.toString()); - } - - @Override - public boolean equals(Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof EventTask)) { - return false; - } - return Objects.equals(this.event(), - ((WfTriggerEventTask) obj).event()); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()) - .add("context", context()) - .add("event", event()) - .toString(); - } - - /** - * Gets a instance of builder. - * @return instance of builder - */ - public static Builder builder() { - return new Builder(); - } - - /** - * Builder of WfTriggerEventTask. - */ - public static class Builder extends HandlerTask.Builder { - - /** - * Event triggering event task. - */ - private Event event; - - - /** - * Sets event. - * @param event event triggering event task - * @return Builder of WfTriggerEventTask - */ - public Builder event(Event event) { - this.event = event; - return this; - } - - @Override - public Builder context(WorkflowContext context) { - super.context(context); - return this; - } - - /** - * Builds WfTriggerEventTask. - * @return instance of WfTriggerEventTask - * @throws WorkflowException workflow exception - */ - public WfTriggerEventTask build() throws WorkflowException { - check(context != null, "context is invalid"); - check(event != null, "event is invalid"); - return new WfTriggerEventTask(this); - } - } -} diff --git a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/Workflow.java b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/Workflow.java index 01fb92dd5d..3849afe354 100644 --- a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/Workflow.java +++ b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/Workflow.java @@ -17,7 +17,6 @@ package org.onosproject.workflow.api; import java.net.URI; import java.util.List; -import java.util.Optional; import java.util.Set; /** @@ -102,15 +101,6 @@ public interface Workflow { */ List getProgram(); - /** - * Returns worklet instance with given worklet Name. - * @param workletType worklet name - * @return Worklet - * @throws WorkflowException workflow exception - */ - - Worklet getTriggerWorkletInstance(String workletType) throws WorkflowException; - /** * Returns worklet description. * @param pc program counter @@ -118,10 +108,4 @@ public interface Workflow { */ WorkletDescription getWorkletDesc(ProgramCounter pc); - /** - * Returns trigger worklet class name if any. - * @return trigger worklet class name - */ - Optional getTriggerWorkletClassName(); - - } +} diff --git a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WorkflowContext.java b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WorkflowContext.java index 2398b099cb..836524dada 100644 --- a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WorkflowContext.java +++ b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WorkflowContext.java @@ -143,29 +143,6 @@ public abstract class WorkflowContext extends WorkflowData { */ public abstract long completionEventTimeout(); - /** - * Sets event map store. - * @param contextEventMapStore event map store - */ - public abstract void setEventMapStore(ContextEventMapStore contextEventMapStore); - - /** - * Returns the event map store. - * @return ContextEventMapStore - */ - public abstract ContextEventMapStore eventMapStore(); - - - /** - * Registers an trigger event which has 'eventHint'. - * If the event happens, Workflow would be resatrted. - * @param event event when trigger happens - * @param eventHintSet Set of hint for the event - * @throws WorkflowException exception in case any - */ - public abstract void registerTriggerEvent(Class event, - Set eventHintSet) throws WorkflowException; - /** * Sets workflow service. * @param workflowExecutionService workflow service diff --git a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WorkflowEventMetaData.java b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WorkflowEventMetaData.java deleted file mode 100644 index 24a485cd10..0000000000 --- a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WorkflowEventMetaData.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2019-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.onosproject.workflow.api; - - -import com.google.common.base.MoreObjects; - -/** - * A class representing meta data for workflow event. - */ -public class WorkflowEventMetaData { - - private boolean isTriggerSet = false; - private ProgramCounter programCounter; - - /** - * Constructor of workflow event meta data. - * @param isTriggerSet trigger event set for the the workflow - * @param programCounter program counter representing worklet type for registered event - */ - public WorkflowEventMetaData(boolean isTriggerSet, ProgramCounter programCounter) { - this.isTriggerSet = isTriggerSet; - this.programCounter = programCounter; - } - - /** - * Copy constructor of workflow event meta data. - * @param workflowEventMetaData object of WorkflowEventMetaData - */ - public WorkflowEventMetaData(WorkflowEventMetaData workflowEventMetaData) { - this.isTriggerSet = workflowEventMetaData.getTriggerFlag(); - this.programCounter = workflowEventMetaData.getProgramCounter().clone(); - } - - /** - * Returns program counter value related to worflow event. - * @return programCounter - */ - public ProgramCounter getProgramCounter() { - return programCounter; - } - - /** - * Returns trigger flag for the workflow. - * @return triggerFlag - */ - public boolean getTriggerFlag() { - return isTriggerSet; - } - - - /** - * Sets true or false for triggerFlag of the workflow. - * @param triggerFlag flag to indicate trigger event set for the workflow - */ - public void setTriggerFlag(boolean triggerFlag) { - this.isTriggerSet = triggerFlag; - } - - /** - * Sets program counter representing worklet type for registered event of the workflow. - * @param programCounter program counter representing worklet type for registered event - */ - public void setProgramCounterString(ProgramCounter programCounter) { - this.programCounter = programCounter; - } - - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()) - .add("trigger-flag", getTriggerFlag()) - .add("program-counter", getProgramCounter()) - .toString(); - } - -} diff --git a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WorkflowExecutionService.java b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WorkflowExecutionService.java index 3a41a60eed..c5e00a7e15 100644 --- a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WorkflowExecutionService.java +++ b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/WorkflowExecutionService.java @@ -49,9 +49,9 @@ public interface WorkflowExecutionService extends ListenerService eventType, Set eventHintSet, - String contextName, ProgramCounter programCounter) throws WorkflowException; + String contextName, String programCounterString) throws WorkflowException; } diff --git a/apps/workflow/app/src/main/java/org/onosproject/workflow/impl/DistributedContextEventMapTreeStore.java b/apps/workflow/app/src/main/java/org/onosproject/workflow/impl/DistributedContextEventMapTreeStore.java index 947eff32e6..37e0e76407 100644 --- a/apps/workflow/app/src/main/java/org/onosproject/workflow/impl/DistributedContextEventMapTreeStore.java +++ b/apps/workflow/app/src/main/java/org/onosproject/workflow/impl/DistributedContextEventMapTreeStore.java @@ -21,8 +21,6 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import org.onosproject.store.service.EventuallyConsistentMap; import org.onosproject.store.service.WallClockTimestamp; -import org.onosproject.workflow.api.ProgramCounter; -import org.onosproject.workflow.api.WorkflowEventMetaData; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Deactivate; @@ -66,12 +64,10 @@ public class DistributedContextEventMapTreeStore implements ContextEventMapStore private ApplicationId appId; - private AsyncDocumentTree eventMapTree; + private AsyncDocumentTree eventMapTree; private EventuallyConsistentMap> hintSetPerCxtMap; - private static final ProgramCounter INVALID_PC = ProgramCounter.valueOf("INVALID_WORKLET", 0); - @Activate public void activate() { @@ -81,12 +77,9 @@ public class DistributedContextEventMapTreeStore implements ContextEventMapStore KryoNamespace eventMapNamespace = KryoNamespace.newBuilder() .register(KryoNamespaces.API) - .register(ProgramCounter.class) - .register(WorkflowEventMetaData.class) - .register(Set.class) .build(); - eventMapTree = storageService.documentTreeBuilder() + eventMapTree = storageService.documentTreeBuilder() .withSerializer(Serializer.using(eventMapNamespace)) .withName("context-event-map-store") .withOrdering(Ordering.INSERTION) @@ -110,49 +103,25 @@ public class DistributedContextEventMapTreeStore implements ContextEventMapStore @Override public void registerEventMap(String eventType, Set eventHintSet, - String contextName, ProgramCounter programCounter) throws WorkflowException { + String contextName, String programCounterString) throws WorkflowException { for (String eventHint : eventHintSet) { //Insert in eventCxtPerHintMap DocumentPath dpathForCxt = DocumentPath.from(Lists.newArrayList( "root", eventType, eventHint, contextName)); - WorkflowEventMetaData workflowEventMetaData = completeVersioned(eventMapTree.get(dpathForCxt)); - if (workflowEventMetaData == null) { - workflowEventMetaData = new WorkflowEventMetaData(false, programCounter); - complete(eventMapTree.createRecursive(dpathForCxt, workflowEventMetaData)); + String currentWorkletType = completeVersioned(eventMapTree.get(dpathForCxt)); + if (currentWorkletType == null) { + complete(eventMapTree.createRecursive(dpathForCxt, programCounterString)); } else { - WorkflowEventMetaData updatedWorkflowEventMetaData = - new WorkflowEventMetaData(workflowEventMetaData.getTriggerFlag(), programCounter); - complete(eventMapTree.replace(dpathForCxt, updatedWorkflowEventMetaData, workflowEventMetaData)); + complete(eventMapTree.replace(dpathForCxt, programCounterString, currentWorkletType)); } log.trace("RegisterEventMap for eventType:{}, eventSet:{}, contextName:{}, pc:{}", - eventType, eventHintSet, contextName, programCounter.toString()); + eventType, eventHintSet, contextName, programCounterString); } hintSetPerCxtMap.put(contextName, eventHintSet); log.trace("RegisterEventMap in hintSetPerCxt for " + - "eventType:{}, eventSet:{}, contextName:{}, pc:{}", - eventType, eventHintSet, contextName, programCounter.toString()); - } - - @Override - public void registerTriggerFlag(String eventType, Set eventHintSet, - String contextName) throws WorkflowException { - for (String eventHint : eventHintSet) { - //Insert in eventCxtPerHintMap - DocumentPath dpathForCxt = DocumentPath.from(Lists.newArrayList( - "root", eventType, eventHint, contextName)); - WorkflowEventMetaData workflowEventMetaData = completeVersioned(eventMapTree.get(dpathForCxt)); - if (workflowEventMetaData == null) { - workflowEventMetaData = new WorkflowEventMetaData(true, INVALID_PC); - complete(eventMapTree.createRecursive(dpathForCxt, workflowEventMetaData)); - } else { - WorkflowEventMetaData updatedWorkflowEventMetaData = - new WorkflowEventMetaData(true, workflowEventMetaData.getProgramCounter()); - complete(eventMapTree.replace(dpathForCxt, updatedWorkflowEventMetaData, workflowEventMetaData)); - } - log.trace("RegisterTriggerFlag for eventType:{}, eventSet:{}, contextName:{}", - eventType, eventHintSet, contextName); - } + "eventType:{}, eventSet:{}, contextName:{}, pc:{}", + eventType, eventHintSet, contextName, programCounterString); } @Override @@ -160,39 +129,28 @@ public class DistributedContextEventMapTreeStore implements ContextEventMapStore throws WorkflowException { Set hints = hintSetPerCxtMap.get(contextName); - - if (Objects.isNull(hints)) { - return; - } for (String eventHint : hints) { //Remove from eventCxtPerHintMap - DocumentPath dpathForCxt = DocumentPath.from(Lists.newArrayList( - "root", eventType, eventHint, contextName)); - WorkflowEventMetaData workflowEventMetaData = completeVersioned(eventMapTree.get(dpathForCxt)); - if (Objects.nonNull(workflowEventMetaData)) { - WorkflowEventMetaData updatedWorkflowEventMetaData = new WorkflowEventMetaData(workflowEventMetaData); - updatedWorkflowEventMetaData.setProgramCounterString(INVALID_PC); - complete(eventMapTree.replace(dpathForCxt, updatedWorkflowEventMetaData, workflowEventMetaData)); - log.trace("UnregisterEventMap from eventCxtPerHintMap for eventType:{}, eventSet:{}, contextName:{}", - eventType, eventHint, contextName); - } + complete(eventMapTree.removeNode(DocumentPath.from(Lists.newArrayList( + "root", eventType, eventHint, contextName)))); + log.trace("UnregisterEventMap from eventCxtPerHintMap for eventType:{}, eventSet:{}, contextName:{}", + eventType, eventHint, contextName); } hintSetPerCxtMap.remove(contextName); } @Override - public Map getEventMapByHint(String eventType, - String eventHint) throws WorkflowException { + public Map getEventMapByHint(String eventType, String eventHint) throws WorkflowException { DocumentPath path = DocumentPath.from( Lists.newArrayList("root", eventType, eventHint)); - Map> contexts = complete(eventMapTree.getChildren(path)); - Map eventMap = Maps.newHashMap(); + Map> contexts = complete(eventMapTree.getChildren(path)); + Map eventMap = Maps.newHashMap(); if (Objects.isNull(contexts)) { return eventMap; } - for (Map.Entry> entry : contexts.entrySet()) { + for (Map.Entry> entry : contexts.entrySet()) { eventMap.put(entry.getKey(), entry.getValue().value()); } log.trace("getEventMapByHint returns eventMap {} ", eventMap); @@ -212,25 +170,11 @@ public class DistributedContextEventMapTreeStore implements ContextEventMapStore } } - @Override - public boolean isTriggerSet(String eventType, String eventHint, - String contextName) throws WorkflowException { - - //Remove from eventCxtPerHintMap - DocumentPath dpathForCxt = DocumentPath.from(Lists.newArrayList( - "root", eventType, eventHint, contextName)); - WorkflowEventMetaData workflowEventMetaData = completeVersioned(eventMapTree.get(dpathForCxt)); - if (Objects.nonNull(workflowEventMetaData)) { - return workflowEventMetaData.getTriggerFlag(); - } else { - return false; - } - } @Override - public Map> getChildren(String path) throws WorkflowException { + public Map> getChildren(String path) throws WorkflowException { DocumentPath dpath = DocumentPath.from(path); - Map> entries = complete(eventMapTree.getChildren(dpath)); + Map> entries = complete(eventMapTree.getChildren(dpath)); return entries; } @@ -244,11 +188,11 @@ public class DistributedContextEventMapTreeStore implements ContextEventMapStore public ObjectNode asJsonTree() throws WorkflowException { DocumentPath rootPath = DocumentPath.from(Lists.newArrayList("root")); - Map> eventmap = complete(eventMapTree.getChildren(rootPath)); + Map> eventmap = complete(eventMapTree.getChildren(rootPath)); ObjectNode rootNode = JsonNodeFactory.instance.objectNode(); - for (Map.Entry> eventTypeEntry : eventmap.entrySet()) { + for (Map.Entry> eventTypeEntry : eventmap.entrySet()) { String eventType = eventTypeEntry.getKey(); @@ -256,9 +200,9 @@ public class DistributedContextEventMapTreeStore implements ContextEventMapStore rootNode.put(eventType, eventTypeNode); DocumentPath eventTypePath = DocumentPath.from(Lists.newArrayList("root", eventType)); - Map> hintmap = complete(eventMapTree.getChildren(eventTypePath)); + Map> hintmap = complete(eventMapTree.getChildren(eventTypePath)); - for (Map.Entry> hintEntry : hintmap.entrySet()) { + for (Map.Entry> hintEntry : hintmap.entrySet()) { String hint = hintEntry.getKey(); @@ -266,10 +210,10 @@ public class DistributedContextEventMapTreeStore implements ContextEventMapStore eventTypeNode.put(hint, hintNode); DocumentPath hintPath = DocumentPath.from(Lists.newArrayList("root", eventType, hint)); - Map> contextmap = complete(eventMapTree.getChildren(hintPath)); + Map> contextmap = complete(eventMapTree.getChildren(hintPath)); - for (Map.Entry> ctxtEntry : contextmap.entrySet()) { - hintNode.put(ctxtEntry.getKey(), ctxtEntry.getValue().value().toString()); + for (Map.Entry> ctxtEntry : contextmap.entrySet()) { + hintNode.put(ctxtEntry.getKey(), ctxtEntry.getValue().value()); } } } diff --git a/apps/workflow/app/src/main/java/org/onosproject/workflow/impl/WorkFlowEngine.java b/apps/workflow/app/src/main/java/org/onosproject/workflow/impl/WorkFlowEngine.java index d746985d14..55bf0e4180 100644 --- a/apps/workflow/app/src/main/java/org/onosproject/workflow/impl/WorkFlowEngine.java +++ b/apps/workflow/app/src/main/java/org/onosproject/workflow/impl/WorkFlowEngine.java @@ -32,8 +32,6 @@ import org.onosproject.workflow.api.SystemWorkflowContext; import org.onosproject.workflow.api.EventTimeoutTask; import org.onosproject.workflow.api.TimeoutTask; import org.onosproject.workflow.api.TimerChain; -import org.onosproject.workflow.api.TriggerWorklet; -import org.onosproject.workflow.api.WorkflowEventMetaData; import org.onosproject.workflow.api.Worklet; import org.onosproject.workflow.api.Workflow; import org.onosproject.workflow.api.WorkflowContext; @@ -180,7 +178,7 @@ public class WorkFlowEngine extends AbstractListenerManager eventMap; + Map eventMap; String eventHint; try { @@ -245,7 +243,6 @@ public class WorkFlowEngine extends AbstractListenerManager entry : eventMap.entrySet()) { + String contextName = entry.getKey(); + String strProgramCounter = entry.getValue(); + ProgramCounter pc; + try { + pc = ProgramCounter.valueOf(strProgramCounter); + } catch (IllegalArgumentException e) { + log.error("Exception: ", e); return; } - for (Map.Entry entry : eventMap.entrySet()) { - String contextName = entry.getKey(); - ProgramCounter pc = ProgramCounter.valueOf("INVALID_WORKLET", 0); - WorkflowContext context = null; - - context = workplaceStore.getContext(contextName); - - if (Objects.isNull(context)) { - log.info("Invalid context: {}, event: {}", contextName, event); - continue; - } - - EventTask eventtask = null; - if (eventMapStore.isTriggerSet(event.getClass().getName(), eventHint, contextName)) { - try { - eventtask = EventTask.builder() - .event(event) - .eventHint(eventHint) - .context(context) - .programCounter(pc) - .build(); - } catch (WorkflowException e) { - log.error("Exception: ", e); - } - - log.debug("eventtaskAccumulator.add: task: {}", eventtask); - if (!Objects.isNull(eventtask)) { - eventtaskAccumulator.add(eventtask); - } - } - /*Both type of event is being scheduled here if applicable. - If worfklow trigger event is set but may not be a valid one for current event type, - then normal worklet event should be processed if applicable. But validity of workflow - trigger event would be checked later, so as of now both kind of event would be scheduled. - later while trigger event processing, its validity is found to be true, then worklet events - would be unregistered and eventually these events wont be processed.*/ - if (eventMapStore.isEventMapPresent(contextName)) { - try { - pc = entry.getValue().getProgramCounter(); - } catch (IllegalArgumentException e) { - log.error("Exception: ", e); - continue; - } - try { - eventtask = EventTask.builder() - .event(event) - .eventHint(eventHint) - .context(context) - .programCounter(pc) - .build(); - } catch (WorkflowException e) { - log.error("Exception: ", e); - } - - log.debug("eventtaskAccumulator.add: task: {}", eventtask); - if (!Objects.isNull(eventtask)) { - eventtaskAccumulator.add(eventtask); - } - - } + WorkflowContext context = workplaceStore.getContext(contextName); + if (Objects.isNull(context)) { + log.info("Invalid context: {}, event: {}", contextName, event); + continue; + } + EventTask eventtask = null; + try { + eventtask = EventTask.builder() + .event(event) + .eventHint(eventHint) + .context(context) + .programCounter(pc) + .build(); + } catch (WorkflowException e) { + log.error("Exception: ", e); } - } catch (WorkflowException we) { - log.error("Exception {} occured in fetching contexts for trigger event {}", we, event); + log.debug("eventtaskAccumulator.add: task: {}", eventtask); + if (!Objects.isNull(eventtask)) { + eventtaskAccumulator.add(eventtask); + } } } @Override public void registerEventMap(Class eventType, Set eventHintSet, - String contextName, ProgramCounter programCounter) throws WorkflowException { - eventMapStore.registerEventMap(eventType.getName(), eventHintSet, contextName, programCounter); + String contextName, String programCounterString) throws WorkflowException { + eventMapStore.registerEventMap(eventType.getName(), eventHintSet, contextName, programCounterString); for (String eventHint : eventHintSet) { for (int i = 0; i < MAX_REGISTER_EVENTMAP_WAITS; i++) { - Map eventMap = - eventMapStore.getEventMapByHint(eventType.getName(), eventHint); + Map eventMap = eventMapStore.getEventMapByHint(eventType.getName(), eventHint); if (eventMap != null && eventMap.containsKey(contextName)) { break; } @@ -454,7 +423,6 @@ public class WorkFlowEngine extends AbstractListenerManager eventHintSet = new HashSet<>(); - eventHintSet.add(brphyDevId.toString()); - context.registerTriggerEvent(DeviceEvent.class, eventHintSet); - } - - @Override - public boolean isTriggerValid(WorkflowContext context, Event event) throws WorkflowException { - - if (!(event instanceof DeviceEvent)) { - return false; - } - DeviceEvent deviceEvent = (DeviceEvent) event; - Device device = deviceEvent.subject(); - switch (deviceEvent.type()) { - case DEVICE_AVAILABILITY_CHANGED: - return !context.getService(DeviceService.class).isAvailable(device.id()); - default: - return false; - } - } - } } diff --git a/apps/workflow/ofoverlay/test-cfg/network-cfg-cr-trigger-event-wf.json b/apps/workflow/ofoverlay/test-cfg/network-cfg-cr-trigger-event-wf.json deleted file mode 100755 index f837445330..0000000000 --- a/apps/workflow/ofoverlay/test-cfg/network-cfg-cr-trigger-event-wf.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "apps": { - "org.onosproject.workflow": { - "workflow" : { - "rpc" : [ - { - "op" : "workflow.invoke", - "params" : { - "workplace" : "Nova-000", - "id" : "of-overlay.workflow-nova-with-trigger-to-restart", - "data" : { - - "mgmtIp" : "192.168.10.8", - "ovsdbPort" : 6641, - - "sshAccessInfo" : { - "remoteIp" : "192.168.10.8", - "port" : 22, - "user" : "root", - "password" : "iloveyou", - "keyfile" : "~/.ssh/id_rsa" - }, - - "ovsDatapathType" : "system", - "physicalPorts" : [ "nova0_1" ], - "vtepIp" : "120.0.0.200/24", - - "annotations" : { - "rackId" : 1, - "rackPosition" : 3 - } - - } - }, - "id" : "00001@10.0.0.1" - } - ] - } - } - } -}