Skip to content

Commit 65969c3

Browse files
authored
chore: update to wasm engine (#306)
1 parent 5c78f1d commit 65969c3

File tree

11 files changed

+73
-207
lines changed

11 files changed

+73
-207
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
<dependency>
5959
<groupId>io.getunleash</groupId>
6060
<artifactId>yggdrasil-engine</artifactId>
61-
<version>0.1.2</version>
61+
<version>0.2.2</version>
6262
</dependency>
6363
<dependency>
6464
<groupId>com.google.code.gson</groupId>

src/main/java/io/getunleash/DefaultUnleash.java

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import static io.getunleash.variant.Variant.DISABLED_VARIANT;
44

5+
import io.getunleash.engine.VariantDef;
6+
import io.getunleash.engine.WasmResponse;
57
import io.getunleash.event.EventDispatcher;
68
import io.getunleash.event.IsEnabledImpressionEvent;
79
import io.getunleash.event.ToggleEvaluated;
@@ -111,14 +113,15 @@ public boolean isEnabled(
111113

112114
UnleashContext enhancedContext = context.applyStaticFields(config);
113115

114-
Boolean enabled = this.featureRepository.isEnabled(toggleName, enhancedContext);
116+
WasmResponse<Boolean> response =
117+
this.featureRepository.isEnabled(toggleName, enhancedContext);
118+
Boolean enabled = response.value;
115119
if (enabled == null) {
116120
enabled = fallbackAction.test(toggleName, enhancedContext);
117121
}
118122

119-
this.metricService.countToggle(toggleName, enabled);
120123
eventDispatcher.dispatch(new ToggleEvaluated(toggleName, enabled));
121-
if (this.featureRepository.shouldEmitImpressionEvent(toggleName)) {
124+
if (response.impressionData) {
122125
eventDispatcher.dispatch(new IsEnabledImpressionEvent(toggleName, enabled, context));
123126
}
124127
return enabled;
@@ -142,15 +145,13 @@ public Variant getVariant(String toggleName, Variant defaultValue) {
142145
@Override
143146
public Variant getVariant(String toggleName, UnleashContext context, Variant defaultValue) {
144147
UnleashContext enhancedContext = context.applyStaticFields(config);
148+
WasmResponse<VariantDef> response =
149+
this.featureRepository.getVariant(toggleName, enhancedContext);
150+
Optional<VariantDef> variantDef = Optional.ofNullable(response.value);
145151

146-
Variant variant =
147-
YggdrasilAdapters.adapt(
148-
this.featureRepository.getVariant(toggleName, enhancedContext),
149-
defaultValue);
150-
this.metricService.countToggle(toggleName, variant.isFeatureEnabled());
151-
this.metricService.countVariant(toggleName, variant.getName());
152+
Variant variant = YggdrasilAdapters.adapt(variantDef, defaultValue);
152153
eventDispatcher.dispatch(new ToggleEvaluated(toggleName, variant.isFeatureEnabled()));
153-
if (this.featureRepository.shouldEmitImpressionEvent(toggleName)) {
154+
if (response.impressionData) {
154155
eventDispatcher.dispatch(
155156
new VariantImpressionEvent(
156157
toggleName, variant.isFeatureEnabled(), context, variant.getName()));
@@ -199,11 +200,11 @@ public List<EvaluatedToggle> evaluateAllToggles(UnleashContext context) {
199200
.map(
200201
toggleName -> {
201202
UnleashContext enhancedContext = context.applyStaticFields(config);
203+
WasmResponse<VariantDef> response =
204+
featureRepository.getVariant(toggleName, enhancedContext);
205+
Optional<VariantDef> variantDef = Optional.of(response.value);
202206
Variant variant =
203-
YggdrasilAdapters.adapt(
204-
featureRepository.getVariant(
205-
toggleName, enhancedContext),
206-
DISABLED_VARIANT);
207+
YggdrasilAdapters.adapt(variantDef, DISABLED_VARIANT);
207208
return new EvaluatedToggle(
208209
toggleName, variant.isFeatureEnabled(), variant);
209210
})

src/main/java/io/getunleash/EngineProxyImpl.java

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import io.getunleash.engine.UnleashEngine;
44
import io.getunleash.engine.VariantDef;
5+
import io.getunleash.engine.WasmResponse;
56
import io.getunleash.lang.Nullable;
67
import io.getunleash.metric.UnleashMetricService;
78
import io.getunleash.metric.UnleashMetricServiceImpl;
@@ -43,12 +44,12 @@ public EngineProxyImpl(UnleashConfig unleashConfig, Strategy... strategies) {
4344
}
4445

4546
@Override
46-
public Boolean isEnabled(String toggleName, UnleashContext context) {
47+
public WasmResponse<Boolean> isEnabled(String toggleName, UnleashContext context) {
4748
return this.featureRepository.isEnabled(toggleName, context);
4849
}
4950

5051
@Override
51-
public Optional<VariantDef> getVariant(String toggleName, UnleashContext context) {
52+
public WasmResponse<VariantDef> getVariant(String toggleName, UnleashContext context) {
5253
return this.featureRepository.getVariant(toggleName, context);
5354
}
5455

@@ -57,26 +58,11 @@ public void register(Set<String> strategies) {
5758
this.metricService.register(strategies);
5859
}
5960

60-
@Override
61-
public void countToggle(String name, boolean enabled) {
62-
this.metricService.countToggle(name, enabled);
63-
}
64-
65-
@Override
66-
public void countVariant(String name, String variantName) {
67-
this.metricService.countVariant(name, variantName);
68-
}
69-
7061
@Override
7162
public Stream<FeatureDefinition> listKnownToggles() {
7263
return this.featureRepository.listKnownToggles();
7364
}
7465

75-
@Override
76-
public boolean shouldEmitImpressionEvent(String toggleName) {
77-
return this.featureRepository.shouldEmitImpressionEvent(toggleName);
78-
}
79-
8066
private static Map<String, Strategy> buildStrategyMap(@Nullable Strategy[] strategies) {
8167
Map<String, Strategy> map = new HashMap<>();
8268

src/main/java/io/getunleash/FakeUnleash.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
public class FakeUnleash implements Unleash {
1414
private boolean enableAll = false;
1515
private boolean disableAll = false;
16+
1617
/**
1718
* @implNote This uses {@link Queue} instead of {@link List}, as there are concurrent queues,
1819
* but no concurrent lists, in the jdk. This will never be drained. Only iterated over.

src/main/java/io/getunleash/metric/UnleashMetricService.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,4 @@
44

55
public interface UnleashMetricService {
66
void register(Set<String> strategies);
7-
8-
void countToggle(String name, boolean enabled);
9-
10-
void countVariant(String name, String variantName);
117
}

src/main/java/io/getunleash/metric/UnleashMetricServiceImpl.java

Lines changed: 9 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import io.getunleash.engine.MetricsBucket;
44
import io.getunleash.engine.UnleashEngine;
5-
import io.getunleash.engine.YggdrasilError;
65
import io.getunleash.util.Throttler;
76
import io.getunleash.util.UnleashConfig;
87
import io.getunleash.util.UnleashScheduledExecutor;
@@ -61,22 +60,17 @@ public void register(Set<String> strategies) {
6160
private Runnable sendMetrics() {
6261
return () -> {
6362
if (throttler.performAction()) {
64-
try {
65-
MetricsBucket bucket = this.engine.getMetrics();
63+
MetricsBucket bucket = this.engine.getMetrics();
6664

67-
ClientMetrics metrics = new ClientMetrics(unleashConfig, bucket);
68-
int statusCode = metricSender.sendMetrics(metrics);
69-
if (statusCode >= 200 && statusCode < 400) {
70-
throttler.decrementFailureCountAndResetSkips();
71-
}
72-
if (statusCode >= 400) {
73-
throttler.handleHttpErrorCodes(statusCode);
74-
}
75-
} catch (YggdrasilError e) {
76-
LOGGER.error(
77-
"Failed to retrieve metrics from the engine, this is a serious error, please report it",
78-
e);
65+
ClientMetrics metrics = new ClientMetrics(unleashConfig, bucket);
66+
int statusCode = metricSender.sendMetrics(metrics);
67+
if (statusCode >= 200 && statusCode < 400) {
68+
throttler.decrementFailureCountAndResetSkips();
7969
}
70+
if (statusCode >= 400) {
71+
throttler.handleHttpErrorCodes(statusCode);
72+
}
73+
8074
} else {
8175
throttler.skipped();
8276
}
@@ -90,22 +84,4 @@ protected int getSkips() {
9084
protected int getFailures() {
9185
return this.throttler.getFailures();
9286
}
93-
94-
@Override
95-
public void countToggle(String name, boolean enabled) {
96-
try {
97-
this.engine.countToggle(name, enabled);
98-
} catch (YggdrasilError e) {
99-
LOGGER.error("Failed to count toggle", e);
100-
}
101-
}
102-
103-
@Override
104-
public void countVariant(String name, String variantName) {
105-
try {
106-
this.engine.countVariant(name, variantName);
107-
} catch (YggdrasilError e) {
108-
LOGGER.error("Failed to count variant", e);
109-
}
110-
}
11187
}

src/main/java/io/getunleash/repository/FeatureRepository.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,14 @@
33
import io.getunleash.FeatureDefinition;
44
import io.getunleash.UnleashContext;
55
import io.getunleash.engine.VariantDef;
6-
import java.util.Optional;
6+
import io.getunleash.engine.WasmResponse;
77
import java.util.stream.Stream;
88

99
public interface FeatureRepository {
1010

11-
Boolean isEnabled(String toggleName, UnleashContext context);
11+
WasmResponse<Boolean> isEnabled(String toggleName, UnleashContext context);
1212

13-
Optional<VariantDef> getVariant(String toggleName, UnleashContext context);
13+
WasmResponse<VariantDef> getVariant(String toggleName, UnleashContext context);
1414

1515
Stream<FeatureDefinition> listKnownToggles();
16-
17-
boolean shouldEmitImpressionEvent(String toggleName);
1816
}

src/main/java/io/getunleash/repository/FeatureRepositoryImpl.java

Lines changed: 10 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import io.getunleash.UnleashException;
66
import io.getunleash.engine.UnleashEngine;
77
import io.getunleash.engine.VariantDef;
8-
import io.getunleash.engine.YggdrasilError;
8+
import io.getunleash.engine.WasmResponse;
99
import io.getunleash.engine.YggdrasilInvalidInputException;
1010
import io.getunleash.event.ClientFeaturesResponse;
1111
import io.getunleash.event.EventDispatcher;
@@ -101,7 +101,7 @@ private void initCollections(UnleashScheduledExecutor executor) {
101101
if (features.isPresent()) {
102102
try {
103103
this.engine.takeState(features.get());
104-
} catch (YggdrasilInvalidInputException | YggdrasilError e) {
104+
} catch (YggdrasilInvalidInputException e) {
105105
LOGGER.error("Error when initializing feature toggles", e);
106106
eventDispatcher.dispatch(new UnleashException("Failed to read backup file:", e));
107107
}
@@ -160,7 +160,7 @@ private Runnable updateFeatures(final Consumer<UnleashException> handler) {
160160
}
161161
} catch (UnleashException e) {
162162
handler.accept(e);
163-
} catch (YggdrasilInvalidInputException | YggdrasilError e) {
163+
} catch (YggdrasilInvalidInputException e) {
164164
handler.accept(new UnleashException("Error when fetching features", e));
165165
}
166166
} else {
@@ -178,43 +178,27 @@ public Integer getSkips() {
178178
}
179179

180180
@Override
181-
public Boolean isEnabled(String toggleName, UnleashContext context) {
181+
public WasmResponse<Boolean> isEnabled(String toggleName, UnleashContext context) {
182182
try {
183183
return this.engine.isEnabled(toggleName, YggdrasilAdapters.adapt(context));
184-
} catch (YggdrasilInvalidInputException | YggdrasilError e) {
184+
} catch (YggdrasilInvalidInputException e) {
185185
LOGGER.error("Error when checking feature toggle {}", toggleName, e);
186186
return null;
187187
}
188188
}
189189

190190
@Override
191-
public Optional<VariantDef> getVariant(String toggleName, UnleashContext context) {
191+
public WasmResponse<VariantDef> getVariant(String toggleName, UnleashContext context) {
192192
try {
193-
return Optional.ofNullable(
194-
this.engine.getVariant(toggleName, YggdrasilAdapters.adapt(context)));
195-
} catch (YggdrasilInvalidInputException | YggdrasilError e) {
193+
return this.engine.getVariant(toggleName, YggdrasilAdapters.adapt(context));
194+
} catch (YggdrasilInvalidInputException e) {
196195
LOGGER.error("Error when checking feature toggle {}", toggleName, e);
197-
return Optional.empty();
196+
return null;
198197
}
199198
}
200199

201200
@Override
202201
public Stream<FeatureDefinition> listKnownToggles() {
203-
try {
204-
return this.engine.listKnownToggles().stream().map(FeatureDefinition::new);
205-
} catch (YggdrasilError e) {
206-
LOGGER.error("Error getting feature toggle definitions", e);
207-
return Stream.empty();
208-
}
209-
}
210-
211-
@Override
212-
public boolean shouldEmitImpressionEvent(String toggleName) {
213-
try {
214-
return this.engine.shouldEmitImpressionEvent(toggleName);
215-
} catch (YggdrasilError e) {
216-
LOGGER.error("Error checking impression event status on toggle{}", toggleName, e);
217-
return false;
218-
}
202+
return this.engine.listKnownToggles().stream().map(FeatureDefinition::new);
219203
}
220204
}

0 commit comments

Comments
 (0)