Skip to content

Commit 5384518

Browse files
authored
style: enhance readability (#4)
* style: enhance readability * feat: only print stack trace on exception, won't be recorded in log
1 parent 8bbd3e3 commit 5384518

19 files changed

+201
-115
lines changed

src/main/java/com/featureprobe/sdk/server/AccessRecorder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public Counter(String value, Long version, Integer index) {
4141
}
4242

4343
public void increment() {
44-
count = count + 1;
44+
++count;
4545
}
4646

4747
public boolean isGroup(String value, Long version, Integer index) {

src/main/java/com/featureprobe/sdk/server/DefaultEventProcessor.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import okhttp3.RequestBody;
1212
import okhttp3.Response;
1313
import org.slf4j.Logger;
14+
1415
import java.net.URL;
1516
import java.util.ArrayList;
1617
import java.util.List;
@@ -43,6 +44,10 @@ public class DefaultEventProcessor implements EventProcessor {
4344

4445
private final ExecutorService executor;
4546

47+
private static final String LOG_SENDER_ERROR = "Unexpected error from event sender";
48+
private static final String LOG_BUSY_EVENT = "Event processing is busy, some will be dropped";
49+
50+
4651
ThreadFactory threadFactory = new ThreadFactoryBuilder()
4752
.setDaemon(true)
4853
.setNameFormat("FeatureProbe-event-handle-%d")
@@ -60,9 +65,7 @@ public class DefaultEventProcessor implements EventProcessor {
6065
eventHandleThread.setDaemon(true);
6166
eventHandleThread.start();
6267

63-
Runnable flusher = () -> {
64-
flush();
65-
};
68+
Runnable flusher = this::flush;
6669
scheduler = Executors.newSingleThreadScheduledExecutor(threadFactory);
6770
scheduler.scheduleAtFixedRate(flusher, 0L, 5, TimeUnit.SECONDS);
6871
}
@@ -72,21 +75,18 @@ public void push(Event event) {
7275
if (!closed.get()) {
7376
boolean success = eventQueue.offer(new EventAction(EventActionType.EVENT, event));
7477
if (!success) {
75-
logger.warn("Event processing is busy, some will be dropped");
78+
logger.warn(LOG_BUSY_EVENT);
7679
}
7780
}
7881
}
7982

8083
@Override
8184
public void flush() {
8285
if (!closed.get()) {
83-
if (eventQueue.offer(new EventAction(EventActionType.FLUSH, null))) {
84-
85-
} else {
86-
logger.warn("Event processing is busy, some will be dropped");
86+
if (!eventQueue.offer(new EventAction(EventActionType.FLUSH, null))) {
87+
logger.warn(LOG_BUSY_EVENT);
8788
}
8889
}
89-
9090
}
9191

9292
@Override
@@ -121,7 +121,7 @@ private void handleEvent(FPContext context, BlockingQueue<EventAction> eventQueu
121121
}
122122
}
123123
} catch (Exception e) {
124-
logger.error("FeatureProbe event handle error: {}", e);
124+
logger.error("FeatureProbe event handle error", e);
125125
}
126126
}
127127
}
@@ -183,16 +183,16 @@ public void run() {
183183
.post(requestBody)
184184
.build();
185185
} catch (Exception e) {
186-
logger.error("Unexpected error from event sender: {}", e.toString());
186+
logger.error(LOG_SENDER_ERROR, e);
187187
return;
188188
}
189189
try (Response response = httpClient.newCall(request).execute()) {
190190
if (!response.isSuccessful()) {
191-
throw new HttpErrorException("Http request error : " + response.code());
191+
throw new HttpErrorException("Http request error: " + response.code());
192192
}
193-
logger.debug("Http response : " + response.toString());
193+
logger.debug("Http response: {}", response);
194194
} catch (Exception e) {
195-
logger.error("Unexpected error from event sender: {}", e.toString());
195+
logger.error(LOG_SENDER_ERROR, e);
196196
}
197197
}
198198

src/main/java/com/featureprobe/sdk/server/EvaluationResult.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,18 @@ public Object getValue() {
2727
return value;
2828
}
2929

30+
public void setValue(Object value) {
31+
this.value = value;
32+
}
33+
3034
public Optional<Integer> getRuleIndex() {
3135
return ruleIndex;
3236
}
3337

38+
public void setRuleIndex(Optional<Integer> ruleIndex) {
39+
this.ruleIndex = ruleIndex;
40+
}
41+
3442
public Optional<Integer> getVariationIndex() {
3543
return variationIndex;
3644
}
@@ -51,16 +59,8 @@ public String getReason() {
5159
return reason;
5260
}
5361

54-
public void setValue(Object value) {
55-
this.value = value;
56-
}
57-
58-
public void setRuleIndex(Optional<Integer> ruleIndex) {
59-
this.ruleIndex = ruleIndex;
60-
}
61-
62-
6362
public void setReason(String reason) {
6463
this.reason = reason;
6564
}
65+
6666
}

src/main/java/com/featureprobe/sdk/server/FeatureProbe.java

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,13 @@ public final class FeatureProbe {
1414

1515
private static final Logger logger = Loggers.MAIN;
1616

17-
private ObjectMapper mapper = new ObjectMapper();
17+
private final ObjectMapper mapper = new ObjectMapper();
18+
19+
private static final String REASON_TYPE_MISMATCH = "Toggle data type mismatch";
20+
private static final String REASON_HANDLE_ERROR = "FeatureProbe handle error";
21+
22+
private static final String LOG_HANDLE_ERROR = "FeatureProbe handle error. toggleKey: {}";
23+
private static final String LOG_CONVERSION_ERROR = "Toggle data type conversion error. toggleKey: {}";
1824

1925
@VisibleForTesting
2026
final DataRepository dataRepository;
@@ -36,7 +42,7 @@ public FeatureProbe(String sdkKey) {
3642

3743
public FeatureProbe(String sdkKey, FPConfig config) {
3844
if (StringUtils.isBlank(sdkKey)) {
39-
throw new NullPointerException("sdkKey must not be blank");
45+
throw new IllegalArgumentException("sdkKey must not be blank");
4046
}
4147
final FPContext context = new FPContext(sdkKey, config);
4248
eventProcessor = config.eventProcessorFactory.createEventProcessor(context);
@@ -45,15 +51,15 @@ public FeatureProbe(String sdkKey, FPConfig config) {
4551
}
4652

4753
public boolean boolValue(String toggleKey, FPUser user, boolean defaultValue) {
48-
return genericEvaluate(toggleKey, user, defaultValue, Boolean.class).booleanValue();
54+
return genericEvaluate(toggleKey, user, defaultValue, Boolean.class);
4955
}
5056

5157
public String stringValue(String toggleKey, FPUser user, String defaultValue) {
5258
return genericEvaluate(toggleKey, user, defaultValue, String.class);
5359
}
5460

5561
public double numberValue(String toggleKey, FPUser user, double defaultValue) {
56-
return genericEvaluate(toggleKey, user, defaultValue, Double.class).doubleValue();
62+
return genericEvaluate(toggleKey, user, defaultValue, Double.class);
5763
}
5864

5965
public <T> T jsonValue(String toggleKey, FPUser user, T defaultValue, Class<T> clazz) {
@@ -93,16 +99,15 @@ private <T> T jsonEvaluate(String toggleKey, FPUser user, T defaultValue, Class<
9399
return mapper.readValue(value, clazz);
94100
}
95101
} catch (JsonProcessingException e) {
96-
logger.error("Toggle data type conversion error。toggleKey: {}", toggleKey, e);
102+
logger.error(LOG_CONVERSION_ERROR, toggleKey, e);
97103
} catch (Exception e) {
98-
logger.error("FeatureProbe handle error. toggleKey: {}", toggleKey, e);
104+
logger.error(LOG_HANDLE_ERROR, toggleKey, e);
99105
}
100106
return defaultValue;
101107
}
102108

103109
private <T> T genericEvaluate(String toggleKey, FPUser user, T defaultValue, Class<T> clazz) {
104110
try {
105-
106111
Toggle toggle = dataRepository.getToggle(toggleKey);
107112
if (Objects.nonNull(toggle)) {
108113
EvaluationResult evalResult = toggle.eval(user, defaultValue);
@@ -113,9 +118,9 @@ private <T> T genericEvaluate(String toggleKey, FPUser user, T defaultValue, Cla
113118
return clazz.cast(evalResult.getValue());
114119
}
115120
} catch (ClassCastException e) {
116-
logger.error("Toggle data type conversion error。toggleKey: {}", toggleKey, e);
121+
logger.error(LOG_CONVERSION_ERROR, toggleKey, e);
117122
} catch (Exception e) {
118-
logger.error("FeatureProbe handle error. toggleKey: {}", toggleKey, e);
123+
logger.error(LOG_HANDLE_ERROR, toggleKey, e);
119124
}
120125
return defaultValue;
121126
}
@@ -125,11 +130,11 @@ private <T> FPDetail<T> jsonEvaluateDetail(String toggleKey, FPUser user, T defa
125130
try {
126131
return getEvaluateDetail(toggleKey, user, defaultValue, clazz, true);
127132
} catch (ClassCastException | JsonProcessingException e) {
128-
logger.error("Toggle data type conversion error. toggleKey: {}", toggleKey, e);
129-
detail.setReason("Toggle data type mismatch");
133+
logger.error(LOG_CONVERSION_ERROR, toggleKey, e);
134+
detail.setReason(REASON_TYPE_MISMATCH);
130135
} catch (Exception e) {
131-
logger.error("FeatureProbe handle error. toggleKey: {}", toggleKey, e);
132-
detail.setReason("FeatureProbe handle error");
136+
logger.error(LOG_HANDLE_ERROR, toggleKey, e);
137+
detail.setReason(REASON_HANDLE_ERROR);
133138
}
134139
detail.setValue(defaultValue);
135140
return detail;
@@ -140,11 +145,11 @@ private <T> FPDetail<T> genericEvaluateDetail(String toggleKey, FPUser user, T d
140145
try {
141146
return getEvaluateDetail(toggleKey, user, defaultValue, clazz, false);
142147
} catch (ClassCastException | JsonProcessingException e) {
143-
logger.error("Toggle data type conversion error. toggleKey: {}", toggleKey, e);
144-
detail.setReason("Toggle data type mismatch");
148+
logger.error(LOG_CONVERSION_ERROR, toggleKey, e);
149+
detail.setReason(REASON_TYPE_MISMATCH);
145150
} catch (Exception e) {
146-
logger.error("FeatureProbe handle error. toggleKey: {}", toggleKey, e);
147-
detail.setReason("FeatureProbe handle error");
151+
logger.error(LOG_HANDLE_ERROR, toggleKey, e);
152+
detail.setReason(REASON_HANDLE_ERROR);
148153
}
149154
detail.setValue(defaultValue);
150155
return detail;

src/main/java/com/featureprobe/sdk/server/FileSynchronizer.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.io.IOException;
1010
import java.io.InputStream;
1111
import java.nio.charset.Charset;
12+
import java.nio.charset.StandardCharsets;
1213

1314
final class FileSynchronizer implements Synchronizer {
1415

@@ -30,15 +31,18 @@ final class FileSynchronizer implements Synchronizer {
3031
@Override
3132
public void sync() {
3233
try (InputStream is = getClass().getClassLoader().getResourceAsStream(location)) {
34+
String data;
3335
if (is == null) {
34-
logger.error("repository file resource not found in classpath:" + location);
36+
logger.error("repository file resource not found in classpath: {}", location);
37+
data = "";
38+
} else {
39+
data = new String(ByteStreams.toByteArray(is), StandardCharsets.UTF_8);
3540
}
36-
String data = new String(ByteStreams.toByteArray(is), Charset.forName("UTF-8"));
3741
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
3842
Repository repository = mapper.readValue(data, Repository.class);
3943
dataRepository.refresh(repository);
4044
} catch (IOException e) {
41-
logger.error("repository file resource not found in classpath:" + location);
45+
logger.error("repository file resource not found in classpath: {}", location, e);
4246
}
4347
}
4448

src/main/java/com/featureprobe/sdk/server/HttpConfiguration.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ public final class HttpConfiguration {
2727
final Duration writeTimeout;
2828

2929
protected HttpConfiguration(Builder builder) {
30-
this.connectionPool = builder.connectionPool;
31-
this.connectTimeout = builder.connectTimeout;
32-
this.readTimeout = builder.readTimeout;
33-
this.writeTimeout = builder.writeTimeout;
30+
this.connectionPool = Builder.connectionPool;
31+
this.connectTimeout = Builder.connectTimeout;
32+
this.readTimeout = Builder.readTimeout;
33+
this.writeTimeout = Builder.writeTimeout;
3434
}
3535

3636
public static Builder builder() {
@@ -51,22 +51,22 @@ public Builder() {
5151
}
5252

5353
public Builder connectionPool(ConnectionPool connectionPool) {
54-
this.connectionPool = connectionPool == null ? DEFAULT_CONNECTION_POOL : connectionPool;
54+
Builder.connectionPool = connectionPool == null ? DEFAULT_CONNECTION_POOL : connectionPool;
5555
return this;
5656
}
5757

5858
public Builder connectTimeout(Duration connectTimeout) {
59-
this.connectTimeout = connectTimeout == null ? DEFAULT_CONNECT_TIMEOUT : connectTimeout;
59+
Builder.connectTimeout = connectTimeout == null ? DEFAULT_CONNECT_TIMEOUT : connectTimeout;
6060
return this;
6161
}
6262

6363
public Builder readTimeout(Duration readTimeout) {
64-
this.readTimeout = readTimeout == null ? DEFAULT_READ_TIMEOUT : readTimeout;
64+
Builder.readTimeout = readTimeout == null ? DEFAULT_READ_TIMEOUT : readTimeout;
6565
return this;
6666
}
6767

6868
public Builder writeTimeout(Duration writeTimeout) {
69-
this.writeTimeout = writeTimeout == null ? DEFAULT_WRITE_TIMEOUT : writeTimeout;
69+
Builder.writeTimeout = writeTimeout == null ? DEFAULT_WRITE_TIMEOUT : writeTimeout;
7070
return this;
7171
}
7272

src/main/java/com/featureprobe/sdk/server/PollingSynchronizer.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ final class PollingSynchronizer implements Synchronizer {
5454

5555
@Override
5656
public void sync() {
57-
logger.info("starting FeatureProbe polling repository with interval: " + refreshInterval.toMillis() + "ms");
57+
logger.info("starting FeatureProbe polling repository with interval {} ms", refreshInterval.toMillis());
5858
poll();
5959
synchronized (this) {
6060
if (worker == null) {
@@ -84,15 +84,15 @@ private void poll() {
8484
try (Response response = httpClient.newCall(request).execute()) {
8585
String body = response.body().string();
8686
if (!response.isSuccessful()) {
87-
throw new HttpErrorException("Http request error : " + response.code());
87+
throw new HttpErrorException("Http request error: " + response.code());
8888
}
89-
logger.debug("Http response : " + response.toString());
90-
logger.debug("Http response body : " + body);
89+
logger.debug("Http response: {}", response);
90+
logger.debug("Http response body: {}", body);
9191
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
9292
Repository repository = mapper.readValue(body, Repository.class);
9393
dataRepository.refresh(repository);
9494
} catch (Exception e) {
95-
logger.error("Unexpected error from polling processor: {}", e.toString());
95+
logger.error("Unexpected error from polling processor", e);
9696
}
9797
}
9898
}

0 commit comments

Comments
 (0)