From f56b4dcc82d7af38bf94d643c5750cf49a91a297 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Tue, 19 Nov 2024 16:42:32 +0100 Subject: pkg/manager: show number of times coverage for each call has overflowed If the overflows happen often, it's bad. Add visibility into this. --- pkg/flatrpc/flatrpc.fbs | 1 + pkg/flatrpc/flatrpc.go | 27 +++++++++++++++------------ pkg/flatrpc/flatrpc.h | 20 +++++++++++++++----- 3 files changed, 31 insertions(+), 17 deletions(-) (limited to 'pkg/flatrpc') diff --git a/pkg/flatrpc/flatrpc.fbs b/pkg/flatrpc/flatrpc.fbs index 51066d9a4..0bd32b743 100644 --- a/pkg/flatrpc/flatrpc.fbs +++ b/pkg/flatrpc/flatrpc.fbs @@ -202,6 +202,7 @@ enum CallFlag : uint8 (bit_flags) { Finished, // finished executing (rather than blocked forever) Blocked, // finished but blocked during execution FaultInjected, // fault was injected into this call + CoverageOverflow, // coverage buffer has overflowed so we have truncated coverage } table CallInfoRaw { diff --git a/pkg/flatrpc/flatrpc.go b/pkg/flatrpc/flatrpc.go index 0a9c0e0d0..8445cde2d 100644 --- a/pkg/flatrpc/flatrpc.go +++ b/pkg/flatrpc/flatrpc.go @@ -392,24 +392,27 @@ func (v ExecFlag) String() string { type CallFlag byte const ( - CallFlagExecuted CallFlag = 1 - CallFlagFinished CallFlag = 2 - CallFlagBlocked CallFlag = 4 - CallFlagFaultInjected CallFlag = 8 + CallFlagExecuted CallFlag = 1 + CallFlagFinished CallFlag = 2 + CallFlagBlocked CallFlag = 4 + CallFlagFaultInjected CallFlag = 8 + CallFlagCoverageOverflow CallFlag = 16 ) var EnumNamesCallFlag = map[CallFlag]string{ - CallFlagExecuted: "Executed", - CallFlagFinished: "Finished", - CallFlagBlocked: "Blocked", - CallFlagFaultInjected: "FaultInjected", + CallFlagExecuted: "Executed", + CallFlagFinished: "Finished", + CallFlagBlocked: "Blocked", + CallFlagFaultInjected: "FaultInjected", + CallFlagCoverageOverflow: "CoverageOverflow", } var EnumValuesCallFlag = map[string]CallFlag{ - "Executed": CallFlagExecuted, - "Finished": CallFlagFinished, - "Blocked": CallFlagBlocked, - "FaultInjected": CallFlagFaultInjected, + "Executed": CallFlagExecuted, + "Finished": CallFlagFinished, + "Blocked": CallFlagBlocked, + "FaultInjected": CallFlagFaultInjected, + "CoverageOverflow": CallFlagCoverageOverflow, } func (v CallFlag) String() string { diff --git a/pkg/flatrpc/flatrpc.h b/pkg/flatrpc/flatrpc.h index 5232114b3..94e1c15f6 100644 --- a/pkg/flatrpc/flatrpc.h +++ b/pkg/flatrpc/flatrpc.h @@ -649,23 +649,25 @@ enum class CallFlag : uint8_t { Finished = 2, Blocked = 4, FaultInjected = 8, + CoverageOverflow = 16, NONE = 0, - ANY = 15 + ANY = 31 }; FLATBUFFERS_DEFINE_BITMASK_OPERATORS(CallFlag, uint8_t) -inline const CallFlag (&EnumValuesCallFlag())[4] { +inline const CallFlag (&EnumValuesCallFlag())[5] { static const CallFlag values[] = { CallFlag::Executed, CallFlag::Finished, CallFlag::Blocked, - CallFlag::FaultInjected + CallFlag::FaultInjected, + CallFlag::CoverageOverflow }; return values; } inline const char * const *EnumNamesCallFlag() { - static const char * const names[9] = { + static const char * const names[17] = { "Executed", "Finished", "", @@ -674,13 +676,21 @@ inline const char * const *EnumNamesCallFlag() { "", "", "FaultInjected", + "", + "", + "", + "", + "", + "", + "", + "CoverageOverflow", nullptr }; return names; } inline const char *EnumNameCallFlag(CallFlag e) { - if (flatbuffers::IsOutRange(e, CallFlag::Executed, CallFlag::FaultInjected)) return ""; + if (flatbuffers::IsOutRange(e, CallFlag::Executed, CallFlag::CoverageOverflow)) return ""; const size_t index = static_cast(e) - static_cast(CallFlag::Executed); return EnumNamesCallFlag()[index]; } -- cgit mrf-deployment