Persistence and WF.45

Persistence and WF.45

Postby maguirej160 » Mon 28 Sep 2015 12:40

I have a State Machine which runs to completion and sometimes doesn't (no pattern). Visual studio won't even fire the debugger sometimes.

When I switched on WF tracing, I have saw errors being raised by the dotConnect component, specifically in here:

at Devart.Data.Oracle.DurableInstancing.a5.b(Boolean A_0)
at Devart.Data.Oracle.DurableInstancing.x.a(IAsyncResult A_0)
at Devart.Data.Oracle.DurableInstancing.a5.b(Boolean A_0)
at Devart.Data.Oracle.DurableInstancing.a.c()


at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()[/size]

When the State Machine works as normal, i.e, the debugging breakpoints within it are hit and persistence records get created, there are no exceptions in the log files.

I ran a .NET reflector as there was no pattern to this. When my State Machine doesn't work (Worflow breakpoints not hit, persistence records not being created etc), I noticed an exception is being thrown in one of dotConnects class methods, the reflector has identified the following code:

private static void a(IAsyncResult A_0)
{
x asyncState = (x) A_0.AsyncState;
Exception exception = null;
bool flag = true;
try
{
asyncState.c(A_0);
}
catch (InstanceLockedException exception2)
{
TimeSpan span = asyncState.e().a(++asyncState.e);
if (span < asyncState.b.c())
{
asyncState.a(span);
if (asyncState.e().a(asyncState))
{
asyncState.c = exception2;
flag = false;
}
}
if (flag)
{
exception = exception2;
}
}
catch (Exception exception3)
{
exception = exception3;
}
if (flag)
{
asyncState.a(false, exception);
}
}

After the error is bubbled back up the stack, the exception message in the service logfile is:

Exception.message: "The execution of an InstancePersistenceCommand was interrupted by an error."

For reference, in the service logs, the main method calls are:
Devart.Data.Oracle.DurableInstancing.a5.b(Boolean A_0)
Devart.Data.Oracle.DurableInstancing.x.a(IAsyncResult A_0)
Devart.Data.Oracle.DurableInstancing.a5.b(Boolean A_0)
Devart.Data.Oracle.DurableInstancing.a.c()

And in the reflector, this message was present:
"ORA-01403: no data found\nORA-06512: at \"MICASE.INSTANCESTORELOGIC\", line 421\nORA-06512: at line 2".

I traced this to the following stored procedure "UnlockInstance".

Can you please assist? I can send screen shots if you wish and have the log files to hand.



Kind Regards
maguirej160
 
Posts: 1
Joined: Mon 28 Sep 2015 10:53

Re: Persistence and WF.45

Postby Shalex » Thu 01 Oct 2015 15:24

As we understood, you cannot localize the issue to create a test project for reproducing (this would help us to fix the bug), can you? In this case we may try to implement a "blind" fix and send you an internal build of the provider for testing. Will it be convenient for you?
Shalex
Devart Team
 
Posts: 7824
Joined: Thu 14 Aug 2008 12:44

Re: Persistence and WF.45

Postby Shalex » Thu 22 Oct 2015 16:23

The issue is fixed in the C:\Program Files (x86)\Devart\dotConnect\Oracle\WF Services\NET45\OracleInstanceStoreLogic45.sql script shipped with the newest (8.5.521) build of dotConnect for Oracle.
Shalex
Devart Team
 
Posts: 7824
Joined: Thu 14 Aug 2008 12:44


Return to dotConnect for Oracle