[experiments] Make codegen more merge friendly (#34393)

Remove the explicit numbering that's hostile to source code merge tools.
pull/34303/head^2
Craig Tiller 2 years ago committed by GitHub
parent 47306d78f4
commit c0155b4188
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 128
      src/core/lib/experiments/experiments.h
  2. 26
      test/core/experiments/fixtures/experiments.h
  3. 30
      tools/codegen/core/experiments_compiler.py

@ -50,8 +50,6 @@
#include <grpc/support/port_platform.h> #include <grpc/support/port_platform.h>
#include <stddef.h>
#include "src/core/lib/experiments/config.h" #include "src/core/lib/experiments/config.h"
namespace grpc_core { namespace grpc_core {
@ -177,76 +175,146 @@ inline bool IsClientChannelSubchannelWrapperWorkSerializerOrphanEnabled() {
#endif #endif
#else #else
enum ExperimentIds {
kExperimentIdTcpFrameSizeTuning,
kExperimentIdTcpRcvLowat,
kExperimentIdPeerStateBasedFraming,
kExperimentIdMemoryPressureController,
kExperimentIdUnconstrainedMaxQuotaBufferSize,
kExperimentIdEventEngineClient,
kExperimentIdMonitoringExperiment,
kExperimentIdPromiseBasedClientCall,
kExperimentIdFreeLargeAllocator,
kExperimentIdPromiseBasedServerCall,
kExperimentIdEventEngineListener,
kExperimentIdScheduleCancellationOverWrite,
kExperimentIdTraceRecordCallops,
kExperimentIdEventEngineDns,
kExperimentIdWorkStealing,
kExperimentIdClientPrivacy,
kExperimentIdCanaryClientPrivacy,
kExperimentIdServerPrivacy,
kExperimentIdUniqueMetadataStrings,
kExperimentIdKeepaliveFix,
kExperimentIdKeepaliveServerFix,
kExperimentIdWorkSerializerDispatch,
kExperimentIdLazierStreamUpdates,
kExperimentIdJitterMaxIdle,
kExperimentIdRoundRobinDelegateToPickFirst,
kExperimentIdWrrDelegateToPickFirst,
kExperimentIdClientChannelSubchannelWrapperWorkSerializerOrphan,
kNumExperiments
};
#define GRPC_EXPERIMENT_IS_INCLUDED_TCP_FRAME_SIZE_TUNING #define GRPC_EXPERIMENT_IS_INCLUDED_TCP_FRAME_SIZE_TUNING
inline bool IsTcpFrameSizeTuningEnabled() { return IsExperimentEnabled(0); } inline bool IsTcpFrameSizeTuningEnabled() {
return IsExperimentEnabled(kExperimentIdTcpFrameSizeTuning);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_TCP_RCV_LOWAT #define GRPC_EXPERIMENT_IS_INCLUDED_TCP_RCV_LOWAT
inline bool IsTcpRcvLowatEnabled() { return IsExperimentEnabled(1); } inline bool IsTcpRcvLowatEnabled() {
return IsExperimentEnabled(kExperimentIdTcpRcvLowat);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_PEER_STATE_BASED_FRAMING #define GRPC_EXPERIMENT_IS_INCLUDED_PEER_STATE_BASED_FRAMING
inline bool IsPeerStateBasedFramingEnabled() { return IsExperimentEnabled(2); } inline bool IsPeerStateBasedFramingEnabled() {
return IsExperimentEnabled(kExperimentIdPeerStateBasedFraming);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_MEMORY_PRESSURE_CONTROLLER #define GRPC_EXPERIMENT_IS_INCLUDED_MEMORY_PRESSURE_CONTROLLER
inline bool IsMemoryPressureControllerEnabled() { inline bool IsMemoryPressureControllerEnabled() {
return IsExperimentEnabled(3); return IsExperimentEnabled(kExperimentIdMemoryPressureController);
} }
#define GRPC_EXPERIMENT_IS_INCLUDED_UNCONSTRAINED_MAX_QUOTA_BUFFER_SIZE #define GRPC_EXPERIMENT_IS_INCLUDED_UNCONSTRAINED_MAX_QUOTA_BUFFER_SIZE
inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() { inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() {
return IsExperimentEnabled(4); return IsExperimentEnabled(kExperimentIdUnconstrainedMaxQuotaBufferSize);
} }
#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CLIENT #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_CLIENT
inline bool IsEventEngineClientEnabled() { return IsExperimentEnabled(5); } inline bool IsEventEngineClientEnabled() {
return IsExperimentEnabled(kExperimentIdEventEngineClient);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_MONITORING_EXPERIMENT #define GRPC_EXPERIMENT_IS_INCLUDED_MONITORING_EXPERIMENT
inline bool IsMonitoringExperimentEnabled() { return IsExperimentEnabled(6); } inline bool IsMonitoringExperimentEnabled() {
return IsExperimentEnabled(kExperimentIdMonitoringExperiment);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_CLIENT_CALL #define GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_CLIENT_CALL
inline bool IsPromiseBasedClientCallEnabled() { return IsExperimentEnabled(7); } inline bool IsPromiseBasedClientCallEnabled() {
return IsExperimentEnabled(kExperimentIdPromiseBasedClientCall);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_FREE_LARGE_ALLOCATOR #define GRPC_EXPERIMENT_IS_INCLUDED_FREE_LARGE_ALLOCATOR
inline bool IsFreeLargeAllocatorEnabled() { return IsExperimentEnabled(8); } inline bool IsFreeLargeAllocatorEnabled() {
return IsExperimentEnabled(kExperimentIdFreeLargeAllocator);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_SERVER_CALL #define GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_SERVER_CALL
inline bool IsPromiseBasedServerCallEnabled() { return IsExperimentEnabled(9); } inline bool IsPromiseBasedServerCallEnabled() {
return IsExperimentEnabled(kExperimentIdPromiseBasedServerCall);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_LISTENER #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_LISTENER
inline bool IsEventEngineListenerEnabled() { return IsExperimentEnabled(10); } inline bool IsEventEngineListenerEnabled() {
return IsExperimentEnabled(kExperimentIdEventEngineListener);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_SCHEDULE_CANCELLATION_OVER_WRITE #define GRPC_EXPERIMENT_IS_INCLUDED_SCHEDULE_CANCELLATION_OVER_WRITE
inline bool IsScheduleCancellationOverWriteEnabled() { inline bool IsScheduleCancellationOverWriteEnabled() {
return IsExperimentEnabled(11); return IsExperimentEnabled(kExperimentIdScheduleCancellationOverWrite);
} }
#define GRPC_EXPERIMENT_IS_INCLUDED_TRACE_RECORD_CALLOPS #define GRPC_EXPERIMENT_IS_INCLUDED_TRACE_RECORD_CALLOPS
inline bool IsTraceRecordCallopsEnabled() { return IsExperimentEnabled(12); } inline bool IsTraceRecordCallopsEnabled() {
return IsExperimentEnabled(kExperimentIdTraceRecordCallops);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_DNS #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_DNS
inline bool IsEventEngineDnsEnabled() { return IsExperimentEnabled(13); } inline bool IsEventEngineDnsEnabled() {
return IsExperimentEnabled(kExperimentIdEventEngineDns);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_WORK_STEALING #define GRPC_EXPERIMENT_IS_INCLUDED_WORK_STEALING
inline bool IsWorkStealingEnabled() { return IsExperimentEnabled(14); } inline bool IsWorkStealingEnabled() {
return IsExperimentEnabled(kExperimentIdWorkStealing);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_CLIENT_PRIVACY #define GRPC_EXPERIMENT_IS_INCLUDED_CLIENT_PRIVACY
inline bool IsClientPrivacyEnabled() { return IsExperimentEnabled(15); } inline bool IsClientPrivacyEnabled() {
return IsExperimentEnabled(kExperimentIdClientPrivacy);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_CANARY_CLIENT_PRIVACY #define GRPC_EXPERIMENT_IS_INCLUDED_CANARY_CLIENT_PRIVACY
inline bool IsCanaryClientPrivacyEnabled() { return IsExperimentEnabled(16); } inline bool IsCanaryClientPrivacyEnabled() {
return IsExperimentEnabled(kExperimentIdCanaryClientPrivacy);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_SERVER_PRIVACY #define GRPC_EXPERIMENT_IS_INCLUDED_SERVER_PRIVACY
inline bool IsServerPrivacyEnabled() { return IsExperimentEnabled(17); } inline bool IsServerPrivacyEnabled() {
return IsExperimentEnabled(kExperimentIdServerPrivacy);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_UNIQUE_METADATA_STRINGS #define GRPC_EXPERIMENT_IS_INCLUDED_UNIQUE_METADATA_STRINGS
inline bool IsUniqueMetadataStringsEnabled() { return IsExperimentEnabled(18); } inline bool IsUniqueMetadataStringsEnabled() {
return IsExperimentEnabled(kExperimentIdUniqueMetadataStrings);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_KEEPALIVE_FIX #define GRPC_EXPERIMENT_IS_INCLUDED_KEEPALIVE_FIX
inline bool IsKeepaliveFixEnabled() { return IsExperimentEnabled(19); } inline bool IsKeepaliveFixEnabled() {
return IsExperimentEnabled(kExperimentIdKeepaliveFix);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_KEEPALIVE_SERVER_FIX #define GRPC_EXPERIMENT_IS_INCLUDED_KEEPALIVE_SERVER_FIX
inline bool IsKeepaliveServerFixEnabled() { return IsExperimentEnabled(20); } inline bool IsKeepaliveServerFixEnabled() {
return IsExperimentEnabled(kExperimentIdKeepaliveServerFix);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_WORK_SERIALIZER_DISPATCH #define GRPC_EXPERIMENT_IS_INCLUDED_WORK_SERIALIZER_DISPATCH
inline bool IsWorkSerializerDispatchEnabled() { inline bool IsWorkSerializerDispatchEnabled() {
return IsExperimentEnabled(21); return IsExperimentEnabled(kExperimentIdWorkSerializerDispatch);
} }
#define GRPC_EXPERIMENT_IS_INCLUDED_LAZIER_STREAM_UPDATES #define GRPC_EXPERIMENT_IS_INCLUDED_LAZIER_STREAM_UPDATES
inline bool IsLazierStreamUpdatesEnabled() { return IsExperimentEnabled(22); } inline bool IsLazierStreamUpdatesEnabled() {
return IsExperimentEnabled(kExperimentIdLazierStreamUpdates);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_JITTER_MAX_IDLE #define GRPC_EXPERIMENT_IS_INCLUDED_JITTER_MAX_IDLE
inline bool IsJitterMaxIdleEnabled() { return IsExperimentEnabled(23); } inline bool IsJitterMaxIdleEnabled() {
return IsExperimentEnabled(kExperimentIdJitterMaxIdle);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_ROUND_ROBIN_DELEGATE_TO_PICK_FIRST #define GRPC_EXPERIMENT_IS_INCLUDED_ROUND_ROBIN_DELEGATE_TO_PICK_FIRST
inline bool IsRoundRobinDelegateToPickFirstEnabled() { inline bool IsRoundRobinDelegateToPickFirstEnabled() {
return IsExperimentEnabled(24); return IsExperimentEnabled(kExperimentIdRoundRobinDelegateToPickFirst);
} }
#define GRPC_EXPERIMENT_IS_INCLUDED_WRR_DELEGATE_TO_PICK_FIRST #define GRPC_EXPERIMENT_IS_INCLUDED_WRR_DELEGATE_TO_PICK_FIRST
inline bool IsWrrDelegateToPickFirstEnabled() { inline bool IsWrrDelegateToPickFirstEnabled() {
return IsExperimentEnabled(25); return IsExperimentEnabled(kExperimentIdWrrDelegateToPickFirst);
} }
#define GRPC_EXPERIMENT_IS_INCLUDED_CLIENT_CHANNEL_SUBCHANNEL_WRAPPER_WORK_SERIALIZER_ORPHAN #define GRPC_EXPERIMENT_IS_INCLUDED_CLIENT_CHANNEL_SUBCHANNEL_WRAPPER_WORK_SERIALIZER_ORPHAN
inline bool IsClientChannelSubchannelWrapperWorkSerializerOrphanEnabled() { inline bool IsClientChannelSubchannelWrapperWorkSerializerOrphanEnabled() {
return IsExperimentEnabled(26); return IsExperimentEnabled(
kExperimentIdClientChannelSubchannelWrapperWorkSerializerOrphan);
} }
constexpr const size_t kNumExperiments = 27;
extern const ExperimentMetadata g_experiment_metadata[kNumExperiments]; extern const ExperimentMetadata g_experiment_metadata[kNumExperiments];
#endif #endif

@ -50,8 +50,6 @@
#include <grpc/support/port_platform.h> #include <grpc/support/port_platform.h>
#include <stddef.h>
#include "src/core/lib/experiments/config.h" #include "src/core/lib/experiments/config.h"
namespace grpc_core { namespace grpc_core {
@ -126,16 +124,30 @@ inline bool IsTestExperiment4Enabled() { return false; }
#endif #endif
#else #else
enum ExperimentIds {
kExperimentIdTestExperiment1,
kExperimentIdTestExperiment2,
kExperimentIdTestExperiment3,
kExperimentIdTestExperiment4,
kNumTestExperiments
};
#define GRPC_EXPERIMENT_IS_INCLUDED_TEST_EXPERIMENT_1 #define GRPC_EXPERIMENT_IS_INCLUDED_TEST_EXPERIMENT_1
inline bool IsTestExperiment1Enabled() { return IsTestExperimentEnabled(0); } inline bool IsTestExperiment1Enabled() {
return IsTestExperimentEnabled(kExperimentIdTestExperiment1);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_TEST_EXPERIMENT_2 #define GRPC_EXPERIMENT_IS_INCLUDED_TEST_EXPERIMENT_2
inline bool IsTestExperiment2Enabled() { return IsTestExperimentEnabled(1); } inline bool IsTestExperiment2Enabled() {
return IsTestExperimentEnabled(kExperimentIdTestExperiment2);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_TEST_EXPERIMENT_3 #define GRPC_EXPERIMENT_IS_INCLUDED_TEST_EXPERIMENT_3
inline bool IsTestExperiment3Enabled() { return IsTestExperimentEnabled(2); } inline bool IsTestExperiment3Enabled() {
return IsTestExperimentEnabled(kExperimentIdTestExperiment3);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_TEST_EXPERIMENT_4 #define GRPC_EXPERIMENT_IS_INCLUDED_TEST_EXPERIMENT_4
inline bool IsTestExperiment4Enabled() { return IsTestExperimentEnabled(3); } inline bool IsTestExperiment4Enabled() {
return IsTestExperimentEnabled(kExperimentIdTestExperiment4);
}
constexpr const size_t kNumTestExperiments = 4;
extern const ExperimentMetadata g_test_experiment_metadata[kNumTestExperiments]; extern const ExperimentMetadata g_test_experiment_metadata[kNumTestExperiments];
#endif #endif

@ -370,7 +370,6 @@ class ExperimentsCompiler(object):
print(file=H) print(file=H)
print("#include <grpc/support/port_platform.h>", file=H) print("#include <grpc/support/port_platform.h>", file=H)
print(file=H) print(file=H)
print("#include <stddef.h>", file=H)
print('#include "src/core/lib/experiments/config.h"', file=H) print('#include "src/core/lib/experiments/config.h"', file=H)
print(file=H) print(file=H)
print("namespace grpc_core {", file=H) print("namespace grpc_core {", file=H)
@ -391,34 +390,33 @@ class ExperimentsCompiler(object):
self._GenerateExperimentsHdrForPlatform("posix", H) self._GenerateExperimentsHdrForPlatform("posix", H)
print("#endif", file=H) print("#endif", file=H)
print("\n#else", file=H) print("\n#else", file=H)
for i, (_, exp) in enumerate(self._experiment_definitions.items()): if mode == "test":
num_experiments_var_name = "kNumTestExperiments"
experiments_metadata_var_name = "g_test_experiment_metadata"
else:
num_experiments_var_name = "kNumExperiments"
experiments_metadata_var_name = "g_experiment_metadata"
print("enum ExperimentIds {", file=H)
for exp in self._experiment_definitions.values():
print(f" kExperimentId{SnakeToPascal(exp.name)},", file=H)
print(f" {num_experiments_var_name}", file=H)
print("};", file=H)
for exp in self._experiment_definitions.values():
print( print(
"#define GRPC_EXPERIMENT_IS_INCLUDED_%s" % exp.name.upper(), "#define GRPC_EXPERIMENT_IS_INCLUDED_%s" % exp.name.upper(),
file=H, file=H,
) )
print( print(
"inline bool Is%sEnabled() { return" "inline bool Is%sEnabled() { return"
" Is%sExperimentEnabled(%d); }" " Is%sExperimentEnabled(kExperimentId%s); }"
% ( % (
SnakeToPascal(exp.name), SnakeToPascal(exp.name),
"Test" if mode == "test" else "", "Test" if mode == "test" else "",
i, SnakeToPascal(exp.name),
), ),
file=H, file=H,
) )
print(file=H) print(file=H)
if mode == "test":
num_experiments_var_name = "kNumTestExperiments"
experiments_metadata_var_name = "g_test_experiment_metadata"
else:
num_experiments_var_name = "kNumExperiments"
experiments_metadata_var_name = "g_experiment_metadata"
print(
f"constexpr const size_t {num_experiments_var_name} = "
f"{len(self._experiment_definitions.keys())};",
file=H,
)
print( print(
( (
"extern const ExperimentMetadata" "extern const ExperimentMetadata"

Loading…
Cancel
Save