internal ConfigurationAction(string containerName, string serverName, float?utility, string SLAId = null, ConfigurationActionSource source = ConfigurationActionSource.NonConstraint, int numberOfReads = 0, int numberOfWrites = 0) { this.Configuration = ClientRegistry.GetConfiguration(containerName, false); this.ModifyingContainer = ClientRegistry.GetCloudBlobContainer(serverName, containerName); this.GainedUtility = utility ?? 0; OriginatingSLAs = new HashSet <string>(); Clients = new HashSet <string>(); if (SLAId != null) { OriginatingSLAs.Add(SLAId); } this.Source = source; this.numberOfReads = numberOfReads; this.numberOfWrites = numberOfWrites; this.ServerName = serverName; if (numberOfBlobs == 0) { CloudBlobContainer primaryContainer = ClientRegistry.GetCloudBlobContainer(Configuration.PrimaryServers.First(), containerName); numberOfBlobs = primaryContainer.ListBlobs().Count(); } Cost = ComputeCost(); }
public static string PrintCurrentConfiguration() { string result = null; ReplicaConfiguration config = ClientRegistry.GetConfiguration(containerName, false); result += "Current configuration for " + config.Name + ":" + "\r\n"; result += "Primary: "; bool first = true; foreach (string name in config.PrimaryServers) { if (first) { first = false; } else { result += ", "; } result += SiteName(name); } ; result += "\r\n"; result += "Secondaries: "; first = true; foreach (string name in config.SecondaryServers) { if (first) { first = false; } else { result += ", "; } result += SiteName(name); } ; result += "\r\n"; return(result); }
public static void Main(string[] args) { Console.CancelKeyPress += new ConsoleCancelEventHandler(Cancelled); if (args.Length == 0) { args = new string[7]; //storage account locating configuration of given container args[0] = "dbtsouthstorage"; // "devstoreaccount1"; // container name args[1] = "testcontainer"; // the result folder name args[2] = "folder1"; //sleep time between ticks in milliseconds. args[3] = "90000"; //interval between configuration args[4] = "2"; //duration of experiment in ticks args[5] = "24"; //start tick for configuration args[6] = "1"; } configurationSite = args[0]; containerName = args[1]; resultFileFolderName = args[2]; sleepTimeBetweenTicks = Int32.Parse(args[3]); ticksBetweenConfigurations = Int32.Parse(args[4]); experimentDurationInTicks = Int32.Parse(args[5]); startTickOfConfiguration = Int32.Parse(args[6]); Dictionary <string, CloudStorageAccount> acounts = Account.GetStorageAccounts(true); acounts.Remove("devstoreaccount1"); ClientRegistry.Init(acounts, Account.GetStorageAccounts(true)[configurationSite]); ReplicaConfiguration configuration = ClientRegistry.GetConfiguration(containerName, false); Configurator conf = new Configurator(containerName); #region replicator Replicator replicator = new Replicator(containerName); replicator.Start(); #endregion #region configurator List <ConfigurationConstraint> constraints = new List <ConfigurationConstraint>(); //constraints.Add(new LocationConstraint(containerName, "dbteastasiastorage", LocationConstraintType.Replicate)); constraints.Add(new ReplicationFactorConstraint(containerName, configuration, 1, 2)); DateTime startTime = DateTime.Now; Thread.Sleep(startTickOfConfiguration * sleepTimeBetweenTicks); while (DateTime.Now.Subtract(startTime).TotalMilliseconds < (experimentDurationInTicks * sleepTimeBetweenTicks)) { try { configuration = ClientRegistry.GetConfiguration(containerName, false); Console.WriteLine("Starting to reconfigure. Current Epoch: " + configuration.Epoch); conf.Configure(ClientRegistry.GetConfigurationAccount(), configuration.Epoch, configuration, constraints); Console.WriteLine(Configurator.Logs); Console.WriteLine(">>>>>>>>>>> Finished. Current Epoch: " + configuration.Epoch + "<<<<<<<<<<<<<<<<"); } catch (Exception ex) { Console.WriteLine(ex.StackTrace); } Thread.Sleep(ticksBetweenConfigurations * sleepTimeBetweenTicks); } #endregion return; }