Skip to content

Commit 89e7d6e

Browse files
authored
Merge pull request #124 from koculu/123-enhancement-expose-the-copy-of-the-internal-options
Expose the copy of the options.
2 parents d11268d + a2867aa commit 89e7d6e

File tree

2 files changed

+73
-1
lines changed

2 files changed

+73
-1
lines changed

src/ZoneTree/Core/ZoneTree.cs

+62
Original file line numberDiff line numberDiff line change
@@ -346,4 +346,66 @@ public IMaintainer CreateMaintainer()
346346
{
347347
return new ZoneTreeMaintainer<TKey, TValue>(this);
348348
}
349+
350+
public ZoneTreeOptions<TKey, TValue> CloneOptions()
351+
{
352+
var options = Options;
353+
var wal = Options.WriteAheadLogOptions;
354+
var dsk = Options.DiskSegmentOptions;
355+
356+
var clonedWal = new WriteAheadLogOptions()
357+
{
358+
AsyncCompressedModeOptions = new()
359+
{
360+
EmptyQueuePollInterval = wal.AsyncCompressedModeOptions.EmptyQueuePollInterval,
361+
},
362+
CompressionBlockSize = wal.CompressionBlockSize,
363+
CompressionLevel = wal.CompressionLevel,
364+
CompressionMethod = wal.CompressionMethod,
365+
CustomOptions = wal.CustomOptions,
366+
EnableIncrementalBackup = wal.EnableIncrementalBackup,
367+
SyncCompressedModeOptions = new()
368+
{
369+
EnableTailWriterJob = wal.SyncCompressedModeOptions.EnableTailWriterJob,
370+
TailWriterJobInterval = wal.SyncCompressedModeOptions.TailWriterJobInterval
371+
},
372+
WriteAheadLogMode = wal.WriteAheadLogMode,
373+
};
374+
375+
var clonesDiskSegmentOptions = new DiskSegmentOptions()
376+
{
377+
CompressionBlockSize = dsk.CompressionBlockSize,
378+
CompressionLevel = dsk.CompressionLevel,
379+
CompressionMethod = dsk.CompressionMethod,
380+
DefaultSparseArrayStepSize = dsk.DefaultSparseArrayStepSize,
381+
DiskSegmentMode = dsk.DiskSegmentMode,
382+
KeyCacheRecordLifeTimeInMillisecond = dsk.KeyCacheRecordLifeTimeInMillisecond,
383+
KeyCacheSize = dsk.KeyCacheSize,
384+
MaximumRecordCount = dsk.MaximumRecordCount,
385+
MinimumRecordCount = dsk.MinimumRecordCount,
386+
ValueCacheRecordLifeTimeInMillisecond = dsk.ValueCacheRecordLifeTimeInMillisecond,
387+
ValueCacheSize = dsk.ValueCacheSize,
388+
};
389+
390+
var clone = new ZoneTreeOptions<TKey, TValue>()
391+
{
392+
BTreeLeafSize = options.BTreeLeafSize,
393+
BTreeLockMode = options.BTreeLockMode,
394+
BTreeNodeSize = options.BTreeNodeSize,
395+
Comparer = options.Comparer,
396+
DiskSegmentMaxItemCount = options.DiskSegmentMaxItemCount,
397+
DiskSegmentOptions = dsk,
398+
EnableSingleSegmentGarbageCollection = options.EnableSingleSegmentGarbageCollection,
399+
IsDeleted = options.IsDeleted,
400+
KeySerializer = options.KeySerializer,
401+
Logger = options.Logger,
402+
MarkValueDeleted = options.MarkValueDeleted,
403+
MutableSegmentMaxItemCount = options.MutableSegmentMaxItemCount,
404+
RandomAccessDeviceManager = options.RandomAccessDeviceManager,
405+
ValueSerializer = options.ValueSerializer,
406+
WriteAheadLogOptions = clonedWal,
407+
WriteAheadLogProvider = options.WriteAheadLogProvider,
408+
};
409+
return clone;
410+
}
349411
}

src/ZoneTree/IZoneTreeMaintenance.cs

+11-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Tenray.ZoneTree.Segments;
1+
using Tenray.ZoneTree.Options;
2+
using Tenray.ZoneTree.Segments;
23
using Tenray.ZoneTree.Segments.Disk;
34

45
namespace Tenray.ZoneTree;
@@ -207,6 +208,15 @@ public interface IZoneTreeMaintenance<TKey, TValue>
207208
/// Event is fired when the ZoneTree is disposing.
208209
/// </summary>
209210
event ZoneTreeIsDisposing<TKey, TValue> OnZoneTreeIsDisposing;
211+
212+
/// <summary>
213+
/// Clones the options used by ZoneTree instance.
214+
/// </summary>
215+
/// <remarks>
216+
/// Modifying the cloned option values does not change the ZoneTree instance's behavior.
217+
/// </remarks>
218+
/// <returns>Cloned ZoneTree options.</returns>
219+
public ZoneTreeOptions<TKey, TValue> CloneOptions();
210220
}
211221

212222
/// <summary>

0 commit comments

Comments
 (0)