예제 #1
0
파일: GDIDGen.cs 프로젝트: saleyn/agni
        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)));
        }
예제 #2
0
        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;
            }
        }
예제 #3
0
파일: GDIDGen.cs 프로젝트: saleyn/agni
        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)));
        }
예제 #4
0
        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
                        }
                    }
예제 #5
0
 private void GDIDForm_Load(object sender, EventArgs e)
 {
     m_Generator = new GDIDGenerator();
     m_Generator.TestingAuthorityNode = "sync://localhost:4000";//"async://localhost:4001";
 }
예제 #6
0
        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;
            }
        }