Example #1
0
 public IndexingExecuter(WorkContext context, DatabaseEtagSynchronizer synchronizer, Prefetcher prefetcher)
     : base(context)
 {
     autoTuner           = new IndexBatchSizeAutoTuner(context);
     etagSynchronizer    = synchronizer.GetSynchronizer(EtagSynchronizerType.Indexer);
     prefetchingBehavior = prefetcher.GetPrefetchingBehavior(PrefetchingUser.Indexer);
 }
        public void Execute(DocumentDatabase database)
        {
            etagSynchronizer    = database.EtagSynchronizer.GetSynchronizer(EtagSynchronizerType.SqlReplicator);
            prefetchingBehavior = database.Prefetcher.GetPrefetchingBehavior(PrefetchingUser.SqlReplicator);

            Database = database;
            Database.OnDocumentChange += (sender, notification, metadata) =>
            {
                if (notification.Id == null)
                {
                    return;
                }

                if (metadata == null)
                {
                    return;                     // this is a delete being made on an already deleted document
                }
                if (notification.Type == DocumentChangeTypes.Delete)
                {
                    RecordDelete(notification.Id, metadata);
                }

                if (!notification.Id.StartsWith("Raven/SqlReplication/Configuration/", StringComparison.InvariantCultureIgnoreCase))
                {
                    return;
                }

                replicationConfigs = null;
                statistics.Clear();
                log.Debug(() => "Sql Replication configuration was changed.");
            };

            GetReplicationStatus();

            var task = Task.Factory.StartNew(() =>
            {
                using (LogContext.WithDatabase(database.Name))
                {
                    try
                    {
                        BackgroundSqlReplication();
                    }
                    catch (Exception e)
                    {
                        log.ErrorException("Fatal failure when replicating to SQL. All SQL Replication activity STOPPED", e);
                    }
                }
            }, TaskCreationOptions.LongRunning);

            database.ExtensionsState.GetOrAdd(typeof(SqlReplicationTask).FullName, k => new DisposableAction(task.Wait));
        }
Example #3
0
        public void Execute(DocumentDatabase database)
        {
            etagSynchronizer    = database.EtagSynchronizer.GetSynchronizer(EtagSynchronizerType.Replicator);
            prefetchingBehavior = database.Prefetcher.GetPrefetchingBehavior(PrefetchingUser.Replicator);

            docDb = database;
            var replicationRequestTimeoutInMs =
                docDb.Configuration.GetConfigurationValue <int>("Raven/Replication/ReplicationRequestTimeout") ??
                60 * 1000;

            httpRavenRequestFactory = new HttpRavenRequestFactory {
                RequestTimeoutInMs = replicationRequestTimeoutInMs
            };

            var task             = new Task(Execute, TaskCreationOptions.LongRunning);
            var disposableAction = new DisposableAction(task.Wait);

            // make sure that the doc db waits for the replication task shutdown
            docDb.ExtensionsState.GetOrAdd(Guid.NewGuid().ToString(), s => disposableAction);
            task.Start();
        }