internal LockableUnsafeContext(ClientSession <Key, Value, Input, Output, Context, Functions> clientSession) { this.clientSession = clientSession; FasterSession = new InternalFasterSession(clientSession); }
internal AdvancedClientSession( FasterKV <Key, Value> fht, FasterKV <Key, Value> .FasterExecutionContext <Input, Output, Context> ctx, Functions functions, bool supportAsync, SessionVariableLengthStructSettings <Value, Input> sessionVariableLengthStructSettings = null) { this.fht = fht; this.ctx = ctx; this.functions = functions; SupportAsync = supportAsync; LatestCommitPoint = new CommitPoint { UntilSerialNo = -1, ExcludedSerialNos = null }; FasterSession = new InternalFasterSession(this); this.variableLengthStruct = sessionVariableLengthStructSettings?.valueLength; if (this.variableLengthStruct == default) { UpdateVarlen(ref this.variableLengthStruct); if ((this.variableLengthStruct == default) && (fht.hlog is VariableLengthBlittableAllocator <Key, Value> allocator)) { Debug.WriteLine("Warning: Session did not specify Input-specific functions for variable-length values via IVariableLengthStruct<Value, Input>"); this.variableLengthStruct = new DefaultVariableLengthStruct <Value, Input>(allocator.ValueLength); } } else { if (!(fht.hlog is VariableLengthBlittableAllocator <Key, Value>)) { Debug.WriteLine("Warning: Session param of variableLengthStruct provided for non-varlen allocator"); } } this.inputVariableLengthStruct = sessionVariableLengthStructSettings?.inputLength; if (inputVariableLengthStruct == default) { if (typeof(Input) == typeof(SpanByte)) { inputVariableLengthStruct = new SpanByteVarLenStruct() as IVariableLengthStruct <Input>; } else if (typeof(Input).IsGenericType && (typeof(Input).GetGenericTypeDefinition() == typeof(Memory <>)) && Utility.IsBlittableType(typeof(Input).GetGenericArguments()[0])) { var m = typeof(MemoryVarLenStruct <>).MakeGenericType(typeof(Input).GetGenericArguments()); object o = Activator.CreateInstance(m); inputVariableLengthStruct = o as IVariableLengthStruct <Input>; } else if (typeof(Input).IsGenericType && (typeof(Input).GetGenericTypeDefinition() == typeof(ReadOnlyMemory <>)) && Utility.IsBlittableType(typeof(Input).GetGenericArguments()[0])) { var m = typeof(ReadOnlyMemoryVarLenStruct <>).MakeGenericType(typeof(Input).GetGenericArguments()); object o = Activator.CreateInstance(m); inputVariableLengthStruct = o as IVariableLengthStruct <Input>; } } // Session runs on a single thread if (!supportAsync) { UnsafeResumeThread(); } }