Motivation

reformat property,for a http header name cannot contain the following prohibited characters: =,;: \t\r\n\v\f

for example: {“city=shanghai”:“tag”} when we run bin/pulsar-admin topics get-message-by-id , it will throw exception, the exception is: Reason: java.util.concurrent.CompletionException: org.apache.pulsar.client.admin.internal.http.AsyncHttpConnector$RetryException: Could not complete the operation. Number of retries has been exhausted. Failed reason: a header name cannot contain the following prohibited characters: =,;: \t\r\n\v\f: =

High Level Design

In master branch, in an http request:getMessageById(“/{tenant}/{namespace}/{topic}/ledger/{ledgerId}/entry/{entryId}”), replace "X-Pulsar-PROPERTY-" + msgProperties.getKey() with "X-Pulsar-PROPERTY"

After release-3.1.0, this feature begins to take effect.

Concrete Example

for example, the current message's properties likes this:

"name": "James"
"gender": "man"
"details=man": "good at playing basketball"

BEFORE

old response header format:

headers: {
  "X-Pulsar-PROPERTY-name": "James",
  "X-Pulsar-PROPERTY-gender": "man",
  "X-Pulsar-PROPERTY-details=man": "good at playing basketball"
}

but it will throw exception in the end check

AFTER

new response header format:

headers: {
"X-Pulsar-PROPERTY": '{"name": "James", "gender": "man", "details=man": "good at playing basketball"}'
}

Links