internal static StatefulServiceLoadMetricDescription ParseStatefulMetric(string metricStr)
        {
            StatefulServiceLoadMetricDescription desc;

            string[] metricFields = metricStr.Split(',', ' ');

            if (metricFields.Length != 4)
            {
                throw new ArgumentException(StringResources.Error_InvalidMetricSpecification);
            }

            int primaryDefaultLoad, secondaryDefaultLoad;

            if (!int.TryParse(metricFields[2], out primaryDefaultLoad))
            {
                throw new ArgumentException(StringResources.Error_InvalidMetricSpecification);
            }

            if (!int.TryParse(metricFields[3], out secondaryDefaultLoad))
            {
                throw new ArgumentException(StringResources.Error_InvalidMetricSpecification);
            }

            desc = new StatefulServiceLoadMetricDescription()
            {
                Name                 = metricFields[0],
                Weight               = ParseWeight(metricFields[1]),
                PrimaryDefaultLoad   = primaryDefaultLoad,
                SecondaryDefaultLoad = secondaryDefaultLoad
            };

            return(desc);
        }
Example #2
0
        internal StatefulServiceDescription GetStatefulDescription(Job j)
        {
            var ser = JsonSerializer.Create();

            var sw = new StringWriter();

            ser.Serialize(sw, j);

            var desc = new StatefulServiceDescription()
            {
                ApplicationName            = new Uri("fabric:/Compute2"),
                DefaultMoveCost            = MoveCost.High,
                ServiceName                = new Uri(string.Format("fabric:/Compute2/ComputeInstance{0}", System.DateTime.Now.Ticks)),
                ServiceTypeName            = "StatefulComputeServiceType",
                HasPersistedState          = true,
                PartitionSchemeDescription = new SingletonPartitionSchemeDescription(),
                TargetReplicaSetSize       = 3,
                MinReplicaSetSize          = 2,
                InitializationData         = Encoding.UTF8.GetBytes(sw.ToString())
            };

            var metric = new StatefulServiceLoadMetricDescription()
            {
                PrimaryDefaultLoad   = 1,
                SecondaryDefaultLoad = 0,
                Name   = "TCU",
                Weight = ServiceLoadMetricWeight.Medium
            };

            desc.Metrics.Add(metric);

            return(desc);
        }
        public Task <Job> DiagStateful(int replicas)
        {
            var j = new Job()
            {
                NodeName = "", // TODO
                Id       = Guid.NewGuid().ToString(),
                Status   = JobStatus.Waiting
            };

            var ser = JsonSerializer.Create();

            var sw = new StringWriter();

            ser.Serialize(sw, j);

            StatefulServiceDescription desc = new StatefulServiceDescription();

            try
            {
                FabricClient client = new FabricClient();


                desc.ApplicationName            = new Uri("fabric:/Compute2");
                desc.DefaultMoveCost            = MoveCost.High;
                desc.ServiceName                = new Uri(string.Format("fabric:/Compute2/EmptyStatefulInstance{0}", System.DateTime.Now.Ticks));
                desc.ServiceTypeName            = "EmptyServiceType";
                desc.PartitionSchemeDescription = new SingletonPartitionSchemeDescription();
                desc.TargetReplicaSetSize       = replicas;
                desc.MinReplicaSetSize          = 1;
                desc.HasPersistedState          = false;
                desc.InitializationData         = Encoding.UTF8.GetBytes(sw.ToString());
                var metric = new StatefulServiceLoadMetricDescription();
                metric.PrimaryDefaultLoad   = 1;
                metric.SecondaryDefaultLoad = 1;
                metric.Name   = "calc";
                metric.Weight = ServiceLoadMetricWeight.Medium;
                desc.Metrics.Add(metric);


                client.ServiceManager.CreateServiceAsync(desc).Wait();
                //ServiceEventSource.Current.ServiceMessage(this, string.Format("created on svc {0}", desc.ServiceName));
            }
            catch (Exception ex)
            {
                // CreateServiceAsync throws when there's no capacity for StatefulServices
                // Handle appropriately
                //ServiceEventSource.Current.ServiceMessage(this, string.Format("ERROR creating svc {0}, {1}", desc.ServiceName, ex.ToString()));

                Debug.WriteLine(ex.ToString());
                return(Task.FromResult(RecordErrorStatus(j)));
            }
            return(Task.FromResult <Job>(j));
        }
 public static StatefulServiceLoadMetricDescription GetClone(this StatefulServiceLoadMetricDescription other)
 {
     if (other == null)
     {
         return(null);
     }
     return(new StatefulServiceLoadMetricDescription()
     {
         Name = other.Name,
         PrimaryDefaultLoad = other.PrimaryDefaultLoad,
         SecondaryDefaultLoad = other.SecondaryDefaultLoad,
         Weight = other.Weight
     });
 }
Example #5
0
        public static ServiceLoadMetricDescription GetClone(this ServiceLoadMetricDescription other)
        {
            if (other == null)
            {
                return(null);
            }

            ServiceLoadMetricDescription casted;

            if (other is StatefulServiceLoadMetricDescription)
            {
                casted = new StatefulServiceLoadMetricDescription(other as StatefulServiceLoadMetricDescription);
            }
            else if (other is StatelessServiceLoadMetricDescription)
            {
                casted = new StatelessServiceLoadMetricDescription(other as StatelessServiceLoadMetricDescription);
            }
            else
            {
                casted = new ServiceLoadMetricDescription(other);
            }

            return(casted);
        }