コード例 #1
0
ファイル: PubSubRendezvousGrain.cs プロジェクト: pkim/orleans
        /// accept and notify only Active producers.
        private bool IsActiveProducer(IStreamProducerExtension producer)
        {
            var grainRef = producer as GrainReference;

            if (grainRef != null && grainRef.GrainId.IsSystemTarget && grainRef.IsInitializedSystemTarget)
            {
                return(siloStatusOracle.GetApproximateSiloStatus(grainRef.SystemTargetSilo) == SiloStatus.Active);
            }

            return(true);
        }
コード例 #2
0
 private async Task ExecuteProducerTask(PubSubPublisherState producer, Task producerTask)
 {
     try
     {
         await producerTask;
     }
     catch (GrainExtensionNotInstalledException)
     {
         RemoveProducer(producer);
     }
     catch (ClientNotAvailableException)
     {
         RemoveProducer(producer);
     }
     catch (OrleansMessageRejectionException)
     {
         var grainRef = producer.Producer as GrainReference;
         // if producer is a system target on and unavailable silo, remove it.
         if (grainRef == null || grainRef.GrainId.IsSystemTarget && siloStatusOracle.GetApproximateSiloStatus(grainRef.SystemTargetSilo).IsUnavailable())
         {
             RemoveProducer(producer);
         }
         else // otherwise, throw
         {
             throw;
         }
     }
 }