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:

after:

## 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]