From 7015121957e97bb64ba636ec78223dbb066df4db Mon Sep 17 00:00:00 2001 From: James Kebinger Date: Wed, 8 Oct 2025 11:03:39 -0500 Subject: [PATCH] Add envId field to Match metadata MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds an Optional envId field to the Match class that reports the environment ID of the ConfigRow that matched. The field is empty for default environment rows that don't have a project_env_id set. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../cloud/prefab/client/config/Match.java | 10 ++++++++- .../client/internal/ConfigResolver.java | 3 ++- .../client/internal/ConfigRuleEvaluator.java | 22 ++++++++++++++----- .../client/internal/ConfigResolverTest.java | 1 + .../internal/MatchStatsAggregatorTest.java | 4 ++++ .../client/internal/TelemetryManagerTest.java | 5 +++++ 6 files changed, 37 insertions(+), 8 deletions(-) diff --git a/client/src/main/java/cloud/prefab/client/config/Match.java b/client/src/main/java/cloud/prefab/client/config/Match.java index 1f1177c9..563585bc 100644 --- a/client/src/main/java/cloud/prefab/client/config/Match.java +++ b/client/src/main/java/cloud/prefab/client/config/Match.java @@ -13,6 +13,7 @@ public class Match { private final int rowIndex; private final int conditionalValueIndex; private final Optional weightedValueIndex; + private final Optional envId; public Match( Prefab.ConfigValue configValue, @@ -20,7 +21,8 @@ public Match( List evaluatedCriterion, int rowIndex, int conditionalValueIndex, - Optional weightedValueIndex + Optional weightedValueIndex, + Optional envId ) { this.configValue = configValue; this.configElement = configElement; @@ -28,6 +30,7 @@ public Match( this.rowIndex = rowIndex; this.conditionalValueIndex = conditionalValueIndex; this.weightedValueIndex = weightedValueIndex; + this.envId = envId; } public int getRowIndex() { @@ -42,6 +45,10 @@ public Optional getWeightedValueIndex() { return weightedValueIndex; } + public Optional getEnvId() { + return envId; + } + public Prefab.ConfigValue getConfigValue() { return configValue; } @@ -74,6 +81,7 @@ public String toString() { .add("rowIndex", rowIndex) .add("conditionalValueIndex", conditionalValueIndex) .add("weightedValueIndex", weightedValueIndex) + .add("envId", envId) .toString(); } } diff --git a/client/src/main/java/cloud/prefab/client/internal/ConfigResolver.java b/client/src/main/java/cloud/prefab/client/internal/ConfigResolver.java index 3400c28d..aff2ab16 100644 --- a/client/src/main/java/cloud/prefab/client/internal/ConfigResolver.java +++ b/client/src/main/java/cloud/prefab/client/internal/ConfigResolver.java @@ -89,7 +89,8 @@ private Match reify(Match match, LookupContext lookupContext) { match.getEvaluatedCriterion(), match.getRowIndex(), match.getConditionalValueIndex(), - match.getWeightedValueIndex() + match.getWeightedValueIndex(), + match.getEnvId() ); } diff --git a/client/src/main/java/cloud/prefab/client/internal/ConfigRuleEvaluator.java b/client/src/main/java/cloud/prefab/client/internal/ConfigRuleEvaluator.java index 6c5c7c21..3464517c 100644 --- a/client/src/main/java/cloud/prefab/client/internal/ConfigRuleEvaluator.java +++ b/client/src/main/java/cloud/prefab/client/internal/ConfigRuleEvaluator.java @@ -114,7 +114,8 @@ private Optional getMatch( conditionalValueIndex, lookupContext, rowPropertiesStack, - configElement + configElement, + configRow ); if (optionalMatch.isPresent()) { @@ -146,7 +147,8 @@ private Optional evaluateConditionalValue( int conditionalValueIndex, LookupContext lookupContext, Deque> rowProperties, - ConfigElement configElement + ConfigElement configElement, + Prefab.ConfigRow configRow ) { List evaluatedCriteria = new ArrayList<>(); for (Prefab.Criterion criterion : conditionalValue.getCriteriaList()) { @@ -168,7 +170,8 @@ private Optional evaluateConditionalValue( conditionalValueIndex, configElement, lookupContext, - evaluatedCriteria + evaluatedCriteria, + configRow ) ); } @@ -182,8 +185,13 @@ private Match simplifyToMatch( int conditionalValueIndex, ConfigElement configElement, LookupContext lookupContext, - List evaluatedCriteria + List evaluatedCriteria, + Prefab.ConfigRow configRow ) { + Optional envId = configRow.hasProjectEnvId() + ? Optional.of(configRow.getProjectEnvId()) + : Optional.empty(); + if (selectedConditionalValue.getValue().hasWeightedValues()) { WeightedValueEvaluator.Result result = weightedValueEvaluator.toResult( selectedConditionalValue.getValue().getWeightedValues(), @@ -196,7 +204,8 @@ private Match simplifyToMatch( evaluatedCriteria, (int) rowIndex, conditionalValueIndex, - Optional.of(result.getIndex()) + Optional.of(result.getIndex()), + envId ); } else { return new Match( @@ -205,7 +214,8 @@ private Match simplifyToMatch( evaluatedCriteria, (int) rowIndex, conditionalValueIndex, - Optional.empty() + Optional.empty(), + envId ); } } diff --git a/client/src/test/java/cloud/prefab/client/internal/ConfigResolverTest.java b/client/src/test/java/cloud/prefab/client/internal/ConfigResolverTest.java index 6e66b272..7905efed 100644 --- a/client/src/test/java/cloud/prefab/client/internal/ConfigResolverTest.java +++ b/client/src/test/java/cloud/prefab/client/internal/ConfigResolverTest.java @@ -241,6 +241,7 @@ Match match(Prefab.ConfigValue configValue, Prefab.Config config) { Collections.emptyList(), 0, 0, + Optional.empty(), Optional.empty() ); } diff --git a/client/src/test/java/cloud/prefab/client/internal/MatchStatsAggregatorTest.java b/client/src/test/java/cloud/prefab/client/internal/MatchStatsAggregatorTest.java index 52646813..05602f88 100644 --- a/client/src/test/java/cloud/prefab/client/internal/MatchStatsAggregatorTest.java +++ b/client/src/test/java/cloud/prefab/client/internal/MatchStatsAggregatorTest.java @@ -69,6 +69,7 @@ void itAggregates() { Collections.emptyList(), 0, 2, + Optional.empty(), Optional.empty() ), 101 @@ -81,6 +82,7 @@ void itAggregates() { Collections.emptyList(), 0, 2, + Optional.empty(), Optional.empty() ), 102 @@ -93,6 +95,7 @@ void itAggregates() { Collections.emptyList(), 0, 2, + Optional.empty(), Optional.empty() ), 102 @@ -108,6 +111,7 @@ void itAggregates() { Collections.emptyList(), 0, 3, + Optional.empty(), Optional.empty() ), 107 diff --git a/client/src/test/java/cloud/prefab/client/internal/TelemetryManagerTest.java b/client/src/test/java/cloud/prefab/client/internal/TelemetryManagerTest.java index 6d9da6f1..d061c431 100644 --- a/client/src/test/java/cloud/prefab/client/internal/TelemetryManagerTest.java +++ b/client/src/test/java/cloud/prefab/client/internal/TelemetryManagerTest.java @@ -415,6 +415,7 @@ private static void reportSomeMatches(TelemetryManager telemetryManager) { Collections.emptyList(), 1, 2, + Optional.empty(), Optional.empty() ), new LookupContext( @@ -436,6 +437,7 @@ private static void reportSomeMatches(TelemetryManager telemetryManager) { Collections.emptyList(), 1, 2, + Optional.empty(), Optional.empty() ), new LookupContext( @@ -457,6 +459,7 @@ private static void reportSomeMatches(TelemetryManager telemetryManager) { Collections.emptyList(), 1, 2, + Optional.empty(), Optional.empty() ), new LookupContext( @@ -475,6 +478,7 @@ private static void reportSomeMatches(TelemetryManager telemetryManager) { Collections.emptyList(), 0, 0, + Optional.empty(), Optional.empty() ), new LookupContext( @@ -493,6 +497,7 @@ private static void reportSomeMatches(TelemetryManager telemetryManager) { Collections.emptyList(), 0, 0, + Optional.empty(), Optional.empty() ), new LookupContext(