public LightningPersistence(LightningConfig config) { _config = config.Clone(); _cts = new CancellationTokenSource(); Console.WriteLine($"ThreadId ctor: {Thread.CurrentThread.ManagedThreadId}"); Env = new LightningEnvironment(_config.Name ?? "db") { MaxDatabases = _config.MaxTables > 0u ? (int)_config.MaxTables : 20, MapSize = (_config.StorageLimit > 0L ? (long)_config.StorageLimit : 10L) * 1024 * 1024 * 1024 }; EnvironmentOpenFlags envFlags; switch (config.SyncMode) { case LightningDbSyncMode.Fsync: envFlags = EnvironmentOpenFlags.NoThreadLocalStorage; break; case LightningDbSyncMode.Async: envFlags = EnvironmentOpenFlags.NoThreadLocalStorage | EnvironmentOpenFlags.WriteMap | EnvironmentOpenFlags.MapAsync; break; case LightningDbSyncMode.NoSync: envFlags = EnvironmentOpenFlags.NoThreadLocalStorage | EnvironmentOpenFlags.NoSync; break; case LightningDbSyncMode.ReadOnly: envFlags = EnvironmentOpenFlags.NoThreadLocalStorage | EnvironmentOpenFlags.ReadOnly; break; default: throw new ArgumentOutOfRangeException(); } Env.Open(envFlags); _envHandle = GCHandle.Alloc(Env); _tables = new ConcurrentDictionary <string, Table>(); _dupTables = new ConcurrentDictionary <string, DupTable>(); _writeQueue = new BlockingCollection <Delegates>(); var threadStart = new ThreadStart(() => { foreach (var batch in DequeueBatch(_writeQueue)) { ProcessBatch(batch); } _writeTaskCompletion.SetResult(null); }); var writeThread = new Thread(threadStart) { Name = "LMDB Writer thread", IsBackground = true }; writeThread.Start(); }
public GrpcTestClient(LightningConfig lightningConfig) { var port = (uint)Interlocked.Increment(ref _startingPort); lightningConfig.Name = $"{lightningConfig.Name ?? "db"}_{port}"; // It is safe to do as LightningConfig is a struct if (Directory.Exists(lightningConfig.Name)) { Directory.Delete(lightningConfig.Name, true); } ReplicaConfig = new ReplicaConfig { ReplicaId = "replica_1", Port = port, Replication = new ReplicationConfig { Port = port + 2000, PageSize = 10000, UseBatching = false }, Persistence = lightningConfig }; _server = new Replica(ReplicaConfig); _client = new LightClient(new Channel($"127.0.0.1:{port}", ChannelCredentials.Insecure), new ClientConfig { UseStreaming = true, Compression = None, HashedWith = Md5 }); }
static void Main(string[] args) { ConfigureLog($"logs/CacheServer_{DateTime.Now}.nlog"); GC.AddMemoryPressure(2L * 1024 * 1024 * 1024); GrpcEnvironment.SetLogger(new LogLevelFilterLogger(new ConsoleLogger(), LogLevel.Debug)); // GrpcEnvironment.SetLogger(new TextWriterLogger(new StreamWriter(File.OpenWrite($"logs/CacheServer_{DateTime.Now}.log")))); var lightningConfig = new LightningConfig { Name = @"C:\Work2\braindump\LmdbCacheServer\TestDir", MaxTables = 20, StorageLimit = 10, WriteBatchMaxDelegates = 1000, WriteBatchTimeoutMilliseconds = 1, SyncMode = LightningDbSyncMode.NoSync }; var replicaConfigMaster = new ReplicaConfig { ReplicaId = "replica_1", Port = Port, MonitoringInterval = 10000, Replication = new ReplicationConfig { Port = Port + 2000, PageSize = 10000, UseBatching = false }, Persistence = lightningConfig }; var lightningConfigSlave = lightningConfig.Clone(); lightningConfigSlave.Name = @"C:\Work2\braindump\LmdbCacheServer\TestDir_Slave"; lightningConfigSlave.WriteBatchMaxDelegates = 10000; lightningConfigSlave.WriteBatchTimeoutMilliseconds = 1; lightningConfigSlave.SyncMode = LightningDbSyncMode.NoSync; var replicaConfigSlave = new ReplicaConfig { ReplicaId = "replica_2", MasterNode = $"{"127.0.0.1"}:{replicaConfigMaster.Replication.Port}", Replication = new ReplicationConfig { Port = Port + 2500, PageSize = 10000, UseBatching = false }, Port = Port + 500, MonitoringInterval = 10000, Persistence = lightningConfigSlave }; using (var server = new Replica.Replica(args.Length == 0 ? replicaConfigMaster : replicaConfigSlave)) { Console.WriteLine("Cache server started on port " + Port); Console.WriteLine("Press any key to stop the server..."); Console.ReadKey(); } }
public void Setup() { if (Directory.Exists(TestDir)) { Directory.Delete(TestDir, true); } Directory.CreateDirectory(TestDir); _config = new LightningConfig { Name = TestDir, MaxTables = 20, StorageLimit = 1, WriteBatchMaxDelegates = 100, WriteBatchTimeoutMilliseconds = 1000 }; }
private IClient CreateClient(Type type, LightningConfig config) => ((IClientFactory)Activator.CreateInstance(type)).Create(config);
public IClient Create(LightningConfig config) => new GrpcTestClient(config);
public IClient Create(LightningConfig config) => new LmdbLightClient(config);
public LmdbLightClient(LightningConfig config) { _lmdb = new LightningPersistence(config); _kvTable = _lmdb.OpenTable("kv"); }