public async Task ExecuteOperationThreadTopicSynchronizedAsync(string topicId, MessagePageId pageId, IMessageContentPage messageContentPage) { var logContext = "Page: " + pageId.Value; if (await _compressedMessagesStorage.HasCompressedPageAsync(topicId, pageId)) { _appLogger.AddLog(LogProcess.PagesCompressor, topicId, logContext, "Has compressed page. Skipping compressing procedure"); return; } if (messageContentPage.Count == 0) { _appLogger.AddLog(LogProcess.PagesCompressor, topicId, logContext, "No messages to compress. Skipping compressing procedure"); return; } var compressedPage = messageContentPage.GetCompressedPage(); if (_appGlobalFlags.DebugTopic == topicId) { _appLogger.AddLog(LogProcess.PagesCompressor, topicId, logContext, $"Writing Compressed data for page {pageId}."); } await _compressedMessagesStorage.WriteCompressedPageAsync(topicId, pageId, compressedPage, _appLogger); if (_appGlobalFlags.DebugTopic == topicId) { _appLogger.AddLog(LogProcess.PagesCompressor, topicId, logContext, $"Verifying compressed data for page {pageId}"); } var compressedPageToVerify = await _compressedMessagesStorage.GetCompressedPageAsync(topicId, pageId); var messages = compressedPageToVerify.Messages; if (_appGlobalFlags.DebugTopic == topicId) { _appLogger.AddLog(LogProcess.PagesCompressor, topicId, logContext, $"Verified compressed data for page {pageId}. Messages: " + messages.Count); } if (_appGlobalFlags.DebugTopic == topicId) { _appLogger.AddLog(LogProcess.PagesCompressor, topicId, logContext, $"Deleting Uncompressed page {pageId}"); } await _persistentStorage.DeleteNonCompressedPageAsync(topicId, pageId); if (_appGlobalFlags.DebugTopic == topicId) { _appLogger.AddLog(LogProcess.PagesCompressor, topicId, logContext, "Written Compressed Page: " + pageId + ". Messages in the page:" + messageContentPage.Count); } }
public async Task <IMessageContentPage> TryRestoreFromCompressedPage(string topicId, MessagePageId pageId) { var resultFromCache = _messagesContentCache.TryGetPage(topicId, pageId); if (resultFromCache != null) { return(resultFromCache); } var logContext = "PageId: " + pageId.Value; _appLogger.AddLog(LogProcess.PagesLoaderOrGc, topicId, logContext, $"Restoring page #{pageId} from compressed source"); var pageCompressedContent = await _compressedMessagesStorage.GetCompressedPageAsync(topicId, pageId); var dt = DateTime.UtcNow; if (pageCompressedContent.ZippedContent.Length == 0) { _appLogger.AddLog(LogProcess.PagesLoaderOrGc, topicId, logContext, $"Can not restore page #{pageId} from compressed source. Duration: {DateTime.UtcNow - dt}"); return(null); } var msgs = pageCompressedContent.Messages; long minId = 0; long maxId = 0; if (msgs.Count > 0) { minId = msgs.Min(itm => itm.MessageId); maxId = msgs.Max(itm => itm.MessageId); } _appLogger.AddLog(LogProcess.PagesLoaderOrGc, topicId, logContext, $"Restored page #{pageId} from compressed source. Duration: {DateTime.UtcNow - dt}. Messages: {msgs.Count}. MinId: {minId}, MaxId: {maxId}"); var result = new ReadOnlyContentPage(pageCompressedContent); _messagesContentCache.AddPage(topicId, result); return(result); }