/// <summary>
        ///     Rollover includes creating a new
        /// </summary>
        private void RollOver()
        {
            foreach (IDictionary<int, VariableReader> entryCP in variableVersionsPerCP) {
                foreach (var entry in entryCP) {
                    var name = entry.Value.MetaData.VariableName;
                    var timestamp = timeProvider.Time;

                    // Construct a new collection, forgetting the history
                    var versionsOld = entry.Value.VersionsLow;
                    var currentValue = versionsOld.CurrentAndPriorValue.CurrentVersion.Value;
                    var versionsNew = new VersionedValueList<object>(
                        name,
                        1,
                        currentValue,
                        timestamp,
                        millisecondLifetimeOldVersions,
                        ReadWriteLock.ReadLock,
                        HIGH_WATERMARK_VERSIONS,
                        false);

                    // Tell the reader to use the high collection for old requests
                    entry.Value.VersionsHigh = versionsOld;
                    entry.Value.VersionsLow = versionsNew;
                }
            }
        }
Esempio n. 2
0
 public VariableReader(
     Variable variable,
     VariableVersionThreadLocal versionThreadLocal,
     VersionedValueList<object> versionsLow)
 {
     Variable = variable;
     this.versionThreadLocal = versionThreadLocal;
     this.versionsLow = versionsLow;
     versionsHigh = null;
 }
        public void AllocateVariableState(
            string deploymentId,
            string variableName,
            int agentInstanceId,
            bool recovery,
            NullableObject<object> initialValue,
            EventBeanTypedEventFactory eventBeanTypedEventFactory)
        {
            var entry = DeploymentsWithVariables.Get(deploymentId);
            if (entry == null) {
                throw new ArgumentException("Failed to find variable deployment id '" + deploymentId + "'");
            }

            var variable = entry.GetVariable(variableName);
            if (variable == null) {
                throw new ArgumentException("Failed to find variable '" + variableName + "'");
            }

            // Check current state - see if the variable exists in the state handler
            object initialState;
            if (initialValue != null) {
                initialState = initialValue.Value;
            }
            else {
                initialState = variable.MetaData.ValueWhenAvailable;
            }

            if (variable.MetaData.EventType != null && initialState != null && !(initialState is EventBean)) {
                initialState = eventBeanTypedEventFactory.AdapterForTypedObject(
                    initialState,
                    variable.MetaData.EventType);
            }

            if (OptionalStateHandler != null && !variable.MetaData.IsConstant) {
                var priorValue = OptionalStateHandler.GetHasState(variable, agentInstanceId);
                if (recovery) {
                    if (priorValue != null) {
                        initialState = priorValue.Value;
                    }
                }
                else {
                    if (priorValue == null) { // we do not already have a value
                        OptionalStateHandler.SetState(variable, agentInstanceId, initialState);
                    }
                    else {
                        initialState = priorValue.Value;
                    }
                }
            }

            // create new holder for versions
            var timestamp = timeProvider.Time;
            var valuePerVersion = new VersionedValueList<object>(
                variableName,
                currentVersionNumber,
                initialState,
                timestamp,
                millisecondLifetimeOldVersions,
                ReadWriteLock.ReadLock,
                HIGH_WATERMARK_VERSIONS,
                false);
            IDictionary<int, VariableReader> cps = variableVersionsPerCP[variable.VariableNumber];
            var reader = new VariableReader(variable, versionThreadLocal, valuePerVersion);
            cps.Put(agentInstanceId, reader);
        }
Esempio n. 4
0
 public void SetUp()
 {
     list = new VersionedValueList <string>("abc", 2, "a", 1000, 10000, new MonitorLock(), 10, true);
 }