You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by ch...@apache.org on 2021/12/23 14:10:01 UTC
[pulsar] branch master updated: [Producer] Change the time units from ns to ms (#13057)
This is an automated email from the ASF dual-hosted git repository.
chenhang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new 891660e [Producer] Change the time units from ns to ms (#13057)
891660e is described below
commit 891660e396ad2831ec2bc94b535fc5d0c9543ec7
Author: litao <to...@gmail.com>
AuthorDate: Thu Dec 23 22:08:20 2021 +0800
[Producer] Change the time units from ns to ms (#13057)
### Motivation
The time unit in this exception message is ns, which is not very readable. We can change it from ns to ms.
```
org.apache.pulsar.client.api.PulsarClientException$TimeoutException:
The producer xxx can not send message to the topic xxx within given timeout : createdAt 461913074 ns ago, firstSentAt 29545553038276935 ns ago, lastSentAt 29545553038276935 ns ago, retryCount 0 at org.apache.pulsar.client.api.PulsarClientException.unwrap(PulsarClientException.java:916)
at org.apache.pulsar.client.impl.TypedMessageBuilderImpl.send(TypedMessageBuilderImpl.java:93)
at org.apache.pulsar.client.impl.ProducerBase.send(ProducerBase.java:63)
at com.yum.boh.oh.service.impl.StoreOrderPostServiceImpl.generalProcessing(StoreOrderPostServiceImpl.java:272)
at com.yum.boh.oh.service.impl.StoreOrderPostServiceImpl.saveThirdOrder(StoreOrderPostServiceImpl.java:72)
at com.yum.boh.oh.controller.StoreOrderController.postOrderInfo$original$T8425mfx(StoreOrderController.java:39)
at com.yum.boh.oh.controller.StoreOrderController.postOrderInfo$original$T8425mfx$accessor$vJljNzML(StoreOrderController.java)
at com.yum.boh.oh.controller.StoreOrderController$auxiliary$nysalhgy.call(Unknown Source)
at org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstMethodsInter.intercept(InstMethodsInter.java:86)
```
### Modifications
Change the time units from ns to ms for ProducerImpl#OpSendMsg.
---
.../java/org/apache/pulsar/client/impl/ProducerImpl.java | 8 +++++---
.../java/org/apache/pulsar/common/util/RelativeTimeUtil.java | 12 ++++++++++++
2 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ProducerImpl.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ProducerImpl.java
index da9d2d7..6814354 100644
--- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ProducerImpl.java
+++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ProducerImpl.java
@@ -89,6 +89,7 @@ import org.apache.pulsar.common.schema.SchemaInfo;
import org.apache.pulsar.common.schema.SchemaType;
import org.apache.pulsar.common.util.DateFormatter;
import org.apache.pulsar.common.util.FutureUtil;
+import org.apache.pulsar.common.util.RelativeTimeUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -1260,9 +1261,9 @@ public class ProducerImpl<T> extends ProducerBase<T> implements TimerTask, Conne
String errMsg = String.format(
"%s : createdAt %s ns ago, firstSentAt %s ns ago, lastSentAt %s ns ago, retryCount %s",
te.getMessage(),
- ns - this.createdAt,
- this.firstSentAt <= 0 ? ns - this.lastSentAt : ns - this.firstSentAt,
- ns - this.lastSentAt,
+ RelativeTimeUtil.nsToSeconds(ns - this.createdAt),
+ RelativeTimeUtil.nsToSeconds(this.firstSentAt <= 0 ? ns - this.lastSentAt : ns - this.firstSentAt),
+ RelativeTimeUtil.nsToSeconds(ns - this.lastSentAt),
retryCount
);
@@ -1325,6 +1326,7 @@ public class ProducerImpl<T> extends ProducerBase<T> implements TimerTask, Conne
};
}
+
/**
* Queue implementation that is used as the pending messages queue.
*
diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/util/RelativeTimeUtil.java b/pulsar-common/src/main/java/org/apache/pulsar/common/util/RelativeTimeUtil.java
index 36e6adf..454cfda 100644
--- a/pulsar-common/src/main/java/org/apache/pulsar/common/util/RelativeTimeUtil.java
+++ b/pulsar-common/src/main/java/org/apache/pulsar/common/util/RelativeTimeUtil.java
@@ -18,6 +18,7 @@
*/
package org.apache.pulsar.common.util;
+import java.math.BigDecimal;
import java.util.concurrent.TimeUnit;
import lombok.experimental.UtilityClass;
@@ -63,4 +64,15 @@ public class RelativeTimeUtil {
throw new IllegalArgumentException("Invalid time unit '" + lastChar + "'");
}
}
+
+ /**
+ * Convert nanoseconds to seconds and keep three decimal places.
+ * @param ns
+ * @return seconds
+ */
+ public static double nsToSeconds(long ns) {
+ double seconds = (double) ns / 1_000_000_000;
+ BigDecimal bd = new BigDecimal(seconds);
+ return bd.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
+ }
}