/// <summary> /// Create server instance; use Start to start the server. /// </summary> /// <param name="opts"></param> public VarLenServer(ServerOptions opts) { this.opts = opts; opts.GetSettings(out logSettings, out var checkpointSettings, out var indexSize); if (opts.EnableStorageTier && !Directory.Exists(opts.LogDir)) { Directory.CreateDirectory(opts.LogDir); } if (!Directory.Exists(opts.CheckpointDir)) { Directory.CreateDirectory(opts.CheckpointDir); } store = new FasterKV <SpanByte, SpanByte>(indexSize, logSettings, checkpointSettings, disableLocking: false); if (!opts.DisablePubSub) { kvBroker = new SubscribeKVBroker <SpanByte, SpanByte, SpanByte, IKeyInputSerializer <SpanByte, SpanByte> >(new SpanByteKeySerializer(), null, opts.PubSubPageSizeBytes(), true); broker = new SubscribeBroker <SpanByte, SpanByte, IKeySerializer <SpanByte> >(new SpanByteKeySerializer(), null, opts.PubSubPageSizeBytes(), true); } // Create session provider for VarLen provider = new SpanByteFasterKVProvider(store, kvBroker, broker, opts.Recover); server = new FasterServerTcp(opts.Address, opts.Port); server.Register(WireFormat.DefaultVarLenKV, provider); server.Register(WireFormat.WebSocket, provider); }
/// <summary> /// Create SpanByte FasterKV backend /// </summary> /// <param name="store"></param> /// <param name="kvBroker"></param> /// <param name="broker"></param> /// <param name="tryRecover"></param> /// <param name="maxSizeSettings"></param> public SpanByteFasterKVProvider(FasterKV <SpanByte, SpanByte> store, SubscribeKVBroker <SpanByte, SpanByte, SpanByte, IKeyInputSerializer <SpanByte, SpanByte> > kvBroker = null, SubscribeBroker <SpanByte, SpanByte, IKeySerializer <SpanByte> > broker = null, bool tryRecover = true, MaxSizeSettings maxSizeSettings = default) { this.storeWrapper = new StoreWrapper <SpanByte, SpanByte>(store, tryRecover); this.kvBroker = kvBroker; this.broker = broker; this.serializer = new SpanByteServerSerializer(); this.maxSizeSettings = maxSizeSettings ?? new MaxSizeSettings(); }
/// <summary> /// Create FasterKV backend /// </summary> /// <param name="store"></param> /// <param name="functionsGen"></param> /// <param name="subscribeKVBroker"></param> /// <param name="subscribeBroker"></param> /// <param name="serializer"></param> /// <param name="maxSizeSettings"></param> public FasterKVProvider(FasterKV <Key, Value> store, Func <WireFormat, Functions> functionsGen, SubscribeKVBroker <Key, Value, Input, IKeyInputSerializer <Key, Input> > subscribeKVBroker = null, SubscribeBroker <Key, Value, IKeySerializer <Key> > subscribeBroker = null, ParameterSerializer serializer = default, MaxSizeSettings maxSizeSettings = default) { this.store = store; this.functionsGen = functionsGen; this.serializer = serializer; this.maxSizeSettings = maxSizeSettings ?? new MaxSizeSettings(); this.subscribeKVBroker = subscribeKVBroker; this.subscribeBroker = subscribeBroker; }
public BinaryServerSession(Socket socket, FasterKV <Key, Value> store, Functions functions, ParameterSerializer serializer, MaxSizeSettings maxSizeSettings, SubscribeKVBroker <Key, Value, Input, IKeyInputSerializer <Key, Input> > subscribeKVBroker, SubscribeBroker <Key, Value, IKeySerializer <Key> > subscribeBroker) : base(socket, store, functions, null, serializer, maxSizeSettings) { this.subscribeKVBroker = subscribeKVBroker; this.subscribeBroker = subscribeBroker; readHead = 0; // Reserve minimum 4 bytes to send pending sequence number as output if (this.maxSizeSettings.MaxOutputSize < sizeof(int)) { this.maxSizeSettings.MaxOutputSize = sizeof(int); } }
/// <summary> /// Create FasterKV backend /// </summary> /// <param name="store"></param> /// <param name="serializer"></param> /// <param name="kvBroker"></param> /// <param name="broker"></param> /// <param name="recoverStore"></param> /// <param name="maxSizeSettings"></param> public FasterKVProviderBase(FasterKV <Key, Value> store, ParameterSerializer serializer, SubscribeKVBroker <Key, Value, Input, IKeyInputSerializer <Key, Input> > kvBroker = null, SubscribeBroker <Key, Value, IKeySerializer <Key> > broker = null, bool recoverStore = false, MaxSizeSettings maxSizeSettings = default) { this.store = store; if (recoverStore) { try { store.Recover(); } catch { } } this.kvBroker = kvBroker; this.broker = broker; this.serializer = serializer; this.maxSizeSettings = maxSizeSettings ?? new MaxSizeSettings(); }
/// <summary> /// Create SpanByte FasterKV backend /// </summary> /// <param name="store"></param> /// <param name="kvBroker"></param> /// <param name="broker"></param> /// <param name="recoverStore"></param> /// <param name="maxSizeSettings"></param> public SpanByteFasterKVProvider(FasterKV <SpanByte, SpanByte> store, SubscribeKVBroker <SpanByte, SpanByte, SpanByte, IKeyInputSerializer <SpanByte, SpanByte> > kvBroker = null, SubscribeBroker <SpanByte, SpanByte, IKeySerializer <SpanByte> > broker = null, bool recoverStore = false, MaxSizeSettings maxSizeSettings = default) { this.store = store; if (recoverStore) { try { store.Recover(); } catch { } } this.kvBroker = kvBroker; this.broker = broker; this.serializer = new SpanByteServerSerializer(); this.maxSizeSettings = maxSizeSettings ?? new MaxSizeSettings(); }
public WebsocketServerSession( INetworkSender networkSender, FasterKV <Key, Value> store, Functions functions, ParameterSerializer serializer, SubscribeKVBroker <Key, Value, Input, IKeyInputSerializer <Key, Input> > subscribeKVBroker, SubscribeBroker <Key, Value, IKeySerializer <Key> > subscribeBroker) : base(networkSender, store, functions, null, serializer) { this.subscribeKVBroker = subscribeKVBroker; this.subscribeBroker = subscribeBroker; readHead = 0; // Reserve minimum 4 bytes to send pending sequence number as output if (this.networkSender.GetMaxSizeSettings.MaxOutputSize < sizeof(int)) { this.networkSender.GetMaxSizeSettings.MaxOutputSize = sizeof(int); } }
/// <summary> /// Create server instance; use Start to start the server. /// </summary> /// <param name="opts"></param> /// <param name="functionsGen"></param> /// <param name="serializer"></param> /// <param name="keyInputSerializer"></param> /// <param name="disableLocking"></param> /// <param name="maxSizeSettings"></param> public GenericServer(ServerOptions opts, Func <Functions> functionsGen, ParameterSerializer serializer, IKeyInputSerializer <Key, Input> keyInputSerializer, bool disableLocking, MaxSizeSettings maxSizeSettings = default) { this.opts = opts; opts.GetSettings(out logSettings, out var checkpointSettings, out var indexSize); if (opts.EnableStorageTier && !Directory.Exists(opts.LogDir)) { Directory.CreateDirectory(opts.LogDir); } if (!Directory.Exists(opts.CheckpointDir)) { Directory.CreateDirectory(opts.CheckpointDir); } store = new FasterKV <Key, Value>(indexSize, logSettings, checkpointSettings, disableLocking: disableLocking); if (opts.Recover) { try { store.Recover(); } catch { } } if (!opts.DisablePubSub) { kvBroker = new SubscribeKVBroker <Key, Value, Input, IKeyInputSerializer <Key, Input> >(keyInputSerializer, null, opts.PubSubPageSizeBytes(), true); broker = new SubscribeBroker <Key, Value, IKeySerializer <Key> >(keyInputSerializer, null, opts.PubSubPageSizeBytes(), true); } // Create session provider for VarLen provider = new FasterKVProvider <Key, Value, Input, Output, Functions, ParameterSerializer>(functionsGen, store, serializer, kvBroker, broker, opts.Recover, maxSizeSettings); server = new FasterServerTcp(opts.Address, opts.Port); server.Register(WireFormat.DefaultFixedLenKV, provider); }
/// <summary> /// Create FasterKV backend /// </summary> /// <param name="functionsGen"></param> /// <param name="store"></param> /// <param name="serializer"></param> /// <param name="kvBroker"></param> /// <param name="broker"></param> /// <param name="recoverStore"></param> /// <param name="maxSizeSettings"></param> public FasterKVProvider(Func<Functions> functionsGen, FasterKV<Key, Value> store, ParameterSerializer serializer = default, SubscribeKVBroker<Key, Value, Input, IKeyInputSerializer<Key, Input>> kvBroker = null, SubscribeBroker<Key, Value, IKeySerializer<Key>> broker = null, bool recoverStore = false, MaxSizeSettings maxSizeSettings = default) : base(store, serializer, kvBroker, broker, recoverStore, maxSizeSettings) { this.functionsGen = functionsGen; }
/// <summary> /// Create default SpanByte FasterKV backend with SpanByteFunctionsForServer<long> as functions, and SpanByteServerSerializer as parameter serializer /// </summary> /// <param name="store"></param> /// <param name="kvBroker"></param> /// <param name="broker"></param> /// <param name="recoverStore"></param> /// <param name="maxSizeSettings"></param> public SpanByteFasterKVProvider(FasterKV <SpanByte, SpanByte> store, SubscribeKVBroker <SpanByte, SpanByte, SpanByte, IKeyInputSerializer <SpanByte, SpanByte> > kvBroker = null, SubscribeBroker <SpanByte, SpanByte, IKeySerializer <SpanByte> > broker = null, bool recoverStore = false, MaxSizeSettings maxSizeSettings = default) : base(store, new(), kvBroker, broker, recoverStore, maxSizeSettings)