Beispiel #1
0
        public async Task <ServiceResult <CourseResponse> > UpdateCourse(CourseRequest request)
        {
            var courseEntity = Mapper.Map <CourseRequest, Course>(request);
            var modelState   = new Dictionary <string, string[]>();

            _unitOfWork.CourseRepository.Update(courseEntity);

            // Handle Conflicts here
            int result;

            if (request.ConflictStrategy == ResolveStrategy.ShowUnresolvedConflicts)
            {
                var resolveConflicts = ConcurrencyHelper.ResolveConflicts(courseEntity, modelState);
                result = await _unitOfWork.SaveAsync(resolveConflicts, userResolveConflict : true);
            }
            else
            {
                RefreshConflict refreshMode = (RefreshConflict)request.ConflictStrategy;
                if (!EnumExtensions.IsFlagDefined(refreshMode))
                {
                    refreshMode = RefreshConflict.StoreWins;
                }
                result = _unitOfWork.SaveSingleEntry(refreshMode);
            }
            return(await GetServiceResult(courseEntity, modelState, result));
        }
Beispiel #2
0
        public void ReleaseKeyLock_HappyPath_CompletesSucessfully(int locksCount, uint keyBucket)
        {
            var sut = new ConcurrencyHelper(locksCount);

            var releaseKeyLock = sut
                                 .Invoking(s => s.ReleaseKeyLock(keyBucket))
                                 .Should().NotThrow();
        }
Beispiel #3
0
        public void TakeKeyLock_HappyPath_ReturnsCorrectBucket(int locksCount, int key, uint expectedBucket)
        {
            var sut = new ConcurrencyHelper(locksCount);

            var bucket = sut.TakeKeyLock(key);

            bucket.Should().Be(expectedBucket);
        }
Beispiel #4
0
        public void ReleaseKeyLock_BucketIsOutOfLocksRange_ThrowsException(int locksCount, uint keyBucket)
        {
            var sut = new ConcurrencyHelper(locksCount);

            var releaseKeyLock = sut
                                 .Invoking(s => s.ReleaseKeyLock(keyBucket))
                                 .Should()
                                 .Throw <ArgumentException>().WithMessage("Key bucket is out of locks range (Parameter 'keyBucket')");
        }
Beispiel #5
0
        public async Task Remove(string coffeeName, int weight)
        {
            var desiredPack = await getDesiredPack(coffeeName, weight);

            await ConcurrencyHelper.WithConcurrency <CoffeeOrder>(
                userOrder =>
            {
                userOrder.RemoveCoffeePack(desiredPack);
                return(true);
            },
                async() =>
            {
                return((await _coffeeOrderRepository.GetUserOrders(User.Identity.Name))
                       ?? new CoffeeOrder(User.Identity.Name));
            },
                _coffeeOrderRepository.Update);
        }
Beispiel #6
0
        public static void Main(string[] args)
        {
            var benchmarkDate = DateTime.Now;

#if DEBUG
            StackExchangeRedisBenchmarks.DoEvalSetOnLargeString();
            var debugModeConcurrencyRunner = new ConcurrencyHelper();
            debugModeConcurrencyRunner.RegisterLevel(
                () =>
            {
                StackExchangeRedisBenchmarks.DoEvalSetOnLargeString();
            },
                1_000,
                friendlyName: "redis eval load test",
                numberOfRegisters: 20);
            debugModeConcurrencyRunner.Start().Wait();
            var averageRuntime = debugModeConcurrencyRunner.GetAverageActionRuntime();
#else
            var redisSummary = BenchmarkRunner.Run <StackExchangeRedisBenchmarks>();
            Save("Performance.StackExchange.Redis", DateTime.Now);
#endif
        }
Beispiel #7
0
        private static IFormatter CreateFormatter()
        {
            var formatterName = ConfigurationManager.AppSettings["Rpc.DefaultFormatter"];

            formatterName = (formatterName ?? String.Empty);

            var makeFormatterThreadSafe = ConfigurationManager.AppSettings["Rpc.MakeFormatterThreadSafe"];

            makeFormatterThreadSafe = (makeFormatterThreadSafe ?? String.Empty);

            if (!String.IsNullOrWhiteSpace(formatterName))
            {
                var formatterType = ReflectionUtil.FindType(formatterName);
                if (formatterType != null)
                {
                    if (typeof(IFormatter).IsAssignableFrom(formatterType))
                    {
                        if (makeFormatterThreadSafe == "true" || makeFormatterThreadSafe == "yes" || makeFormatterThreadSafe == "1")
                        {
                            var concurrentFormatter = ConcurrencyHelper.CreateFormatter(() => (IFormatter)Activator.CreateInstance(formatterType));
                            return(concurrentFormatter);
                        }

                        var formatterInst = (IFormatter)Activator.CreateInstance(formatterType);
                        if (formatterInst != null)
                        {
                            return(formatterInst);
                        }
                    }
                }
            }

            var formatter = ConcurrencyHelper.CreateFormatter(() => new AdvancedBinaryFormatter());

            return(formatter);
        }