public IData ToData(object o, IPartitioningStrategy strategy) { if (o is null) { return(null); } if (o is IData data) { return(data); } var output = GetDataOutput(); try { var serializer = SerializerFor(o); var partitionHash = CalculatePartitionHash(o, strategy); output.Write(partitionHash, Endianness.BigEndian); output.Write(serializer.TypeId, Endianness.BigEndian); serializer.Write(output, o); return(new HeapData(output.ToByteArray())); } catch (Exception e) when(!(e is OutOfMemoryException) && !(e is SerializationException)) { throw new SerializationException(e); } finally { ReturnDataOutput(output); } }
public IData ToData(object obj, IPartitioningStrategy strategy) { if (obj == null) { return(null); } if (obj is IData) { return((IData)obj); } var pool = _bufferPoolThreadLocal.Get(); var @out = pool.TakeOutputBuffer(); try { var serializer = SerializerFor(obj); var partitionHash = CalculatePartitionHash(obj, strategy); @out.WriteInt(partitionHash, ByteOrder.BigEndian); @out.WriteInt(serializer.GetTypeId(), ByteOrder.BigEndian); serializer.Write(@out, obj); return(new HeapData(@out.ToByteArray())); } catch (Exception e) { throw HandleException(e); } finally { pool.ReturnOutputBuffer(@out); } }
internal SerializationService(IInputOutputFactory inputOutputFactory, int version, IDictionary <int, IDataSerializableFactory> dataSerializableFactories, IDictionary <int, IPortableFactory> portableFactories, ICollection <IClassDefinition> classDefinitions, bool checkClassDefErrors, IManagedContext managedContext, IPartitioningStrategy partitionStrategy, int initialOutputBufferSize, bool enableCompression, bool enableSharedObject) { _inputOutputFactory = inputOutputFactory; _managedContext = managedContext; GlobalPartitioningStrategy = partitionStrategy; _outputBufferSize = initialOutputBufferSize; _bufferPoolThreadLocal = new BufferPoolThreadLocal(this); _portableContext = new PortableContext(this, version); _dataSerializerAdapter = CreateSerializerAdapterByGeneric <IIdentifiedDataSerializable>( new DataSerializer(dataSerializableFactories)); _portableSerializer = new PortableSerializer(_portableContext, portableFactories); _portableSerializerAdapter = CreateSerializerAdapterByGeneric <IPortable>(_portableSerializer); _nullSerializerAdapter = CreateSerializerAdapterByGeneric <object>(new ConstantSerializers.NullSerializer()); _serializableSerializerAdapter = CreateSerializerAdapterByGeneric <object>(new DefaultSerializers.SerializableSerializer()); RegisterConstantSerializers(); RegisterDefaultSerializers(); RegisterClassDefinitions(classDefinitions, checkClassDefErrors); }
public IData ToData(object obj, IPartitioningStrategy strategy) { if (obj == null) { return(null); } if (obj is IData) { return((IData)obj); } var @out = Pop(); try { var serializer = SerializerFor(obj.GetType()); @out.WriteInt(serializer.GetTypeId(), ByteOrder.BigEndian); serializer.Write(@out, obj); var partitionHash = CalculatePartitionHash(obj, strategy); @out.WriteInt(partitionHash, ByteOrder.BigEndian); return(new HeapData(@out.ToByteArray())); } catch (Exception e) { throw HandleException(e); } finally { Push(@out); } }
protected internal int CalculatePartitionHash(object obj, IPartitioningStrategy strategy) { var partitionHash = 0; var partitioningStrategy = strategy ?? GlobalPartitioningStrategy; if (partitioningStrategy != null) { var pk = partitioningStrategy.GetPartitionKey(obj); if (pk != null && pk != obj) { var partitionKey = ToData(pk, TheEmptyPartitioningStrategy); partitionHash = partitionKey == null ? 0 : partitionKey.GetPartitionHash(); } } return(partitionHash); }
internal SerializationService(IInputOutputFactory inputOutputFactory, int version, IDictionary <int, IDataSerializableFactory> dataSerializableFactories, IDictionary <int, IPortableFactory> portableFactories, ICollection <IClassDefinition> classDefinitions, SerializerHooks hooks, IEnumerable <ISerializerDefinitions> definitions, bool checkClassDefErrors, IPartitioningStrategy partitioningStrategy, int initialOutputBufferSize, ILoggerFactory loggerFactory) { _logger = loggerFactory.CreateLogger <SerializationService>(); _inputOutputFactory = inputOutputFactory; GlobalPartitioningStrategy = partitioningStrategy; _outputBufferSize = initialOutputBufferSize; _bufferPoolThreadLocal = new BufferPoolThreadLocal(this); _portableContext = new PortableContext(this, version); // create data serializer (will be added as constant) var dataSerializer = new DataSerializer(hooks, dataSerializableFactories, loggerFactory); _dataSerializerAdapter = CreateSerializerAdapter <IIdentifiedDataSerializable>(dataSerializer); // create portable serializer (will be added as constant) _portableSerializer = new PortableSerializer(_portableContext, portableFactories); _portableSerializerAdapter = CreateSerializerAdapter <IPortable>(_portableSerializer); // create the serializer of null objects (will be added as constant) _nullSerializerAdapter = CreateSerializerAdapter <object>(new NullSerializer()); // create the serializable adapter (will be added as constant) _serializableSerializerAdapter = CreateSerializerAdapter <object>(new SerializableSerializer()); // add defined serializers foreach (var definition in definitions) { definition.AddSerializers(this); } // add constant serializers AddMoreSerializers(); // add class definitions RegisterClassDefinitions(classDefinitions, checkClassDefErrors); }
internal SerializationService(IInputOutputFactory inputOutputFactory, int version, IDictionary <int, IDataSerializableFactory> dataSerializableFactories, IDictionary <int, IPortableFactory> portableFactories, ICollection <IClassDefinition> classDefinitions, bool checkClassDefErrors, IManagedContext managedContext, IPartitioningStrategy partitionStrategy, int initialOutputBufferSize, bool enableCompression, bool enableSharedObject) { this.inputOutputFactory = inputOutputFactory; this.managedContext = managedContext; globalPartitioningStrategy = partitionStrategy; outputBufferSize = initialOutputBufferSize; dataOutputQueue = new ThreadLocalOutputCache(this); portableContext = new PortableContext(this, version); dataSerializerAdapter = CreateSerializerAdapterByGeneric <IDataSerializable>(new DataSerializer(dataSerializableFactories)); portableSerializer = new PortableSerializer(portableContext, portableFactories); portableSerializerAdapter = CreateSerializerAdapterByGeneric <IPortable>(portableSerializer); RegisterConstantSerializers(); RegisterDefaultSerializers(); RegisterClassDefinitions(classDefinitions, checkClassDefErrors); }
public ISerializationServiceBuilder SetPartitioningStrategy(IPartitioningStrategy partitionStrategy) { _partitioningStrategy = partitionStrategy; return(this); }
public ISerializationServiceBuilder SetPartitioningStrategy(IPartitioningStrategy partitionStrategy) { _partitioningStrategy = partitionStrategy; return this; }