Example #1
0
        static void Main(string[] args)
        {
            //RunStupidModel();
            //return;



            if (args.Length < 2)
            {
                Console.Error.WriteLine("Usage: shard <db url> <my addr> | shard <db url> --setup");
                return;
            }

            try
            {
                int at     = 0;
                var dbHost = new Address(args[at++]);
                BaseDB.Connect(dbHost);                //,"admin","1234");
                ShardID addr = ShardID.Decode(args[at++]);


                bool haveConfig = BaseDB.BeginPullConfig(addr.XYZ);
                if (!haveConfig)
                {
                    Log.Error("Failed to establish connection to database");
                    Environment.Exit(-1);
                }

                Log.Message("Setting up clock");
                Clock.NTPHost = BaseDB.Config.ntp;

                while (Clock.NumQueries < 1)
                {
                    Thread.Sleep(100);
                }
                Log.Message("Starting up");



#if DRY_RUN
                if (addr == new ShardID())                  //root
                {
                    Log.Message("Resetting timer");
                    while (true)
                    {
                        Thread.Sleep(100);
                        var t = BaseDB.Timing;
                        if (t == null)
                        {
                            continue;
                        }

                        var n = Clock.Now + TimeSpan.FromSeconds(10);
                        t.startTime          = n.ToShortDateString() + " " + n.ToLongTimeString();
                        t.msGenerationBudget = 3000;                            //make sure we compute slowly
                        BaseDB.Timing        = t;
                        break;
                    }
                }
#endif


                if ((addr.XYZ >= BaseDB.Config.extent).Any)
                {
                    throw new ArgumentOutOfRangeException("addr", addr, "Exceeds extent: " + BaseDB.Config.extent);
                }
                if ((addr < ShardID.Zero).Any)
                {
                    throw new ArgumentOutOfRangeException("addr", addr, "Is (partially) negative");
                }

                Simulation.Run(addr);
            }
            catch (Exception ex)
            {
                Log.Error(ex);
            }
        }