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