internal IndexWorkflowQueueGrainService(SiloIndexManager siloIndexManager, Type grainInterfaceType, int queueSequenceNumber, bool isDefinedAsFaultTolerantGrain)
     : base(IndexWorkflowQueueBase.CreateIndexWorkflowQueueGrainReference(siloIndexManager, grainInterfaceType, queueSequenceNumber, siloIndexManager.SiloAddress).GrainIdentity,
            siloIndexManager.Silo, siloIndexManager.LoggerFactory)
 {
     _base = new IndexWorkflowQueueBase(siloIndexManager, grainInterfaceType, queueSequenceNumber, siloIndexManager.SiloAddress, isDefinedAsFaultTolerantGrain,
                                        () => base.GetGrainReference()); // lazy is needed because the runtime isn't attached until Registered
 }
        /// <summary>
        /// Find the corresponding work-flow queue for a given grain interface
        /// type that the current IndexableGrain implements
        /// </summary>
        /// <param name="iGrainType">the given grain interface type</param>
        /// <returns>the work-flow queue corresponding to the iGrainType</returns>
        internal IIndexWorkflowQueue GetWorkflowQueue(Type iGrainType)
        {
            if (this.WorkflowQueues == null)
            {
                this.WorkflowQueues = new Dictionary <Type, IIndexWorkflowQueue>();
            }

            if (!this.WorkflowQueues.TryGetValue(iGrainType, out IIndexWorkflowQueue workflowQ))
            {
                workflowQ = IndexWorkflowQueueBase.GetIndexWorkflowQueueFromGrainHashCode(this.SiloIndexManager, iGrainType,
                                                                                          this.AsReference <IIndexableGrain>(this.SiloIndexManager, iGrainType).GetHashCode(), BaseSiloAddress);
                this.WorkflowQueues.Add(iGrainType, workflowQ);
            }
            return(workflowQ);
        }
        /// <summary>
        /// Find the corresponding work-flow queue for a given grain interface
        /// type that the current IndexableGrain implements
        /// </summary>
        /// <param name="iGrainType">the given grain interface type</param>
        /// <returns>the work-flow queue corresponding to the iGrainType</returns>
        internal IIndexWorkflowQueue GetWorkflowQueue(Type iGrainType)
        {
            if (WorkflowQueues == null)
            {
                WorkflowQueues = new Dictionary <Type, IIndexWorkflowQueue>();
            }

            IIndexWorkflowQueue workflowQ;

            if (!WorkflowQueues.TryGetValue(iGrainType, out workflowQ))
            {
                workflowQ = IndexWorkflowQueueBase.GetIndexWorkflowQueueFromGrainHashCode(iGrainType, this.AsReference <IIndexableGrain>(GrainFactory, iGrainType).GetHashCode(), RuntimeAddress);
                WorkflowQueues.Add(iGrainType, workflowQ);
            }
            return(workflowQ);
        }
Пример #4
0
        public Task Initialize(IIndexWorkflowQueue oldParentSystemTarget)
        {
            if (_base == null)
            {
                GrainReference oldParentSystemTargetRef = oldParentSystemTarget.AsWeaklyTypedReference();
                string[]       parts = oldParentSystemTargetRef.GetPrimaryKeyString().Split('-');
                if (parts.Length != 2)
                {
                    throw new Exception("The primary key for IndexWorkflowQueueSystemTarget should only contain a single special character '-', while it contains multiple. The primary key is '" + oldParentSystemTargetRef.GetPrimaryKeyString() + "'");
                }

                Type grainInterfaceType  = TypeUtils.ResolveType(parts[0]);
                int  queueSequenceNumber = int.Parse(parts[1]);

                GrainReference thisRef = this.AsWeaklyTypedReference();
                _base = new IndexWorkflowQueueBase(grainInterfaceType, queueSequenceNumber, oldParentSystemTargetRef.SystemTargetSilo, true, thisRef.GrainId, thisRef);
            }
            return(TaskDone.Done);
        }
        public Task Initialize(IIndexWorkflowQueue oldParentGrainService)
        {
            if (_base == null)
            {
                GrainReference oldParentGrainServiceRef = oldParentGrainService.AsWeaklyTypedReference();
                string[]       parts = oldParentGrainServiceRef.GetPrimaryKeyString().Split('-');
                if (parts.Length != 2)
                {
                    throw new WorkflowIndexException("The primary key for IndexWorkflowQueueGrainService should only contain a single special character '-', while it contains multiple." +
                                                     " The primary key is '" + oldParentGrainServiceRef.GetPrimaryKeyString() + "'");
                }

                Type grainInterfaceType  = this.SiloIndexManager.CachedTypeResolver.ResolveType(parts[0]);
                int  queueSequenceNumber = int.Parse(parts[1]);

                _base = new IndexWorkflowQueueBase(this.SiloIndexManager, grainInterfaceType, queueSequenceNumber,
                                                   oldParentGrainServiceRef.GrainServiceSiloAddress, isDefinedAsFaultTolerantGrain: true,
                                                   parentFunc: () => this.AsWeaklyTypedReference());
            }
            return(Task.CompletedTask);
        }
Пример #6
0
 public static GrainReference CreateIndexWorkflowQueueHandlerGrainReference(SiloIndexManager siloIndexManager, Type grainInterfaceType, int queueSeqNum, SiloAddress siloAddress)
 => siloIndexManager.MakeGrainServiceGrainReference(IndexingConstants.INDEX_WORKFLOW_QUEUE_HANDLER_GRAIN_SERVICE_TYPE_CODE,
                                                    IndexWorkflowQueueBase.CreateIndexWorkflowQueuePrimaryKey(grainInterfaceType, queueSeqNum), siloAddress);
Пример #7
0
 private IIndexWorkflowQueue InitIndexWorkflowQueue()
 => __workflowQueue = _lazyParent.Value.IsGrainService
             ? _siloIndexManager.GetGrainService <IIndexWorkflowQueue>(IndexWorkflowQueueBase.CreateIndexWorkflowQueueGrainReference(_siloIndexManager, _grainInterfaceType, _queueSeqNum, _silo))
             : _siloIndexManager.GrainFactory.GetGrain <IIndexWorkflowQueue>(IndexWorkflowQueueBase.CreateIndexWorkflowQueuePrimaryKey(_grainInterfaceType, _queueSeqNum));
Пример #8
0
 public static GrainId CreateIndexWorkflowQueueHandlerGrainId(Type grainInterfaceType, int queueSeqNum)
 {
     return(GrainId.GetSystemTargetGrainId(Constants.INDEX_WORKFLOW_QUEUE_HANDLER_SYSTEM_TARGET_TYPE_CODE,
                                           IndexWorkflowQueueBase.CreateIndexWorkflowQueuePrimaryKey(grainInterfaceType, queueSeqNum)));
 }
Пример #9
0
 private IIndexWorkflowQueue InitIndexWorkflowQueue()
 {
     if (_parent.IsSystemTarget)
     {
         return(__workflowQueue = InsideRuntimeClient.Current.InternalGrainFactory.GetSystemTarget <IIndexWorkflowQueue>(IndexWorkflowQueueBase.CreateIndexWorkflowQueueGrainId(_iGrainType, _queueSeqNum), _silo));
     }
     else
     {
         return(__workflowQueue = InsideRuntimeClient.Current.InternalGrainFactory.GetGrain <IIndexWorkflowQueue>(IndexWorkflowQueueBase.CreateIndexWorkflowQueuePrimaryKey(_iGrainType, _queueSeqNum)));
     }
 }
Пример #10
0
        internal IndexWorkflowQueueSystemTarget(Type grainInterfaceType, int queueSequenceNumber, SiloAddress silo, bool isDefinedAsFaultTolerantGrain) : base(IndexWorkflowQueueBase.CreateIndexWorkflowQueueGrainId(grainInterfaceType, queueSequenceNumber), silo)
        {
            GrainReference thisRef = this.AsWeaklyTypedReference();

            _base = new IndexWorkflowQueueBase(grainInterfaceType, queueSequenceNumber, silo, isDefinedAsFaultTolerantGrain, ((ISystemTargetBase)this).GrainId, thisRef);
        }