/// <summary>
 /// Creates a background operation manager for a given queue.
 /// </summary>
 /// <param name="vaultApplication">The vault application that contains this background operation manager.</param>
 /// <param name="queueId">The queue Id.</param>
 /// <param name="cancellationTokenSource">The cancellation token source, if cancellation should be supported.</param>
 public TaskQueueBackgroundOperationManager
 (
     ConfigurableVaultApplicationBase <TSecureConfiguration> vaultApplication,
     CancellationTokenSource cancellationTokenSource = default
 ) : this
     (
         vaultApplication,
         $"{vaultApplication?.GetType()?.FullName?.Replace(".", "-")}-BackgroundOperations",
         cancellationTokenSource
     )
 {
 }
Пример #2
0
 public TaskManagerEx
 (
     ConfigurableVaultApplicationBase <TConfiguration> vaultApplication,
     string id,
     Vault permanentVault,
     IVaultTransactionRunner transactionRunner,
     TimeSpan?processingInterval             = null,
     uint maxConcurrency                     = 16,
     TimeSpan?maxLockWaitTime                = null,
     TaskExceptionSettings exceptionSettings = null
 )
     : base(id, permanentVault, transactionRunner, processingInterval, maxConcurrency, maxLockWaitTime, exceptionSettings)
 {
     this.VaultApplication = vaultApplication
                             ?? throw new ArgumentNullException(nameof(vaultApplication));
     this.TaskEvent += TaskManagerEx_TaskEvent;
 }
        /// <summary>
        /// Ensures that <see cref="CurrentServer"/> is set correctly.
        /// </summary>
        /// <param name="vaultApplication">The vault application where this code is running.</param>
        internal static void SetCurrentServer(ConfigurableVaultApplicationBase <TSecureConfiguration> vaultApplication)
        {
            // Sanity.
            if (null == vaultApplication)
            {
                throw new ArgumentNullException(nameof(vaultApplication));
            }

            // Ensure that we have a current server.
            lock (_lock)
            {
                if (null == CurrentServer)
                {
                    CurrentServer
                        = vaultApplication
                          .PermanentVault?
                          .GetVaultServerAttachments()?
                          .GetCurrent();
                }
            }
        }
        /// <summary>
        /// Creates a background operation manager for a given queue.
        /// </summary>
        /// <param name="vaultApplication">The vault application that contains this background operation manager.</param>
        /// <param name="queueId">The queue Id.</param>
        /// <param name="cancellationTokenSource">The cancellation token source, if cancellation should be supported.</param>
        public TaskQueueBackgroundOperationManager
        (
            ConfigurableVaultApplicationBase <TSecureConfiguration> vaultApplication,
            string queueId,
            CancellationTokenSource cancellationTokenSource = default
        )
        {
            // Sanity.
            if (string.IsNullOrWhiteSpace(queueId))
            {
                throw new ArgumentException("The queue id cannot be null or whitespace.", nameof(queueId));
            }

            // Assign.
            this.CancellationTokenSource = cancellationTokenSource;
            this.VaultApplication        = vaultApplication ?? throw new ArgumentNullException(nameof(vaultApplication));
            this.QueueId = queueId;

            // Set up the task processor.
            this.TaskProcessor = new AppTasks.TaskProcessor <BackgroundOperationTaskDirective>
                                 (
                TaskQueueBackgroundOperation <BackgroundOperationTaskDirective, TSecureConfiguration> .TaskTypeId,
                new AppTasks.TaskProcessor.Handler <BackgroundOperationTaskDirective>(ProcessJobHandler),
                transactionMode: AppTasks.TransactionMode.Unsafe                 // We have to be unsafe for backwards compatibility.
                                 );

            // Set up the task queue processor.
            this.TaskQueueProcessor = this
                                      .VaultApplication
                                      .TaskManager
                                      .RegisterQueue
                                      (
                this.QueueId,
                new[] { this.TaskProcessor }
                                      );

            // Ensure we have a current server.
            SetCurrentServer(vaultApplication);
        }
 public RecurringOperationConfigurationManager(ConfigurableVaultApplicationBase <TSecureConfiguration> vaultApplication)
 {
     this.VaultApplication = vaultApplication
                             ?? throw new ArgumentNullException(nameof(vaultApplication));
 }