//--- Methods ---
        public void Rebuild()
        {
            _eventSink.IndexRebuildStart(_now);
            var    count    = 0;
            Action throttle = () => {
                if (++count % 100 == 0)
                {
                    Thread.Sleep(200);
                }
            };
            var pages = new HashSet <ulong>();

            foreach (var page in _pageBL.GetAllPagesChunked(_indexNameSpaceWhitelist))
            {
                throttle();
                _eventSink.PagePoke(_now, page, _currentUser);
                pages.Add(page.ID);
                uint commentCount;
                foreach (var comment in _commentBL.RetrieveCommentsForPage(page, CommentFilter.NONDELETED, false, null, SortDirection.UNDEFINED, 0, uint.MaxValue, out commentCount))
                {
                    throttle();
                    _eventSink.CommentPoke(_now, comment, page, _currentUser);
                }
            }
            _log.DebugFormat("page queueing completed");
            foreach (var att in _attachmentBL.GetAllAttachementsChunked())
            {
                if (!pages.Contains(att.ParentPageId.GetValueOrDefault()))
                {
                    continue;
                }
                throttle();
                _eventSink.AttachmentPoke(_now, att);
            }
            _log.DebugFormat("file queueing completed");
            foreach (var user in _userBL.GetAllUsers())
            {
                throttle();
                _eventSink.UserUpdate(_now, user);
            }
            _log.DebugFormat("completed re-index event queueing");
        }