Implement in-process multi-dataset sync isolation across core, network, persistence, and tests
All checks were successful
NuGet Package Publish / nuget (push) Successful in 1m14s

This commit is contained in:
Joseph Doherty
2026-02-22 11:58:34 -05:00
parent c06b56172a
commit 8e97061ab8
60 changed files with 4519 additions and 559 deletions

View File

@@ -4,6 +4,7 @@ using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Serilog;
using System.Text.Json;
using ZB.MOM.WW.CBDDC.Core;
using ZB.MOM.WW.CBDDC.Core.Network;
using ZB.MOM.WW.CBDDC.Core.Storage;
using ZB.MOM.WW.CBDDC.Core.Sync;
@@ -62,11 +63,22 @@ internal class Program
Directory.CreateDirectory(dataPath);
string databasePath = Path.Combine(dataPath, $"{nodeId}.rocksdb");
string surrealDatabase = nodeId.Replace("-", "_", StringComparison.Ordinal);
var multiDatasetOptions = builder.Configuration
.GetSection("CBDDC:MultiDataset")
.Get<MultiDatasetRuntimeOptions>()
?? new MultiDatasetRuntimeOptions
{
EnableMultiDatasetSync = true,
EnableDatasetPrimary = true,
EnableDatasetLogs = true,
EnableDatasetTimeseries = true
};
// Register CBDDC services with embedded Surreal (RocksDB).
builder.Services.AddSingleton<ICBDDCSurrealSchemaInitializer, SampleSurrealSchemaInitializer>();
builder.Services.AddSingleton<SampleDbContext>();
builder.Services.AddCBDDCCore()
builder.Services
.AddCBDDCCore()
.AddCBDDCSurrealEmbedded<SampleDocumentStore>(_ => new CBDDCSurrealEmbeddedOptions
{
Endpoint = "rocksdb://local",
@@ -74,8 +86,30 @@ internal class Program
Namespace = "cbddc_sample",
Database = surrealDatabase
})
.AddCBDDCSurrealEmbeddedDataset(DatasetId.Primary, options =>
{
options.InterestingCollections = ["Users", "TodoLists"];
})
.AddCBDDCSurrealEmbeddedDataset(DatasetId.Logs, options =>
{
options.InterestingCollections = ["Logs"];
})
.AddCBDDCSurrealEmbeddedDataset(DatasetId.Timeseries, options =>
{
options.InterestingCollections = ["Timeseries"];
})
.AddCBDDCNetwork<StaticPeerNodeConfigurationProvider>(); // useHostedService = true by default
if (multiDatasetOptions.EnableMultiDatasetSync)
builder.Services.AddCBDDCMultiDataset(options =>
{
options.EnableMultiDatasetSync = multiDatasetOptions.EnableMultiDatasetSync;
options.EnableDatasetPrimary = multiDatasetOptions.EnableDatasetPrimary;
options.EnableDatasetLogs = multiDatasetOptions.EnableDatasetLogs;
options.EnableDatasetTimeseries = multiDatasetOptions.EnableDatasetTimeseries;
options.AdditionalDatasets = multiDatasetOptions.AdditionalDatasets.ToList();
});
builder.Services.AddHostedService<ConsoleInteractiveService>(); // Runs the Input Loop
var host = builder.Build();