public virtual async Task RepeatGrainReadWriteTransaction(string transactionTestGrainClassName) { const int repeat = 10; const int delta = 5; const int grainCount = TransactionTestConstants.MaxCoordinatedTransactions; List <Guid> grainIds = Enumerable.Range(0, grainCount) .Select(i => Guid.NewGuid()) .ToList(); List <ITransactionTestGrain> grains = grainIds .Select(id => TestGrain(transactionTestGrainClassName, id)) .ToList(); ITransactionCoordinatorGrain coordinator = this.grainFactory.GetGrain <ITransactionCoordinatorGrain>(Guid.NewGuid()); await coordinator.MultiGrainSet(grains, delta); for (int i = 0; i < repeat; i++) { await coordinator.MultiGrainDouble(grains); int expected = delta * (int)Math.Pow(2, i + 1); foreach (var grain in grains) { int actual = await grain.Get(); if (expected != actual) { this.output.WriteLine($"{grain} - failed"); } Assert.Equal(expected, actual); } } }
public virtual async Task MultiGrainReadWriteTransaction(string transactionTestGrainClassName) { const int delta = 5; const int grainCount = TransactionTestConstants.MaxCoordinatedTransactions; List <Guid> grainIds = Enumerable.Range(0, grainCount) .Select(i => Guid.NewGuid()) .ToList(); List <ITransactionTestGrain> grains = grainIds .Select(id => TestGrain(transactionTestGrainClassName, id)) .ToList(); ITransactionCoordinatorGrain coordinator = this.grainFactory.GetGrain <ITransactionCoordinatorGrain>(Guid.NewGuid()); await coordinator.MultiGrainSet(grains, delta); await coordinator.MultiGrainDouble(grains); foreach (var grain in grains) { await grain.Get(); } foreach (var grainId in grainIds) { await CheckReport(grainId, 3, 0, 3); } }
public virtual async Task MultiGrainReadWriteTransaction(string transactionTestGrainClassName) { const int delta = 5; const int grainCount = TransactionTestConstants.MaxCoordinatedTransactions; List <ITransactionTestGrain> grains = Enumerable.Range(0, grainCount) .Select(i => RandomTestGrain(transactionTestGrainClassName)) .ToList(); ITransactionCoordinatorGrain coordinator = this.grainFactory.GetGrain <ITransactionCoordinatorGrain>(Guid.NewGuid()); await coordinator.MultiGrainSet(grains, delta); await coordinator.MultiGrainDouble(grains); int expected = delta + delta; foreach (var grain in grains) { int actual = await grain.Get(); Assert.Equal(expected, actual); } }
public virtual async Task MultiWriteToSingleGrainTransaction(string transactionTestGrainClassName) { const int delta = 5; const int concurrentWrites = 3; ITransactionTestGrain grain = RandomTestGrain(transactionTestGrainClassName); List <ITransactionTestGrain> grains = Enumerable.Repeat(grain, concurrentWrites).ToList(); ITransactionCoordinatorGrain coordinator = this.grainFactory.GetGrain <ITransactionCoordinatorGrain>(Guid.NewGuid()); await coordinator.MultiGrainAdd(grains, delta); int expected = delta * concurrentWrites; int actual = await grains[0].Get(); Assert.Equal(expected, actual); }
public virtual async Task MultiWriteToSingleGrainTransaction(string transactionTestGrainClassName) { const int delta = 5; const int concurrentWrites = TransactionTestConstants.MaxCoordinatedTransactions; Guid grainId = Guid.NewGuid(); ITransactionTestGrain grain = TestGrain(transactionTestGrainClassName, grainId); List <ITransactionTestGrain> grains = Enumerable.Repeat(grain, concurrentWrites).ToList(); ITransactionCoordinatorGrain coordinator = this.grainFactory.GetGrain <ITransactionCoordinatorGrain>(Guid.NewGuid()); await coordinator.MultiGrainAdd(grains, delta); await grains[0].Get(); await CheckReport(grainId, 2, 0, 2); }
public async Task AbortTransactionOnExceptions(TransactionTestConstants.TransactionGrainStates grainStates) { const int expected = 5; ITransactionTestGrain grain = RandomTestGrain(grainStates); ITransactionCoordinatorGrain coordinator = this.grainFactory.GetGrain <ITransactionCoordinatorGrain>(Guid.NewGuid()); await coordinator.MultiGrainSet(new List <ITransactionTestGrain> { grain }, expected); await Assert.ThrowsAsync <OrleansTransactionAbortedException>(() => coordinator.AddAndThrow(grain, expected)); await TestAfterDustSettles(async() => { int[] actualValues = await grain.Get(); foreach (var actual in actualValues) { Assert.Equal(expected, actual); } }); }
public virtual async Task MultiGrainWriteTransaction(TransactionTestConstants.TransactionGrainStates grainStates) { const int expected = 5; const int grainCount = TransactionTestConstants.MaxCoordinatedTransactions; List <ITransactionTestGrain> grains = Enumerable.Range(0, grainCount) .Select(i => RandomTestGrain(grainStates)) .ToList(); ITransactionCoordinatorGrain coordinator = this.grainFactory.GetGrain <ITransactionCoordinatorGrain>(Guid.NewGuid()); await coordinator.MultiGrainAdd(grains, expected); foreach (var grain in grains) { var actualValues = await grain.Get(); foreach (var actual in actualValues) { Assert.Equal(expected, actual); } } }