Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -678,11 +678,12 @@ public void execute() {
maybeStartAppSec(scoClass, sco);
maybeStartCiVisibility(instrumentation, scoClass, sco);
maybeStartLLMObs(instrumentation, scoClass, sco);
// start debugger before remote config to subscribe to it before starting to poll
// Start RC-backed products before remote config so their products and capabilities are
// included in the first poll.
maybeStartDebugger(instrumentation, scoClass, sco);
maybeStartFeatureFlagging(scoClass, sco);
maybeStartRemoteConfig(scoClass, sco);
maybeStartAiGuard();
maybeStartFeatureFlagging(scoClass, sco);

if (telemetryEnabled) {
startTelemetry(instrumentation, scoClass, sco);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,18 @@ class OpenFeatureProviderSmokeTest extends AbstractServerSmokeTest {
}
}

void 'test remote config'() {
void 'test first remote config poll asks agent for feature flags'() {
when:
final rcRequest = waitForRcClientRequest { req ->
decodeProducts(req).find { it == Product.FFE_FLAGS } != null
final firstRcRequest = waitForRcClientRequest { req ->
return true
}

then:
final capabilities = decodeCapabilities(rcRequest)
firstRcRequest == rcClientMessages.first()
// An already-running Agent gives a newly-started tracer one new-client cache bypass. If
// FFE_FLAGS is missing here and only appears on a later poll, the Agent can miss the fast path.
decodeProducts(firstRcRequest).find { it == Product.FFE_FLAGS } != null
final capabilities = decodeCapabilities(firstRcRequest)
hasCapability(capabilities, Capabilities.CAPABILITY_FFE_FLAG_CONFIGURATION_RULES)
}

Expand Down