[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 <stddef.h>
#include "src/core/lib/experiments/config.h"
namespace grpc_core {
@ -177,76 +175,146 @@ inline bool IsClientChannelSubchannelWrapperWorkSerializerOrphanEnabled() {
#endif
#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
inline bool IsTcpFrameSizeTuningEnabled() { return IsExperimentEnabled(0); }
inline bool IsTcpFrameSizeTuningEnabled() {
return IsExperimentEnabled(kExperimentIdTcpFrameSizeTuning);
}
#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
inline bool IsPeerStateBasedFramingEnabled() { return IsExperimentEnabled(2); }
inline bool IsPeerStateBasedFramingEnabled() {
return IsExperimentEnabled(kExperimentIdPeerStateBasedFraming);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_MEMORY_PRESSURE_CONTROLLER
inline bool IsMemoryPressureControllerEnabled() {
return IsExperimentEnabled(3);
return IsExperimentEnabled(kExperimentIdMemoryPressureController);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_UNCONSTRAINED_MAX_QUOTA_BUFFER_SIZE
inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() {
return IsExperimentEnabled(4);
return IsExperimentEnabled(kExperimentIdUnconstrainedMaxQuotaBufferSize);
}
#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
inline bool IsMonitoringExperimentEnabled() { return IsExperimentEnabled(6); }
inline bool IsMonitoringExperimentEnabled() {
return IsExperimentEnabled(kExperimentIdMonitoringExperiment);
}
#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
inline bool IsFreeLargeAllocatorEnabled() { return IsExperimentEnabled(8); }
inline bool IsFreeLargeAllocatorEnabled() {
return IsExperimentEnabled(kExperimentIdFreeLargeAllocator);
}
#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
inline bool IsEventEngineListenerEnabled() { return IsExperimentEnabled(10); }
inline bool IsEventEngineListenerEnabled() {
return IsExperimentEnabled(kExperimentIdEventEngineListener);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_SCHEDULE_CANCELLATION_OVER_WRITE
inline bool IsScheduleCancellationOverWriteEnabled() {
return IsExperimentEnabled(11);
return IsExperimentEnabled(kExperimentIdScheduleCancellationOverWrite);
}
#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
inline bool IsEventEngineDnsEnabled() { return IsExperimentEnabled(13); }
inline bool IsEventEngineDnsEnabled() {
return IsExperimentEnabled(kExperimentIdEventEngineDns);
}
#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
inline bool IsClientPrivacyEnabled() { return IsExperimentEnabled(15); }
inline bool IsClientPrivacyEnabled() {
return IsExperimentEnabled(kExperimentIdClientPrivacy);
}
#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
inline bool IsServerPrivacyEnabled() { return IsExperimentEnabled(17); }
inline bool IsServerPrivacyEnabled() {
return IsExperimentEnabled(kExperimentIdServerPrivacy);
}
#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
inline bool IsKeepaliveFixEnabled() { return IsExperimentEnabled(19); }
inline bool IsKeepaliveFixEnabled() {
return IsExperimentEnabled(kExperimentIdKeepaliveFix);
}
#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
inline bool IsWorkSerializerDispatchEnabled() {
return IsExperimentEnabled(21);
return IsExperimentEnabled(kExperimentIdWorkSerializerDispatch);
}
#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
inline bool IsJitterMaxIdleEnabled() { return IsExperimentEnabled(23); }
inline bool IsJitterMaxIdleEnabled() {
return IsExperimentEnabled(kExperimentIdJitterMaxIdle);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_ROUND_ROBIN_DELEGATE_TO_PICK_FIRST
inline bool IsRoundRobinDelegateToPickFirstEnabled() {
return IsExperimentEnabled(24);
return IsExperimentEnabled(kExperimentIdRoundRobinDelegateToPickFirst);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_WRR_DELEGATE_TO_PICK_FIRST
inline bool IsWrrDelegateToPickFirstEnabled() {
return IsExperimentEnabled(25);
return IsExperimentEnabled(kExperimentIdWrrDelegateToPickFirst);
}
#define GRPC_EXPERIMENT_IS_INCLUDED_CLIENT_CHANNEL_SUBCHANNEL_WRAPPER_WORK_SERIALIZER_ORPHAN
inline bool IsClientChannelSubchannelWrapperWorkSerializerOrphanEnabled() {
return IsExperimentEnabled(26);
return IsExperimentEnabled(
kExperimentIdClientChannelSubchannelWrapperWorkSerializerOrphan);
}
constexpr const size_t kNumExperiments = 27;
extern const ExperimentMetadata g_experiment_metadata[kNumExperiments];
#endif

@ -50,8 +50,6 @@
#include <grpc/support/port_platform.h>
#include <stddef.h>
#include "src/core/lib/experiments/config.h"
namespace grpc_core {
@ -126,16 +124,30 @@ inline bool IsTestExperiment4Enabled() { return false; }
#endif
#else
enum ExperimentIds {
kExperimentIdTestExperiment1,
kExperimentIdTestExperiment2,
kExperimentIdTestExperiment3,
kExperimentIdTestExperiment4,
kNumTestExperiments
};
#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
inline bool IsTestExperiment2Enabled() { return IsTestExperimentEnabled(1); }
inline bool IsTestExperiment2Enabled() {
return IsTestExperimentEnabled(kExperimentIdTestExperiment2);
}
#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
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];
#endif

@ -370,7 +370,6 @@ class ExperimentsCompiler(object):
print(file=H)
print("#include <grpc/support/port_platform.h>", file=H)
print(file=H)
print("#include <stddef.h>", file=H)
print('#include "src/core/lib/experiments/config.h"', file=H)
print(file=H)
print("namespace grpc_core {", file=H)
@ -391,34 +390,33 @@ class ExperimentsCompiler(object):
self._GenerateExperimentsHdrForPlatform("posix", H)
print("#endif", 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(
"#define GRPC_EXPERIMENT_IS_INCLUDED_%s" % exp.name.upper(),
file=H,
)
print(
"inline bool Is%sEnabled() { return"
" Is%sExperimentEnabled(%d); }"
" Is%sExperimentEnabled(kExperimentId%s); }"
% (
SnakeToPascal(exp.name),
"Test" if mode == "test" else "",
i,
SnakeToPascal(exp.name),
),
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(
(
"extern const ExperimentMetadata"

Loading…
Cancel
Save