/// <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));
 }
Example #5
0
        /// <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);
 }
Example #13
0
        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;
        }
Example #14
0
 public MockPartition(ServiceKind serviceKind, ServicePartitionInformation partitionInformation, HealthState healthState, ServicePartitionStatus partitionStatus)
     : base(serviceKind, partitionInformation, healthState, partitionStatus)
 {
 }
Example #15
0
 private static ServicePartitionInformation ServicePartitionParsingTestHelper(NativeTypes.FABRIC_SERVICE_PARTITION_INFORMATION nativePartitionInfo)
 {
     return(ServicePartitionInformation.FromNative(nativePartitionInfo));
 }
Example #16
0
        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);
        }