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