private static JobQueue CreateJobQueue(RavenStorage storage, string queue, bool isFetched)
        {
            var jobId = Guid.NewGuid().ToString();

            var job = new RavenJob
            {
                Id        = storage.Repository.GetId(typeof(RavenJob), jobId),
                CreatedAt = DateTime.UtcNow,
                StateData = new StateData()
            };

            var jobQueue = new JobQueue
            {
                Id    = storage.Repository.GetId(typeof(JobQueue), queue, jobId),
                Queue = queue,
                JobId = jobId
            };

            if (isFetched)
            {
                jobQueue.FetchedAt = DateTime.UtcNow.AddDays(-1);
            }

            using (var session = storage.Repository.OpenSession())
            {
                session.Store(job);
                session.Store(jobQueue);
                session.SaveChanges();
            }

            return(jobQueue);
        }
Ejemplo n.º 2
0
        public RavenDistributedLock([NotNull] RavenStorage storage, [NotNull] string resource, TimeSpan timeout, RavenStorageOptions options)
        {
            storage.ThrowIfNull("storage");
            resource.ThrowIfNull("resource");

            if ((timeout.TotalSeconds + CommandTimeoutAdditionSeconds) > int.MaxValue)
            {
                throw new ArgumentException(string.Format("The timeout specified is too large. Please supply a timeout equal to or less than {0} seconds",
                                                          int.MaxValue - CommandTimeoutAdditionSeconds),
                                            "timeout");
            }

            _storage  = storage;
            _resource = resource;
            _options  = options;

            if (!AcquiredLocks.Value.ContainsKey(_resource))
            {
                Acquire(_resource, timeout);
                AcquiredLocks.Value[_resource] = 1;
            }
            else
            {
                AcquiredLocks.Value[_resource]++;
            }
        }
Ejemplo n.º 3
0
        public RavenConnection(RavenStorage ravenStorage)
        {
            ravenStorage.ThrowIfNull("RavenStorage");

            _storage = ravenStorage;
            _options = new RavenStorageOptions();
        }
        public RavenDistributedLock(RavenStorage storage, string resource, TimeSpan timeout, RavenStorageOptions options)
        {
            storage.ThrowIfNull("storage");
            if (string.IsNullOrEmpty(resource))
            {
                throw new ArgumentNullException(nameof(resource));
            }
            if (timeout.TotalSeconds > int.MaxValue)
            {
                throw new ArgumentException($"The timeout specified is too large. Please supply a timeout equal to or less than {int.MaxValue} seconds", nameof(timeout));
            }
            options.ThrowIfNull("options");

            _storage  = storage;
            _resource = resource;
            _options  = options;

            if (!AcquiredLocks.Value.ContainsKey(_resource) || AcquiredLocks.Value[_resource] == 0)
            {
                Acquire(timeout);
                AcquiredLocks.Value[_resource] = 1;
                StartHeartBeat();
            }
            else
            {
                AcquiredLocks.Value[_resource]++;
            }
        }
Ejemplo n.º 5
0
        public RavenConnection(RavenStorage ravenStorage, RavenStorageOptions options)
            : this(ravenStorage)
        {
            options.ThrowIfNull("options");

            _storage = ravenStorage;
            _options = options;
        }
Ejemplo n.º 6
0
        public RavenJobQueue([NotNull] RavenStorage storage, RavenStorageOptions options)
        {
            storage.ThrowIfNull("storage");
            options.ThrowIfNull("options");

            _storage = storage;
            _options = options;
        }
Ejemplo n.º 7
0
        public RavenJobQueueProvider([NotNull] RavenStorage storage, [NotNull] RavenStorageOptions options)
        {
            storage.ThrowIfNull("storage");
            options.ThrowIfNull("options");

            _jobQueue      = new RavenJobQueue(storage, options);
            _monitoringApi = new RavenJobQueueMonitoringApi(storage);
        }
 private static void UseStorage(Action <RavenStorage> action)
 {
     using (var repository = new TestRepository())
     {
         var storage = new RavenStorage(repository);
         action(storage);
     }
 }
Ejemplo n.º 9
0
        public RavenWriteOnlyTransaction([NotNull] RavenStorage storage)
        {
            storage.ThrowIfNull("storage");
            _storage = storage;

            _patchRequests = new List <KeyValuePair <string, PatchRequest> >();
            _session       = _storage.Repository.OpenSession();
            _session.Advanced.UseOptimisticConcurrency = true;
        }
Ejemplo n.º 10
0
        public static IGlobalConfiguration <RavenStorage> UseEmbeddedRavenStorage(this IGlobalConfiguration configuration)
        {
            configuration.ThrowIfNull("configuration");

            Repository.Embedded = true;

            var storage = new RavenStorage();

            return(configuration.UseStorage(storage));
        }
Ejemplo n.º 11
0
        public static IGlobalConfiguration <RavenStorage> UseRavenStorage(this IGlobalConfiguration configuration, string connectionString)
        {
            configuration.ThrowIfNull("configuration");
            connectionString.ThrowIfNull("connectionString");

            Repository.ConnectionString = connectionString;

            var storage = new RavenStorage();

            return(configuration.UseStorage(storage));
        }
Ejemplo n.º 12
0
        public RavenFetchedJob(
            [NotNull] RavenStorage storage,
            JobQueue jobQueue)
        {
            storage.ThrowIfNull("storage");
            jobQueue.ThrowIfNull("jobQueue");

            _storage = storage;

            JobId = jobQueue.JobId;
            Queue = jobQueue.Queue;
            Id    = jobQueue.Id;
        }
        public RavenDistributedLock([NotNull] RavenStorage storage, [NotNull] string resource, TimeSpan timeout)
        {
            storage.ThrowIfNull("storage");
            resource.ThrowIfNull("resource");

            _timeout  = timeout;
            _storage  = storage;
            _resource = resource;

            // -- Skip some locks
            if (!_skipLocks.Any(a => _resource.StartsWith(a)))
            {
                Lock();
            }
        }
Ejemplo n.º 14
0
        public static IGlobalConfiguration <RavenStorage> UseRavenStorage(this IGlobalConfiguration configuration, string connectionUrl, string database)
        {
            configuration.ThrowIfNull("configuration");
            connectionUrl.ThrowIfNull("connectionUrl");
            database.ThrowIfNull("database");

            if (!connectionUrl.StartsWith("http"))
            {
                throw new ArgumentException("Connection Url must begin with http or https!");
            }

            Repository.ConnectionUrl   = connectionUrl;
            Repository.DefaultDatabase = database;

            var storage = new RavenStorage();

            return(configuration.UseStorage(storage));
        }
Ejemplo n.º 15
0
        private static string CreateJobQueueRecord(RavenStorage storage, string jobId, string queue)
        {
            var jobQueue = new JobQueue
            {
                Id        = storage.Repository.GetId(typeof(JobQueue), queue, jobId),
                JobId     = jobId,
                Queue     = queue,
                FetchedAt = DateTime.UtcNow
            };

            using (var session = storage.Repository.OpenSession())
            {
                session.Store(jobQueue);
                session.SaveChanges();
            }

            return(jobQueue.Id);
        }
 private static RavenJobQueueMonitoringApi CreateRavenJobQueueMonitoringApi(RavenStorage storage)
 {
     return(new RavenJobQueueMonitoringApi(storage));
 }
Ejemplo n.º 17
0
        public RavenConnection(RavenStorage storage)
        {
            storage.ThrowIfNull("storage");

            _storage = storage;
        }
        public RavenJobQueue([NotNull] RavenStorage storage, RavenStorageOptions options)
        {
            storage.ThrowIfNull("storage");
            options.ThrowIfNull("options");

            _storage = storage;
            _options = options;
            _queue   = new Dictionary <string, BlockingCollection <JobQueue> >();

            using (var session = _storage.Repository.OpenSession())
            {
                // -- Queue listening
                if (options.QueueNames == null)
                {
                    throw new ArgumentNullException("options.QueueNames", "You should define a set of QueueNames.");
                }

                var config = session.Load <RavenJobQueueConfig>("Config/RavenJobQueue")
                             ?? new RavenJobQueueConfig();

                foreach (var queue in options.QueueNames)
                {
                    Console.WriteLine($"Starting on queue: {queue}");

                    // Creating queue
                    _queue.Add(queue, new BlockingCollection <JobQueue>());

                    // Create subscription (if not already exist)
                    if (!config.Subscriptions.ContainsKey(queue))
                    {
                        config.Subscriptions[queue] = _storage.Repository
                                                      .Subscriptions()
                                                      .Create <JobQueue>(new SubscriptionCriteria <JobQueue>()
                        {
                            KeyStartsWith   = $"{Repository.GetId(typeof(JobQueue), queue)}/",
                            PropertiesMatch = new Dictionary <Expression <Func <JobQueue, object> >, RavenJToken>()
                            {
                                { x => x.FetchedAt, RavenJToken.FromObject(null) }
                            }
                        });
                    }

                    // Open subscription
                    var subscription = _storage.Repository.Subscriptions().Open <JobQueue>(
                        config.Subscriptions[queue],
                        new SubscriptionConnectionOptions()
                    {
                        IgnoreSubscribersErrors = false,
                        Strategy = SubscriptionOpeningStrategy.ForceAndKeep
                    });

                    // Subscribe to it
                    subscription.Subscribe(new RepositoryObserver <JobQueue>(a =>
                    {
                        Console.WriteLine(a.Id);
                        _queue[queue].Add(a);
                    }));
                }

                session.Store(config);
                session.SaveChanges();
            }
        }
        public RavenWriteOnlyTransaction([NotNull] RavenStorage storage)
        {
            storage.ThrowIfNull("storage");

            _storage = storage;
        }
Ejemplo n.º 20
0
        public RavenJobQueueMonitoringApi([NotNull] RavenStorage storage)
        {
            storage.ThrowIfNull("storage");

            _storage = storage;
        }
Ejemplo n.º 21
0
 private static RavenJobQueue CreateJobQueue(RavenStorage storage)
 {
     return(new RavenJobQueue(storage, new RavenStorageOptions()));
 }
Ejemplo n.º 22
0
        public RavenConnection(RavenStorage ravenStorage)
        {
            ravenStorage.ThrowIfNull("RavenStorage");

            _storage = ravenStorage;
        }