You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pekko.apache.org by he...@apache.org on 2026/06/23 03:54:12 UTC
(pekko) branch refactor/urlencoder-charset created (now 9ba3a0560c)
This is an automated email from the ASF dual-hosted git repository.
He-Pin pushed a change to branch refactor/urlencoder-charset
in repository https://gitbox.apache.org/repos/asf/pekko.git
at 9ba3a0560c refactor: use StandardCharsets.UTF_8 with URLEncoder/URLDecoder
This branch includes the following new commits:
new 9ba3a0560c refactor: use StandardCharsets.UTF_8 with URLEncoder/URLDecoder
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pekko.apache.org
For additional commands, e-mail: commits-help@pekko.apache.org
(pekko) 01/01: refactor: use StandardCharsets.UTF_8 with URLEncoder/URLDecoder
Posted by he...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
He-Pin pushed a commit to branch refactor/urlencoder-charset
in repository https://gitbox.apache.org/repos/asf/pekko.git
commit 9ba3a0560c5069c66b76c04057353d47395c451b
Author: 虎鸣 <he...@alibaba-inc.com>
AuthorDate: Tue Jun 23 11:54:00 2026 +0800
refactor: use StandardCharsets.UTF_8 with URLEncoder/URLDecoder
Motivation:
Multiple files pass charset as a String ("utf-8") or via
ByteString.UTF_8 (which is StandardCharsets.UTF_8.name()) to
URLEncoder.encode and URLDecoder.decode. JDK 10 added overloads
that accept a Charset object directly, avoiding the checked
UnsupportedEncodingException declaration.
Modification:
Replace "utf-8" and ByteString.UTF_8 string arguments with
StandardCharsets.UTF_8 Charset object in 17 call sites across
8 files. Remove 4 unused ByteString imports.
Result:
Type-safe charset specification, no UnsupportedEncodingException
declaration needed, removes ByteString dependency where it was
only used for charset name constants.
Tests:
sbt "cluster-sharding/compile" "cluster-sharding-typed/compile"
"cluster-tools/compile" "persistence-query/compile"
"stream/compile" — all passed
References:
Refs #3136
---
.../sharding/typed/internal/ClusterShardingImpl.scala | 6 +++---
.../org/apache/pekko/cluster/sharding/ClusterSharding.scala | 13 ++++++-------
.../scala/org/apache/pekko/cluster/sharding/Shard.scala | 2 +-
.../org/apache/pekko/cluster/sharding/ShardRegion.scala | 2 +-
.../org/apache/pekko/cluster/client/ClusterClient.scala | 2 +-
.../pekko/cluster/pubsub/DistributedPubSubMediator.scala | 4 ++--
.../query/journal/leveldb/scaladsl/LeveldbReadJournal.scala | 5 ++---
.../src/main/scala/org/apache/pekko/stream/Attributes.scala | 4 ++--
8 files changed, 18 insertions(+), 20 deletions(-)
diff --git a/cluster-sharding-typed/src/main/scala/org/apache/pekko/cluster/sharding/typed/internal/ClusterShardingImpl.scala b/cluster-sharding-typed/src/main/scala/org/apache/pekko/cluster/sharding/typed/internal/ClusterShardingImpl.scala
index df01f21032..1c0d892d78 100644
--- a/cluster-sharding-typed/src/main/scala/org/apache/pekko/cluster/sharding/typed/internal/ClusterShardingImpl.scala
+++ b/cluster-sharding-typed/src/main/scala/org/apache/pekko/cluster/sharding/typed/internal/ClusterShardingImpl.scala
@@ -52,7 +52,7 @@ import pekko.japi.function.{ Function => JFunction }
import pekko.pattern.AskTimeoutException
import pekko.pattern.PromiseActorRef
import pekko.pattern.StatusReply
-import pekko.util.{ ByteString, Timeout }
+import pekko.util.Timeout
/**
* INTERNAL API
@@ -196,7 +196,7 @@ import pekko.util.{ ByteString, Timeout }
override def apply(t: String): ActorRef[scaladsl.ClusterSharding.ShardCommand] = {
system.systemActorOf(
ShardCommandActor.behavior(stopMessage.getOrElse(PoisonPill)),
- URLEncoder.encode(typeKey.name, ByteString.UTF_8) + "ShardCommandDelegator")
+ URLEncoder.encode(typeKey.name, StandardCharsets.UTF_8) + "ShardCommandDelegator")
}
})
@@ -334,7 +334,7 @@ import pekko.util.{ ByteString, Timeout }
case _ => false
}
- override val refPrefix = URLEncoder.encode(s"${typeKey.name}-$entityId", ByteString.UTF_8)
+ override val refPrefix = URLEncoder.encode(s"${typeKey.name}-$entityId", StandardCharsets.UTF_8)
override def tell(msg: M): Unit =
shardRegion ! ShardingEnvelope(entityId, msg)
diff --git a/cluster-sharding/src/main/scala/org/apache/pekko/cluster/sharding/ClusterSharding.scala b/cluster-sharding/src/main/scala/org/apache/pekko/cluster/sharding/ClusterSharding.scala
index bb393b299a..25479d07a3 100755
--- a/cluster-sharding/src/main/scala/org/apache/pekko/cluster/sharding/ClusterSharding.scala
+++ b/cluster-sharding/src/main/scala/org/apache/pekko/cluster/sharding/ClusterSharding.scala
@@ -50,7 +50,6 @@ import pekko.cluster.singleton.ClusterSingletonManager
import pekko.event.Logging
import pekko.pattern.BackoffOpts
import pekko.pattern.ask
-import pekko.util.ByteString
/**
* This extension provides sharding functionality of actors in a cluster.
@@ -754,7 +753,7 @@ private[pekko] class ClusterShardingGuardian extends Actor {
case Some(ref) => ref
case None =>
val name = role match {
- case Some(r) => URLEncoder.encode(r, ByteString.UTF_8) + "Replicator"
+ case Some(r) => URLEncoder.encode(r, StandardCharsets.UTF_8) + "Replicator"
case None => "replicator"
}
val ref = context.actorOf(Replicator.props(replicatorSettings(role, settings)), name)
@@ -799,7 +798,7 @@ private[pekko] class ClusterShardingGuardian extends Actor {
settings: ClusterShardingSettings): Unit = {
import settings.tuningParameters.coordinatorFailureBackoff
- val encName = URLEncoder.encode(typeName, ByteString.UTF_8)
+ val encName = URLEncoder.encode(typeName, StandardCharsets.UTF_8)
val cName = coordinatorSingletonManagerName(encName)
if (settings.shouldHostCoordinator(cluster) && context.child(cName).isEmpty) {
val coordinatorProps =
@@ -848,7 +847,7 @@ private[pekko] class ClusterShardingGuardian extends Actor {
allocationStrategy,
handOffStopMessage) =>
try {
- val encName = URLEncoder.encode(typeName, ByteString.UTF_8)
+ val encName = URLEncoder.encode(typeName, StandardCharsets.UTF_8)
val cPath = coordinatorPath(encName)
val shardRegion = context.child(encName).getOrElse {
val remEntitiesStoreProvider = rememberEntitiesStoreProvider(typeName, settings)
@@ -880,12 +879,12 @@ private[pekko] class ClusterShardingGuardian extends Actor {
case StartProxy(typeName, dataCenter, settings, extractEntityId, extractShardId) =>
try {
- val encName = URLEncoder.encode(s"${typeName}Proxy", ByteString.UTF_8)
- val cPath = coordinatorPath(URLEncoder.encode(typeName, ByteString.UTF_8))
+ val encName = URLEncoder.encode(s"${typeName}Proxy", StandardCharsets.UTF_8)
+ val cPath = coordinatorPath(URLEncoder.encode(typeName, StandardCharsets.UTF_8))
// it must be possible to start several proxies, one per data center
val actorName = dataCenter match {
case None => encName
- case Some(t) => URLEncoder.encode(typeName + "-" + t, ByteString.UTF_8)
+ case Some(t) => URLEncoder.encode(typeName + "-" + t, StandardCharsets.UTF_8)
}
val shardRegion = context.child(actorName).getOrElse {
context.actorOf(
diff --git a/cluster-sharding/src/main/scala/org/apache/pekko/cluster/sharding/Shard.scala b/cluster-sharding/src/main/scala/org/apache/pekko/cluster/sharding/Shard.scala
index 2d4b1165db..db7be7c795 100644
--- a/cluster-sharding/src/main/scala/org/apache/pekko/cluster/sharding/Shard.scala
+++ b/cluster-sharding/src/main/scala/org/apache/pekko/cluster/sharding/Shard.scala
@@ -1128,7 +1128,7 @@ private[pekko] class Shard(
entities.entity(id) match {
case OptionVal.Some(child) => child
case _ =>
- val name = URLEncoder.encode(id, "utf-8")
+ val name = URLEncoder.encode(id, StandardCharsets.UTF_8)
val a = context.actorOf(entityProps(id), name)
context.watchWith(a, EntityTerminated(a))
log.debug("{}: Started entity [{}] with entity id [{}] in shard [{}]", typeName, a, id, shardId)
diff --git a/cluster-sharding/src/main/scala/org/apache/pekko/cluster/sharding/ShardRegion.scala b/cluster-sharding/src/main/scala/org/apache/pekko/cluster/sharding/ShardRegion.scala
index 86dd77d8c5..0a27357f65 100644
--- a/cluster-sharding/src/main/scala/org/apache/pekko/cluster/sharding/ShardRegion.scala
+++ b/cluster-sharding/src/main/scala/org/apache/pekko/cluster/sharding/ShardRegion.scala
@@ -1341,7 +1341,7 @@ private[pekko] class ShardRegion(
.orElse(entityProps match {
case Some(props) if !shardsByRef.values.exists(_ == id) =>
log.debug(ShardingLogMarker.shardStarted(typeName, id), "{}: Starting shard [{}] in region", typeName, id)
- val name = URLEncoder.encode(id, "utf-8")
+ val name = URLEncoder.encode(id, StandardCharsets.UTF_8)
val shard = context.watch(
context.actorOf(
Shard
diff --git a/cluster-tools/src/main/scala/org/apache/pekko/cluster/client/ClusterClient.scala b/cluster-tools/src/main/scala/org/apache/pekko/cluster/client/ClusterClient.scala
index 1b617b9f13..a567e1727d 100644
--- a/cluster-tools/src/main/scala/org/apache/pekko/cluster/client/ClusterClient.scala
+++ b/cluster-tools/src/main/scala/org/apache/pekko/cluster/client/ClusterClient.scala
@@ -1007,7 +1007,7 @@ final class ClusterReceptionist(pubSubMediator: ActorRef, settings: ClusterRecep
def matchingRole(m: Member): Boolean = role.forall(m.hasRole)
def responseTunnel(client: ActorRef): ActorRef = {
- val encName = URLEncoder.encode(client.path.toSerializationFormat, "utf-8")
+ val encName = URLEncoder.encode(client.path.toSerializationFormat, StandardCharsets.UTF_8)
context.child(encName) match {
case Some(tunnel) => tunnel
case None =>
diff --git a/cluster-tools/src/main/scala/org/apache/pekko/cluster/pubsub/DistributedPubSubMediator.scala b/cluster-tools/src/main/scala/org/apache/pekko/cluster/pubsub/DistributedPubSubMediator.scala
index 09dfef508c..e14426ec9c 100644
--- a/cluster-tools/src/main/scala/org/apache/pekko/cluster/pubsub/DistributedPubSubMediator.scala
+++ b/cluster-tools/src/main/scala/org/apache/pekko/cluster/pubsub/DistributedPubSubMediator.scala
@@ -341,7 +341,7 @@ object DistributedPubSubMediator {
override def message = msg
}
- def encName(s: String) = URLEncoder.encode(s, "utf-8")
+ def encName(s: String) = URLEncoder.encode(s, StandardCharsets.UTF_8)
def mkKey(ref: ActorRef): String = mkKey(ref.path)
@@ -845,7 +845,7 @@ class DistributedPubSubMediator(settings: DistributedPubSubSettings)
if key.startsWith(topicPrefix)
topic = key.substring(topicPrefix.length + 1)
if !topic.contains('/') // exclude group topics
- } yield URLDecoder.decode(topic, "utf-8")).toSet
+ } yield URLDecoder.decode(topic, StandardCharsets.UTF_8)).toSet
}
def registerTopic(ref: ActorRef): Unit = {
diff --git a/persistence-query/src/main/scala/org/apache/pekko/persistence/query/journal/leveldb/scaladsl/LeveldbReadJournal.scala b/persistence-query/src/main/scala/org/apache/pekko/persistence/query/journal/leveldb/scaladsl/LeveldbReadJournal.scala
index e5aeb0032d..f6eae33004 100644
--- a/persistence-query/src/main/scala/org/apache/pekko/persistence/query/journal/leveldb/scaladsl/LeveldbReadJournal.scala
+++ b/persistence-query/src/main/scala/org/apache/pekko/persistence/query/journal/leveldb/scaladsl/LeveldbReadJournal.scala
@@ -31,7 +31,6 @@ import pekko.persistence.query.journal.leveldb.EventsByTagStage
import pekko.persistence.query.scaladsl._
import pekko.persistence.query.scaladsl.ReadJournal
import pekko.stream.scaladsl.Source
-import pekko.util.ByteString
import com.typesafe.config.Config
@@ -245,7 +244,7 @@ class LeveldbReadJournal(system: ExtendedActorSystem, config: Config)
writeJournalPluginId,
refreshInterval,
mat))
- .named("eventsByTag-" + URLEncoder.encode(tag, ByteString.UTF_8))
+ .named("eventsByTag-" + URLEncoder.encode(tag, StandardCharsets.UTF_8))
case NoOffset => eventsByTag(tag, Sequence(0L)) // recursive
case _ =>
@@ -268,7 +267,7 @@ class LeveldbReadJournal(system: ExtendedActorSystem, config: Config)
Source
.fromGraph(
new EventsByTagStage(tag, seq.value, maxBufSize, Long.MaxValue, writeJournalPluginId, None, mat))
- .named("currentEventsByTag-" + URLEncoder.encode(tag, ByteString.UTF_8))
+ .named("currentEventsByTag-" + URLEncoder.encode(tag, StandardCharsets.UTF_8))
case NoOffset => currentEventsByTag(tag, Sequence(0L))
case _ =>
throw new IllegalArgumentException(
diff --git a/stream/src/main/scala/org/apache/pekko/stream/Attributes.scala b/stream/src/main/scala/org/apache/pekko/stream/Attributes.scala
index 4f6d346c31..5cb9235886 100644
--- a/stream/src/main/scala/org/apache/pekko/stream/Attributes.scala
+++ b/stream/src/main/scala/org/apache/pekko/stream/Attributes.scala
@@ -14,6 +14,7 @@
package org.apache.pekko.stream
import java.net.URLEncoder
+import java.nio.charset.StandardCharsets
import java.time.Duration
import java.util.Optional
@@ -33,7 +34,6 @@ import pekko.annotation.InternalApi
import pekko.event.Logging
import pekko.japi.function
import pekko.stream.impl.TraversalBuilder
-import pekko.util.ByteString
import pekko.util.Helpers
import pekko.util.LineNumbers
@@ -242,7 +242,7 @@ final class Attributes private[pekko] (
}
@InternalApi private[pekko] def nameForActorRef(default: String = "unnamed"): String = {
- getName().map(name => URLEncoder.encode(name, ByteString.UTF_8)).getOrElse(default)
+ getName().map(name => URLEncoder.encode(name, StandardCharsets.UTF_8)).getOrElse(default)
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pekko.apache.org
For additional commands, e-mail: commits-help@pekko.apache.org