public void Notify_EmptyChangeMap(SiteModelChangeMapOrigin origin, SiteModelChangeMapOperation operation) { var notifier = new SiteModelChangeMapDeltaNotifier(); // The notifier uses the non-transacted storage proxy: var proxy = DIContext.Obtain <Func <IStorageProxyCache <ISiteModelChangeBufferQueueKey, ISiteModelChangeBufferQueueItem> > >()(); proxy.Should().NotBeNull(); proxy.Clear(); var projectUid = Guid.NewGuid(); var insertUtc = DateTime.UtcNow; // Ask the notifier to notify a new item notifier.Notify(projectUid, insertUtc, new SubGridTreeSubGridExistenceBitMask(), origin, operation); // Check the new item was placed into the cache var cachedItem = proxy.Get(new SiteModelChangeBufferQueueKey(projectUid, insertUtc)); cachedItem.Should().NotBeNull(); cachedItem.Operation.Should().Be(operation); cachedItem.Origin.Should().Be(origin); var readMap = new SubGridTreeSubGridExistenceBitMask(); readMap.FromBytes(cachedItem.Content); readMap.CountBits().Should().Be(0); }
/// <summary> /// Creates a change map buffer queue item and places it in to the cache for the service processor to collect /// </summary> public void Notify(Guid projectUid, DateTime insertUtc, ISubGridTreeBitMask changeMap, SiteModelChangeMapOrigin origin, SiteModelChangeMapOperation operation) { try { _log.LogInformation($"Adding site model change map notification for project {projectUid}"); _queueCache.Put(new SiteModelChangeBufferQueueKey(projectUid, insertUtc), new SiteModelChangeBufferQueueItem { ProjectUID = projectUid, InsertUTC = insertUtc, Operation = operation, Origin = origin, Content = changeMap?.ToBytes() }); } catch (Exception e) { _log.LogError(e, "Exception notifying site model change map"); } }