Server limits documentation

I need some help understanding the Server limits documentation.

First, it says gRPC has a limit of 4MB. That’s crystal clear.

Then, for Event Batch Size, it says the DefaultTransactionSizeLimit is 4MB.

  • What is the “Transaction” we are talking about here? It also says I can configure it, if I know what I am doing—but what would I do with that configuration? There is only an option to go down if that is linked to the gRPC message. Is it?

Next, for Blob size limit, it says it is “For incoming payloads (including Workflow context)” and links to the source. There are three things confusing me here:

  1. It says it “warns” at 512KB with the message Blob size exceeds limit.—that would mean it already exceeded the limit. It also says it “errors” at 2MB with the message ErrBlobSizeExceedsLimit: Blob data size exceeds limit.—again, it exceeded the limit, but now it mentions “Blob data size”, unlike the “Blob size” in the warn case.
  • What is the difference between the warn and the error state? Both messages say it exceeded the limit, the limit of the “Blob size” and then the limit of the “Blob data size”.
  1. The source link has the code with (dynamicconfig.BlobSizeLimitWarn, 256*1024)
  • That is 256KB, not 512KB, so what is that now?
  1. The “incoming payload” is vague.
  • What is the payload we are talking about?
  • How would I know the size of the payload before attempting to send it? I would not want to have an overflow in production, so I would want to have a way to check the size before sending the payload and chunk up the work to multiple batches if necessary.

What is the “Transaction” we are talking about here?

Its limits size of writes to history database.

  1. Docs seem to point to an older branch, see here for updated message that makes more sense (“Blob data size exceeds the warning limit”) and lines it up with ErrBlobSizeExceedsLimit.
    One blob translates into like one signal Payload, one activity input, one query return value, one heartbeat payload, etc. The difference is that the warning just writes it to logs where as if exceeded it would result in a server error depending on what caused it.

  2. Again docs seem to point to an older release branch, see here for whats on master branch.

  3. Temporal SDKs communicate to the Temporal server frontend service over gRPC. “incoming payload” is the payload of the payload message of such call.

There is an open issue to improve this some on the server side so stay tuned.

Opened docs issue here to fix the mentioned links.

I will stay tuned to the issues then! Thank you!