com.digitalasset.canton.platform.store.ScalaPbStreamingOptimizations
ScalaPbMessageWithPrecomputedSerializedSize
implicit class ScalaPbMessageWithPrecomputedSerializedSize[ScalaPbMsg <: GeneratedMessage] extends AnyRef
- Alphabetic
- By Inheritance
- ScalaPbMessageWithPrecomputedSerializedSize
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new ScalaPbMessageWithPrecomputedSerializedSize(scalaPbMsg: ScalaPbMsg)
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native() @IntrinsicCandidate()
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- def withPrecomputedSerializedSize(): ScalaPbMsg
Optimization for gRPC streams throughput.
Optimization for gRPC streams throughput.
gRPC internal logic marshalls the protobuf response payloads sequentially before sending them over the wire (see io.grpc.ServerCallImpl.sendMessageInternal), imposing as limit the maximum marshalling throughput of a payload type.
We've observed empirically that ScalaPB-generated message classes have associated marshallers with significant latencies when encoding complex payloads (e.g. com.daml.ledger.api.v1.transaction_service.GetTransactionTreesResponse), with the gRPC marshalling bottleneck appearing in some performance tests.
To alleviate the problem, we can leverage the fact that ScalaPB message classes have the serializedSize value memoized, (see scalapb.GeneratedMessage.writeTo(output:java\.io\.OutputStream)*), whose computation is roughly half of the entire marshalling step.
This optimization method takes advantage of the memoized value and forces the message's serializedSize computation, roughly doubling the maximum theoretical ScalaPB stream throughput over the gRPC server layer.
- returns
A new message scalapb.GeneratedMessage with precomputed serializedSize.