/// <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; } } }
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); }
public void SetUp() { list = new VersionedValueList <string>("abc", 2, "a", 1000, 10000, new MonitorLock(), 10, true); }