示例#1
0
 public AcquiredLockServices(AcquiredDbParameters acquiredDbParameters, ILockService lockService, ITimeService timeService, ILeaseLockObject lockObject)
 {
     this.AcquiredDbParameters = acquiredDbParameters;
     this.LockService          = lockService;
     this.TimeService          = timeService;
     this.LockObject           = lockObject;
 }
示例#2
0
        public AcquiredLockServices AcquireServicesForAnyUrlsOrDefault(IList <string> urls,
                                                                       string databaseName,
                                                                       TimeSpan leaseCheckTimeout,
                                                                       TimeSpan leaseLostTimeout,
                                                                       TimeSpan updateServerTimeInterval,
                                                                       CancellationToken token)
        {
            foreach (var url in urls)
            {
                IDbService dbService = null;
                try
                {
                    dbService = this.dbServicesFactory.GetDbService(url, databaseName, leaseCheckTimeout, leaseLostTimeout, updateServerTimeInterval);
                    //mongoDbService = new MongoDbService(url, databaseName, leaseCheckTimeout, leaseLostTimeout, updateServerTimeInterval);

                    ILeaseLockObject leaseLock = null;
                    try
                    {
                        leaseLock = dbService.CreateLockOrNull(token);
                        if (leaseLock != null)
                        {
                            return(new AcquiredLockServices(new AcquiredDbParameters
                            {
                                ConnStringOrUrl = url,
                                DatabaseName = databaseName,
                            }, dbService, dbService, leaseLock));
                        }
                        else
                        {
                            dbService.Dispose();
                        }
                    }
                    catch (OperationCanceledException)
                    {
                        // отмена
                        return(null);
                    }
                    catch
                    {
                        leaseLock?.Dispose();
                        throw;
                    }
                }
                catch (OperationCanceledException)
                {
                    // отмена
                    return(null);
                }
                catch
                {
                    dbService?.Dispose();
                    continue;
                }
            }

            return(null);
        }