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); }
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); }
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);
private IIndexWorkflowQueue InitIndexWorkflowQueue() => __workflowQueue = _lazyParent.Value.IsGrainService ? _siloIndexManager.GetGrainService <IIndexWorkflowQueue>(IndexWorkflowQueueBase.CreateIndexWorkflowQueueGrainReference(_siloIndexManager, _grainInterfaceType, _queueSeqNum, _silo)) : _siloIndexManager.GrainFactory.GetGrain <IIndexWorkflowQueue>(IndexWorkflowQueueBase.CreateIndexWorkflowQueuePrimaryKey(_grainInterfaceType, _queueSeqNum));
public static GrainId CreateIndexWorkflowQueueHandlerGrainId(Type grainInterfaceType, int queueSeqNum) { return(GrainId.GetSystemTargetGrainId(Constants.INDEX_WORKFLOW_QUEUE_HANDLER_SYSTEM_TARGET_TYPE_CODE, IndexWorkflowQueueBase.CreateIndexWorkflowQueuePrimaryKey(grainInterfaceType, queueSeqNum))); }
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))); } }
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); }