tardieu commented on a change in pull request #3202: Support action continuations in the controller URL: https://github.com/apache/incubator-openwhisk/pull/3202#discussion_r167954793
########## File path: core/controller/src/main/scala/whisk/core/controller/actions/PrimitiveActions.scala ########## @@ -140,6 +200,349 @@ protected[actions] trait PrimitiveActions { } } + /** + * Mutable cumulative accounting of what happened during the execution of a composition. + * + * Compositions are aborted if the number of action invocations exceeds a limit. + * The permitted max is n component invocations plus 2n+1 conductor invocations (where n is the actionSequenceLimit). + * The max is chosen to permit a sequence with up to n primitive actions. + * + * NOTE: + * A sequence invocation counts as one invocation irrespective of the number of action invocations in the sequence. + * If one component of a composition is also a composition, the caller and callee share the same accounting object. + * The counts are shared between callers and callees so the limit applies globally. + * + * @param components the current count of component actions already invoked + * @param conductors the current count of conductor actions already invoked + */ + private case class CompositionAccounting(var components: Int = 0, var conductors: Int = 0) + + /** + * A mutable session object to keep track of the execution of one composition. + * + * NOTE: + * The session object is not shared between callers and callees. + * + * @param activationId the activationId for the composition (ie the activation record for the composition) + * @param start the start time for the composition + * @param action the conductor action responsible for the execution of the composition + * @param cause the cause of the composition (activationId of the enclosing sequence or composition if any) + * @param duration the "user" time so far executing the composition (sum of durations for + * all actions invoked so far which is different from the total time spent executing the composition) + * @param maxMemory the maximum memory annotation observed so far for the conductor action and components + * @param state the json state object to inject in the parameter object of the next conductor invocation + * @param accounting the global accounting object used to abort compositions requiring too many action invocations + * @param logs a mutable buffer that is appended with new activation ids as the composition unfolds + * (in contrast with sequences, the logs of a hierarchy of compositions is not flattened) + */ + private case class Session(activationId: ActivationId, + start: Instant, + action: ExecutableWhiskActionMetaData, + cause: Option[ActivationId], + var duration: Long, Review comment: No I don't think so. This current type follows from: ```scala case class WhiskActivation(namespace: EntityPath, ... duration: Option[Long] = None) ``` ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services