Glad I was able to help.

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

> **
> Nice...good catch. I'd never seen evidence of ARS level locking
> before...interesting.
>
> It was simple enough refactor to avoid this and get it working as needed.
> Without boring you with details, I'd originally coded it that way to avoid
> an extra round trip from client to server. But it's not really important in
> this situation.
>
> Thanks for the help.
>
>
>
> On Wed, Mar 15, 2017 at 10:51 AM, LJ LongWing <[email protected]>
> wrote:
>
>> **
>> 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_
>>>
>>
>> _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