Skip to content

Commit c8b283d

Browse files
lukidziLukasz Dziedziak
andauthored
Dont save whole response just data needed during another request (#133)
* Dont save whole response just data needed during another request Signed-off-by: Lukasz Dziedziak <[email protected]> * Changed to AutoValue, added small comment, changed property name Signed-off-by: Lukasz Dziedziak <[email protected]> * Changed why how we take resourceNames Signed-off-by: Lukasz Dziedziak <[email protected]> Co-authored-by: Lukasz Dziedziak <[email protected]>
1 parent 8828e23 commit c8b283d

File tree

5 files changed

+46
-19
lines changed

5 files changed

+46
-19
lines changed

server/pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,13 @@
1717
<version>0.1.23-SNAPSHOT</version>
1818
</dependency>
1919

20+
<dependency>
21+
<groupId>com.google.auto.value</groupId>
22+
<artifactId>auto-value</artifactId>
23+
<version>${auto-value.version}</version>
24+
<scope>provided</scope>
25+
</dependency>
26+
2027
<dependency>
2128
<groupId>io.grpc</groupId>
2229
<artifactId>grpc-netty</artifactId>

server/src/main/java/io/envoyproxy/controlplane/server/AdsDiscoveryRequestStreamObserver.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
*/
2222
public class AdsDiscoveryRequestStreamObserver extends DiscoveryRequestStreamObserver {
2323
private final ConcurrentMap<String, Watch> watches;
24-
private final ConcurrentMap<String, DiscoveryResponse> latestResponse;
24+
private final ConcurrentMap<String, LatestDiscoveryResponse> latestResponse;
2525
private final ConcurrentMap<String, Set<String>> ackedResources;
2626

2727
AdsDiscoveryRequestStreamObserver(StreamObserver<DiscoveryResponse> responseObserver,
@@ -59,12 +59,12 @@ boolean ads() {
5959
}
6060

6161
@Override
62-
DiscoveryResponse latestResponse(String typeUrl) {
62+
LatestDiscoveryResponse latestResponse(String typeUrl) {
6363
return latestResponse.get(typeUrl);
6464
}
6565

6666
@Override
67-
void setLatestResponse(String typeUrl, DiscoveryResponse response) {
67+
void setLatestResponse(String typeUrl, LatestDiscoveryResponse response) {
6868
latestResponse.put(typeUrl, response);
6969
}
7070

server/src/main/java/io/envoyproxy/controlplane/server/DiscoveryRequestStreamObserver.java

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -71,16 +71,12 @@ public void onNext(DiscoveryRequest request) {
7171
return;
7272
}
7373

74-
DiscoveryResponse latestResponse = latestResponse(requestTypeUrl);
75-
String resourceNonce = latestResponse == null ? null : latestResponse.getNonce();
74+
LatestDiscoveryResponse latestDiscoveryResponse = latestResponse(requestTypeUrl);
75+
String resourceNonce = latestDiscoveryResponse == null ? null : latestDiscoveryResponse.nonce();
7676

7777
if (isNullOrEmpty(resourceNonce) || resourceNonce.equals(nonce)) {
78-
if (!request.hasErrorDetail() && latestResponse != null) {
79-
Set<String> ackedResourcesForType = latestResponse.getResourcesList()
80-
.stream()
81-
.map(Resources::getResourceName)
82-
.collect(Collectors.toSet());
83-
setAckedResources(requestTypeUrl, ackedResourcesForType);
78+
if (!request.hasErrorDetail() && latestDiscoveryResponse != null) {
79+
setAckedResources(requestTypeUrl, latestDiscoveryResponse.resourceNames());
8480
}
8581

8682
computeWatch(requestTypeUrl, () -> discoverySever.configWatcher.createWatch(
@@ -155,7 +151,13 @@ private void send(Response response, String typeUrl) {
155151
// Store the latest response *before* we send the response. This ensures that by the time the request
156152
// is processed the map is guaranteed to be updated. Doing it afterwards leads to a race conditions
157153
// which may see the incoming request arrive before the map is updated, failing the nonce check erroneously.
158-
setLatestResponse(typeUrl, discoveryResponse);
154+
setLatestResponse(
155+
typeUrl,
156+
LatestDiscoveryResponse.create(
157+
nonce,
158+
response.resources().stream().map(Resources::getResourceName).collect(Collectors.toSet())
159+
)
160+
);
159161
synchronized (responseObserver) {
160162
if (!isClosing) {
161163
try {
@@ -173,9 +175,9 @@ private void send(Response response, String typeUrl) {
173175

174176
abstract boolean ads();
175177

176-
abstract DiscoveryResponse latestResponse(String typeUrl);
178+
abstract LatestDiscoveryResponse latestResponse(String typeUrl);
177179

178-
abstract void setLatestResponse(String typeUrl, DiscoveryResponse response);
180+
abstract void setLatestResponse(String typeUrl, LatestDiscoveryResponse response);
179181

180182
abstract Set<String> ackedResources(String typeUrl);
181183

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package io.envoyproxy.controlplane.server;
2+
3+
import com.google.auto.value.AutoValue;
4+
import java.util.Set;
5+
6+
/**
7+
* Class introduces optimization which store only required data during next request.
8+
*/
9+
@AutoValue
10+
public abstract class LatestDiscoveryResponse {
11+
static LatestDiscoveryResponse create(String nonce, Set<String> resourceNames) {
12+
return new AutoValue_LatestDiscoveryResponse(nonce, resourceNames);
13+
}
14+
15+
abstract String nonce();
16+
17+
abstract Set<String> resourceNames();
18+
}

server/src/main/java/io/envoyproxy/controlplane/server/XdsDiscoveryRequestStreamObserver.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
*/
1515
public class XdsDiscoveryRequestStreamObserver extends DiscoveryRequestStreamObserver {
1616
private volatile Watch watch;
17-
private volatile DiscoveryResponse latestResponse;
17+
private volatile LatestDiscoveryResponse latestDiscoveryResponse;
1818
// ackedResources is only used in the same thread so it need not be volatile
1919
private Set<String> ackedResources;
2020

@@ -40,13 +40,13 @@ boolean ads() {
4040
}
4141

4242
@Override
43-
DiscoveryResponse latestResponse(String typeUrl) {
44-
return latestResponse;
43+
LatestDiscoveryResponse latestResponse(String typeUrl) {
44+
return latestDiscoveryResponse;
4545
}
4646

4747
@Override
48-
void setLatestResponse(String typeUrl, DiscoveryResponse response) {
49-
latestResponse = response;
48+
void setLatestResponse(String typeUrl, LatestDiscoveryResponse response) {
49+
latestDiscoveryResponse = response;
5050
}
5151

5252
@Override

0 commit comments

Comments
 (0)