2222import com .google .api .MonitoredResourceDescriptor ;
2323import com .google .api .gax .core .GoogleCredentialsProvider ;
2424import com .google .api .gax .core .RetrySettings ;
25+ import com .google .api .gax .grpc .BundlingCallSettings ;
26+ import com .google .api .gax .grpc .BundlingDescriptor ;
27+ import com .google .api .gax .grpc .BundlingSettings ;
2528import com .google .api .gax .grpc .CallContext ;
2629import com .google .api .gax .grpc .ChannelProvider ;
2730import com .google .api .gax .grpc .ClientSettings ;
3134import com .google .api .gax .grpc .PagedCallSettings ;
3235import com .google .api .gax .grpc .PagedListDescriptor ;
3336import com .google .api .gax .grpc .PagedListResponseFactory ;
37+ import com .google .api .gax .grpc .RequestIssuer ;
3438import com .google .api .gax .grpc .SimpleCallSettings ;
3539import com .google .api .gax .grpc .UnaryCallSettings ;
3640import com .google .api .gax .grpc .UnaryCallable ;
5458import com .google .protobuf .ExperimentalApi ;
5559import io .grpc .Status ;
5660import java .io .IOException ;
61+ import java .util .ArrayList ;
62+ import java .util .Collection ;
63+ import java .util .List ;
5764import javax .annotation .Generated ;
5865import org .joda .time .Duration ;
5966
@@ -103,7 +110,7 @@ public class LoggingServiceV2Settings extends ClientSettings {
103110 .build ();
104111
105112 private final SimpleCallSettings <DeleteLogRequest , Empty > deleteLogSettings ;
106- private final SimpleCallSettings <WriteLogEntriesRequest , WriteLogEntriesResponse >
113+ private final BundlingCallSettings <WriteLogEntriesRequest , WriteLogEntriesResponse >
107114 writeLogEntriesSettings ;
108115 private final PagedCallSettings <
109116 ListLogEntriesRequest , ListLogEntriesResponse , ListLogEntriesPagedResponse >
@@ -121,7 +128,7 @@ public SimpleCallSettings<DeleteLogRequest, Empty> deleteLogSettings() {
121128 }
122129
123130 /** Returns the object with the settings used for calls to writeLogEntries. */
124- public SimpleCallSettings <WriteLogEntriesRequest , WriteLogEntriesResponse >
131+ public BundlingCallSettings <WriteLogEntriesRequest , WriteLogEntriesResponse >
125132 writeLogEntriesSettings () {
126133 return writeLogEntriesSettings ;
127134 }
@@ -368,12 +375,80 @@ public ListLogsPagedResponse createPagedListResponse(
368375 }
369376 };
370377
378+ private static final BundlingDescriptor <WriteLogEntriesRequest , WriteLogEntriesResponse >
379+ WRITE_LOG_ENTRIES_BUNDLING_DESC =
380+ new BundlingDescriptor <WriteLogEntriesRequest , WriteLogEntriesResponse >() {
381+ @ Override
382+ public String getBundlePartitionKey (WriteLogEntriesRequest request ) {
383+ return request .getLogName ()
384+ + "|"
385+ + request .getResource ()
386+ + "|"
387+ + request .getLabels ()
388+ + "|" ;
389+ }
390+
391+ @ Override
392+ public WriteLogEntriesRequest mergeRequests (
393+ Collection <WriteLogEntriesRequest > requests ) {
394+ WriteLogEntriesRequest firstRequest = requests .iterator ().next ();
395+
396+ List <LogEntry > elements = new ArrayList <>();
397+ for (WriteLogEntriesRequest request : requests ) {
398+ elements .addAll (request .getEntriesList ());
399+ }
400+
401+ WriteLogEntriesRequest bundleRequest =
402+ WriteLogEntriesRequest .newBuilder ()
403+ .setLogName (firstRequest .getLogName ())
404+ .setResource (firstRequest .getResource ())
405+ .putAllLabels (firstRequest .getLabels ())
406+ .addAllEntries (elements )
407+ .build ();
408+ return bundleRequest ;
409+ }
410+
411+ @ Override
412+ public void splitResponse (
413+ WriteLogEntriesResponse bundleResponse ,
414+ Collection <? extends RequestIssuer <WriteLogEntriesRequest , WriteLogEntriesResponse >>
415+ bundle ) {
416+ int bundleMessageIndex = 0 ;
417+ for (RequestIssuer <WriteLogEntriesRequest , WriteLogEntriesResponse > responder :
418+ bundle ) {
419+ WriteLogEntriesResponse response = WriteLogEntriesResponse .newBuilder ().build ();
420+ responder .setResponse (response );
421+ }
422+ }
423+
424+ @ Override
425+ public void splitException (
426+ Throwable throwable ,
427+ Collection <? extends RequestIssuer <WriteLogEntriesRequest , WriteLogEntriesResponse >>
428+ bundle ) {
429+ for (RequestIssuer <WriteLogEntriesRequest , WriteLogEntriesResponse > responder :
430+ bundle ) {
431+ responder .setException (throwable );
432+ }
433+ }
434+
435+ @ Override
436+ public long countElements (WriteLogEntriesRequest request ) {
437+ return request .getEntriesCount ();
438+ }
439+
440+ @ Override
441+ public long countBytes (WriteLogEntriesRequest request ) {
442+ return request .getSerializedSize ();
443+ }
444+ };
445+
371446 /** Builder for LoggingServiceV2Settings. */
372447 public static class Builder extends ClientSettings .Builder {
373448 private final ImmutableList <UnaryCallSettings .Builder > unaryMethodSettingsBuilders ;
374449
375450 private final SimpleCallSettings .Builder <DeleteLogRequest , Empty > deleteLogSettings ;
376- private final SimpleCallSettings .Builder <WriteLogEntriesRequest , WriteLogEntriesResponse >
451+ private final BundlingCallSettings .Builder <WriteLogEntriesRequest , WriteLogEntriesResponse >
377452 writeLogEntriesSettings ;
378453 private final PagedCallSettings .Builder <
379454 ListLogEntriesRequest , ListLogEntriesResponse , ListLogEntriesPagedResponse >
@@ -433,7 +508,9 @@ private Builder() {
433508 deleteLogSettings = SimpleCallSettings .newBuilder (LoggingServiceV2Grpc .METHOD_DELETE_LOG );
434509
435510 writeLogEntriesSettings =
436- SimpleCallSettings .newBuilder (LoggingServiceV2Grpc .METHOD_WRITE_LOG_ENTRIES );
511+ BundlingCallSettings .newBuilder (
512+ LoggingServiceV2Grpc .METHOD_WRITE_LOG_ENTRIES , WRITE_LOG_ENTRIES_BUNDLING_DESC )
513+ .setBundlingSettingsBuilder (BundlingSettings .newBuilder ());
437514
438515 listLogEntriesSettings =
439516 PagedCallSettings .newBuilder (
@@ -465,6 +542,15 @@ private static Builder createDefault() {
465542 .setRetryableCodes (RETRYABLE_CODE_DEFINITIONS .get ("idempotent" ))
466543 .setRetrySettingsBuilder (RETRY_PARAM_DEFINITIONS .get ("default" ));
467544
545+ builder
546+ .writeLogEntriesSettings ()
547+ .getBundlingSettingsBuilder ()
548+ .setElementCountThreshold (1 )
549+ .setElementCountLimit (1000 )
550+ .setRequestByteThreshold (1024 )
551+ .setRequestByteLimit (10485760 )
552+ .setDelayThreshold (Duration .millis (10 ))
553+ .setBlockingCallCountThreshold (1 );
468554 builder
469555 .writeLogEntriesSettings ()
470556 .setRetryableCodes (RETRYABLE_CODE_DEFINITIONS .get ("non_idempotent" ))
@@ -537,7 +623,7 @@ public SimpleCallSettings.Builder<DeleteLogRequest, Empty> deleteLogSettings() {
537623 }
538624
539625 /** Returns the builder for the settings used for calls to writeLogEntries. */
540- public SimpleCallSettings .Builder <WriteLogEntriesRequest , WriteLogEntriesResponse >
626+ public BundlingCallSettings .Builder <WriteLogEntriesRequest , WriteLogEntriesResponse >
541627 writeLogEntriesSettings () {
542628 return writeLogEntriesSettings ;
543629 }
0 commit comments