Skip to content

Commit c497e6d

Browse files
committed
change user context code
1 parent 06375c0 commit c497e6d

File tree

9 files changed

+56
-151
lines changed

9 files changed

+56
-151
lines changed

docs/guide/java_serialization_guide.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ public class Example {
114114
| `codeGenEnabled` | Disabling may result in faster initial serialization but slower subsequent serializations. | `true` |
115115
| `asyncCompilationEnabled` | If enabled, serialization uses interpreter mode first and switches to JIT serialization after async serializer JIT for a class is finished. | `false` |
116116
| `scalaOptimizationEnabled` | Enables or disables Scala-specific serialization optimization. | `false` |
117+
| `shareUserContext` | Enables or disables user context mode.
117118

118119
## Advanced Usage
119120

java/fury-core/src/main/java/org/apache/fury/AbstractThreadSafeFury.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121

2222
import java.util.function.Consumer;
2323
import java.util.function.Function;
24-
import org.apache.fury.resolver.UserContext;
2524
import org.apache.fury.serializer.Serializer;
2625
import org.apache.fury.serializer.SerializerFactory;
2726

@@ -66,10 +65,5 @@ public void setSerializerFactory(SerializerFactory serializerFactory) {
6665
processCallback(fury -> fury.setSerializerFactory(serializerFactory));
6766
}
6867

69-
@Override
70-
public void registerUserContext(String name, Function<Fury, UserContext> userContextResolverCtr) {
71-
processCallback(fury -> fury.registerUserContext(name, userContextResolverCtr));
72-
}
73-
7468
protected abstract void processCallback(Consumer<Fury> callback);
7569
}

java/fury-core/src/main/java/org/apache/fury/BaseFury.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import org.apache.fury.io.FuryInputStream;
2525
import org.apache.fury.io.FuryReadableChannel;
2626
import org.apache.fury.memory.MemoryBuffer;
27-
import org.apache.fury.resolver.UserContext;
2827
import org.apache.fury.serializer.BufferCallback;
2928
import org.apache.fury.serializer.Serializer;
3029
import org.apache.fury.serializer.SerializerFactory;
@@ -83,14 +82,6 @@ public interface BaseFury {
8382

8483
void setSerializerFactory(SerializerFactory serializerFactory);
8584

86-
/**
87-
* Register user context.
88-
*
89-
* @param name user context name to register
90-
* @param userContextResolverCtr constructor for usr context
91-
*/
92-
void registerUserContext(String name, Function<Fury, UserContext> userContextResolverCtr);
93-
9485
/** Return serialized <code>obj</code> as a byte array. */
9586
byte[] serialize(Object obj);
9687

java/fury-core/src/main/java/org/apache/fury/Fury.java

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@
4949
import org.apache.fury.resolver.NoRefResolver;
5050
import org.apache.fury.resolver.RefResolver;
5151
import org.apache.fury.resolver.SerializationContext;
52-
import org.apache.fury.resolver.UserContext;
5352
import org.apache.fury.serializer.ArraySerializers;
5453
import org.apache.fury.serializer.BufferCallback;
5554
import org.apache.fury.serializer.BufferObject;
@@ -187,11 +186,6 @@ public void setSerializerFactory(SerializerFactory serializerFactory) {
187186
classResolver.setSerializerFactory(serializerFactory);
188187
}
189188

190-
@Override
191-
public void registerUserContext(String name, Function<Fury, UserContext> userContextResolverCtr) {
192-
serializationContext.registerUserContextResolver(name, userContextResolverCtr.apply(this));
193-
}
194-
195189
public SerializerFactory getSerializerFactory() {
196190
return classResolver.getSerializerFactory();
197191
}
@@ -311,8 +305,8 @@ public void resetBuffer() {
311305

312306
private void write(MemoryBuffer buffer, Object obj) {
313307
int startOffset = buffer.writerIndex();
314-
boolean shareGlobalContext = config.shareGlobalContext();
315-
if (shareGlobalContext) {
308+
boolean shareContext = config.shareContext();
309+
if (shareContext) {
316310
buffer.writeInt32(-1); // preserve 4-byte for nativeObjects start offsets.
317311
}
318312
// reduce caller stack
@@ -321,9 +315,9 @@ private void write(MemoryBuffer buffer, Object obj) {
321315
classResolver.writeClass(buffer, classInfo);
322316
writeData(buffer, classInfo, obj);
323317
}
324-
if (shareGlobalContext) {
318+
if (shareContext) {
325319
buffer.putInt32(startOffset, buffer.writerIndex());
326-
classResolver.writeGlobalContext(buffer);
320+
classResolver.writeContext(buffer);
327321
}
328322
}
329323

@@ -760,8 +754,8 @@ public Object deserialize(MemoryBuffer buffer, Iterable<MemoryBuffer> outOfBandB
760754
if (isTargetXLang) {
761755
obj = xdeserializeInternal(buffer);
762756
} else {
763-
if (config.shareGlobalContext()) {
764-
classResolver.readGlobalContext(buffer);
757+
if (config.shareContext()) {
758+
classResolver.readContext(buffer);
765759
}
766760
obj = readRef(buffer);
767761
}
@@ -1031,15 +1025,15 @@ public void serializeJavaObject(MemoryBuffer buffer, Object obj) {
10311025
if (depth != 0) {
10321026
throwDepthSerializationException();
10331027
}
1034-
if (config.shareGlobalContext()) {
1028+
if (config.shareContext()) {
10351029
int startOffset = buffer.writerIndex();
10361030
buffer.writeInt32(-1); // preserve 4-byte for nativeObjects start offsets.
10371031
if (!refResolver.writeRefOrNull(buffer, obj)) {
10381032
ClassInfo classInfo = classResolver.getOrUpdateClassInfo(obj.getClass());
10391033
writeData(buffer, classInfo, obj);
10401034
}
10411035
buffer.putInt32(startOffset, buffer.writerIndex());
1042-
classResolver.writeGlobalContext(buffer);
1036+
classResolver.writeContext(buffer);
10431037
} else {
10441038
if (!refResolver.writeRefOrNull(buffer, obj)) {
10451039
ClassInfo classInfo = classResolver.getOrUpdateClassInfo(obj.getClass());
@@ -1076,8 +1070,8 @@ public <T> T deserializeJavaObject(MemoryBuffer buffer, Class<T> cls) {
10761070
if (depth != 0) {
10771071
throwDepthDeserializationException();
10781072
}
1079-
if (config.shareGlobalContext()) {
1080-
classResolver.readGlobalContext(buffer);
1073+
if (config.shareContext()) {
1074+
classResolver.readContext(buffer);
10811075
}
10821076
T obj;
10831077
int nextReadRefId = refResolver.tryPreserveRefId(buffer);
@@ -1190,8 +1184,8 @@ public Object deserializeJavaObjectAndClass(MemoryBuffer buffer) {
11901184
if (depth != 0) {
11911185
throwDepthDeserializationException();
11921186
}
1193-
if (config.shareGlobalContext()) {
1194-
classResolver.readGlobalContext(buffer);
1187+
if (config.shareContext()) {
1188+
classResolver.readContext(buffer);
11951189
}
11961190
return readRef(buffer);
11971191
} catch (Throwable t) {

java/fury-core/src/main/java/org/apache/fury/config/Config.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public class Config implements Serializable {
4949
private final boolean requireClassRegistration;
5050
private final boolean suppressClassRegistrationWarnings;
5151
private final boolean registerGuavaTypes;
52-
private final boolean shareGlobalContext;
52+
private final boolean shareContext;
5353
private final boolean shareMetaContext;
5454
private final boolean shareUserContext;
5555
private final boolean asyncCompilationEnabled;
@@ -78,7 +78,7 @@ public Config(FuryBuilder builder) {
7878
defaultJDKStreamSerializerType = builder.defaultJDKStreamSerializerType;
7979
shareMetaContext = builder.shareMetaContext;
8080
shareUserContext = builder.shareUserContext;
81-
shareGlobalContext = shareMetaContext || shareUserContext;
81+
shareContext = shareMetaContext || shareUserContext;
8282
deserializeUnexistedClass = builder.deserializeUnexistedClass;
8383
if (deserializeUnexistedClass) {
8484
// Only in meta share mode or compatibleMode, fury knows how to deserialize
@@ -190,8 +190,8 @@ public boolean shareUserContext() {
190190
return shareUserContext;
191191
}
192192

193-
public boolean shareGlobalContext() {
194-
return shareGlobalContext;
193+
public boolean shareContext() {
194+
return shareContext;
195195
}
196196

197197
/**
@@ -249,7 +249,7 @@ public boolean equals(Object o) {
249249
&& registerGuavaTypes == config.registerGuavaTypes
250250
&& shareMetaContext == config.shareMetaContext
251251
&& shareUserContext == config.shareUserContext
252-
&& shareGlobalContext == config.shareGlobalContext
252+
&& shareContext == config.shareContext
253253
&& asyncCompilationEnabled == config.asyncCompilationEnabled
254254
&& deserializeUnexistedClass == config.deserializeUnexistedClass
255255
&& scalaOptimizationEnabled == config.scalaOptimizationEnabled
@@ -281,7 +281,7 @@ public int hashCode() {
281281
registerGuavaTypes,
282282
shareMetaContext,
283283
shareUserContext,
284-
shareGlobalContext,
284+
shareContext,
285285
asyncCompilationEnabled,
286286
deserializeUnexistedClass,
287287
scalaOptimizationEnabled);

java/fury-core/src/main/java/org/apache/fury/resolver/ClassResolver.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1410,14 +1410,14 @@ public void writeClassDefs(MemoryBuffer buffer) {
14101410

14111411
/** write user context by register order. */
14121412
public void writeUserContext(MemoryBuffer buffer) {
1413-
final Map<String, UserContext> userContexts = fury.getSerializationContext().getUserContexts();
1414-
for (UserContext userContext : userContexts.values()) {
1413+
final List<UserContext> userContexts = fury.getSerializationContext().getUserContexts();
1414+
for (UserContext userContext : userContexts) {
14151415
userContext.write(buffer);
14161416
}
14171417
}
14181418

14191419
/** after all data, write share meta context and user context. */
1420-
public void writeGlobalContext(MemoryBuffer buffer) {
1420+
public void writeContext(MemoryBuffer buffer) {
14211421
if (fury.getConfig().shareMetaContext()) {
14221422
writeClassDefs(buffer);
14231423
}
@@ -1456,14 +1456,14 @@ public void readClassDefs(MemoryBuffer buffer) {
14561456

14571457
/** read user context by register order. */
14581458
public void readUserContext(MemoryBuffer buffer) {
1459-
final Map<String, UserContext> userContexts = fury.getSerializationContext().getUserContexts();
1460-
for (UserContext userContext : userContexts.values()) {
1459+
final List<UserContext> userContexts = fury.getSerializationContext().getUserContexts();
1460+
for (UserContext userContext : userContexts) {
14611461
userContext.read(buffer);
14621462
}
14631463
}
14641464

14651465
/** read share meta context and user context before read data. */
1466-
public void readGlobalContext(MemoryBuffer buffer) {
1466+
public void readContext(MemoryBuffer buffer) {
14671467
int globalContextOffSet = buffer.readInt32();
14681468
int readerIndex = buffer.readerIndex();
14691469
buffer.readerIndex(globalContextOffSet);

java/fury-core/src/main/java/org/apache/fury/resolver/SerializationContext.java

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,10 @@
1919

2020
package org.apache.fury.resolver;
2121

22+
import java.util.ArrayList;
2223
import java.util.IdentityHashMap;
23-
import java.util.LinkedHashMap;
24-
import java.util.Map;
24+
import java.util.List;
2525
import org.apache.fury.config.FuryBuilder;
26-
import org.apache.fury.util.Preconditions;
2726

2827
/**
2928
* A context is used to add some context-related information, so that the serializers can set up
@@ -33,7 +32,7 @@
3332
public final class SerializationContext {
3433
private final IdentityHashMap<Object, Object> objects = new IdentityHashMap<>();
3534
private MetaContext metaContext;
36-
private final Map<String, UserContext> userContexts = new LinkedHashMap<>();
35+
private final List<UserContext> userContexts = new ArrayList<>();
3736

3837
/** Return the previous value associated with <tt>key</tt>, or <tt>null</tt>. */
3938
public Object add(Object key, Object value) {
@@ -62,22 +61,19 @@ public void setMetaContext(MetaContext metaContext) {
6261
this.metaContext = metaContext;
6362
}
6463

65-
public Map<String, UserContext> getUserContexts() {
64+
public List<UserContext> getUserContexts() {
6665
return userContexts;
6766
}
6867

69-
public void registerUserContextResolver(String name, UserContext userContext) {
70-
Preconditions.checkState(!userContexts.containsKey(name));
71-
userContexts.put(name, userContext);
68+
public void addUserContext(UserContext userContext) {
69+
userContexts.add(userContext);
7270
}
7371

7472
public void reset() {
7573
if (objects.size() > 0) {
7674
objects.clear();
7775
}
7876
metaContext = null;
79-
for (UserContext userContext : userContexts.values()) {
80-
userContext.reset();
81-
}
77+
userContexts.clear();
8278
}
8379
}

java/fury-core/src/main/java/org/apache/fury/resolver/UserContext.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,4 @@ public UserContext(Fury fury) {
3434
public abstract void write(MemoryBuffer buffer);
3535

3636
public abstract void read(MemoryBuffer buffer);
37-
38-
/** write/read end should clear user data. */
39-
public abstract void reset();
4037
}

0 commit comments

Comments
 (0)