示例#1
0
        internal override void BeginReplicating()
        {
            Log.D(TAG, string.Format("Using MaxOpenHttpConnections({0}), MaxRevsToGetInBulk({1})",
                                     ManagerOptions.Default.MaxOpenHttpConnections, ManagerOptions.Default.MaxRevsToGetInBulk));

            if (_downloadsToInsert == null)
            {
                const int capacity = INBOX_CAPACITY * 2;
                const int delay    = 1000;
                _downloadsToInsert = new Batcher <RevisionInternal>(WorkExecutor, capacity, delay, InsertDownloads);
            }

            if (_pendingSequences == null)
            {
                _pendingSequences = new SequenceMap();
                if (LastSequence != null)
                {
                    // Prime _pendingSequences so its checkpointedValue will reflect the last known seq:
                    var seq = _pendingSequences.AddValue(LastSequence);
                    _pendingSequences.RemoveSequence(seq);
                    Debug.Assert((_pendingSequences.GetCheckpointedValue().Equals(LastSequence)));
                }
            }

            StartChangeTracker();
        }
示例#2
0
        internal override void BeginReplicating()
        {
            Log.To.Sync.I(TAG, "{2} will use MaxOpenHttpConnections({0}), MaxRevsToGetInBulk({1})",
                          ReplicationOptions.MaxOpenHttpConnections,
                          ReplicationOptions.MaxRevsToGetInBulk,
                          this);

            if (_downloadsToInsert == null)
            {
                const int capacity = INBOX_CAPACITY * 2;
                TimeSpan  delay    = TimeSpan.FromSeconds(1);
                _downloadsToInsert = new Batcher <RevisionInternal>(WorkExecutor, capacity, delay, InsertDownloads);
            }

            if (_pendingSequences == null)
            {
                _pendingSequences = new SequenceMap();
                if (LastSequence != null)
                {
                    // Prime _pendingSequences so its checkpointedValue will reflect the last known seq:
                    var seq = _pendingSequences.AddValue(LastSequence);
                    _pendingSequences.RemoveSequence(seq);
                    Debug.Assert((_pendingSequences.GetCheckpointedValue().Equals(LastSequence)));
                }
            }

            _caughtUp = false;
            StartChangeTracker();
        }
示例#3
0
        internal override void BeginReplicating()
        {
            if (downloadsToInsert == null)
            {
                const int capacity = 200;
                const int delay    = 1000;
                downloadsToInsert = new Batcher <IList <Object> > (WorkExecutor, capacity, delay, InsertRevisions);
            }

            pendingSequences = new SequenceMap();

            Log.W(Tag, this + ": starting ChangeTracker with since=" + LastSequence);

            var mode = Continuous
                       ? ChangeTracker.ChangeTrackerMode.LongPoll
                       : ChangeTracker.ChangeTrackerMode.OneShot;

            changeTracker = new ChangeTracker(RemoteUrl, mode, LastSequence, true, this);

            Log.W(Tag, this + ": started ChangeTracker " + changeTracker);

            if (Filter != null)
            {
                changeTracker.SetFilterName(Filter);
                if (FilterParams != null)
                {
                    changeTracker.SetFilterParams(FilterParams.ToDictionary(kvp => kvp.Key, kvp => (Object)kvp.Value));
                }
            }
            if (!continuous)
            {
                AsyncTaskStarted();
            }
            changeTracker.Start();
        }
        public void TestSequenceMap()
        {
            var map = new SequenceMap();

            Assert.AreEqual(0, map.GetCheckpointedSequence());
            Assert.AreEqual(null, map.GetCheckpointedValue());
            Assert.IsTrue(map.IsEmpty());
            Assert.AreEqual(1, map.AddValue("one"));
            Assert.AreEqual(0, map.GetCheckpointedSequence());
            Assert.AreEqual(null, map.GetCheckpointedValue());
            Assert.IsTrue(!map.IsEmpty());
            Assert.AreEqual(2, map.AddValue("two"));
            Assert.AreEqual(0, map.GetCheckpointedSequence());
            Assert.AreEqual(null, map.GetCheckpointedValue());
            Assert.AreEqual(3, map.AddValue("three"));
            Assert.AreEqual(0, map.GetCheckpointedSequence());
            Assert.AreEqual(null, map.GetCheckpointedValue());
            map.RemoveSequence(2);
            Assert.AreEqual(0, map.GetCheckpointedSequence());
            Assert.AreEqual(null, map.GetCheckpointedValue());
            map.RemoveSequence(1);
            Assert.AreEqual(2, map.GetCheckpointedSequence());
            Assert.AreEqual("two", map.GetCheckpointedValue());
            Assert.AreEqual(4, map.AddValue("four"));
            Assert.AreEqual(2, map.GetCheckpointedSequence());
            Assert.AreEqual("two", map.GetCheckpointedValue());
            map.RemoveSequence(3);
            Assert.AreEqual(3, map.GetCheckpointedSequence());
            Assert.AreEqual("three", map.GetCheckpointedValue());
            map.RemoveSequence(4);
            Assert.AreEqual(4, map.GetCheckpointedSequence());
            Assert.AreEqual("four", map.GetCheckpointedValue());
            Assert.IsTrue(map.IsEmpty());
        }
示例#5
0
        public int GetSequenceValue(string sysSettingName)
        {
            var sequenceMap = new SequenceMap(UserConnection);
            var sequence    = sequenceMap.GetByNameOrDefault(sysSettingName);

            return(sequence.GetCurrentValue());
        }
示例#6
0
 public override void BeginReplicating()
 {
     if (downloadsToInsert == null)
     {
         int capacity = 200;
         int delay    = 1000;
         downloadsToInsert = new Batcher <IList <object> >(workExecutor, capacity, delay, new
                                                           _BatchProcessor_117(this));
     }
     pendingSequences = new SequenceMap();
     Log.W(Database.Tag, this + ": starting ChangeTracker with since=" + lastSequence);
     changeTracker = new ChangeTracker(remote, continuous ? ChangeTracker.ChangeTrackerMode
                                       .LongPoll : ChangeTracker.ChangeTrackerMode.OneShot, true, lastSequence, this);
     Log.W(Database.Tag, this + ": started ChangeTracker " + changeTracker);
     if (filterName != null)
     {
         changeTracker.SetFilterName(filterName);
         if (filterParams != null)
         {
             changeTracker.SetFilterParams(filterParams);
         }
     }
     changeTracker.SetDocIDs(documentIDs);
     changeTracker.SetRequestHeaders(requestHeaders);
     if (!continuous)
     {
         Log.D(Database.Tag, this + "|" + Sharpen.Thread.CurrentThread() + ": beginReplicating() calling asyncTaskStarted()"
               );
         AsyncTaskStarted();
     }
     changeTracker.Start();
 }
示例#7
0
        internal override void BeginReplicating()
        {
            Log.D(Tag, string.Format("Using MaxOpenHttpConnections({0}), MaxRevsToGetInBulk({1})",
                                     ManagerOptions.Default.MaxOpenHttpConnections, ManagerOptions.Default.MaxRevsToGetInBulk));

            if (downloadsToInsert == null)
            {
                const int capacity = 200;
                const int delay    = 1000;
                downloadsToInsert = new Batcher <RevisionInternal> (WorkExecutor, capacity, delay, InsertDownloads);
            }

            if (pendingSequences == null)
            {
                pendingSequences = new SequenceMap();
                if (LastSequence != null)
                {
                    // Prime _pendingSequences so its checkpointedValue will reflect the last known seq:
                    var seq = pendingSequences.AddValue(LastSequence);
                    pendingSequences.RemoveSequence(seq);
                    Debug.Assert((pendingSequences.GetCheckpointedValue().Equals(LastSequence)));
                }
            }

            Log.D(Tag, "starting ChangeTracker with since = " + LastSequence);

            var mode = Continuous
                       ? ChangeTrackerMode.LongPoll
                       : ChangeTrackerMode.OneShot;

            changeTracker = new ChangeTracker(RemoteUrl, mode, LastSequence, true, this, WorkExecutor);
            changeTracker.Authenticator = Authenticator;

            if (Filter != null)
            {
                changeTracker.SetFilterName(Filter);
                if (FilterParams != null)
                {
                    changeTracker.SetFilterParams(FilterParams.ToDictionary(kvp => kvp.Key, kvp => (Object)kvp.Value));
                }
            }
            if (!continuous)
            {
                Log.D(Tag, "BeginReplicating() calling asyncTaskStarted()");
                AsyncTaskStarted();
            }

            changeTracker.UsePost = CheckServerCompatVersion("0.93");
            changeTracker.Start();
        }
示例#8
0
 public override void BeginReplicating()
 {
     if (downloadsToInsert == null)
     {
         int capacity = 200;
         int delay    = 1000;
         downloadsToInsert = new Batcher <RevisionInternal>(workExecutor, capacity, delay,
                                                            new _BatchProcessor_131(this));
     }
     if (pendingSequences == null)
     {
         pendingSequences = new SequenceMap();
         if (GetLastSequence() != null)
         {
             // Prime _pendingSequences so its checkpointedValue will reflect the last known seq:
             long seq = pendingSequences.AddValue(GetLastSequence());
             pendingSequences.RemoveSequence(seq);
             System.Diagnostics.Debug.Assert((pendingSequences.GetCheckpointedValue().Equals(GetLastSequence
                                                                                                 ())));
         }
     }
     Log.W(Log.TagSync, "%s: starting ChangeTracker with since=%s", this, lastSequence
           );
     changeTracker = new ChangeTracker(remote, continuous ? ChangeTracker.ChangeTrackerMode
                                       .LongPoll : ChangeTracker.ChangeTrackerMode.OneShot, true, lastSequence, this);
     changeTracker.SetAuthenticator(GetAuthenticator());
     Log.W(Log.TagSync, "%s: started ChangeTracker %s", this, changeTracker);
     if (filterName != null)
     {
         changeTracker.SetFilterName(filterName);
         if (filterParams != null)
         {
             changeTracker.SetFilterParams(filterParams);
         }
     }
     changeTracker.SetDocIDs(documentIDs);
     changeTracker.SetRequestHeaders(requestHeaders);
     if (!continuous)
     {
         Log.V(Log.TagSync, "%s | %s: beginReplicating() calling asyncTaskStarted()", this
               , Sharpen.Thread.CurrentThread());
         AsyncTaskStarted();
     }
     changeTracker.SetUsePOST(ServerIsSyncGatewayVersion("0.93"));
     changeTracker.Start();
 }
        public string GetIncrementValueVsMask(string sysSettingName, string sysSettingMaskName)
        {
            string sysSettingsCodeMask = (string)CoreSysSettings.GetValue(UserConnection, sysSettingMaskName);
            string result = string.Empty;

            if (GlobalAppSettings.UseDBSequence)
            {
                var sequenceMap = new SequenceMap(UserConnection);
                var sequence    = sequenceMap.GetByNameOrDefault(sysSettingName);
                result = string.Format(sysSettingsCodeMask, sequence.GetNextValue());
                return(result);
            }
            var coreSysSettings = new CoreSysSettings(UserConnection);

            if (coreSysSettings.FetchFromDB("Code", sysSettingName))
            {
                int sysSettingsLastNumber = Convert.ToInt32(CoreSysSettings.GetDefValue(UserConnection, sysSettingName));
                ++sysSettingsLastNumber;
                CoreSysSettings.SetDefValue(UserConnection, sysSettingName, sysSettingsLastNumber);
                result = string.Format(sysSettingsCodeMask, sysSettingsLastNumber);
            }
            return(result);
        }
        /// <summary>
        /// Returns sequence number.
        /// </summary>
        /// <param name="entitySchema">Entity schema.</param>
        /// <param name="connection">User connection.</param>
        /// <returns>String that represents a generated sequence number.</returns>
        public virtual string GenerateSequenseNumber(EntitySchema entitySchema, UserConnection connection)
        {
            string entitySchemaName      = entitySchema.Name;
            string codeMaskSettingName   = entitySchemaName + "CodeMask";
            string lastNumberSettingName = entitySchemaName + "LastNumber";
            string sysSettingsCodeMask   = string.Empty;
            var    sysSettingsMaskItem   = new CoreSysSettings(connection)
            {
                UseAdminRights = false,
                Code           = codeMaskSettingName
            };

            if (!sysSettingsMaskItem.FetchFromDB("Code", codeMaskSettingName))
            {
                throw new ItemNotFoundException(codeMaskSettingName);
            }
            if (sysSettingsMaskItem.IsPersonal)
            {
                sysSettingsCodeMask = (string)CoreSysSettings.GetValue(connection, codeMaskSettingName);
            }
            else
            {
                sysSettingsCodeMask = (string)CoreSysSettings.GetDefValue(connection, codeMaskSettingName);
            }
            if (GlobalAppSettings.UseDBSequence)
            {
                var sequenceMap = new SequenceMap(connection);
                var sequence    = sequenceMap.GetByNameOrDefault(lastNumberSettingName);
                return(string.Format(sysSettingsCodeMask, sequence.GetNextValue()));
            }
            int sysSettingsLastNumber = Convert.ToInt32(CoreSysSettings.GetDefValue(connection, lastNumberSettingName));

            ++sysSettingsLastNumber;
            CoreSysSettings.SetDefValue(connection, lastNumberSettingName, sysSettingsLastNumber);
            return(string.Format(sysSettingsCodeMask, sysSettingsLastNumber));
        }
示例#11
0
        public void SetSequenceValue(string sysSettingName, int startValue)
        {
            var sequenceMap = new SequenceMap(UserConnection);

            sequenceMap.CreateOrAlterSequence(sysSettingName, startValue);
        }