mbraceproject / MBrace.Core

MBrace Core Libraries & Runtime Foundations
http://mbrace.io/
Apache License 2.0
209 stars 46 forks source link

How to specify custom pickler cache with Thespian? #184

Open mjmckp opened 6 years ago

mjmckp commented 6 years ago

I am attempting to specify a custom pickler with Thespian, using the following setup code:

        let registry = CustomPicklerRegistry()

        registry.RegisterFactory <| fun (resolver : IPicklerResolver) ->
            let writer (w: WriteState) (x: MyType) =
                // code...

            let reader (r: ReadState) : MyType =
                // code...

            Pickler.FromPrimitives(reader, writer)

        registry.DeclareSerializable<MyType>()

        let cache = PicklerCache.FromCustomPicklerRegistry registry

        Nessos.Thespian.Serialization.defaultSerializer <- new FsPicklerMessageSerializer(FsPickler.CreateBinarySerializer(picklerResolver = cache))

However, when I attempt to run a cloud calculation, I get MBrace.FsPickler.NonSerializableTypeException for MyType. It seems like Thespian is always using the default instance of MBrace.FsPickler.PicklerCache instead of the cache created above...

mjmckp commented 6 years ago

@eiriktsarpalis Any hints appreciated, thanks!