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();
        }
Example #2
0
        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);
        }
Example #3
0
        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;
        }