diff --git a/cs/src/core/Device/LocalMemoryDevice.cs b/cs/src/core/Device/LocalMemoryDevice.cs index 17473d0a8..66c2ca0ef 100644 --- a/cs/src/core/Device/LocalMemoryDevice.cs +++ b/cs/src/core/Device/LocalMemoryDevice.cs @@ -43,8 +43,9 @@ public unsafe sealed class LocalMemoryDevice : StorageDeviceBase /// Number of IO processing threads /// Induced callback latency in ms (for testing purposes) /// Sector size for device (default 64) - public LocalMemoryDevice(long capacity, long sz_segment, int parallelism, int latencyMs = 0, uint sector_size = 64) - : base("/userspace/ram/storage", sector_size, capacity) + /// Virtual path for the device + public LocalMemoryDevice(long capacity, long sz_segment, int parallelism, int latencyMs = 0, uint sector_size = 64, string fileName = "/userspace/ram/storage") + : base(fileName, sector_size, capacity) { if (capacity == Devices.CAPACITY_UNSPECIFIED) throw new Exception("Local memory device must have a capacity!"); Console.WriteLine("LocalMemoryDevice: Creating a " + capacity + " sized local memory device."); diff --git a/cs/src/core/Index/FasterLog/FasterLog.cs b/cs/src/core/Index/FasterLog/FasterLog.cs index c7980b70b..78dbb2a6c 100644 --- a/cs/src/core/Index/FasterLog/FasterLog.cs +++ b/cs/src/core/Index/FasterLog/FasterLog.cs @@ -139,6 +139,7 @@ private FasterLog(FasterLogSettings logSettings, bool oldCommitManager) new DeviceLogCommitCheckpointManager (new LocalStorageNamedDeviceFactory(), new DefaultCheckpointNamingScheme( + logSettings.LogCommitDir ?? new FileInfo(logSettings.LogDevice.FileName).Directory.FullName)); if (logSettings.LogCommitManager == null) diff --git a/cs/src/core/Index/FasterLog/FasterLogSettings.cs b/cs/src/core/Index/FasterLog/FasterLogSettings.cs index ecb035f74..9fe7cc8e5 100644 --- a/cs/src/core/Index/FasterLog/FasterLogSettings.cs +++ b/cs/src/core/Index/FasterLog/FasterLogSettings.cs @@ -63,10 +63,11 @@ public class FasterLogSettings public ILogCommitManager LogCommitManager = null; /// - /// Use specified directory for storing and retrieving checkpoints + /// Use specified directory (path) as base for storing and retrieving log commits. By default, + /// commits will be stored in a folder named log-commits under this directory. If not provided, + /// we use the base path of the log device by default. /// - [Obsolete("This field is obsolete. The default log commit manager uses its own naming system. To use the old commit manager, set FasterLogSettings.LogCommitManager = new LocalLogCommitManager(LogCommitFile).", false)] - public string LogCommitFile = null; + public string LogCommitDir = null; /// /// User callback to allocate memory for read entries diff --git a/cs/src/core/VarLen/SpanByte.cs b/cs/src/core/VarLen/SpanByte.cs index 78114e651..30f709379 100644 --- a/cs/src/core/VarLen/SpanByte.cs +++ b/cs/src/core/VarLen/SpanByte.cs @@ -107,6 +107,17 @@ public ReadOnlySpan AsReadOnlySpan() return new ReadOnlySpan((void*)payload, Length); } + /// + /// If SpanByte is in a serialized form, return a non-serialized SpanByte wrapper that points to the same payload. + /// The resulting SpanByte is safe to heap-copy, as long as the underlying payload remains fixed. + /// + /// + public SpanByte Deserialize() + { + if (!Serialized) return this; + return new SpanByte(Length, (IntPtr)Unsafe.AsPointer(ref payload)); + } + /// /// Reinterpret a fixed Span<byte> as a serialized SpanByte. Automatically adds Span length to the first 4 bytes. /// diff --git a/cs/src/core/VarLen/SpanByteAndMemory.cs b/cs/src/core/VarLen/SpanByteAndMemory.cs index da957ce97..1afb6de8b 100644 --- a/cs/src/core/VarLen/SpanByteAndMemory.cs +++ b/cs/src/core/VarLen/SpanByteAndMemory.cs @@ -28,6 +28,7 @@ public unsafe struct SpanByteAndMemory : IHeapConvertible /// public SpanByteAndMemory(SpanByte spanByte) { + if (spanByte.Serialized) throw new Exception("Cannot create new SpanByteAndMemory using serialized SpanByte"); SpanByte = spanByte; Memory = default; }