mirror of
https://github.com/OpenHFT/Chronicle-Map.git
synced 2021-09-13 01:26:12 +00:00
HCOLL-283 HCOLL-276 Fixed a bug in with underinitialized key/value serialization builders when the server map is deserialized from file
This commit is contained in:
@@ -1332,6 +1332,11 @@ public final class ChronicleMapBuilder<K, V> implements Cloneable,
|
||||
(VanillaChronicleMap<K, ?, ?, V, ?, ?>) xStream.fromXML(ois);
|
||||
map.headerSize = roundUpMapHeaderSize(fis.getChannel().position());
|
||||
map.createMappedStoreAndSegments(file);
|
||||
// This is needed to property initialize key and value serialization builders,
|
||||
// which are later used in replication
|
||||
// TODO don't use SerializationBuilders in replication, extract marshallers
|
||||
// needed to transmit to stateless clients directly from map instance
|
||||
preMapConstruction(singleHashReplication != null || channel != null);
|
||||
return establishReplication(map, singleHashReplication, channel);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -118,7 +118,8 @@ final class Replicators {
|
||||
|
||||
TcpTransportAndNetworkConfig tcpConfig = replication.tcpTransportAndNetwork();
|
||||
|
||||
TcpReplicator.StatelessClientParameters statelessClientParameters = new TcpReplicator.StatelessClientParameters(
|
||||
TcpReplicator.StatelessClientParameters statelessClientParameters =
|
||||
new TcpReplicator.StatelessClientParameters(
|
||||
(VanillaChronicleMap) chronicleMap,
|
||||
builder.keyBuilder,
|
||||
builder.valueBuilder);
|
||||
|
||||
@@ -1456,6 +1456,8 @@ class StatelessServerConnector<K, V> {
|
||||
|
||||
@NotNull
|
||||
private final VanillaChronicleMap<K, ?, ?, V, ?, ?> map;
|
||||
private final SerializationBuilder<K> keySerializationBuilder;
|
||||
private final SerializationBuilder<V> valueSerializationBuilder;
|
||||
private final int tcpBufferSize;
|
||||
|
||||
|
||||
@@ -1466,6 +1468,8 @@ class StatelessServerConnector<K, V> {
|
||||
final SerializationBuilder<V> valueSerializationBuilder) {
|
||||
this.tcpBufferSize = tcpBufferSize;
|
||||
|
||||
this.keySerializationBuilder = keySerializationBuilder;
|
||||
this.valueSerializationBuilder = valueSerializationBuilder;
|
||||
keyReaderWithSize = new ReaderWithSize<>(keySerializationBuilder);
|
||||
keyWriterWithSize = new WriterWithSize<>(keySerializationBuilder, bufferResizer);
|
||||
valueReaderWithSize = new ReaderWithSize<>(valueSerializationBuilder);
|
||||
@@ -1575,10 +1579,10 @@ class StatelessServerConnector<K, V> {
|
||||
return putMapped(reader, writer, sizeLocation);
|
||||
|
||||
case KEY_BUILDER:
|
||||
return writeBuilder(writer, sizeLocation, map.keyBuilder);
|
||||
return writeBuilder(writer, sizeLocation, keySerializationBuilder);
|
||||
|
||||
case VALUE_BUILDER:
|
||||
return writeBuilder(writer, sizeLocation, map.valueBuilder);
|
||||
return writeBuilder(writer, sizeLocation, valueSerializationBuilder);
|
||||
|
||||
default:
|
||||
throw new IllegalStateException("unsupported event=" + event);
|
||||
|
||||
@@ -111,13 +111,10 @@ class VanillaChronicleMap<K, KI, MKI extends MetaBytesInterop<K, ? super KI>,
|
||||
transient BytesStore ms;
|
||||
transient long headerSize;
|
||||
transient Set<Map.Entry<K, V>> entrySet;
|
||||
transient final SerializationBuilder<K> keyBuilder;
|
||||
transient final SerializationBuilder<V> valueBuilder;
|
||||
|
||||
|
||||
public VanillaChronicleMap(ChronicleMapBuilder<K, V> builder) throws IOException {
|
||||
|
||||
keyBuilder = builder.keyBuilder;
|
||||
SerializationBuilder<K> keyBuilder = builder.keyBuilder;
|
||||
kClass = keyBuilder.eClass;
|
||||
keySizeMarshaller = keyBuilder.sizeMarshaller();
|
||||
originalKeyReader = keyBuilder.reader();
|
||||
@@ -129,7 +126,7 @@ class VanillaChronicleMap<K, KI, MKI extends MetaBytesInterop<K, ? super KI>,
|
||||
originalMetaKeyInterop = (MKI) keyBuilder.metaInterop();
|
||||
metaKeyInteropProvider = (MetaProvider<K, KI, MKI>) keyBuilder.metaInteropProvider();
|
||||
|
||||
valueBuilder = builder.valueBuilder;
|
||||
SerializationBuilder<V> valueBuilder = builder.valueBuilder;
|
||||
vClass = valueBuilder.eClass;
|
||||
if (vClass.getName().endsWith("$$Native")) {
|
||||
nativeValueClass = vClass;
|
||||
|
||||
Reference in New Issue
Block a user