Skip to content

Commit 76a1f2a

Browse files
rls: Add route lookup reason to request whether it is due to a cache miss or stale cache entry (#12442)
b/348690462
1 parent 881996a commit 76a1f2a

File tree

8 files changed

+246
-158
lines changed

8 files changed

+246
-158
lines changed

rls/src/main/java/io/grpc/rls/CachingRlsLbClient.java

Lines changed: 73 additions & 61 deletions
Large diffs are not rendered by default.

rls/src/main/java/io/grpc/rls/RlsProtoConverters.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,17 @@ static final class RouteLookupRequestConverter
6464
@Override
6565
protected RlsProtoData.RouteLookupRequest doForward(RouteLookupRequest routeLookupRequest) {
6666
return RlsProtoData.RouteLookupRequest.create(
67-
ImmutableMap.copyOf(routeLookupRequest.getKeyMapMap()));
67+
ImmutableMap.copyOf(routeLookupRequest.getKeyMapMap()),
68+
RlsProtoData.RouteLookupRequest.Reason.valueOf(routeLookupRequest.getReason().name())
69+
);
6870
}
6971

7072
@Override
7173
protected RouteLookupRequest doBackward(RlsProtoData.RouteLookupRequest routeLookupRequest) {
7274
return
7375
RouteLookupRequest.newBuilder()
7476
.setTargetType("grpc")
77+
.setReason(RouteLookupRequest.Reason.valueOf(routeLookupRequest.reason().name()))
7578
.putAllKeyMap(routeLookupRequest.keyMap())
7679
.build();
7780
}

rls/src/main/java/io/grpc/rls/RlsProtoData.java

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,42 @@ final class RlsProtoData {
2727

2828
private RlsProtoData() {}
2929

30+
/** A key object for the Rls route lookup data cache. */
31+
@AutoValue
32+
@Immutable
33+
abstract static class RouteLookupRequestKey {
34+
35+
/** Returns a map of key values extracted via key builders for the gRPC or HTTP request. */
36+
abstract ImmutableMap<String, String> keyMap();
37+
38+
static RouteLookupRequestKey create(ImmutableMap<String, String> keyMap) {
39+
return new AutoValue_RlsProtoData_RouteLookupRequestKey(keyMap);
40+
}
41+
}
42+
3043
/** A request object sent to route lookup service. */
3144
@AutoValue
3245
@Immutable
3346
abstract static class RouteLookupRequest {
3447

48+
/** Names should match those in {@link io.grpc.lookup.v1.RouteLookupRequest.Reason}. */
49+
enum Reason {
50+
/** Unused. */
51+
REASON_UNKNOWN,
52+
/** No data available in local cache. */
53+
REASON_MISS,
54+
/** Data in local cache is stale. */
55+
REASON_STALE;
56+
}
57+
58+
/** Reason for making this request. */
59+
abstract Reason reason();
60+
3561
/** Returns a map of key values extracted via key builders for the gRPC or HTTP request. */
3662
abstract ImmutableMap<String, String> keyMap();
3763

38-
static RouteLookupRequest create(ImmutableMap<String, String> keyMap) {
39-
return new AutoValue_RlsProtoData_RouteLookupRequest(keyMap);
64+
static RouteLookupRequest create(ImmutableMap<String, String> keyMap, Reason reason) {
65+
return new AutoValue_RlsProtoData_RouteLookupRequest(reason, keyMap);
4066
}
4167
}
4268

rls/src/main/java/io/grpc/rls/RlsRequestFactory.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@
2727
import io.grpc.rls.RlsProtoData.GrpcKeyBuilder.Name;
2828
import io.grpc.rls.RlsProtoData.NameMatcher;
2929
import io.grpc.rls.RlsProtoData.RouteLookupConfig;
30-
import io.grpc.rls.RlsProtoData.RouteLookupRequest;
30+
import io.grpc.rls.RlsProtoData.RouteLookupRequestKey;
3131
import java.util.HashMap;
3232
import java.util.List;
3333
import java.util.Map;
3434

3535
/**
36-
* A RlsRequestFactory creates {@link RouteLookupRequest} using key builder map from {@link
36+
* A RlsRequestFactory creates {@link RouteLookupRequestKey} using key builder map from {@link
3737
* RouteLookupConfig}.
3838
*/
3939
final class RlsRequestFactory {
@@ -61,9 +61,9 @@ private static Map<String, GrpcKeyBuilder> createKeyBuilderTable(
6161
return table;
6262
}
6363

64-
/** Creates a {@link RouteLookupRequest} for given request's metadata. */
64+
/** Creates a {@link RouteLookupRequestKey} for the given request lookup metadata. */
6565
@CheckReturnValue
66-
RouteLookupRequest create(String service, String method, Metadata metadata) {
66+
RouteLookupRequestKey create(String service, String method, Metadata metadata) {
6767
checkNotNull(service, "service");
6868
checkNotNull(method, "method");
6969
String path = "/" + service + "/" + method;
@@ -73,7 +73,7 @@ RouteLookupRequest create(String service, String method, Metadata metadata) {
7373
grpcKeyBuilder = keyBuilderTable.get("/" + service + "/*");
7474
}
7575
if (grpcKeyBuilder == null) {
76-
return RouteLookupRequest.create(ImmutableMap.<String, String>of());
76+
return RouteLookupRequestKey.create(ImmutableMap.of());
7777
}
7878
ImmutableMap.Builder<String, String> rlsRequestHeaders =
7979
createRequestHeaders(metadata, grpcKeyBuilder.headers());
@@ -89,7 +89,7 @@ RouteLookupRequest create(String service, String method, Metadata metadata) {
8989
rlsRequestHeaders.put(extraKeys.method(), method);
9090
}
9191
rlsRequestHeaders.putAll(constantKeys);
92-
return RouteLookupRequest.create(rlsRequestHeaders.buildOrThrow());
92+
return RouteLookupRequestKey.create(rlsRequestHeaders.buildOrThrow());
9393
}
9494

9595
private ImmutableMap.Builder<String, String> createRequestHeaders(

0 commit comments

Comments
 (0)