public async Task <bool> FetchSegment(FetchOptions fetchOptions) { var success = false; while (true) { var changeNumber = _segmentCache.GetChangeNumber(Name); try { var response = await _segmentChangeFetcher.Fetch(Name, changeNumber, fetchOptions); if (response == null) { break; } if (changeNumber >= response.till) { success = true; break; } if (response.added.Count() > 0 || response.removed.Count() > 0) { _segmentCache.AddToSegment(Name, response.added); _segmentCache.RemoveFromSegment(Name, response.removed); if (_log.IsDebugEnabled) { if (response.added.Count() > 0) { _log.Debug($"Segment {Name} - Added : {string.Join(" - ", response.added)}"); } if (response.removed.Count() > 0) { _log.Debug($"Segment {Name} - Removed : {string.Join(" - ", response.removed)}"); } } } _segmentCache.SetChangeNumber(Name, response.till); } catch (Exception e) { _log.Error("Exception caught refreshing segment", e); } finally { if (_log.IsDebugEnabled) { _log.Debug($"segment {Name} fetch before: {changeNumber}, after: {_segmentCache.GetChangeNumber(Name)}"); } } } return(success); }
public async void RefreshSegment() { while (true) { var changeNumber = segmentCache.GetChangeNumber(name); try { var response = await segmentChangeFetcher.Fetch(name, changeNumber); if (response == null) { break; } if (changeNumber >= response.till) { gates.SegmentIsReady(name); break; } if (response.added.Count() > 0 || response.removed.Count() > 0) { segmentCache.AddToSegment(name, response.added); segmentCache.RemoveFromSegment(name, response.removed); if (response.added.Count() > 0) { if (Log.IsDebugEnabled) { Log.Debug(string.Format("Segment {0} - Added : {1}", name, string.Join(" - ", response.added))); } } if (response.removed.Count() > 0) { if (Log.IsDebugEnabled) { Log.Debug(string.Format("Segment {0} - Removed : {1}", name, string.Join(" - ", response.removed))); } } } segmentCache.SetChangeNumber(name, response.till); } catch (Exception e) { Log.Error("Exception caught refreshing segment", e); } finally { if (Log.IsDebugEnabled) { Log.Debug(string.Format("segment {0} fetch before: {1}, after: {2}", name, changeNumber, segmentCache.GetChangeNumber(name))); } } } }