This is an automated email from the ASF dual-hosted git repository.

chaokunyang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/fury.git


The following commit(s) were added to refs/heads/main by this push:
     new 89a8d012 chore(java): simplify generated codec name (#1850)
89a8d012 is described below

commit 89a8d012901c10981e9fe0b29ba06bfad6321716
Author: Shawn Yang <[email protected]>
AuthorDate: Mon Sep 23 23:09:34 2024 -0700

    chore(java): simplify generated codec name (#1850)
    
    ## What does this PR do?
    
    simplify generated codec name
    
    before:
    
    
![image](https://github.com/user-attachments/assets/bbb51fe7-23d1-405a-89c4-e4d0c4c8ab60)
    
    after:
    
    
![image](https://github.com/user-attachments/assets/f3540884-89e7-4a81-9d04-d3dff66ff379)
    
    ## Related issues
    
    <!--
    Is there any related issue? Please attach here.
    
    - #xxxx0
    - #xxxx1
    - #xxxx2
    -->
    
    ## Does this PR introduce any user-facing change?
    
    <!--
    If any user-facing interface changes, please [open an
    issue](https://github.com/apache/fury/issues/new/choose) describing the
    need to do so and update the document if necessary.
    -->
    
    - [ ] Does this PR introduce any public API change?
    - [ ] Does this PR introduce any binary protocol compatibility change?
    
    ## Benchmark
    
    <!--
    When the PR has an impact on performance (if you don't know whether the
    PR will have an impact on performance, you can submit the PR first, and
    if it will have impact on performance, the code reviewer will explain
    it), be sure to attach a benchmark data here.
    -->
---
 .../java/org/apache/fury/builder/AccessorHelper.java  | 16 ++++++++++++----
 .../apache/fury/builder/BaseObjectCodecBuilder.java   | 19 ++++++++++++++-----
 .../apache/fury/builder/MetaSharedCodecBuilder.java   | 13 ++++++++++++-
 3 files changed, 38 insertions(+), 10 deletions(-)

diff --git 
a/java/fury-core/src/main/java/org/apache/fury/builder/AccessorHelper.java 
b/java/fury-core/src/main/java/org/apache/fury/builder/AccessorHelper.java
index cb524290..44edd414 100644
--- a/java/fury-core/src/main/java/org/apache/fury/builder/AccessorHelper.java
+++ b/java/fury-core/src/main/java/org/apache/fury/builder/AccessorHelper.java
@@ -27,6 +27,7 @@ import java.lang.reflect.Modifier;
 import java.util.Collection;
 import java.util.Map;
 import java.util.WeakHashMap;
+import java.util.concurrent.ConcurrentHashMap;
 import org.apache.fury.codegen.CodeGenerator;
 import org.apache.fury.codegen.CodegenContext;
 import org.apache.fury.codegen.CompileUnit;
@@ -53,11 +54,18 @@ public class AccessorHelper {
   private static final String OBJ_NAME = "obj";
   private static final String FIELD_VALUE = "fieldValue";
 
+  // Must be static to be shared across the whole process life.
+  private static final Map<String, Integer> idGenerator = new 
ConcurrentHashMap<>();
+
   public static String accessorClassName(Class<?> beanClass) {
-    String name =
-        ReflectionUtils.getClassNameWithoutPackage(beanClass)
-            + "FuryAccessor_"
-            + CodeGenerator.getClassUniqueId(beanClass);
+    String key = CodeGenerator.getClassUniqueId(beanClass);
+    Integer id = idGenerator.get(key);
+    if (id == null) {
+      synchronized (idGenerator) {
+        id = idGenerator.computeIfAbsent(key, k -> idGenerator.size());
+      }
+    }
+    String name = ReflectionUtils.getClassNameWithoutPackage(beanClass) + 
"FuryAccessor_" + id;
     return name.replace("$", "_");
   }
 
diff --git 
a/java/fury-core/src/main/java/org/apache/fury/builder/BaseObjectCodecBuilder.java
 
b/java/fury-core/src/main/java/org/apache/fury/builder/BaseObjectCodecBuilder.java
index 8a3315dc..e58098bb 100644
--- 
a/java/fury-core/src/main/java/org/apache/fury/builder/BaseObjectCodecBuilder.java
+++ 
b/java/fury-core/src/main/java/org/apache/fury/builder/BaseObjectCodecBuilder.java
@@ -56,6 +56,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.StringJoiner;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Function;
 import java.util.function.Supplier;
 import org.apache.fury.Fury;
@@ -157,6 +158,9 @@ public abstract class BaseObjectCodecBuilder extends 
CodecBuilder {
     jitCallbackUpdateFields = new HashMap<>();
   }
 
+  // Must be static to be shared across the whole process life.
+  private static final Map<String, Map<String, Integer>> idGenerator = new 
ConcurrentHashMap<>();
+
   public String codecClassName(Class<?> beanClass) {
     String name = 
ReflectionUtils.getClassNameWithoutPackage(beanClass).replace("$", "_");
     StringBuilder nameBuilder = new StringBuilder(name);
@@ -167,12 +171,17 @@ public abstract class BaseObjectCodecBuilder extends 
CodecBuilder {
     } else {
       nameBuilder.append("Fury");
     }
-    nameBuilder.append(codecSuffix()).append("Codec");
-    nameBuilder.append('_').append(fury.getConfig().getConfigHash());
-    String classUniqueId = CodeGenerator.getClassUniqueId(beanClass);
-    if (StringUtils.isNotBlank(classUniqueId)) {
-      nameBuilder.append('_').append(classUniqueId);
+    nameBuilder.append("Codec").append(codecSuffix());
+    Map<String, Integer> subGenerator =
+        idGenerator.computeIfAbsent(nameBuilder.toString(), k -> new 
ConcurrentHashMap<>());
+    String key = fury.getConfig().getConfigHash() + "_" + 
CodeGenerator.getClassUniqueId(beanClass);
+    Integer id = subGenerator.get(key);
+    if (id == null) {
+      synchronized (subGenerator) {
+        id = subGenerator.computeIfAbsent(key, k -> subGenerator.size());
+      }
     }
+    nameBuilder.append('_').append(id);
     return nameBuilder.toString();
   }
 
diff --git 
a/java/fury-core/src/main/java/org/apache/fury/builder/MetaSharedCodecBuilder.java
 
b/java/fury-core/src/main/java/org/apache/fury/builder/MetaSharedCodecBuilder.java
index fcfb86da..eb980c02 100644
--- 
a/java/fury-core/src/main/java/org/apache/fury/builder/MetaSharedCodecBuilder.java
+++ 
b/java/fury-core/src/main/java/org/apache/fury/builder/MetaSharedCodecBuilder.java
@@ -22,7 +22,9 @@ package org.apache.fury.builder;
 import static 
org.apache.fury.builder.Generated.GeneratedMetaSharedSerializer.SERIALIZER_FIELD_NAME;
 
 import java.util.Collection;
+import java.util.Map;
 import java.util.SortedMap;
+import java.util.concurrent.ConcurrentHashMap;
 import org.apache.fury.Fury;
 import org.apache.fury.builder.Generated.GeneratedMetaSharedSerializer;
 import org.apache.fury.codegen.CodeGenerator;
@@ -86,11 +88,20 @@ public class MetaSharedCodecBuilder extends 
ObjectCodecBuilder {
         new ObjectCodecOptimizer(beanClass, grouper, 
!fury.isBasicTypesRefIgnored(), ctx);
   }
 
+  // Must be static to be shared across the whole process life.
+  private static final Map<Long, Integer> idGenerator = new 
ConcurrentHashMap<>();
+
   @Override
   protected String codecSuffix() {
     // For every class def sent from different peer, if the class def are 
different, then
     // a new serializer needs being generated.
-    return "MetaShared" + classDef.getId();
+    Integer id = idGenerator.get(classDef.getId());
+    if (id == null) {
+      synchronized (idGenerator) {
+        id = idGenerator.computeIfAbsent(classDef.getId(), k -> 
idGenerator.size());
+      }
+    }
+    return "MetaShared" + id;
   }
 
   @Override


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to