private static bool TryUpdateStateCache(TransactionTrace trace, TieredStateCache groupStateCache) { if (trace == null) { return(false); } if (!trace.IsSuccessful()) { var transactionExecutingStateSets = new List <TransactionExecutingStateSet>(); AddToTransactionStateSets(transactionExecutingStateSets, trace.PreTraces); AddToTransactionStateSets(transactionExecutingStateSets, trace.PostTraces); groupStateCache.Update(transactionExecutingStateSets); trace.SurfaceUpError(); } else { groupStateCache.Update(trace.GetStateSets()); } return(true); }
public void SurfaceUpError_Test() { var transactionTrace = new TransactionTrace { ExecutionStatus = ExecutionStatus.Executed, InlineTraces = { new TransactionTrace { ExecutionStatus = ExecutionStatus.Executed } } }; transactionTrace.SurfaceUpError(); transactionTrace.Error.ShouldBeEmpty(); transactionTrace.ExecutionStatus.ShouldBe(ExecutionStatus.Executed); transactionTrace.ExecutionStatus = ExecutionStatus.Canceled; transactionTrace.SurfaceUpError(); transactionTrace.Error.ShouldBeEmpty(); transactionTrace.ExecutionStatus.ShouldBe(ExecutionStatus.Canceled); transactionTrace = new TransactionTrace { ExecutionStatus = ExecutionStatus.Executed, InlineTraces = { new TransactionTrace { ExecutionStatus = ExecutionStatus.ExceededMaxCallDepth, Error = "ExceededMaxCallDepth" } } }; transactionTrace.SurfaceUpError(); transactionTrace.Error.ShouldContain("ExceededMaxCallDepth"); transactionTrace.ExecutionStatus.ShouldBe(ExecutionStatus.ExceededMaxCallDepth); transactionTrace = new TransactionTrace { ExecutionStatus = ExecutionStatus.Prefailed, PreTraces = { new TransactionTrace { ExecutionStatus = ExecutionStatus.Executed } } }; transactionTrace.SurfaceUpError(); transactionTrace.Error.ShouldBeEmpty(); transactionTrace.ExecutionStatus.ShouldBe(ExecutionStatus.Prefailed); transactionTrace.PreTraces.Add(new TransactionTrace { ExecutionStatus = ExecutionStatus.Canceled, Error = "Canceled" }); transactionTrace.SurfaceUpError(); transactionTrace.Error.ShouldContain("Canceled"); transactionTrace.ExecutionStatus.ShouldBe(ExecutionStatus.Prefailed); transactionTrace = new TransactionTrace { ExecutionStatus = ExecutionStatus.Postfailed, PostTraces = { new TransactionTrace { ExecutionStatus = ExecutionStatus.Executed } } }; transactionTrace.SurfaceUpError(); transactionTrace.Error.ShouldBeEmpty(); transactionTrace.ExecutionStatus.ShouldBe(ExecutionStatus.Postfailed); transactionTrace.PostTraces.Add(new TransactionTrace { ExecutionStatus = ExecutionStatus.Canceled, Error = "Canceled" }); transactionTrace.SurfaceUpError(); transactionTrace.Error.ShouldContain("Canceled"); transactionTrace.ExecutionStatus.ShouldBe(ExecutionStatus.Postfailed); }