Example #1
0
        /// <summary>
        /// Override event to capture its data and store it in the protobuf
        /// </summary>
        public override void PipExecutionDirectoryOutputs(PipExecutionDirectoryOutputs data)
        {
            foreach (var(directoryArtifact, fileArtifactArray) in data.DirectoryOutputs)
            {
                foreach (var file in fileArtifactArray)
                {
                    m_dynamicFileProducerMap.Add(file, data.PipId.Value);
                }

                var value = new PipExecutionDirectoryOutputsEvent
                {
                    WorkerID          = WorkerID.Value,
                    PipID             = data.PipId.Value,
                    DirectoryArtifact = directoryArtifact.ToDirectoryArtifact(PathTable, m_nameExpander),
                };

                value.FileArtifactArray.AddRange(fileArtifactArray.Select(
                                                     file => file.ToFileArtifact(PathTable, m_nameExpander)));

                var key = new EventKey
                {
                    EventTypeID = Xldb.Proto.ExecutionEventId.PipExecutionDirectoryOutputs,
                    PipId       = data.PipId.Value,
                    PipExecutionDirectoryOutputKey = AbsolutePathToXldbString(directoryArtifact.Path)
                };

                var keyArr   = key.ToByteArray();
                var valueArr = value.ToByteArray();
                WriteToDb(keyArr, valueArr, XldbDataStore.EventColumnFamilyName);
                AddToDbStorageDictionary(DBStoredTypes.PipExecutionDirectoryOutputs, keyArr.Length + valueArr.Length);
            }
        }
Example #2
0
        /// <summary>
        /// Gets events from the DB based on the eventKey
        /// </summary>
        /// <returns>List of events, empty if no such events exist</returns>
        private IEnumerable <IMessage> GetEventsByKey(EventKey eventKey)
        {
            Contract.Requires(Accessor != null, "XldbDataStore is not initialized");

            var storedEvents = new List <IMessage>();

            if (!m_eventParserDictionary.TryGetValue(eventKey.EventTypeID, out var parser))
            {
                Contract.Assert(false, "No parser found for EventTypeId passed in");
            }

            var maybeFound = Accessor.Use(database =>
            {
                foreach (var kvp in database.PrefixSearch(eventKey.ToByteArray(), EventColumnFamilyName))
                {
                    storedEvents.Add(parser.ParseFrom(kvp.Value));
                }
            });

            if (!maybeFound.Succeeded)
            {
                maybeFound.Failure.Throw();
            }

            return(storedEvents);
        }
Example #3
0
        /// <summary>
        /// Gets events from the DB based on the eventKey.
        /// </summary>
        /// <remarks>
        /// Since 0 isn't serialized by Protobuf, a PrefixSearch for RewriteCount = 0 would match everything.
        /// Thus to avoid that, we set it to -1 to "match everything", else we look for specific rewrite counts.
        /// Similarly, a PrefixSearch for WorkerID = 0 would match everything.
        /// Thus to avoid that, we set it to uint.MaxValue to "match everything", else we look for specific rewrite counts.
        /// </remarks>
        /// <returns>List of events, empty if no such events exist</returns>
        private IEnumerable <IMessage> GetEventsByKey(EventKey eventKey)
        {
            Contract.Requires(m_accessor != null, "XldbDataStore is not initialized");

            var storedEvents = new List <IMessage>();

            if (!m_eventParserDictionary.TryGetValue(eventKey.EventTypeID, out var parser))
            {
                Contract.Assert(false, "No parser found for EventTypeId passed in");
            }

            var matchAllRewriteCounts = false;
            var matchAllWorkerIDs     = false;

            if (eventKey.FileRewriteCount == s_fileRewriteCountDefaultValue)
            {
                matchAllRewriteCounts = true;
                // Set it to 0 to match everything
                eventKey.FileRewriteCount = 0;
            }

            if (eventKey.WorkerID == s_workerIDDefaultValue)
            {
                matchAllWorkerIDs = true;
                // Set it to 0 to match everything
                eventKey.WorkerID = 0;
            }

            var maybeFound = m_accessor.Use(database =>
            {
                foreach (var kvp in database.PrefixSearch(eventKey.ToByteArray(), EventColumnFamilyName))
                {
                    var kvpKey = EventKey.Parser.ParseFrom(kvp.Key);
                    // MatchAllWorker IDs and MatchAllRewriteCounts are true, so just add everything
                    if (matchAllWorkerIDs && matchAllRewriteCounts)
                    {
                        storedEvents.Add(parser.ParseFrom(kvp.Value));
                    }
                    // Else if matching all WorkerIDs, check for specific RewriteCounts OR
                    // if matching all RewriteCounts, check for specific worker ID
                    else if ((matchAllWorkerIDs && kvpKey.FileRewriteCount == eventKey.FileRewriteCount) ||
                             (matchAllRewriteCounts && kvpKey.WorkerID == eventKey.WorkerID))
                    {
                        storedEvents.Add(parser.ParseFrom(kvp.Value));
                    }
                    // Else both worker ID and RewriteCounts are unique so the prefix search matches the right one
                    else
                    {
                        storedEvents.Add(parser.ParseFrom(kvp.Value));
                    }
                }
            });

            if (!maybeFound.Succeeded)
            {
                maybeFound.Failure.Throw();
            }

            return(storedEvents);
        }
Example #4
0
        /// <summary>
        /// Override event to capture its data and store it in the protobuf
        /// </summary>
        public override void BxlInvocation(BxlInvocationEventData data)
        {
            var value = data.ToBxlInvocationEvent(WorkerID.Value, PathTable, m_nameExpander);
            var key   = new EventKey
            {
                EventTypeID = Xldb.Proto.ExecutionEventId.BxlInvocation,
            };

            var keyArr   = key.ToByteArray();
            var valueArr = value.ToByteArray();

            WriteToDb(keyArr, valueArr, XldbDataStore.EventColumnFamilyName);
            AddToDbStorageDictionary(DBStoredTypes.BxlInvocation, keyArr.Length + valueArr.Length);
        }
Example #5
0
        /// <summary>
        /// Override event to capture its data and store it in the protobuf
        /// </summary>
        public override void WorkerList(WorkerListEventData data)
        {
            var value = data.ToWorkerListEvent(WorkerID.Value);
            var key   = new EventKey
            {
                EventTypeID = Xldb.Proto.ExecutionEventId.WorkerList,
            };

            var keyArr   = key.ToByteArray();
            var valueArr = value.ToByteArray();

            WriteToDb(keyArr, valueArr, XldbDataStore.EventColumnFamilyName);
            AddToDbStorageDictionary(DBStoredTypes.WorkerList, keyArr.Length + valueArr.Length);
        }
Example #6
0
        /// <summary>
        /// Override event to capture its data and store it in the protobuf
        /// </summary>
        public override void StatusReported(StatusEventData data)
        {
            var value = data.ToResourceUsageReportedEvent(WorkerID.Value);
            var key   = new EventKey
            {
                EventTypeID         = Xldb.Proto.ExecutionEventId.ResourceUsageReported,
                EventSequenceNumber = Interlocked.Increment(ref m_eventSequenceNumber)
            };

            var keyArr   = key.ToByteArray();
            var valueArr = value.ToByteArray();

            WriteToDb(keyArr, valueArr, XldbDataStore.EventColumnFamilyName);
            AddToDbStorageDictionary(DBStoredTypes.ResourceUsageReported, keyArr.Length + valueArr.Length);
        }
Example #7
0
        /// <summary>
        /// Override event to capture its data and store it in the protobuf
        /// </summary>
        public override void DependencyViolationReported(DependencyViolationEventData data)
        {
            var value = data.ToDependencyViolationReportedEvent(WorkerID.Value, PathTable, m_nameExpander);
            var key   = new EventKey
            {
                EventTypeID   = Xldb.Proto.ExecutionEventId.DependencyViolationReported,
                ViolatorPipID = data.ViolatorPipId.Value
            };

            var keyArr   = key.ToByteArray();
            var valueArr = value.ToByteArray();

            WriteToDb(keyArr, valueArr, XldbDataStore.EventColumnFamilyName);
            AddToDbStorageDictionary(DBStoredTypes.DependencyViolationReported, keyArr.Length + valueArr.Length);
        }
Example #8
0
        /// <summary>
        /// Override event to capture its data and store it in the protobuf
        /// </summary>
        public override void BuildSessionConfiguration(BuildSessionConfigurationEventData data)
        {
            var value = data.ToExecutionLogSaltsData(WorkerID.Value);
            // There will be exactly one event of this type that is reported, so nothing special needs to be added to the key
            var key = new EventKey
            {
                EventTypeID = Xldb.Proto.ExecutionEventId.BuildSessionConfiguration,
            };

            var keyArr   = key.ToByteArray();
            var valueArr = value.ToByteArray();

            WriteToDb(keyArr, valueArr, XldbDataStore.EventColumnFamilyName);
            AddToDbStorageDictionary(DBStoredTypes.ExtraEventDataReported, keyArr.Length + valueArr.Length);
        }
Example #9
0
        /// <summary>
        /// Override event to capture its data and store it in the protobuf
        /// </summary>
        public override void PipExecutionPerformance(PipExecutionPerformanceEventData data)
        {
            var value = data.ToPipExecutionPerformanceEvent();
            var key   = new EventKey
            {
                EventTypeID = Xldb.Proto.ExecutionEventId.PipExecutionPerformance,
                PipId       = data.PipId.Value
            };

            var keyArr   = key.ToByteArray();
            var valueArr = value.ToByteArray();

            WriteToDb(keyArr, valueArr, XldbDataStore.EventColumnFamilyName);
            AddToDbStorageDictionary(DBStoredTypes.PipExecutionPerformance, keyArr.Length + valueArr.Length);
        }
Example #10
0
        /// <summary>
        /// Override event to capture its data and store it in the protobuf
        /// </summary>
        public override void ProcessFingerprintComputed(ProcessFingerprintComputationEventData data)
        {
            var value = data.ToProcessFingerprintComputationEvent(WorkerID.Value, PathTable, m_nameExpander);
            var key   = new EventKey
            {
                EventTypeID = Xldb.Proto.ExecutionEventId.ProcessFingerprintComputation,
                PipId       = data.PipId.Value,
                ProcessFingerprintComputationKey = value.Kind,
            };

            var keyArr   = key.ToByteArray();
            var valueArr = value.ToByteArray();

            WriteToDb(keyArr, valueArr, XldbDataStore.EventColumnFamilyName);
            AddToDbStorageDictionary(DBStoredTypes.ProcessFingerprintComputation, keyArr.Length + valueArr.Length);
        }
Example #11
0
        /// <summary>
        /// Override event to capture its data and store it in the protobuf
        /// </summary>
        public override void FileArtifactContentDecided(FileArtifactContentDecidedEventData data)
        {
            var value = data.ToFileArtifactContentDecidedEvent(WorkerID.Value, PathTable, m_nameExpander);
            var key   = new EventKey
            {
                EventTypeID = Xldb.Proto.ExecutionEventId.FileArtifactContentDecided,
                FileArtifactContentDecidedKey = AbsolutePathToXldbString(data.FileArtifact.Path),
                FileRewriteCount = data.FileArtifact.RewriteCount
            };

            var keyArr   = key.ToByteArray();
            var valueArr = value.ToByteArray();

            WriteToDb(keyArr, valueArr, XldbDataStore.EventColumnFamilyName);
            AddToDbStorageDictionary(DBStoredTypes.FileArtifactContentDecided, keyArr.Length + valueArr.Length);
        }
Example #12
0
        /// <summary>
        /// Override event to capture its data and store it in the protobuf
        /// </summary>
        public override void PipExecutionStepPerformanceReported(PipExecutionStepPerformanceEventData data)
        {
            var value = data.ToPipExecutionStepPerformanceReportedEvent(WorkerID.Value);
            var key   = new EventKey
            {
                EventTypeID = Xldb.Proto.ExecutionEventId.PipExecutionStepPerformanceReported,
                PipId       = data.PipId.Value,
                PipExecutionStepPerformanceKey = value.Step,
                EventSequenceNumber            = Interlocked.Increment(ref m_eventSequenceNumber)
            };

            var keyArr   = key.ToByteArray();
            var valueArr = value.ToByteArray();

            WriteToDb(keyArr, valueArr, XldbDataStore.EventColumnFamilyName);
            AddToDbStorageDictionary(DBStoredTypes.PipExecutionStepPerformanceReported, keyArr.Length + valueArr.Length);
        }
Example #13
0
        /// <summary>
        /// Override event to capture its data and store it in the protobuf
        /// </summary>
        public override void DirectoryMembershipHashed(DirectoryMembershipHashedEventData data)
        {
            var value = data.ToDirectoryMembershipHashedEvent(WorkerID.Value, PathTable, m_nameExpander);
            var key   = new EventKey
            {
                EventTypeID = Xldb.Proto.ExecutionEventId.DirectoryMembershipHashed,
                PipId       = data.PipId.Value,
                DirectoryMembershipHashedKey = AbsolutePathToXldbString(data.Directory),
                EventSequenceNumber          = Interlocked.Increment(ref m_eventSequenceNumber)
            };

            var keyArr   = key.ToByteArray();
            var valueArr = value.ToByteArray();

            WriteToDb(keyArr, valueArr, XldbDataStore.EventColumnFamilyName);
            AddToDbStorageDictionary(DBStoredTypes.DirectoryMembershipHashed, keyArr.Length + valueArr.Length);
        }