Improved the documentation in rev. 1735441

Jacopo

On Thu, Mar 17, 2016 at 11:17 AM, Jacques Le Roux <
jacques.le.r...@les7arts.com> wrote:

> +1, thanks Scott for the idea and explanation!
>
> Jacques
>
>
> Le 17/03/2016 10:51, Jacopo Cappellato a écrit :
>
>> Thanks to all of you for your valuable feedback.
>>
>> For now we could, as recommended by Scott, improve the documentation to
>> make it clear when and how the auth and in-validate events can safely be
>> used(i.e. to call services that don't change the status of any system).
>>
>> Regards,
>>
>> Jacopo
>>
>> On Tue, Feb 23, 2016 at 11:41 PM, Scott Gray <
>> scott.g...@hotwaxsystems.com>
>> wrote:
>>
>> I've been aware of this for a while and always assumed that the intention
>>> was for the auth and in-validate events to only use idempotent services
>>> that exist to validate the service call.  I don't mind if we remove them
>>> for async calls but we do lose the feature that the caller is immediately
>>> notified that the job they've executed isn't valid.
>>>
>>> The other option is to improve the documentation for these events so devs
>>> aren't taken by surprise.
>>>
>>> Regards
>>> Scott
>>>
>>> On 23 February 2016 at 22:59, Jacopo Cappellato <
>>> jacopo.cappell...@hotwaxsystems.com> wrote:
>>>
>>> Taher,
>>>>
>>>> yours are all valid questions and I don't have a precise answer for
>>>> them:
>>>> it may be that it was done by design (as Gil said for example to allow
>>>>
>>> the
>>>
>>>> creation in the queue of "valid" jobs only) or just for a copy/paste
>>>> pattern...
>>>>
>>>> Jacopo
>>>>
>>>> On Tue, Feb 23, 2016 at 10:35 AM, gil portenseigne <
>>>> gil.portensei...@nereide.fr> wrote:
>>>>
>>>> Hi Taher,
>>>>>
>>>>> The only thing i can see around this matter is if the seca fail during
>>>>> invoke, no job is created ?
>>>>>
>>>>> My 0,02 cts
>>>>>
>>>>> Gil
>>>>>
>>>>> On 23/02/2016 10:27, Taher Alkhateeb wrote:
>>>>>
>>>>> Hi Jacopo,
>>>>>
>>>>> So to understand correctly, you want to disable all SECA executions
>>>>> (triggered by evalRules) when the call happens to runAsync.
>>>>>
>>>>> Any idea why it was there in the first place? It seems strange to have
>>>>>
>>>> such
>>>>
>>>>> a flaw in the design deep in the service engine. If an async service
>>>>> eventually triggers all ECAs, why did anyone go through the effort of
>>>>> putting that code in runAsync! BTW I'm not objecting to your proposal,
>>>>> merely commenting on the oddness of having that piece of code in there
>>>>>
>>>> in
>>>
>>>> the first place.
>>>>>
>>>>> Taher Alkhateeb
>>>>>
>>>>> On Tue, Feb 23, 2016 at 10:51 AM, Jacopo Cappellato <
>>>>>
>>>> jacopo.cappell...@hotwaxsystems.com> wrote:
>>>>
>>>>>
>>>>> Hi Taher,
>>>>>
>>>>> yes you are in the right place: the proposal is to remove, from the
>>>>> ServiceDispatcher.runAsync method, the code following the two comments:
>>>>>
>>>>> // pre-auth ECA
>>>>>
>>>>> and
>>>>>
>>>>> // pre-validate ECA
>>>>>
>>>>> Jacopo
>>>>>
>>>>> On Tue, Feb 23, 2016 at 7:10 AM, Taher Alkhateeb <
>>>>>
>>>> slidingfilame...@gmail.com
>>>>
>>>>> wrote:
>>>>>
>>>>> Hi Jacopo,
>>>>>
>>>>> I'm trying to find where the logic described above is happening, am I
>>>>>
>>>> in
>>>
>>>> the right place at ServiceDispatcher on the runAsync method right next
>>>>>
>>>> to
>>>
>>>> the checking of pre-auth ECA rules?
>>>>>
>>>>> Taher Alkhateeb
>>>>>
>>>>> On Mon, Feb 22, 2016 at 5:45 PM, Jacopo Cappellato <
>>>>>
>>>> jacopo.cappell...@hotwaxsystems.com> wrote:
>>>>
>>>>>
>>>>> Hi all,
>>>>>
>>>>> I am sharing here the result of an analysis that Nameet Jain and I did
>>>>>
>>>>> to
>>>>>
>>>>> figure out why, under some circumstances the same seca service was
>>>>>
>>>>> executed
>>>>>
>>>>> twice.
>>>>>
>>>>> The problem is that, when a service is executed as "async" the secas
>>>>> attached to the "auth" and "in-validate" events are executed two times:
>>>>>
>>>>> at
>>>>>
>>>>> the time of the call and later at the time of execution.
>>>>>
>>>>> Here are the details:
>>>>>
>>>>> when you call a service using the async method the following events
>>>>>
>>>>> occur
>>>>>
>>>>> immediately (i.e. synchronously at the time of the call):
>>>>>
>>>>> 1) all SECAs with event="auth" are executed
>>>>> 2) the user authorization to call the service is checked
>>>>> 3) all SECAs with event="in-validate" are executed
>>>>> 4) the service input parameters are validated
>>>>> 5) the service is submitted for later execution (e.g. added to the
>>>>> JobSandbox)
>>>>>
>>>>> After some time, the job scheduler picks the job from the queue and
>>>>>
>>>>> then
>>>>>
>>>>> executes it with a *sync* call; at this point all the events that you
>>>>>
>>>>> would
>>>>>
>>>>> expect to be executed during a sync call occur:
>>>>>
>>>>> 1) all SECAs with event="auth" are executed
>>>>> 2) the user authorization to call the service is checked
>>>>> 3) all SECAs with event="in-validate" are executed
>>>>> 4) the service input parameters are validated
>>>>> 5) all SECAs with event="invoke" are executed
>>>>> 6) the service is executed
>>>>> 7) all SECAs with event="out-validate" are executed
>>>>> 8) the service output parameters are validated
>>>>> 9) all SECAs with event="return" are executed
>>>>> 10) there are also other SECAs that are scheduled for execution at
>>>>> transaction level; the ones with events: "commit", "global-commit",
>>>>> "global-commit-post-run", "global-rollback"
>>>>>
>>>>> As you can see the steps #1, #2, #3 and #4 are executed twice when the
>>>>> service is called with the runAsync method and specifically all the
>>>>>
>>>>> SECAs
>>>>>
>>>>> of events "auth" and "in-validate" are executed twice.
>>>>>
>>>>> Proposed fix: we could simply remove the execution of "auth" and
>>>>> "in-validate" secas when the async service is invoked, and defer their
>>>>> execution at the time the service is actually executed (i.e. picked
>>>>>
>>>>> from
>>>>>
>>>>> the queue and run).
>>>>>
>>>>> Any comments?
>>>>>
>>>>> Jacopo
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>

Reply via email to