From b009828a2b4ae3ea3438d8b7c6d7af1f42dec5ff Mon Sep 17 00:00:00 2001 From: Jordan Regier Date: Tue, 9 Jul 2019 11:22:34 -0400 Subject: [PATCH 01/12] Ignore connection errors --- .../apollo/internal/subscription/RealSubscriptionManager.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apollo-runtime/src/main/java/com/apollographql/apollo/internal/subscription/RealSubscriptionManager.java b/apollo-runtime/src/main/java/com/apollographql/apollo/internal/subscription/RealSubscriptionManager.java index 62d9499f490..931d24103d3 100644 --- a/apollo-runtime/src/main/java/com/apollographql/apollo/internal/subscription/RealSubscriptionManager.java +++ b/apollo-runtime/src/main/java/com/apollographql/apollo/internal/subscription/RealSubscriptionManager.java @@ -237,7 +237,9 @@ void onOperationServerMessage(OperationServerMessage message) { } else if (message instanceof OperationServerMessage.Complete) { onCompleteServerMessage((OperationServerMessage.Complete) message); } else if (message instanceof OperationServerMessage.ConnectionError) { - disconnect(true); + // Jordan - Ignore connection errors, as they don't always mean the socket should be disconnected + // See https://github.com/apollographql/subscriptions-transport-ws/blob/master/PROTOCOL.md#gql_connection_error +// disconnect(true); } else if (message instanceof OperationServerMessage.ConnectionKeepAlive) { resetConnectionKeepAliveTimerTask(); } From 40f1e6ae659247a39405dbfca77003db17933560 Mon Sep 17 00:00:00 2001 From: Jordan Regier Date: Wed, 31 Jul 2019 11:58:02 -0400 Subject: [PATCH 02/12] Consider newlines when generating operation ids --- .../apollographql/apollo/compiler/OperationTypeSpecBuilder.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apollo-compiler/src/main/kotlin/com/apollographql/apollo/compiler/OperationTypeSpecBuilder.kt b/apollo-compiler/src/main/kotlin/com/apollographql/apollo/compiler/OperationTypeSpecBuilder.kt index 9b842893d2a..b665df226d1 100644 --- a/apollo-compiler/src/main/kotlin/com/apollographql/apollo/compiler/OperationTypeSpecBuilder.kt +++ b/apollo-compiler/src/main/kotlin/com/apollographql/apollo/compiler/OperationTypeSpecBuilder.kt @@ -55,7 +55,7 @@ class OperationTypeSpecBuilder( private fun TypeSpec.Builder.addOperationId(operation: Operation): TypeSpec.Builder { addField(FieldSpec.builder(ClassNames.STRING, OPERATION_ID_FIELD_NAME) .addModifiers(Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL) - .initializer("\$S", operation.sourceWithFragments?.filter { it != '\n' }?.sha256()) + .initializer("\$S", operation.sourceWithFragments?.sha256()) .build() ) From 7c63a7bb0a1ecedda2853c0665462945a2ad1491 Mon Sep 17 00:00:00 2001 From: Jordan Regier Date: Wed, 31 Jul 2019 16:53:27 -0400 Subject: [PATCH 03/12] Add support for persisted queries inside subscriptions --- .../java/com/apollographql/apollo/ApolloClient.java | 2 +- .../apollo/interceptor/ApolloInterceptor.java | 3 +++ .../subscription/RealSubscriptionManager.java | 10 ++++++---- .../apollo/subscription/OperationClientMessage.java | 11 +++++++++-- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/apollo-runtime/src/main/java/com/apollographql/apollo/ApolloClient.java b/apollo-runtime/src/main/java/com/apollographql/apollo/ApolloClient.java index c0859c373a5..0d9726b38bb 100644 --- a/apollo-runtime/src/main/java/com/apollographql/apollo/ApolloClient.java +++ b/apollo-runtime/src/main/java/com/apollographql/apollo/ApolloClient.java @@ -576,7 +576,7 @@ public ApolloClient build() { if (subscriptionTransportFactory.isPresent()) { subscriptionManager = new RealSubscriptionManager(scalarTypeAdapters, subscriptionTransportFactory.get(), subscriptionConnectionParams.or(Collections.emptyMap()), dispatcher, - subscriptionHeartbeatTimeout); + subscriptionHeartbeatTimeout, enableAutoPersistedQueries); } return new ApolloClient(serverUrl, diff --git a/apollo-runtime/src/main/java/com/apollographql/apollo/interceptor/ApolloInterceptor.java b/apollo-runtime/src/main/java/com/apollographql/apollo/interceptor/ApolloInterceptor.java index 597d498b871..82332c2369d 100644 --- a/apollo-runtime/src/main/java/com/apollographql/apollo/interceptor/ApolloInterceptor.java +++ b/apollo-runtime/src/main/java/com/apollographql/apollo/interceptor/ApolloInterceptor.java @@ -201,6 +201,9 @@ public Builder useHttpGetMethodForQueries(boolean useHttpGetMethodForQueries) { public Builder autoPersistQueries(boolean autoPersistQueries) { this.autoPersistQueries = autoPersistQueries; + if (autoPersistQueries) { + sendQueryDocument = false; + } return this; } diff --git a/apollo-runtime/src/main/java/com/apollographql/apollo/internal/subscription/RealSubscriptionManager.java b/apollo-runtime/src/main/java/com/apollographql/apollo/internal/subscription/RealSubscriptionManager.java index 931d24103d3..8c227916690 100644 --- a/apollo-runtime/src/main/java/com/apollographql/apollo/internal/subscription/RealSubscriptionManager.java +++ b/apollo-runtime/src/main/java/com/apollographql/apollo/internal/subscription/RealSubscriptionManager.java @@ -60,10 +60,11 @@ public final class RealSubscriptionManager implements SubscriptionManager { } }; private final List onStateChangeListeners = new CopyOnWriteArrayList<>(); + private boolean enableAutoPersistedQueries; public RealSubscriptionManager(@NotNull ScalarTypeAdapters scalarTypeAdapters, - @NotNull final SubscriptionTransport.Factory transportFactory, @NotNull Map connectionParams, - @NotNull final Executor dispatcher, long connectionHeartbeatTimeoutMs) { + @NotNull final SubscriptionTransport.Factory transportFactory, @NotNull Map connectionParams, + @NotNull final Executor dispatcher, long connectionHeartbeatTimeoutMs, boolean enableAutoPersistedQueries) { checkNotNull(scalarTypeAdapters, "scalarTypeAdapters == null"); checkNotNull(transportFactory, "transportFactory == null"); checkNotNull(dispatcher, "dispatcher == null"); @@ -73,6 +74,7 @@ public RealSubscriptionManager(@NotNull ScalarTypeAdapters scalarTypeAdapters, this.transport = transportFactory.create(new SubscriptionTransportCallback(this, dispatcher)); this.dispatcher = dispatcher; this.connectionHeartbeatTimeoutMs = connectionHeartbeatTimeoutMs; + this.enableAutoPersistedQueries = enableAutoPersistedQueries; } @Override @@ -160,7 +162,7 @@ void doSubscribe(Subscription subscription, SubscriptionManager.Callback callbac setStateAndNotify(State.CONNECTING); transport.connect(); } else if (state == State.ACTIVE) { - transport.send(new OperationClientMessage.Start(subscriptionId, subscription, scalarTypeAdapters)); + transport.send(new OperationClientMessage.Start(subscriptionId, subscription, scalarTypeAdapters, enableAutoPersistedQueries)); } } } @@ -336,7 +338,7 @@ private void onConnectionAcknowledgeServerMessage() { for (Map.Entry entry : subscriptions.entrySet()) { String subscriptionId = entry.getKey(); Subscription subscription = entry.getValue().subscription; - transport.send(new OperationClientMessage.Start(subscriptionId, subscription, scalarTypeAdapters)); + transport.send(new OperationClientMessage.Start(subscriptionId, subscription, scalarTypeAdapters, enableAutoPersistedQueries)); } } } diff --git a/apollo-runtime/src/main/java/com/apollographql/apollo/subscription/OperationClientMessage.java b/apollo-runtime/src/main/java/com/apollographql/apollo/subscription/OperationClientMessage.java index 982e102a398..635f4126ad7 100644 --- a/apollo-runtime/src/main/java/com/apollographql/apollo/subscription/OperationClientMessage.java +++ b/apollo-runtime/src/main/java/com/apollographql/apollo/subscription/OperationClientMessage.java @@ -61,18 +61,21 @@ public Init(@NotNull Map connectionParams) { public static final class Start extends OperationClientMessage { private static final String TYPE = "start"; private static final String JSON_KEY_QUERY = "query"; + private static final String JSON_KEY_ID = "id"; private static final String JSON_KEY_VARIABLES = "variables"; private static final String JSON_KEY_OPERATION_NAME = "operationName"; private final ScalarTypeAdapters scalarTypeAdapters; + private boolean enableAutoPersistedQueries; public final String subscriptionId; public final Subscription subscription; public Start(@NotNull String subscriptionId, @NotNull Subscription subscription, - @NotNull ScalarTypeAdapters scalarTypeAdapters) { + @NotNull ScalarTypeAdapters scalarTypeAdapters, boolean enableAutoPersistedQueries) { this.subscriptionId = checkNotNull(subscriptionId, "subscriptionId == null"); this.subscription = checkNotNull(subscription, "subscription == null"); this.scalarTypeAdapters = checkNotNull(scalarTypeAdapters, "scalarTypeAdapters == null"); + this.enableAutoPersistedQueries = enableAutoPersistedQueries; } @Override public void writeToJson(@NotNull JsonWriter writer) throws IOException { @@ -80,7 +83,11 @@ public Start(@NotNull String subscriptionId, @NotNull Subscription subs writer.name(JSON_KEY_ID).value(subscriptionId); writer.name(JSON_KEY_TYPE).value(TYPE); writer.name(JSON_KEY_PAYLOAD).beginObject(); - writer.name(JSON_KEY_QUERY).value(subscription.queryDocument().replaceAll("\\n", "")); + if (enableAutoPersistedQueries) { + writer.name(JSON_KEY_ID).value(subscription.operationId()); + } else { + writer.name(JSON_KEY_QUERY).value(subscription.queryDocument().replaceAll("\\n", "")); + } writer.name(JSON_KEY_VARIABLES).beginObject(); subscription.variables().marshaller().marshal(new InputFieldJsonWriter(writer, scalarTypeAdapters)); writer.endObject(); From 7ae1c66a0ff073c21588565719286c5bdd4a9d43 Mon Sep 17 00:00:00 2001 From: Vitaliy Kondratiev Date: Tue, 5 Nov 2019 15:33:16 -0500 Subject: [PATCH 04/12] unlocking LruNormalizedCache --- .../apollo/cache/normalized/lru/LruNormalizedCache.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apollo-runtime/src/main/java/com/apollographql/apollo/cache/normalized/lru/LruNormalizedCache.java b/apollo-runtime/src/main/java/com/apollographql/apollo/cache/normalized/lru/LruNormalizedCache.java index 6468c952bdc..869231f5423 100644 --- a/apollo-runtime/src/main/java/com/apollographql/apollo/cache/normalized/lru/LruNormalizedCache.java +++ b/apollo-runtime/src/main/java/com/apollographql/apollo/cache/normalized/lru/LruNormalizedCache.java @@ -31,10 +31,10 @@ * * A common configuration is to have secondary SQL cache. */ -public final class LruNormalizedCache extends NormalizedCache { - private final Cache lruCache; +public class LruNormalizedCache extends NormalizedCache { + protected final Cache lruCache; - LruNormalizedCache(EvictionPolicy evictionPolicy) { + public LruNormalizedCache(EvictionPolicy evictionPolicy) { final CacheBuilder lruCacheBuilder = CacheBuilder.newBuilder(); if (evictionPolicy.maxSizeBytes().isPresent()) { lruCacheBuilder.maximumWeight(evictionPolicy.maxSizeBytes().get()) From 7166e0075643353a5519f3d4242ececbaaff8e23 Mon Sep 17 00:00:00 2001 From: Vitaliy Kondratiev Date: Tue, 5 Nov 2019 15:50:42 -0500 Subject: [PATCH 05/12] hiding lruCache exposing a method instead --- .../apollo/cache/normalized/lru/LruNormalizedCache.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apollo-runtime/src/main/java/com/apollographql/apollo/cache/normalized/lru/LruNormalizedCache.java b/apollo-runtime/src/main/java/com/apollographql/apollo/cache/normalized/lru/LruNormalizedCache.java index 869231f5423..6aa160543bd 100644 --- a/apollo-runtime/src/main/java/com/apollographql/apollo/cache/normalized/lru/LruNormalizedCache.java +++ b/apollo-runtime/src/main/java/com/apollographql/apollo/cache/normalized/lru/LruNormalizedCache.java @@ -32,7 +32,7 @@ * A common configuration is to have secondary SQL cache. */ public class LruNormalizedCache extends NormalizedCache { - protected final Cache lruCache; + private final Cache lruCache; public LruNormalizedCache(EvictionPolicy evictionPolicy) { final CacheBuilder lruCacheBuilder = CacheBuilder.newBuilder(); @@ -135,6 +135,11 @@ protected Set performMerge(@NotNull final Record apolloRecord, @NotNull } } + @Nullable + public Record getIfPresent(@NotNull final String key) { + return lruCache.getIfPresent(key); + } + @Override public Map> dump() { Map> dump = new LinkedHashMap<>(); dump.put(this.getClass(), Collections.unmodifiableMap(new LinkedHashMap<>(lruCache.asMap()))); From 3d7b64b32b2eaa3858e30e86eb068e50b2c3df39 Mon Sep 17 00:00:00 2001 From: Vitaliy Kondratiev Date: Tue, 23 Jun 2020 15:09:46 -0400 Subject: [PATCH 06/12] remove accident file --- .idea/codeStyles/Project.xml | 112 +++++++++++++++++++++++++++++++++-- 1 file changed, 108 insertions(+), 4 deletions(-) diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index b1cf57ac7be..054924026f9 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -19,9 +19,6 @@