2222
2323import com .google .api .gax .batching .BatchingSettings ;
2424import com .google .api .gax .core .CredentialsProvider ;
25- import com .google .api .gax .rpc . ApiCallContext ;
25+ import com .google .api .gax .grpc . GrpcCallContext ;
2626import com .google .api .gax .rpc .ApiException ;
2727import com .google .api .gax .rpc .StatusCode .Code ;
2828import com .google .auto .value .AutoValue ;
5050import com .google .common .annotations .VisibleForTesting ;
5151import com .google .protobuf .ByteString ;
5252import com .google .pubsub .v1 .PubsubMessage ;
53+ import io .grpc .CallOptions ;
5354import java .util .Optional ;
5455import org .threeten .bp .Duration ;
5556
@@ -82,11 +83,14 @@ public abstract class PublisherSettings {
8283 abstract BatchingSettings batchingSettings ();
8384
8485 /**
85- * Whether to enable publish idempotence , where the server will ensure that unique messages within
86- * a single publisher session are stored only once. Default true.
86+ * Whether idempotence is enabled , where the server will ensure that unique messages within a
87+ * single publisher session are stored only once. Default true.
8788 */
8889 abstract boolean enableIdempotence ();
8990
91+ /** Whether request compression is enabled. Default true. */
92+ abstract boolean enableCompression ();
93+
9094 /** A provider for credentials. */
9195 abstract CredentialsProvider credentialsProvider ();
9296
@@ -115,6 +119,7 @@ public static Builder newBuilder() {
115119 PublisherServiceSettings .defaultCredentialsProviderBuilder ().build ())
116120 .setBatchingSettings (DEFAULT_BATCHING_SETTINGS )
117121 .setEnableIdempotence (true )
122+ .setEnableCompression (true )
118123 .setUnderlyingBuilder (SinglePartitionPublisherBuilder .newBuilder ());
119124 }
120125
@@ -137,11 +142,14 @@ public abstract Builder setMessageTransformer(
137142 public abstract Builder setBatchingSettings (BatchingSettings batchingSettings );
138143
139144 /**
140- * Whether to enable publish idempotence , where the server will ensure that unique messages
141- * within a single publisher session are stored only once. Default true.
145+ * Whether idempotence is enabled , where the server will ensure that unique messages within a
146+ * single publisher session are stored only once. Default true.
142147 */
143148 public abstract Builder setEnableIdempotence (boolean enableIdempotence );
144149
150+ /** Whether request compression is enabled. Default true. */
151+ public abstract Builder setEnableCompression (boolean enableCompression );
152+
145153 /** A provider for credentials. */
146154 public abstract Builder setCredentialsProvider (CredentialsProvider credentialsProvider );
147155
@@ -190,10 +198,14 @@ public com.google.cloud.pubsublite.internal.Publisher<MessageMetadata> newPublis
190198 .setPartition (partition )
191199 .setStreamFactory (
192200 responseStream -> {
193- ApiCallContext context =
201+ GrpcCallContext context =
194202 getCallContext (
195203 PubsubContext .of (framework ()),
196204 RoutingMetadata .of (topicPath (), partition ));
205+ if (enableCompression ()) {
206+ context =
207+ context .withCallOptions (CallOptions .DEFAULT .withCompression ("gzip" ));
208+ }
197209 return client .publishCallable ().splitCall (responseStream , context );
198210 });
199211 if (enableIdempotence ()) {
0 commit comments