Skip to content

Commit 3355cb9

Browse files
committed
Clear extRegistry.getClassCtx if generate serializer class failed
1 parent bd7e234 commit 3355cb9

File tree

1 file changed

+31
-29
lines changed

1 file changed

+31
-29
lines changed

java/fury-core/src/main/java/io/fury/resolver/ClassResolver.java

Lines changed: 31 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -951,35 +951,37 @@ private Class<? extends Serializer> getObjectSerializerClass(
951951
// avoid potential recursive call for seq codec generation.
952952
return LazyInitBeanSerializer.class;
953953
} else {
954-
extRegistry.getClassCtx.add(cls);
955-
Class<? extends Serializer> sc;
956-
switch (fury.getCompatibleMode()) {
957-
case SCHEMA_CONSISTENT:
958-
sc =
959-
fury.getJITContext()
960-
.registerSerializerJITCallback(
961-
() -> ObjectSerializer.class,
962-
() -> loadCodegenSerializer(fury, cls),
963-
callback);
964-
extRegistry.getClassCtx.remove(cls);
965-
return sc;
966-
case COMPATIBLE:
967-
// If share class meta, compatible serializer won't be necessary, class
968-
// definition will be sent to peer to create serializer for deserialization.
969-
sc =
970-
fury.getJITContext()
971-
.registerSerializerJITCallback(
972-
() -> shareMeta ? ObjectSerializer.class : CompatibleSerializer.class,
973-
() ->
974-
shareMeta
975-
? loadCodegenSerializer(fury, cls)
976-
: loadCompatibleCodegenSerializer(fury, cls),
977-
callback);
978-
extRegistry.getClassCtx.remove(cls);
979-
return sc;
980-
default:
981-
throw new UnsupportedOperationException(
982-
String.format("Unsupported mode %s", fury.getCompatibleMode()));
954+
try {
955+
extRegistry.getClassCtx.add(cls);
956+
Class<? extends Serializer> sc;
957+
switch (fury.getCompatibleMode()) {
958+
case SCHEMA_CONSISTENT:
959+
sc =
960+
fury.getJITContext()
961+
.registerSerializerJITCallback(
962+
() -> ObjectSerializer.class,
963+
() -> loadCodegenSerializer(fury, cls),
964+
callback);
965+
return sc;
966+
case COMPATIBLE:
967+
// If share class meta, compatible serializer won't be necessary, class
968+
// definition will be sent to peer to create serializer for deserialization.
969+
sc =
970+
fury.getJITContext()
971+
.registerSerializerJITCallback(
972+
() -> shareMeta ? ObjectSerializer.class : CompatibleSerializer.class,
973+
() ->
974+
shareMeta
975+
? loadCodegenSerializer(fury, cls)
976+
: loadCompatibleCodegenSerializer(fury, cls),
977+
callback);
978+
return sc;
979+
default:
980+
throw new UnsupportedOperationException(
981+
String.format("Unsupported mode %s", fury.getCompatibleMode()));
982+
}
983+
} finally {
984+
extRegistry.getClassCtx.remove(cls);
983985
}
984986
}
985987
} else {

0 commit comments

Comments
 (0)