public static GlobalIDOwnerCollection DeserializeOdpReportSnapshot(ProcessingContext pc, IChunkFactory originalSnapshotChunks, ProcessingErrorContext errorContext, bool fetchSubreports, bool deserializeGroupTree, IConfiguration configuration, ref OnDemandMetadata odpMetadata, out Report report) { GlobalIDOwnerCollection globalIDOwnerCollection = new GlobalIDOwnerCollection(); report = AspNetCore.ReportingServices.ReportProcessing.ReportProcessing.DeserializeKatmaiReport(pc.ChunkFactory, true, globalIDOwnerCollection); IChunkFactory chunkFactory = originalSnapshotChunks ?? pc.ChunkFactory; if (odpMetadata == null) { odpMetadata = OnDemandProcessingManager.DeserializeOnDemandMetadata(chunkFactory, globalIDOwnerCollection); } if (pc.Parameters != null) { pc.Parameters.StoreLabels(); } if (fetchSubreports) { AspNetCore.ReportingServices.ReportProcessing.ReportProcessing.FetchSubReports(report, pc.ChunkFactory, errorContext, odpMetadata, pc.ReportContext, pc.OnDemandSubReportCallback, 0, true, false, globalIDOwnerCollection, pc.QueryParameters); if (deserializeGroupTree) { OnDemandProcessingManager.DeserializeGroupTree(report, chunkFactory, globalIDOwnerCollection, configuration, ref odpMetadata); } } odpMetadata.GlobalIDOwnerCollection = globalIDOwnerCollection; return(globalIDOwnerCollection); }
public static void EnsureGroupTreeStorageSetup(OnDemandMetadata odpMetadata, IChunkFactory chunkFactory, GlobalIDOwnerCollection globalIDOwnerCollection, bool openExisting, int rifCompatVersion, bool prohibitSerializableValues) { if (odpMetadata.GroupTreeScalabilityCache == null) { IStreamHandler streamHandler = OnDemandProcessingManager.BuildChunkStreamHandler("GroupTree", AspNetCore.ReportingServices.ReportProcessing.ReportProcessing.ReportChunkTypes.Main, chunkFactory, openExisting); IStorage storage = new RIFAppendOnlyStorage(streamHandler, (IScalabilityObjectCreator)(object)default(GroupTreeRIFObjectCreator), GroupTreeReferenceCreator.Instance, globalIDOwnerCollection, openExisting, rifCompatVersion, prohibitSerializableValues); odpMetadata.GroupTreeScalabilityCache = new GroupTreeScalabilityCache(odpMetadata.GroupTreePartitionManager, storage); } }
public static void EnsureLookupStorageSetup(OnDemandMetadata odpMetadata, IChunkFactory chunkFactory, bool openExisting, int rifCompatVersion, bool prohibitSerializableValues) { if (odpMetadata.LookupScalabilityCache == null) { new AppendOnlySpaceManager(); IStreamHandler streamHandler = OnDemandProcessingManager.BuildChunkStreamHandler("LookupInfo", AspNetCore.ReportingServices.ReportProcessing.ReportProcessing.ReportChunkTypes.LookupInfo, chunkFactory, openExisting); IStorage storage = new RIFAppendOnlyStorage(streamHandler, (IScalabilityObjectCreator)(object)default(LookupRIFObjectCreator), LookupReferenceCreator.Instance, null, openExisting, rifCompatVersion, prohibitSerializableValues); odpMetadata.LookupScalabilityCache = new LookupScalabilityCache(odpMetadata.LookupPartitionManager, storage); } }
private static void PreparePartitionedTreeForAsyncSerialization(PartitionedTreeScalabilityCache scaleCache, OnDemandProcessingContext odpContext, string chunkName, AspNetCore.ReportingServices.ReportProcessing.ReportProcessing.ReportChunkTypes chunkType) { if (scaleCache != null) { RIFAppendOnlyStorage rIFAppendOnlyStorage = scaleCache.Storage as RIFAppendOnlyStorage; if (rIFAppendOnlyStorage != null) { IStreamHandler streamHandler = OnDemandProcessingManager.BuildChunkStreamHandler(chunkName, chunkType, odpContext.ChunkFactory, rIFAppendOnlyStorage.FromExistingStream); rIFAppendOnlyStorage.Reset(streamHandler); } scaleCache.PrepareForFlush(); } }
public static void DeserializeGroupTree(Report report, IChunkFactory chunkFactory, GlobalIDOwnerCollection globalIDOwnerCollection, IConfiguration configuration, ref OnDemandMetadata odpMetadata) { bool prohibitSerializableValues = configuration != null && configuration.ProhibitSerializableValues; OnDemandProcessingManager.EnsureGroupTreeStorageSetup(odpMetadata, chunkFactory, globalIDOwnerCollection, true, ReportProcessingCompatibilityVersion.GetCompatibilityVersion(configuration), prohibitSerializableValues); IStorage storage = odpMetadata.GroupTreeScalabilityCache.Storage; GroupTreePartition groupTreePartition = (GroupTreePartition)storage.Retrieve(odpMetadata.GroupTreeRootOffset); Global.Tracer.Assert(groupTreePartition.TopLevelScopeInstances[0].GetObjectType() == ObjectType.ReportInstanceReference, "GroupTree root partition did not contain a ReportInstance"); odpMetadata.ReportInstance = (groupTreePartition.TopLevelScopeInstances[0] as IReference <ReportInstance>); odpMetadata.Report = report; odpMetadata.ReportSnapshot.Report = report; }
public void SerializeSnapshot() { Global.Tracer.Assert(null != this.m_odpContext, "OnDemandProcessingContext is unavailable"); OnDemandMetadata odpMetadata = this.m_odpContext.OdpMetadata; if (odpMetadata.SnapshotHasChanged) { try { IReference <ReportInstance> reportInstance = odpMetadata.ReportInstance; Global.Tracer.Assert(reportInstance != null, "Missing GroupTreeRoot"); if (odpMetadata.IsInitialProcessingRequest) { reportInstance.UnPinValue(); } if (odpMetadata.GroupTreeHasChanged || odpMetadata.IsInitialProcessingRequest) { GroupTreeScalabilityCache groupTreeScalabilityCache = this.m_odpContext.OdpMetadata.GroupTreeScalabilityCache; groupTreeScalabilityCache.Flush(); if (odpMetadata.IsInitialProcessingRequest) { GroupTreePartition groupTreePartition = new GroupTreePartition(); groupTreePartition.AddTopLevelScopeInstance((IReference <ScopeInstance>)reportInstance); long groupTreeRootOffset = groupTreeScalabilityCache.Storage.Allocate(groupTreePartition); groupTreeScalabilityCache.Storage.Flush(); odpMetadata.GroupTreeRootOffset = groupTreeRootOffset; } } if (odpMetadata.LookupInfoHasChanged) { LookupScalabilityCache lookupScalabilityCache = this.m_odpContext.OdpMetadata.LookupScalabilityCache; lookupScalabilityCache.Flush(); } OnDemandProcessingManager.SerializeMetadata(this.m_odpContext.ChunkFactory, this.m_odpContext.OdpMetadata, this.m_odpContext.GetActiveCompatibilityVersion(), this.m_odpContext.ProhibitSerializableValues); OnDemandProcessingManager.SerializeSortFilterEventInfo(this.m_odpContext); } finally { if (odpMetadata != null) { odpMetadata.DisposePersistedTreeScalability(); } } } }
public static void PreparePartitionedTreesForAsyncSerialization(OnDemandProcessingContext odpContext) { OnDemandProcessingManager.PreparePartitionedTreeForAsyncSerialization(odpContext.OdpMetadata.GroupTreeScalabilityCache, odpContext, "GroupTree", AspNetCore.ReportingServices.ReportProcessing.ReportProcessing.ReportChunkTypes.Main); OnDemandProcessingManager.PreparePartitionedTreeForAsyncSerialization(odpContext.OdpMetadata.LookupScalabilityCache, odpContext, "LookupInfo", AspNetCore.ReportingServices.ReportProcessing.ReportProcessing.ReportChunkTypes.LookupInfo); }