/// <summary>
        /// Creates a prestage writer.
        /// </summary>
        /// <param name="settings">The settings to use for this prebuffer writer</param>
        /// <param name="onRollover">delegate to call when a file is done with this stage.</param>
        public PrebufferWriter(PrebufferWriterSettings settings, Action <PrebufferRolloverArgs <TKey, TValue> > onRollover)
            : base(MessageClass.Framework)
        {
            if (settings is null)
            {
                throw new ArgumentNullException("settings");
            }
            if (onRollover is null)
            {
                throw new ArgumentNullException("onRollover");
            }

            m_settings = settings.CloneReadonly();
            m_settings.Validate();

            m_performanceLog = Log.RegisterEvent(MessageLevel.Info, MessageFlags.PerformanceIssue, "Queue is full", 0, MessageRate.PerSecond(1), 1);
            m_currentlyRollingOverFullQueue = false;
            m_latestTransactionId.Value     = 0;
            m_syncRoot                         = new object();
            m_activeQueue                      = new SortedPointBuffer <TKey, TValue>(m_settings.MaximumPointCount, true);
            m_processingQueue                  = new SortedPointBuffer <TKey, TValue>(m_settings.MaximumPointCount, true);
            m_activeQueue.IsReadingMode        = false;
            m_processingQueue.IsReadingMode    = false;
            m_onRollover                       = onRollover;
            m_waitForEmptyActiveQueue          = new SafeManualResetEvent(false);
            m_rolloverTask                     = new ScheduledTask(ThreadingMode.DedicatedForeground, ThreadPriority.AboveNormal);
            m_rolloverTask.Running            += m_rolloverTask_Running;
            m_rolloverTask.UnhandledException += OnProcessException;
        }
Beispiel #2
0
 /// <summary>
 /// Creates a stage writer.
 /// </summary>
 public FirstStageWriter(FirstStageWriterSettings settings, ArchiveList <TKey, TValue> list)
     : base(MessageClass.Framework)
 {
     if (settings is null)
     {
         throw new ArgumentNullException("settings");
     }
     m_settings = settings.CloneReadonly();
     m_settings.Validate();
     m_createNextStageFile = new SimplifiedArchiveInitializer <TKey, TValue>(m_settings.FinalSettings);
     m_rolloverComplete    = new SafeManualResetEvent(false);
     m_list                             = list;
     m_pendingTables1                   = new List <SortedTreeTable <TKey, TValue> >();
     m_pendingTables2                   = new List <SortedTreeTable <TKey, TValue> >();
     m_pendingTables3                   = new List <SortedTreeTable <TKey, TValue> >();
     m_syncRoot                         = new object();
     m_rolloverTask                     = new ScheduledTask(ThreadingMode.DedicatedForeground, ThreadPriority.Normal);
     m_rolloverTask.Running            += RolloverTask_Running;
     m_rolloverTask.UnhandledException += OnProcessException;
 }