Skip to content

Commit e872d75

Browse files
authored
Another round of API clean-up (#2996)
- Removed all deprecated classes, fields and methods from the public API. - The `-Dcom.linecorp.armeria.useLegacyMeterNames` flag does not work anymore. - Removed `HTTP_` or `Http` from various fields and methods. - `ClientOptions`: - `HTTP_HEADERS` -> `HEADERS` - `httpHeaders()` -> `headers()` - `Clients`: - `withHttpHeader()` -> `withHeader()` - `withHttpHeaders()` -> `withHeaders()` - `AbstractClientOptionsBuilder` and all its subtypes - `setHttpHeader()` -> `setHeader()` - `setHttpHeaders()` -> `setHeaders()` - `addHttpHeader()` -> `addHeader()` - `addHttpHeaders()` -> `addHeaders()` - Removed redundant `add` prefix to some builder methods. - `RequestContextExporterBuilder` - `addBuiltIn()` -> `builtIn()` - `addAttribute()` -> `attr()` - `addRequestHeader()` -> `requestHeader()` - `addResponseHeader()` -> `responseHeader()` - `addKeyPattern()` -> `keyPattern()` - `KeyStoreCredentialResolverBuilder` - `addKeyPassword()` -> `keyPassword()` - `addKeyPasswords()` -> `keyPasswords()` - `DocService`, `DocServiceBuilder`, and their related things - `exampleHttpHeaders` -> `exampleHeaders` - `exampleRequest()` -> `exampleRequests()` - `exampleRequestForMethod()` -> `exampleRequests()` - Removed `exampleRequests(Object...)` to avoid ambiguity. - `injectedScript()` -> `injectedScripts()` - Removed `http_` from all query parameters - `http_headers` -> `headers` - `http_headers_sticky` -> `sticky_headers` - `AbstractRequestContextBuilder` and all its subtypes - `remoteAddress()` and `localAddress()` now accept `SocketAddress` instead of `InetSocketAddress`, so that we have more options when we add other transports such as Unix domain socket. - `ServerListenerBuilder` - `addStartingCallback()` -> `whenStarting()` - `addStartedCallback()` -> `whenStarted()` - `addStopingCallback()` -> `whenStoping()` - `addStopedCallback()` -> `whenStoped()` - Removed all methods that accept `Runnable` in favor of those that accept `Consumer`. - Fixed the type parameters of `Iterable`s. - `EncodingServiceBuilder` - `encodableContentTypePredicate()` -> `encodableContentTypes()` - `encodableRequestHeadersPredicate()` -> `encodableRequestHeaders()` - `TokenBucketThrottlingStrategyBuilder` /cc @max904-github - Removed the `with` from the builder methods. - `withMinimumBackoff()` -> `minimumBackoff()` - `withHeadersScheme()` -> `headersScheme()` - Miscellaneous: - Precalculate the hash code of `DefaultRoute`. - Allow binding `ServiceWithRoutes` without specifying any routes. - This allows a user to bind a `GrpcService` without binding any routes explicitly.
1 parent a16e2c0 commit e872d75

156 files changed

Lines changed: 928 additions & 4675 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

bucket4j/src/main/java/com/linecorp/armeria/server/throttling/bucket4j/TokenBucketThrottlingStrategyBuilder.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public TokenBucketThrottlingStrategyBuilder<T> name(String name) {
5959
* Optional {@link Duration} that defines a minimum backoff period for throttled requests.
6060
* By default, it will be set to 0 seconds.
6161
*/
62-
public TokenBucketThrottlingStrategyBuilder<T> withMinimumBackoff(Duration minimumBackoff) {
62+
public TokenBucketThrottlingStrategyBuilder<T> minimumBackoff(Duration minimumBackoff) {
6363
requireNonNull(minimumBackoff, "minimumBackoff");
6464
checkArgument(!minimumBackoff.isNegative(), "minimumBackoff: %s (expected: >= 0)", minimumBackoff);
6565
this.minimumBackoff = minimumBackoff;
@@ -73,8 +73,8 @@ public TokenBucketThrottlingStrategyBuilder<T> withMinimumBackoff(Duration minim
7373
* @param headersScheme defines specific RateLimit Header Scheme for HTTP.
7474
* @param sendQuota indicates whether to use quota header for the scheme, like {@code X-RateLimit-Limit}.
7575
*/
76-
public TokenBucketThrottlingStrategyBuilder<T> withHeadersScheme(ThrottlingHeaders headersScheme,
77-
boolean sendQuota) {
76+
public TokenBucketThrottlingStrategyBuilder<T> headersScheme(ThrottlingHeaders headersScheme,
77+
boolean sendQuota) {
7878
this.headersScheme = requireNonNull(headersScheme, "headersScheme");
7979
this.sendQuota = sendQuota;
8080
return this;
@@ -87,8 +87,8 @@ public TokenBucketThrottlingStrategyBuilder<T> withHeadersScheme(ThrottlingHeade
8787
* @param headersScheme defines specific RateLimit Header Scheme for HTTP. By default, the quota header
8888
* will not be used for the scheme.
8989
*/
90-
public TokenBucketThrottlingStrategyBuilder<T> withHeadersScheme(ThrottlingHeaders headersScheme) {
91-
return withHeadersScheme(headersScheme, false);
90+
public TokenBucketThrottlingStrategyBuilder<T> headersScheme(ThrottlingHeaders headersScheme) {
91+
return headersScheme(headersScheme, false);
9292
}
9393

9494
/**

bucket4j/src/test/java/com/linecorp/armeria/server/throttling/bucket4j/TokenBucketThrottlingStrategyTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,14 @@ protected void configure(ServerBuilder sb) throws Exception {
6363
SERVICE.decorate(
6464
ThrottlingService.newDecorator(
6565
TokenBucketThrottlingStrategy.<HttpRequest>builder(tokenBucket)
66-
.withHeadersScheme(ThrottlingHeaders.X_RATELIMIT)
66+
.headersScheme(ThrottlingHeaders.X_RATELIMIT)
6767
.build())));
6868
sb.service("/http-throttle2",
6969
SERVICE.decorate(
7070
ThrottlingService.newDecorator(
7171
TokenBucketThrottlingStrategy.<HttpRequest>builder(tokenBucket)
72-
.withMinimumBackoff(Duration.ofSeconds(15L))
73-
.withHeadersScheme(ThrottlingHeaders.X_RATELIMIT, true)
72+
.minimumBackoff(Duration.ofSeconds(15L))
73+
.headersScheme(ThrottlingHeaders.X_RATELIMIT, true)
7474
.build())));
7575
sb.service("/http-throttle3",
7676
SERVICE.decorate(
@@ -81,7 +81,7 @@ protected void configure(ServerBuilder sb) throws Exception {
8181
SERVICE.decorate(
8282
ThrottlingService.newDecorator(
8383
TokenBucketThrottlingStrategy.<HttpRequest>builder(tokenBucket)
84-
.withMinimumBackoff(Duration.ofSeconds(5L))
84+
.minimumBackoff(Duration.ofSeconds(5L))
8585
.build(),
8686
(delegate, ctx, req, cause) ->
8787
HttpResponse.of(HttpStatus.SERVICE_UNAVAILABLE))));

core/src/main/java/com/linecorp/armeria/client/AbstractClientOptionsBuilder.java

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public class AbstractClientOptionsBuilder {
4343

4444
private final Map<ClientOption<?>, ClientOptionValue<?>> options = new LinkedHashMap<>();
4545
private final ClientDecorationBuilder decoration = ClientDecoration.builder();
46-
private final HttpHeadersBuilder httpHeaders = HttpHeaders.builder();
46+
private final HttpHeadersBuilder headers = HttpHeaders.builder();
4747

4848
/**
4949
* Creates a new instance.
@@ -106,9 +106,9 @@ public <T> AbstractClientOptionsBuilder option(ClientOptionValue<T> optionValue)
106106
final ClientOption<?> opt = optionValue.option();
107107
if (opt == ClientOptions.DECORATION) {
108108
decoration.add((ClientDecoration) optionValue.value());
109-
} else if (opt == ClientOptions.HTTP_HEADERS) {
109+
} else if (opt == ClientOptions.HEADERS) {
110110
final HttpHeaders h = (HttpHeaders) optionValue.value();
111-
setHttpHeaders(h);
111+
setHeaders(h);
112112
} else {
113113
options.put(opt, optionValue);
114114
}
@@ -268,40 +268,40 @@ public AbstractClientOptionsBuilder rpcDecorator(DecoratingRpcClientFunction dec
268268
/**
269269
* Adds the specified HTTP header.
270270
*/
271-
public AbstractClientOptionsBuilder addHttpHeader(CharSequence name, Object value) {
271+
public AbstractClientOptionsBuilder addHeader(CharSequence name, Object value) {
272272
requireNonNull(name, "name");
273273
requireNonNull(value, "value");
274-
httpHeaders.addObject(HttpHeaderNames.of(name), value);
274+
headers.addObject(HttpHeaderNames.of(name), value);
275275
return this;
276276
}
277277

278278
/**
279279
* Adds the specified HTTP headers.
280280
*/
281-
public AbstractClientOptionsBuilder addHttpHeaders(
282-
Iterable<? extends Entry<? extends CharSequence, ?>> httpHeaders) {
283-
requireNonNull(httpHeaders, "httpHeaders");
284-
this.httpHeaders.addObject(httpHeaders);
281+
public AbstractClientOptionsBuilder addHeaders(
282+
Iterable<? extends Entry<? extends CharSequence, ?>> headers) {
283+
requireNonNull(headers, "headers");
284+
this.headers.addObject(headers);
285285
return this;
286286
}
287287

288288
/**
289289
* Sets the specified HTTP header.
290290
*/
291-
public AbstractClientOptionsBuilder setHttpHeader(CharSequence name, Object value) {
291+
public AbstractClientOptionsBuilder setHeader(CharSequence name, Object value) {
292292
requireNonNull(name, "name");
293293
requireNonNull(value, "value");
294-
httpHeaders.setObject(HttpHeaderNames.of(name), value);
294+
headers.setObject(HttpHeaderNames.of(name), value);
295295
return this;
296296
}
297297

298298
/**
299299
* Sets the specified HTTP headers.
300300
*/
301-
public AbstractClientOptionsBuilder setHttpHeaders(
302-
Iterable<? extends Entry<? extends CharSequence, ?>> httpHeaders) {
303-
requireNonNull(httpHeaders, "httpHeaders");
304-
this.httpHeaders.setObject(httpHeaders);
301+
public AbstractClientOptionsBuilder setHeaders(
302+
Iterable<? extends Entry<? extends CharSequence, ?>> headers) {
303+
requireNonNull(headers, "headers");
304+
this.headers.setObject(headers);
305305
return this;
306306
}
307307

@@ -312,7 +312,7 @@ public AbstractClientOptionsBuilder setHttpHeaders(
312312
*/
313313
public AbstractClientOptionsBuilder auth(BasicToken token) {
314314
requireNonNull(token, "token");
315-
httpHeaders.set(HttpHeaderNames.AUTHORIZATION, token.toHeaderValue());
315+
headers.set(HttpHeaderNames.AUTHORIZATION, token.toHeaderValue());
316316
return this;
317317
}
318318

@@ -322,7 +322,7 @@ public AbstractClientOptionsBuilder auth(BasicToken token) {
322322
*/
323323
public AbstractClientOptionsBuilder auth(OAuth1aToken token) {
324324
requireNonNull(token, "token");
325-
httpHeaders.set(HttpHeaderNames.AUTHORIZATION, token.toHeaderValue());
325+
headers.set(HttpHeaderNames.AUTHORIZATION, token.toHeaderValue());
326326
return this;
327327
}
328328

@@ -332,7 +332,7 @@ public AbstractClientOptionsBuilder auth(OAuth1aToken token) {
332332
*/
333333
public AbstractClientOptionsBuilder auth(OAuth2Token token) {
334334
requireNonNull(token, "token");
335-
httpHeaders.set(HttpHeaderNames.AUTHORIZATION, token.toHeaderValue());
335+
headers.set(HttpHeaderNames.AUTHORIZATION, token.toHeaderValue());
336336
return this;
337337
}
338338

@@ -353,7 +353,7 @@ protected final ClientOptions buildOptions(@Nullable ClientOptions baseOptions)
353353
final int numOpts = optVals.size();
354354
final ClientOptionValue<?>[] optValArray = optVals.toArray(new ClientOptionValue[numOpts + 2]);
355355
optValArray[numOpts] = ClientOptions.DECORATION.newValue(decoration.build());
356-
optValArray[numOpts + 1] = ClientOptions.HTTP_HEADERS.newValue(httpHeaders.build());
356+
optValArray[numOpts + 1] = ClientOptions.HEADERS.newValue(headers.build());
357357

358358
if (baseOptions != null) {
359359
return ClientOptions.of(baseOptions, optValArray);

core/src/main/java/com/linecorp/armeria/client/AbstractRuleBuilder.java

Lines changed: 2 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package com.linecorp.armeria.client;
1818

1919
import static com.google.common.base.Preconditions.checkArgument;
20-
import static com.linecorp.armeria.internal.common.util.BiPredicateUtil.toBiPredicateForSecond;
2120
import static java.util.Objects.requireNonNull;
2221

2322
import java.util.Set;
@@ -66,16 +65,6 @@ protected AbstractRuleBuilder(
6665
this.requestHeadersFilter = (BiPredicate<ClientRequestContext, RequestHeaders>) requestHeadersFilter;
6766
}
6867

69-
/**
70-
* Creates a new instance with the specified {@code requestHeadersFilter}.
71-
*
72-
* @deprecated Use {@link #AbstractRuleBuilder(BiPredicate)}.
73-
*/
74-
@Deprecated
75-
protected AbstractRuleBuilder(Predicate<? super RequestHeaders> requestHeadersFilter) {
76-
this(toBiPredicateForSecond(requireNonNull(requestHeadersFilter, "requestHeadersFilter")));
77-
}
78-
7968
/**
8069
* Adds the specified {@code responseHeadersFilter}.
8170
*/
@@ -93,17 +82,6 @@ public AbstractRuleBuilder onResponseHeaders(
9382
return this;
9483
}
9584

96-
/**
97-
* Adds the specified {@code responseHeadersFilter}.
98-
*
99-
* @deprecated Use {@link #onResponseHeaders(BiPredicate)}.
100-
*/
101-
@Deprecated
102-
public AbstractRuleBuilder onResponseHeaders(Predicate<? super ResponseHeaders> responseHeadersFilter) {
103-
requireNonNull(responseHeadersFilter, "responseHeadersFilter");
104-
return onResponseHeaders(toBiPredicateForSecond(responseHeadersFilter));
105-
}
106-
10785
/**
10886
* Adds the specified {@code responseTrailersFilter}.
10987
*/
@@ -121,17 +99,6 @@ public AbstractRuleBuilder onResponseTrailers(
12199
return this;
122100
}
123101

124-
/**
125-
* Adds the specified {@code responseTrailersFilter}.
126-
*
127-
* @deprecated Use {@link #onResponseTrailers(BiPredicate)}.
128-
*/
129-
@Deprecated
130-
public AbstractRuleBuilder onResponseTrailers(Predicate<? super HttpHeaders> responseTrailersFilter) {
131-
requireNonNull(responseTrailersFilter, "responseTrailersFilter");
132-
return onResponseTrailers(toBiPredicateForSecond(responseTrailersFilter));
133-
}
134-
135102
/**
136103
* Adds the specified {@link HttpStatusClass}es.
137104
*/
@@ -147,7 +114,7 @@ public AbstractRuleBuilder onStatusClass(Iterable<HttpStatusClass> statusClasses
147114
checkArgument(!Iterables.isEmpty(statusClasses), "statusClasses can't be empty.");
148115

149116
final Set<HttpStatusClass> statusClasses0 = Sets.immutableEnumSet(statusClasses);
150-
onResponseHeaders(headers -> statusClasses0.contains(headers.status().codeClass()));
117+
onResponseHeaders((ctx, headers) -> statusClasses0.contains(headers.status().codeClass()));
151118
return this;
152119
}
153120

@@ -173,7 +140,7 @@ public AbstractRuleBuilder onStatus(Iterable<HttpStatus> statuses) {
173140
checkArgument(!Iterables.isEmpty(statuses), "statuses can't be empty.");
174141

175142
final Set<HttpStatus> statuses0 = ImmutableSet.copyOf(statuses);
176-
onResponseHeaders(headers -> statuses0.contains(headers.status()));
143+
onResponseHeaders((ctx, headers) -> statuses0.contains(headers.status()));
177144
return this;
178145
}
179146

@@ -187,17 +154,6 @@ public AbstractRuleBuilder onStatus(
187154
return this;
188155
}
189156

190-
/**
191-
* Adds the specified {@code statusFilter}.
192-
*
193-
* @deprecated Use {@link #onStatus(BiPredicate)}.
194-
*/
195-
@Deprecated
196-
public AbstractRuleBuilder onStatus(Predicate<? super HttpStatus> statusFilter) {
197-
requireNonNull(statusFilter, "statusFilter");
198-
return onStatus(toBiPredicateForSecond(statusFilter));
199-
}
200-
201157
/**
202158
* Adds the specified exception type.
203159
*/
@@ -223,17 +179,6 @@ public AbstractRuleBuilder onException(
223179
return this;
224180
}
225181

226-
/**
227-
* Adds the specified {@code exceptionFilter}.
228-
*
229-
* @deprecated Use {@link #onException(BiPredicate)}.
230-
*/
231-
@Deprecated
232-
public AbstractRuleBuilder onException(Predicate<? super Throwable> exceptionFilter) {
233-
requireNonNull(exceptionFilter, "exceptionFilter");
234-
return onException(toBiPredicateForSecond(exceptionFilter));
235-
}
236-
237182
/**
238183
* Adds any {@link Exception}.
239184
*/

core/src/main/java/com/linecorp/armeria/client/AbstractRuleWithContentBuilder.java

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@
2121
import java.util.concurrent.CompletionStage;
2222
import java.util.function.BiFunction;
2323
import java.util.function.BiPredicate;
24-
import java.util.function.Function;
25-
import java.util.function.Predicate;
2624

2725
import javax.annotation.Nullable;
2826

@@ -53,16 +51,6 @@ protected AbstractRuleWithContentBuilder(
5351
super(requestHeadersFilter);
5452
}
5553

56-
/**
57-
* Creates a new instance with the specified {@code requestHeadersFilter}.
58-
*
59-
* @deprecated Use {@link #AbstractRuleWithContentBuilder(BiPredicate)}.
60-
*/
61-
@Deprecated
62-
protected AbstractRuleWithContentBuilder(Predicate<? super RequestHeaders> requestHeadersFilter) {
63-
super(requestHeadersFilter);
64-
}
65-
6654
/**
6755
* Adds the specified {@code responseFilter}.
6856
*/
@@ -104,18 +92,6 @@ public AbstractRuleWithContentBuilder<T> onResponse(
10492
return this;
10593
}
10694

107-
/**
108-
* Adds the specified {@code responseFilter}.
109-
*
110-
* @deprecated Use {@link #onResponse(BiFunction)}.
111-
*/
112-
@Deprecated
113-
public AbstractRuleWithContentBuilder<T> onResponse(
114-
Function<? super T, ? extends CompletionStage<Boolean>> responseFilter) {
115-
requireNonNull(responseFilter, "responseFilter");
116-
return onResponse((unused, res) -> responseFilter.apply(res));
117-
}
118-
11995
/**
12096
* Returns the {@code responseFilter}.
12197
*/

core/src/main/java/com/linecorp/armeria/client/AbstractWebClientBuilder.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,11 +158,19 @@ protected final ClientBuilderParams clientBuilderParams(ClientOptions options) {
158158
return ClientBuilderParams.of(scheme, endpointGroup, path, WebClient.class, options);
159159
}
160160

161+
/**
162+
* Raises an {@link UnsupportedOperationException} because this builder doesn't support RPC-level but only
163+
* HTTP-level decorators.
164+
*/
161165
@Override
162166
public AbstractWebClientBuilder rpcDecorator(Function<? super RpcClient, ? extends RpcClient> decorator) {
163167
throw new UnsupportedOperationException("RPC decorator cannot be added to the web client builder.");
164168
}
165169

170+
/**
171+
* Raises an {@link UnsupportedOperationException} because this builder doesn't support RPC-level but only
172+
* HTTP-level decorators.
173+
*/
166174
@Override
167175
public AbstractWebClientBuilder rpcDecorator(DecoratingRpcClientFunction decorator) {
168176
throw new UnsupportedOperationException("RPC decorator cannot be added to the web client builder.");

0 commit comments

Comments
 (0)