diff --git a/src/main/java/io/stargate/sgv2/jsonapi/JsonApiStartUp.java b/src/main/java/io/stargate/sgv2/jsonapi/JsonApiStartUp.java index ca44cd1622..6d26dacceb 100644 --- a/src/main/java/io/stargate/sgv2/jsonapi/JsonApiStartUp.java +++ b/src/main/java/io/stargate/sgv2/jsonapi/JsonApiStartUp.java @@ -4,13 +4,23 @@ import io.stargate.sgv2.jsonapi.api.request.tenant.TenantFactory; import io.stargate.sgv2.jsonapi.config.BillingConfig; import io.stargate.sgv2.jsonapi.config.DebugModeConfig; +import io.stargate.sgv2.jsonapi.config.DeploymentMarkerConfig; import io.stargate.sgv2.jsonapi.config.OperationsConfig; +import io.stargate.sgv2.jsonapi.config.feature.ApiFeature; +import io.stargate.sgv2.jsonapi.config.feature.ApiFeatures; +import io.stargate.sgv2.jsonapi.config.feature.FeaturesConfig; import jakarta.enterprise.event.Observes; import jakarta.inject.Inject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class JsonApiStartUp { + private static final Logger LOGGER = LoggerFactory.getLogger(JsonApiStartUp.class); + private final OperationsConfig operationsConfig; + private final DeploymentMarkerConfig deploymentMarkerConfig; + private final FeaturesConfig featuresConfig; /** * {@link DebugModeConfig} and {@link BillingConfig} are injected here purely to anchor them as @@ -26,11 +36,30 @@ public class JsonApiStartUp { */ @Inject public JsonApiStartUp( - DebugModeConfig config, OperationsConfig operationsConfig, BillingConfig billingConfig) { + DebugModeConfig config, + OperationsConfig operationsConfig, + BillingConfig billingConfig, + DeploymentMarkerConfig deploymentMarkerConfig, + FeaturesConfig featuresConfig) { this.operationsConfig = operationsConfig; + this.deploymentMarkerConfig = deploymentMarkerConfig; + this.featuresConfig = featuresConfig; } void onStart(@Observes StartupEvent ev) { TenantFactory.initialize(operationsConfig.databaseConfig().type()); + + // Observation point for deployment drills, see DeploymentMarkerConfig. + // Disabled by default, in which case nothing is logged here. + if (deploymentMarkerConfig.enabled()) { + LOGGER.info("Deployment config enabled - marker={}", deploymentMarkerConfig.value()); + } + + // Startup-resolved feature flag state (configuration only — request headers cannot apply + // here). Logged unconditionally so the effective state is observable from the pod log. + ApiFeatures apiFeatures = ApiFeatures.fromConfigAndRequest(featuresConfig, null); + LOGGER.info( + "ApiFeature DEPLOYMENT_MARKER enabled={}", + apiFeatures.isFeatureEnabled(ApiFeature.DEPLOYMENT_MARKER)); } } diff --git a/src/main/java/io/stargate/sgv2/jsonapi/config/DeploymentMarkerConfig.java b/src/main/java/io/stargate/sgv2/jsonapi/config/DeploymentMarkerConfig.java new file mode 100644 index 0000000000..5841d3b529 --- /dev/null +++ b/src/main/java/io/stargate/sgv2/jsonapi/config/DeploymentMarkerConfig.java @@ -0,0 +1,19 @@ +package io.stargate.sgv2.jsonapi.config; + +import io.smallrye.config.ConfigMapping; +import io.smallrye.config.WithDefault; +import java.util.Optional; + +@ConfigMapping(prefix = "stargate.jsonapi.deployment.env") +public interface DeploymentMarkerConfig { + + @WithDefault("false") + boolean enabled(); + + Optional deployCloud(); + + Optional deploy_region(); + + @WithDefault("0") + int value(); +} diff --git a/src/main/java/io/stargate/sgv2/jsonapi/config/feature/ApiFeature.java b/src/main/java/io/stargate/sgv2/jsonapi/config/feature/ApiFeature.java index f8cc2b57e0..c5ccc4c904 100644 --- a/src/main/java/io/stargate/sgv2/jsonapi/config/feature/ApiFeature.java +++ b/src/main/java/io/stargate/sgv2/jsonapi/config/feature/ApiFeature.java @@ -82,7 +82,9 @@ public enum ApiFeature { * *

Disabled by default. */ - BILLING_EVENTS_LOGGING("billing-events-logging", false); + BILLING_EVENTS_LOGGING("billing-events-logging", false), + + DEPLOYMENT_MARKER("deployment-marker", false); /** * Prefix for HTTP headers used to override feature flags for specific requests: prepended before