private void _parallelGenerationDifferent() { const int PASS_CNT = 5000; int TOTAL = 0; var gen = new GDIDGenerator("AAAA", null); gen.AuthorityHosts.Register(new GDIDGenerator.AuthorityHost("sync://127.0.0.1:9999")); var dict = new Dictionary <string, List <ulong> >(); dict.Add("aseq", new List <ulong>()); dict.Add("bseq", new List <ulong>()); dict.Add("cseq", new List <ulong>()); dict.Add("dseq", new List <ulong>()); dict.Add("eseq", new List <ulong>()); dict.Add("fseq", new List <ulong>()); dict.Add("gseq", new List <ulong>()); var rnd = new Random(); var sw = Stopwatch.StartNew(); Parallel.For(0, PASS_CNT, (n) => { var seq = dict.Keys.ToList()[n % dict.Keys.Count]; var BATCH = 32 + rnd.Next(255); //introduces randomness in threads ulong[] arr = new ulong[BATCH]; for (int i = 0; i < BATCH; i++) { arr[i] = gen.GenerateOneGDID("a", seq, 1024).ID; } lock (dict[seq]) foreach (var id in arr) { dict[seq].Add(id); } System.Threading.Interlocked.Add(ref TOTAL, BATCH); }); var elapsed = sw.ElapsedMilliseconds; foreach (var kvp in dict) { Aver.AreEqual(kvp.Value.Count, kvp.Value.Distinct().Count());//all values are distinct Console.WriteLine("{0} = {1} ids".Args(kvp.Key, kvp.Value.Count)); } Console.WriteLine("Processed {0} in {1} ms. at {2}/sec.".Args(TOTAL, elapsed, TOTAL / (elapsed / 1000d))); }
protected override void DoStart() { if (m_TargetName.IsNullOrWhiteSpace()) { throw new MDBException(StringConsts.MDB_STORE_CONFIG_NO_TARGET_NAME_ERROR); } if (m_Areas.Count == 0) { throw new MDBException(StringConsts.MDB_STORE_CONFIG_NO_AREAS_ERROR); } try { GDIDAuthorityService.CheckNameValidity(m_SchemaName); GDIDAuthorityService.CheckNameValidity(m_BankName); var gdidScope = GetGDIDScopePrefix(m_SchemaName, m_BankName); m_GDIDGenerator = new GDIDGenerator("GDIDGen({0})".Args(gdidScope), this, gdidScope, null); if (AgniSystem.IsMetabase) { foreach (var ah in AgniSystem.Metabase.GDIDAuthorities) { m_GDIDGenerator.AuthorityHosts.Register(ah); App.Log.Write(new NFX.Log.Message { Type = NFX.Log.MessageType.InfoD, Topic = SysConsts.LOG_TOPIC_MDB, From = GetType().FullName + ".makeGDIDGen()", Text = "Registered GDID authority host: " + ah.ToString() }); } } } catch (Exception error) { throw new MDBException(StringConsts.MDB_STORE_CONFIG_GDID_ERROR + error.ToMessageWithType()); } try { m_Cache = new LocalCache("MDBDataStore::" + Name, this); m_Cache.Pile = new DefaultPile(m_Cache, "MDBDataStore::Pile::" + Name); m_Cache.Configure(null); m_Cache.Start(); } catch { try { DisposableObject.DisposeAndNull(ref m_GDIDGenerator); } catch {} try { DisposableObject.DisposeAndNull(ref m_Cache); } catch {} throw; } }
private void _parallelGenerationSame() { const int PASS_CNT = 5000; int TOTAL = 0; var gen = new GDIDGenerator("AAAA", null); gen.AuthorityHosts.Register(new GDIDGenerator.AuthorityHost("sync://127.0.0.1:9999")); var lst = new List <ulong>(); var rnd = new Random(); var sw = Stopwatch.StartNew(); Parallel.For(0, PASS_CNT, (_) => { var BATCH = 32 + rnd.Next(255); //introduces randomness in threads ulong[] arr = new ulong[BATCH]; for (int i = 0; i < BATCH; i++) { arr[i] = gen.GenerateOneGDID("a", "aseq", 1024).ID; } lock (lst) foreach (var id in arr) { lst.Add(id); } System.Threading.Interlocked.Add(ref TOTAL, BATCH); }); var elapsed = sw.ElapsedMilliseconds; Aver.AreEqual(lst.Count, lst.Distinct().Count()); //all values are distinct Console.WriteLine("Processed {0} in {1} ms. at {2}/sec.".Args(TOTAL, elapsed, TOTAL / (elapsed / 1000d))); }
static void run(string[] args) { using (var app = new ServiceBaseApplication(args, null)) { var silent = app.CommandArgs["s", "silent"].Exists; if (!silent) { ConsoleUtils.WriteMarkupContent(typeof(ProgramBody).GetText("Welcome.txt")); ConsoleUtils.Info("Build information:"); Console.WriteLine(" NFX: " + BuildInformation.ForFramework); Console.WriteLine(" Agni: " + new BuildInformation(typeof(Agni.AgniSystem).Assembly)); Console.WriteLine(" Tool: " + new BuildInformation(typeof(agm.ProgramBody).Assembly)); } if (app.CommandArgs["?", "h", "help"].Exists) { ConsoleUtils.WriteMarkupContent(typeof(ProgramBody).GetText("Help.txt")); return; } var authority = app.CommandArgs.AttrByIndex(0).Value; var connectToAuthority = authority.ToResolvedServiceNode(false).ConnectString; var scope = app.CommandArgs.AttrByIndex(1).Value; var seq = app.CommandArgs.AttrByIndex(2).Value; var bsize = app.CommandArgs.AttrByIndex(3).ValueAsInt(1); if (!silent) { ConsoleUtils.Info("Authority: " + authority); ConsoleUtils.Info("Connect to: " + connectToAuthority); ConsoleUtils.Info("Scope: " + scope); ConsoleUtils.Info("Sequence: " + seq); ConsoleUtils.Info("Block Size: " + bsize); } var w = System.Diagnostics.Stopwatch.StartNew(); var generator = new GDIDGenerator(); generator.AuthorityHosts.Register(new GDIDGenerator.AuthorityHost(connectToAuthority)); var json = app.CommandArgs["j", "json"].Exists; var arr = app.CommandArgs["array"].Exists; if (arr) { Console.WriteLine("["); } for (var i = 0; i < bsize; i++) { var gdid = generator.GenerateOneGDID(scope, seq, bsize - i, noLWM: true); ////System.Threading.Thread.Sleep(5); //Console.ReadKey(); string line; if (json) { line = new { Era = gdid.Era, ID = gdid.ID, Authority = gdid.Authority, Counter = gdid.Counter } }
private void GDIDForm_Load(object sender, EventArgs e) { m_Generator = new GDIDGenerator(); m_Generator.TestingAuthorityNode = "sync://localhost:4000";//"async://localhost:4001"; }
protected override void DoInitApplication() { base.DoInitApplication(); var FROM = GetType().FullName + ".DoInitApplication()"; var csvc = new AgniSystemBase(this); csvc.Start(); m_TheSystem = csvc; var metabase = BootConfLoader.Metabase; try { m_GDIDProvider = new GDIDGenerator("Agni", this); foreach (var ah in metabase.GDIDAuthorities) { m_GDIDProvider.AuthorityHosts.Register(ah); WriteLog(MessageType.Info, FROM + "{GDIDProvider init}", "Registered GDID authority host: " + ah.ToString()); } WriteLog(MessageType.Info, FROM, "GDIProvider made"); } catch (Exception error) { WriteLog(MessageType.CatastrophicError, FROM + "{GDIDProvider init}", error.ToMessageWithType()); try { m_GDIDProvider.Dispose(); } catch { } m_GDIDProvider = null; } var wmSection = ConfigRoot[CONFIG_WEB_MANAGER_SECTION]; if (wmSection.Exists && wmSection.AttrByName(CONFIG_ENABLED_ATTR).ValueAsBool(false)) { try { m_WebManagerServer = new WaveServer(); m_WebManagerServer.Configure(wmSection); m_WebManagerServer.Start(); } catch (Exception error) { WriteLog(MessageType.CatastrophicError, FROM + "{WebManagerServer start}", error.ToMessageWithType()); try { m_WebManagerServer.Dispose(); } catch {} m_WebManagerServer = null; } } var lockSection = ConfigRoot[CONFIG_LOCK_MANAGER_SECTION]; try { m_LockManager = FactoryUtils.MakeAndConfigure <Locking.ILockManagerImplementation>(lockSection, typeof(Locking.LockManager)); WriteLog(MessageType.Info, FROM, "Lock Manager made"); if (m_LockManager is Service) { ((Service)m_LockManager).Start(); WriteLog(MessageType.Info, FROM, "Lock Manager STARTED"); } } catch (Exception error) { WriteLog(MessageType.CatastrophicError, FROM + "{LockManager start}", error.ToMessageWithType()); try { m_LockManager.Dispose(); } catch {} m_LockManager = null; } var procSection = ConfigRoot[CONFIG_PROCESS_MANAGER_SECTION]; try { m_ProcessManager = FactoryUtils.MakeAndConfigure <Workers.IProcessManagerImplementation>(procSection, typeof(Workers.ProcessManager), new object[] { this }); WriteLog(MessageType.Info, FROM, "Process Manager made"); if (m_ProcessManager is Service) { ((Service)m_ProcessManager).Start(); WriteLog(MessageType.Info, FROM, "Process Manager STARTED"); } } catch (Exception error) { WriteLog(MessageType.CatastrophicError, FROM + "{ProcessManager start}", error.ToMessageWithType()); try { m_ProcessManager.Dispose(); } catch {} m_ProcessManager = null; } var hostSection = ConfigRoot[CONFIG_HOST_MANAGER_SECTION]; try { m_DynamicHostManager = FactoryUtils.MakeAndConfigure <Dynamic.IHostManagerImplementation>(procSection, typeof(Dynamic.HostManager), new object[] { this }); WriteLog(MessageType.Info, FROM, "Dynamic Host Manager made"); if (m_DynamicHostManager is Service) { ((Service)m_DynamicHostManager).Start(); WriteLog(MessageType.Info, FROM, "Dynamic Host Manager STARTED"); } } catch (Exception error) { WriteLog(MessageType.CatastrophicError, FROM + "{HostManager start}", error.ToMessageWithType()); try { m_DynamicHostManager.Dispose(); } catch {} m_DynamicHostManager = null; } }