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); } }