Skip to content

Commit 5a8da19

Browse files
Ashok-Varmatemawi
authored andcommittedApr 22, 2024
cronet: Update Cronet to latest release + Move to Stable Cronet APIs.
1 parent 9de8e44 commit 5a8da19

File tree

5 files changed

+20
-130
lines changed

5 files changed

+20
-130
lines changed
 

‎cronet/src/main/java/io/grpc/cronet/CronetChannelBuilder.java

+4-74
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import static com.google.common.base.Preconditions.checkNotNull;
2121
import static io.grpc.internal.GrpcUtil.DEFAULT_MAX_MESSAGE_SIZE;
2222

23-
import android.util.Log;
2423
import com.google.common.annotations.VisibleForTesting;
2524
import com.google.common.base.Preconditions;
2625
import com.google.common.util.concurrent.MoreExecutors;
@@ -38,8 +37,6 @@
3837
import io.grpc.internal.ManagedChannelImplBuilder.ClientTransportFactoryBuilder;
3938
import io.grpc.internal.SharedResourceHolder;
4039
import io.grpc.internal.TransportTracer;
41-
import java.lang.reflect.InvocationTargetException;
42-
import java.lang.reflect.Method;
4340
import java.net.InetSocketAddress;
4441
import java.net.SocketAddress;
4542
import java.util.Collection;
@@ -49,15 +46,11 @@
4946
import javax.annotation.Nullable;
5047
import org.chromium.net.BidirectionalStream;
5148
import org.chromium.net.CronetEngine;
52-
import org.chromium.net.ExperimentalBidirectionalStream;
53-
import org.chromium.net.ExperimentalCronetEngine;
5449

5550
/** Convenience class for building channels with the cronet transport. */
5651
@ExperimentalApi("There is no plan to make this API stable, given transport API instability")
5752
public final class CronetChannelBuilder extends ForwardingChannelBuilder2<CronetChannelBuilder> {
5853

59-
private static final String LOG_TAG = "CronetChannelBuilder";
60-
6154
/** BidirectionalStream.Builder factory used for getting the gRPC BidirectionalStream. */
6255
public static abstract class StreamBuilderFactory {
6356
public abstract BidirectionalStream.Builder newBidirectionalStreamBuilder(
@@ -296,11 +289,6 @@ public Collection<Class<? extends SocketAddress>> getSupportedSocketAddressTypes
296289
* StreamBuilderFactory impl that applies TrafficStats tags to stream builders that are produced.
297290
*/
298291
private static class TaggingStreamFactory extends StreamBuilderFactory {
299-
private static volatile boolean loadSetTrafficStatsTagAttempted;
300-
private static volatile boolean loadSetTrafficStatsUidAttempted;
301-
private static volatile Method setTrafficStatsTagMethod;
302-
private static volatile Method setTrafficStatsUidMethod;
303-
304292
private final CronetEngine cronetEngine;
305293
private final boolean trafficStatsTagSet;
306294
private final int trafficStatsTag;
@@ -323,74 +311,16 @@ private static class TaggingStreamFactory extends StreamBuilderFactory {
323311
@Override
324312
public BidirectionalStream.Builder newBidirectionalStreamBuilder(
325313
String url, BidirectionalStream.Callback callback, Executor executor) {
326-
ExperimentalBidirectionalStream.Builder builder =
327-
((ExperimentalCronetEngine) cronetEngine)
314+
BidirectionalStream.Builder builder =
315+
cronetEngine
328316
.newBidirectionalStreamBuilder(url, callback, executor);
329317
if (trafficStatsTagSet) {
330-
setTrafficStatsTag(builder, trafficStatsTag);
318+
builder.setTrafficStatsTag(trafficStatsTag);
331319
}
332320
if (trafficStatsUidSet) {
333-
setTrafficStatsUid(builder, trafficStatsUid);
321+
builder.setTrafficStatsUid(trafficStatsUid);
334322
}
335323
return builder;
336324
}
337-
338-
private static void setTrafficStatsTag(ExperimentalBidirectionalStream.Builder builder,
339-
int tag) {
340-
if (!loadSetTrafficStatsTagAttempted) {
341-
synchronized (TaggingStreamFactory.class) {
342-
if (!loadSetTrafficStatsTagAttempted) {
343-
try {
344-
setTrafficStatsTagMethod = ExperimentalBidirectionalStream.Builder.class
345-
.getMethod("setTrafficStatsTag", int.class);
346-
} catch (NoSuchMethodException e) {
347-
Log.w(LOG_TAG,
348-
"Failed to load method ExperimentalBidirectionalStream.Builder.setTrafficStatsTag",
349-
e);
350-
} finally {
351-
loadSetTrafficStatsTagAttempted = true;
352-
}
353-
}
354-
}
355-
}
356-
if (setTrafficStatsTagMethod != null) {
357-
try {
358-
setTrafficStatsTagMethod.invoke(builder, tag);
359-
} catch (InvocationTargetException e) {
360-
throw new RuntimeException(e.getCause() == null ? e.getTargetException() : e.getCause());
361-
} catch (IllegalAccessException e) {
362-
Log.w(LOG_TAG, "Failed to set traffic stats tag: " + tag, e);
363-
}
364-
}
365-
}
366-
367-
private static void setTrafficStatsUid(ExperimentalBidirectionalStream.Builder builder,
368-
int uid) {
369-
if (!loadSetTrafficStatsUidAttempted) {
370-
synchronized (TaggingStreamFactory.class) {
371-
if (!loadSetTrafficStatsUidAttempted) {
372-
try {
373-
setTrafficStatsUidMethod = ExperimentalBidirectionalStream.Builder.class
374-
.getMethod("setTrafficStatsUid", int.class);
375-
} catch (NoSuchMethodException e) {
376-
Log.w(LOG_TAG,
377-
"Failed to load method ExperimentalBidirectionalStream.Builder.setTrafficStatsUid",
378-
e);
379-
} finally {
380-
loadSetTrafficStatsUidAttempted = true;
381-
}
382-
}
383-
}
384-
}
385-
if (setTrafficStatsUidMethod != null) {
386-
try {
387-
setTrafficStatsUidMethod.invoke(builder, uid);
388-
} catch (InvocationTargetException e) {
389-
throw new RuntimeException(e.getCause() == null ? e.getTargetException() : e.getCause());
390-
} catch (IllegalAccessException e) {
391-
Log.w(LOG_TAG, "Failed to set traffic stats uid: " + uid, e);
392-
}
393-
}
394-
}
395325
}
396326
}

‎cronet/src/main/java/io/grpc/cronet/CronetClientStream.java

+2-39
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@
4040
import io.grpc.internal.TransportFrameUtil;
4141
import io.grpc.internal.TransportTracer;
4242
import io.grpc.internal.WritableBuffer;
43-
import java.lang.reflect.InvocationTargetException;
44-
import java.lang.reflect.Method;
4543
import java.nio.Buffer;
4644
import java.nio.ByteBuffer;
4745
import java.nio.charset.Charset;
@@ -55,7 +53,6 @@
5553
import javax.annotation.concurrent.GuardedBy;
5654
import org.chromium.net.BidirectionalStream;
5755
import org.chromium.net.CronetException;
58-
import org.chromium.net.ExperimentalBidirectionalStream;
5956
import org.chromium.net.UrlResponseInfo;
6057

6158
/**
@@ -66,9 +63,6 @@ class CronetClientStream extends AbstractClientStream {
6663
private static final ByteBuffer EMPTY_BUFFER = ByteBuffer.allocateDirect(0);
6764
private static final String LOG_TAG = "grpc-java-cronet";
6865

69-
private static volatile boolean loadAddRequestAnnotationAttempted;
70-
private static volatile Method addRequestAnnotationMethod;
71-
7266
@Deprecated
7367
static final CallOptions.Key<Object> CRONET_ANNOTATION_KEY =
7468
CallOptions.Key.create("cronet-annotation");
@@ -194,14 +188,12 @@ public void writeHeaders(Metadata metadata, byte[] payload) {
194188
builder.delayRequestHeadersUntilFirstFlush(true);
195189
}
196190
if (annotation != null || annotations != null) {
197-
ExperimentalBidirectionalStream.Builder expBidiStreamBuilder =
198-
(ExperimentalBidirectionalStream.Builder) builder;
199191
if (annotation != null) {
200-
addRequestAnnotation(expBidiStreamBuilder, annotation);
192+
builder.addRequestAnnotation(annotation);
201193
}
202194
if (annotations != null) {
203195
for (Object o : annotations) {
204-
addRequestAnnotation(expBidiStreamBuilder, o);
196+
builder.addRequestAnnotation(o);
205197
}
206198
}
207199
}
@@ -367,35 +359,6 @@ private static boolean isApplicationHeader(String key) {
367359
&& !TE_HEADER.name().equalsIgnoreCase(key);
368360
}
369361

370-
private static void addRequestAnnotation(ExperimentalBidirectionalStream.Builder builder,
371-
Object annotation) {
372-
if (!loadAddRequestAnnotationAttempted) {
373-
synchronized (CronetClientStream.class) {
374-
if (!loadAddRequestAnnotationAttempted) {
375-
try {
376-
addRequestAnnotationMethod = ExperimentalBidirectionalStream.Builder.class
377-
.getMethod("addRequestAnnotation", Object.class);
378-
} catch (NoSuchMethodException e) {
379-
Log.w(LOG_TAG,
380-
"Failed to load method ExperimentalBidirectionalStream.Builder.addRequestAnnotation",
381-
e);
382-
} finally {
383-
loadAddRequestAnnotationAttempted = true;
384-
}
385-
}
386-
}
387-
}
388-
if (addRequestAnnotationMethod != null) {
389-
try {
390-
addRequestAnnotationMethod.invoke(builder, annotation);
391-
} catch (InvocationTargetException e) {
392-
throw new RuntimeException(e.getCause() == null ? e.getTargetException() : e.getCause());
393-
} catch (IllegalAccessException e) {
394-
Log.w(LOG_TAG, "Failed to add request annotation: " + annotation, e);
395-
}
396-
}
397-
}
398-
399362
private void setGrpcHeaders(BidirectionalStream.Builder builder) {
400363
// Psuedo-headers are set by cronet.
401364
// All non-pseudo headers must come after pseudo headers.

‎cronet/src/test/java/io/grpc/cronet/CronetChannelBuilderTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
import io.grpc.testing.TestMethodDescriptors;
3636
import java.net.InetSocketAddress;
3737
import java.util.concurrent.ScheduledExecutorService;
38-
import org.chromium.net.ExperimentalCronetEngine;
38+
import org.chromium.net.CronetEngine;
3939
import org.junit.Rule;
4040
import org.junit.Test;
4141
import org.junit.runner.RunWith;
@@ -50,7 +50,7 @@
5050
public final class CronetChannelBuilderTest {
5151
@Rule public final MockitoRule mocks = MockitoJUnit.rule();
5252

53-
@Mock private ExperimentalCronetEngine mockEngine;
53+
@Mock private CronetEngine mockEngine;
5454
@Mock private ChannelLogger channelLogger;
5555

5656
private final ClientStreamTracer[] tracers =

‎cronet/src/test/java/io/grpc/cronet/CronetClientStreamTest.java

+10-11
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@
5454
import java.util.concurrent.Executor;
5555
import org.chromium.net.BidirectionalStream;
5656
import org.chromium.net.CronetException;
57-
import org.chromium.net.ExperimentalBidirectionalStream;
5857
import org.chromium.net.UrlResponseInfo;
5958
import org.chromium.net.impl.UrlResponseInfoImpl;
6059
import org.junit.Before;
@@ -76,9 +75,9 @@ public final class CronetClientStreamTest {
7675
@Mock private CronetClientTransport transport;
7776
private Metadata metadata = new Metadata();
7877
@Mock private StreamBuilderFactory factory;
79-
@Mock private ExperimentalBidirectionalStream cronetStream;
78+
@Mock private BidirectionalStream cronetStream;
8079
@Mock private ClientStreamListener clientListener;
81-
@Mock private ExperimentalBidirectionalStream.Builder builder;
80+
@Mock private BidirectionalStream.Builder builder;
8281
private final Object lock = new Object();
8382
private final TransportTracer transportTracer = TransportTracer.getDefaultFactory().create();
8483
private final Executor executor = new Executor() {
@@ -681,8 +680,8 @@ public void getUnaryRequest() {
681680
true,
682681
false);
683682
callback.setStream(stream);
684-
ExperimentalBidirectionalStream.Builder getBuilder =
685-
mock(ExperimentalBidirectionalStream.Builder.class);
683+
BidirectionalStream.Builder getBuilder =
684+
mock(BidirectionalStream.Builder.class);
686685
when(getFactory.newBidirectionalStreamBuilder(
687686
any(String.class), any(BidirectionalStream.Callback.class), any(Executor.class)))
688687
.thenReturn(getBuilder);
@@ -738,8 +737,8 @@ public void idempotentMethod_usesHttpPut() {
738737
true,
739738
true);
740739
callback.setStream(stream);
741-
ExperimentalBidirectionalStream.Builder builder =
742-
mock(ExperimentalBidirectionalStream.Builder.class);
740+
BidirectionalStream.Builder builder =
741+
mock(BidirectionalStream.Builder.class);
743742
when(factory.newBidirectionalStreamBuilder(
744743
any(String.class), any(BidirectionalStream.Callback.class), any(Executor.class)))
745744
.thenReturn(builder);
@@ -770,8 +769,8 @@ public void alwaysUsePutOption_usesHttpPut() {
770769
true,
771770
true);
772771
callback.setStream(stream);
773-
ExperimentalBidirectionalStream.Builder builder =
774-
mock(ExperimentalBidirectionalStream.Builder.class);
772+
BidirectionalStream.Builder builder =
773+
mock(BidirectionalStream.Builder.class);
775774
when(factory.newBidirectionalStreamBuilder(
776775
any(String.class), any(BidirectionalStream.Callback.class), any(Executor.class)))
777776
.thenReturn(builder);
@@ -810,8 +809,8 @@ public void reservedHeadersStripped() {
810809
false,
811810
false);
812811
callback.setStream(stream);
813-
ExperimentalBidirectionalStream.Builder builder =
814-
mock(ExperimentalBidirectionalStream.Builder.class);
812+
BidirectionalStream.Builder builder =
813+
mock(BidirectionalStream.Builder.class);
815814
when(factory.newBidirectionalStreamBuilder(
816815
any(String.class), any(BidirectionalStream.Callback.class), any(Executor.class)))
817816
.thenReturn(builder);

‎gradle/libs.versions.toml

+2-4
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,8 @@ auto-value-annotations = "com.google.auto.value:auto-value-annotations:1.10.4"
2323
checkstyle = "com.puppycrawl.tools:checkstyle:10.12.5"
2424
commons-math3 = "org.apache.commons:commons-math3:3.6.1"
2525
conscrypt = "org.conscrypt:conscrypt-openjdk-uber:2.5.2"
26-
# Update notes / 2023-07-19 sergiitk:
27-
# Cronet (API and Embedded) upgrade is blocked by https://github.com/grpc/grpc-java/issues/10396.
28-
cronet-api = "org.chromium.net:cronet-api:108.5359.79"
29-
cronet-embedded = "org.chromium.net:cronet-embedded:108.5359.79"
26+
cronet-api = "org.chromium.net:cronet-api:119.6045.31"
27+
cronet-embedded = "org.chromium.net:cronet-embedded:119.6045.31"
3028
errorprone-annotations = "com.google.errorprone:error_prone_annotations:2.23.0"
3129
errorprone-core = "com.google.errorprone:error_prone_core:2.23.0"
3230
google-api-protos = "com.google.api.grpc:proto-google-common-protos:2.29.0"

0 commit comments

Comments
 (0)
Please sign in to comment.