Ok, I see your issue.

You are working with a 'Physician, operate on thyself' type of issue.

So, you finish doing phase 1 operations on form MD_KronosTest,
request MDKT-0000000001....you then start phase 2 which includes the
run-processes...

you run process is then coming in and trying to do a set on the same form,
same record....

Because your original operation is currently locking that record, the
second operation cannot modify it until phase 3 is completed, and the
record is released....so, because operation 2 is sitting inside of
operation 1, operation 1 won't be able to complete BEFORE operation 2
finishes...and operation 2 can't complete till operation 1 finishes....thus
deadlock....

simply....you can't have the doctor operate on himself....

On Wed, Mar 15, 2017 at 12:01 PM, Charlie Lotridge <[email protected]>
wrote:

> **
> LJ,
>
> Thanks for the suggestion.
>
> Unfortunately filterAPI isn't really an option. I have a large
> infrastructure (C++ & C# libraries) that I build on that allow me to
> rapidly develop API programs, but don't lend themselves to being used for
> filterAPI. I'd have to get the .NET runtime to work in the plugin framework
> and haven't taken (don't have) the time to figure that out, especially for
> this short project. Also, (getting way off topic) my typical API paradigm
> doesn't require synchronous access...this is a very unusual use case for
> me...which further decreases the motivation to do that research.
>
> Not sure if I can better describe the deadlock beyond the filter log
> description I gave, but I'll try...
>
> The $PROCESS$ times out and causes the ARS transaction to error. Here's
> the relevant filter log section with the $PROCESS$ Set Fields, and the
> subsequent failure message, highlighted:
>
> <FLTR> <TID: 0000001804> <RPC ID: 0000031115> <Queue: Fast > <Client-RPC:
> 390620   > <USER: Admin > <Overlay-Group: 1 > /* Wed Mar 15 2017
> 08:40:53.3190 */     End of filter processing (phase 1) -- Operation - SET
> on MD_KronosTest - MDKT-0000000001
> <FLTR> <TID: 0000001804> <RPC ID: 0000031115> <Queue: Fast > <Client-RPC:
> 390620   > <USER: Admin > <Overlay-Group: 1 >         1: Process
> <FLTR> <TID: 0000001804> <RPC ID: 0000031115> <Queue: Fast > <Client-RPC:
> 390620   > <USER: Admin > <Overlay-Group: 1 >
> Application-Release-Pending
> <FLTR> <TID: 0000001804> <RPC ID: 0000031115> <Queue: Fast > <Client-RPC:
> 390620   > <USER: Admin > <Overlay-Group: 1 >         2: Set Fields
> <FLTR> <TID: 0000001804> <RPC ID: 0000031115> <Queue: Fast > <Client-RPC:
> 390620   > <USER: Admin > <Overlay-Group: 1 >                   
> c:\bin\KronosPost.exe
> -X=localhost -U=ARSystem -P=xxxxx --arRPC=390680 MDKT-0000000001
> <FLTR> <TID: 0000001804> <RPC ID: 0000031115> <Queue: Fast > <Client-RPC:
> 390620   > <USER: Admin > <Overlay-Group: 1 >                   Exit code:
> 0  Value:
> <FLTR> <TID: 0000001804> <RPC ID: 0000031115> <Queue: Fast > <Client-RPC:
> 390620   > <USER: Admin > <Overlay-Group: 1 >               Filter/escalation
> 'set field' process timed out before completion
> <FLTR> <TID: 0000001804> <RPC ID: 0000031115> <Queue: Fast > <Client-RPC:
> 390620   > <USER: Admin > <Overlay-Group: 1 > **** Error while performing
> filter action: Error 39
> <FLTR> <TID: 0000001804> <RPC ID: 0000031115> <Queue: Fast > <Client-RPC:
> 390620   > <USER: Admin > <Overlay-Group: 1 > **** Filter "MDKT:
> GUIDEHandleEvents200Post:IfServicePushToUpdateEntry&Setup&RunKronosPost`!":
> No enabled error handler
> <FLTR> <TID: 0000001804> <RPC ID: 0000031115> <Queue: Fast > <Client-RPC:
> 390620   > <USER: Admin > <Overlay-Group: 1 > /* Wed Mar 15 2017
> 08:40:58.3540 */     Call Guide "MDKT:F:HandleEvents:GENERATED" (return)
> <FLTR> <TID: 0000001804> <RPC ID: 0000031115> <Queue: Fast > <Client-RPC:
> 390620   > <USER: Admin > <Overlay-Group: 1 > **** Error while performing
> filter action: Error 39
> <FLTR> <TID: 0000001804> <RPC ID: 0000031115> <Queue: Fast > <Client-RPC:
> 390620   > <USER: Admin > <Overlay-Group: 1 > **** Filter "MDKT:
> 050OnSubmitModifyService:IfEventCallHandleEvents:GENERATED": No enabled
> error handler
> <FLTR> <TID: 0000001804> <RPC ID: 0000031115> <Queue: Fast > <Client-RPC:
> 390620   > <USER: Admin > <Overlay-Group: 1 > /* Wed Mar 15 2017
> 08:40:58.3540 */     End of filter processing (phase 1) -- Operation -
> SERVICE on MD_KronosTest - MDKT-0000000001
>
> Once the transaction completes, I then see workflow associated with the
> API program operation, indicating it DID get started (this logging
> immediately follows the above):
>
> <FLTR> <TID: 0000003856> <RPC ID: 0000031120> <Queue: Prv:390680>
> <Client-RPC: 390680 > <USER: ARSystem > <Overlay-Group: 1 > /* Wed Mar 15
> 2017 08:40:58.3550 */     Start filter processing (phase 1) -- Operation -
> GET on MD_KronosTest - MDKT-0000000001
> <FLTR> <TID: 0000003856> <RPC ID: 0000031120> <Queue: Prv:390680>
> <Client-RPC: 390680 > <USER: ARSystem > <Overlay-Group: 1 > /* Wed Mar 15
> 2017 08:40:58.3550 */     <Filter Level:0 Number Of Filters:0> Checking
> "MDKT:500OnGetEntry:CallOnGetEntry:GENERATED" (500)
> <FLTR> <TID: 0000003856> <RPC ID: 0000031120> <Queue: Prv:390680>
> <Client-RPC: 390680 > <USER: ARSystem > <Overlay-Group: 1 >    --> Passed
> -- perform actions
> <FLTR> <TID: 0000003856> <RPC ID: 0000031120> <Queue: Prv:390680>
> <Client-RPC: 390680 > <USER: ARSystem > <Overlay-Group: 1 >         0: Call
> Guide "MDKT:F:OnGetEntry:GENERATED"
> <FLTR> <TID: 0000003856> <RPC ID: 0000031120> <Queue: Prv:390680>
> <Client-RPC: 390680 > <USER: ARSystem > <Overlay-Group: 1 > /* Wed Mar 15
> 2017 08:40:58.3570 */     <Filter Level:0 Number Of Filters:1> Checking
> "MDKT:GUIDEOnGetEntry010CallGetEntryDescription:GENERATED" (0)
> <FLTR> <TID: 0000003856> <RPC ID: 0000031120> <Queue: Prv:390680>
> <Client-RPC: 390680 > <USER: ARSystem > <Overlay-Group: 1 >    --> Passed
> -- perform actions
> <FLTR> <TID: 0000003856> <RPC ID: 0000031120> <Queue: Prv:390680>
> <Client-RPC: 390680 > <USER: ARSystem > <Overlay-Group: 1 >         0: Call
> Guide "MDKT:F:GetEntryDescription:GENERATED"
> ...
>
> Until the timeout on the $PROCESS$ occurs, both the ARS thread and my API
> process are stuck (deadlocked).
>
> When run standalone, the program completes in less than 1 second. Still,
> just to test, I did try setting the "Process Timeout" to 25 seconds.
>
> Regardless, the documentation, and my vague recollection from the last
> time I tried this, suggest that it can be made to work and my question is:
> why isn't it working?
>
> I *am* running this in a SERVICE operation...maybe Remedy doesn't like
> that for some reason? I will try refactoring to run it in a SET operation
> instead to test.
>
> Thanks,
> Charlie
>
>
> On Wed, Mar 15, 2017 at 9:22 AM, LJ LongWing <[email protected]>
> wrote:
>
>> **
>> Charlie,
>> Being you are writing it.....have you considered making it a filterAPI
>> Plugin instead of a command line?....this has many advantages over a
>> run-process....anyway
>>
>> You say it's a deadlock....can you identify what you mean by that?
>>
>> On Wed, Mar 15, 2017 at 11:11 AM, Charlie Lotridge <[email protected]>
>> wrote:
>>
>>> **
>>> Hi,
>>>
>>> I'm trying to run an API program I wrote in a filter Set Fields using
>>> $PROCESS$, but it's deadlocking and I can't see why.
>>>
>>> The first thing I tried, described in the documentation here
>>> <https://docs.bmc.com/docs/display/public/ars81/Executing+C+API+programs+in+workflow>,
>>> is to increase the Max Thread counts of the relevant queues but no joy. I
>>> even tried directing the API to use a private queue (RPC 390680), but still
>>> it deadlocks.
>>>
>>> I can see the deadlocking occur in a filter log: I first see my workflow
>>> (running in a fast queue) perform the $PROCESS$. It hangs for the
>>> configured 5 second timeout, then issues its error and completes its
>>> transaction. But it DID spin up my program, which (after my initial
>>> transaction fails and completes) then makes its connection (to private
>>> queue 390680) and correctly does its thing.
>>>
>>> I haven't bothered to instrument the API program to test this, but I'm
>>> quite sure that it's hanging at the point that it tries to make the ARS
>>> connection.
>>>
>>> FYI I need to use $PROCESS$ because I need the results of the API to be
>>> available to subsequent filter workflow. Run Process, which will run the
>>> API asynchronously, is not suitable.
>>>
>>> Also FYI, it's a fully licensed development system with absolutely
>>> nothing else going on (no other person or processes are using it).
>>>
>>> I've done this kind of thing before, but it's been a long time and my
>>> best recollection is that increasing the thread count solved the problem.
>>>
>>> Any suggestions?
>>>
>>> Thanks,
>>> Charlie
>>> _ARSlist: "Where the Answers Are" and have been for 20 years_
>>
>>
>> _ARSlist: "Where the Answers Are" and have been for 20 years_
>>
>
> _ARSlist: "Where the Answers Are" and have been for 20 years_
>

_______________________________________________________________________________
UNSUBSCRIBE or access ARSlist Archives at www.arslist.org
"Where the Answers Are, and have been for 20 years"

Reply via email to