/// <summary> /// Initializes the silo client. /// </summary> /// <param name="serviceName"> /// The Windows Fabric service name. /// </param> /// <param name="partition"> /// The partition, or <see langword="null"/> for a singleton partition. /// </param> /// <param name="config"> /// The configuration, or <see langword="null"/> to load from the current directory. /// </param> public static void Initialize( Uri serviceName, ServicePartitionInformation partition, ClientConfiguration config = null) { var deploymentId = OrleansFabricUtility.GetDeploymentId(serviceName, partition); if (config == null) { config = new ClientConfiguration(); using (var reader = File.OpenText(Path.Combine(GetAssemblyPath(), "ClientConfiguration.xml"))) { config.Load(reader); } } config.DeploymentId = deploymentId; AzureClient.Initialize(config); }
/// <summary> /// Returns the partition key for the provided <paramref name="partition"/>. /// </summary> /// <param name="partition"> /// The partition. /// </param> /// <returns> /// The partition key for the provided <paramref name="partition"/>. /// </returns> private static string GetPartitionKey(ServicePartitionInformation partition) { switch (partition.Kind) { case ServicePartitionKind.Int64Range: { var intPartition = (Int64RangePartitionInformation)partition; return string.Format("{0:X}_{1:X}", intPartition.LowKey, intPartition.HighKey); } case ServicePartitionKind.Named: return ((NamedPartitionInformation)partition).Name; case ServicePartitionKind.Singleton: return string.Empty; default: throw new ArgumentOutOfRangeException(); } }
/// <summary> /// Returns the deployment id for the provided service and partition. /// </summary> /// <param name="serviceName"> /// The service. /// </param> /// <param name="partition"> /// The partition. /// </param> /// <returns> /// The deployment id for the provided service and partition. /// </returns> public static string GetDeploymentId(Uri serviceName, ServicePartitionInformation partition = null) { var partitionId = partition != null ? GetPartitionKey(partition) : string.Empty; var serviceId = Regex.Replace(serviceName.PathAndQuery.Trim('/'), "[^a-zA-Z0-9_]", "_"); return string.IsNullOrWhiteSpace(partitionId) ? serviceId : string.Format("{0}@{1}", serviceId, partitionId); }
// No Throw public static string Name(this ServicePartitionInformation partition) { return(DefaultOnNullException <string>( () => (partition as NamedPartitionInformation).Name)); }
/// <summary> /// Creates a <see cref="ServiceReference"/> for the provided service context and partition info. /// </summary> /// <param name="context"></param> /// <param name="info"></param> /// <returns></returns> private static ServiceReference CreateServiceReference(ServiceContext context, ServicePartitionInformation info) { var serviceReference = new ServiceReference { ApplicationName = context.CodePackageActivationContext.ApplicationName, PartitionKind = info.Kind, ServiceUri = context.ServiceName, PartitionGuid = context.PartitionId, }; var longInfo = info as Int64RangePartitionInformation; if (longInfo != null) { serviceReference.PartitionID = longInfo.LowKey; } else { var stringInfo = info as NamedPartitionInformation; if (stringInfo != null) { serviceReference.PartitionName = stringInfo.Name; } } return(serviceReference); }
/// <summary> /// Creates a <see cref="ServiceReference"/> for the provided service context and partition info. /// </summary> /// <param name="context"></param> /// <param name="info"></param> /// <param name="listenerName">(optional) The name of the listener that is used to communicate with the service</param> /// <returns></returns> private static ServiceReference CreateServiceReference(ServiceContext context, ServicePartitionInformation info, string listenerName = null) { var serviceReference = new ServiceReference { ApplicationName = context.CodePackageActivationContext.ApplicationName, PartitionKind = info.Kind, ServiceUri = context.ServiceName, PartitionGuid = context.PartitionId, ListenerName = listenerName }; if (info is Int64RangePartitionInformation longInfo) { serviceReference.PartitionKey = longInfo.LowKey; } else if (info is NamedPartitionInformation stringInfo) { serviceReference.PartitionName = stringInfo.Name; } return(serviceReference); }
// No Thow public static long HighKey(this ServicePartitionInformation partition) { return(DefaultOnNullException <long>( () => (partition as Int64RangePartitionInformation).HighKey)); }
/// <summary> /// Generate a Orleans ServiceFabric Deployment id. /// </summary> /// <param name="serviceName"> /// The Windows Fabric service name. /// </param> /// <param name="partition"> /// The partition, or <see langword="null"/> for a singleton partition. /// </param> /// <returns>A string representing the Orleans Deployment id</returns> public static string CreateDeploymentId(Uri serviceName, ServicePartitionInformation partition = null) => OrleansFabricUtility.GetDeploymentId(serviceName, partition);
/// <summary> /// Unregisters a service as a subscriber for messages of type <paramref name="messageType"/> using a relay broker. /// </summary> /// <returns></returns> private static async Task UnregisterMessageTypeWithRelayBrokerAsync(ServiceContext context, ServicePartitionInformation info, Type messageType, ActorId relayBrokerActorId, ActorId sourceBrokerActorId, bool flushQueue) { var serviceReference = CreateServiceReference(context, info); if (sourceBrokerActorId == null) { sourceBrokerActorId = new ActorId(messageType.FullName); } IRelayBrokerActor relayBrokerActor = ActorProxy.Create <IRelayBrokerActor>(relayBrokerActorId, serviceReference.ApplicationName, nameof(IRelayBrokerActor)); IBrokerActor brokerActor = ActorProxy.Create <IBrokerActor>(sourceBrokerActorId, serviceReference.ApplicationName, nameof(IBrokerActor)); //register relay as subscriber for broker await brokerActor.UnregisterSubscriberAsync(ActorReference.Get(relayBrokerActor), flushQueue); //register caller as subscriber for relay broker await relayBrokerActor.UnregisterServiceSubscriberAsync(serviceReference, flushQueue); }
public static Int64RangePartitionInformation AsLongPartitionInfo(this ServicePartitionInformation info) { return(info as Int64RangePartitionInformation); }
public EndpointCommunicationListener(StatefulServiceContext context, IReliableStateManager stateManager, ServicePartitionInformation partitionPartitionInfo) { servicePartitionInformation = partitionPartitionInfo; this.context = context; this.stateManager = stateManager; }
public static NamedPartitionInformation AsNamedPartitionInfo(this ServicePartitionInformation info) { return(info as NamedPartitionInformation); }
public static void ClassInitialize(TestContext context) { TestStatefulServiceReplica service = new TestStatefulServiceReplica(); StatefulServiceReplicaBroker broker = new StatefulServiceReplicaBroker(service, ReplicationWithLockingTests.DefaultInitializationParameters, ReplicationWithLockingTests.DefaultReplicaId); TestNativePartition nativePartition = new TestNativePartition(); StatefulServicePartition statefulServicePartition = new StatefulServicePartition(nativePartition, ServicePartitionInformation.CreateFromNative(nativePartition.PartitionInfo)); //((IServiceCatalog)ServiceCatalog.Current).AddService(service.Name, statefulServicePartition.Id, service); ((IStatefulServiceReplica)service).OpenAsync(statefulServicePartition); ((IStatefulServiceReplica)service).ChangeRoleAsync(ReplicaRole.Primary).Wait(); ReplicationWithLockingTests.Context = new StatefulServiceExecutionContext( service, new Dictionary <string, object> { { System.Fabric.Common.Constants.PropertyNames.Service, service.Name }, { System.Fabric.Common.Constants.PropertyNames.PartitionId, service.Partition.Id } }); ReplicationWithLockingTests.TypeInfo = ReplicableTypeInfo.GenerateReplicableTypeInfo(typeof(SampleService)); ReplicationWithLockingTests.ProgramInstance = new StatefulProgramInstance(service, Guid.NewGuid(), TypeInfo, new SampleService()); ReplicationWithLockingTests.StateReplicator = nativePartition.StateReplicator; }
public MockPartition(ServiceKind serviceKind, ServicePartitionInformation partitionInformation, HealthState healthState, ServicePartitionStatus partitionStatus) : base(serviceKind, partitionInformation, healthState, partitionStatus) { }
private static ServicePartitionInformation ServicePartitionParsingTestHelper(NativeTypes.FABRIC_SERVICE_PARTITION_INFORMATION nativePartitionInfo) { return(ServicePartitionInformation.FromNative(nativePartitionInfo)); }
private PartitionInformation GetBackupServicePartitionInformationFromServicePartitionInformation(ServicePartitionInformation servicePartitionInformation) { PartitionInformation backupServicePartitionInformation = null; switch (servicePartitionInformation.Kind) { case ServicePartitionKind.Singleton: backupServicePartitionInformation = new BackupRestoreTypes.SingletonPartitionInformation(); break; case ServicePartitionKind.Int64Range: var int64RangePartitionInformation = servicePartitionInformation as Int64RangePartitionInformation; ThrowIf.Null(int64RangePartitionInformation, "int64RangePartitionInformation"); backupServicePartitionInformation = new BackupRestoreTypes.Int64RangePartitionInformation() { HighKey = int64RangePartitionInformation.HighKey, LowKey = int64RangePartitionInformation.LowKey }; break; case ServicePartitionKind.Named: var namedPartitionInformation = servicePartitionInformation as NamedPartitionInformation; ThrowIf.Null(namedPartitionInformation, "namedPartitionInformation"); backupServicePartitionInformation = new BackupRestoreTypes.NamedPartitionInformation() { Name = namedPartitionInformation.Name }; break; default: throw new ArgumentOutOfRangeException(); } return(backupServicePartitionInformation); }