/// <summary>
        /// Adds a new activation to the directory partition
        /// </summary>
        /// <param name="grain"></param>
        /// <param name="activation"></param>
        /// <param name="silo"></param>
        /// <param name="registrationStatus"></param>
        /// <returns>The registered ActivationAddress and version associated with this directory mapping</returns>
        internal virtual AddressAndTag AddSingleActivation(GrainId grain, ActivationId activation, SiloAddress silo, MultiClusterStatus registrationStatus = MultiClusterStatus.Owned)
        {
            if (log.IsVerbose3)
            {
                log.Verbose3("Adding single activation for grain {0}{1}{2}", silo, grain, activation);
            }

            AddressAndTag result = new AddressAndTag();

            if (!IsValidSilo(silo))
            {
                return(result);
            }

            lock (lockable)
            {
                if (!partitionData.ContainsKey(grain))
                {
                    partitionData[grain] = new GrainInfo();
                }
                var grainInfo = partitionData[grain];
                result.Address    = grainInfo.AddSingleActivation(grain, activation, silo, registrationStatus);
                result.VersionTag = grainInfo.VersionTag;
            }
            return(result);
        }
        /// <summary>
        /// Adds a new activation to the directory partition
        /// </summary>
        /// <param name="grain"></param>
        /// <param name="activation"></param>
        /// <param name="silo"></param>
        /// <param name="registrationStatus"></param>
        /// <returns>The registered ActivationAddress and version associated with this directory mapping</returns>
        internal virtual AddressAndTag AddSingleActivation(GrainId grain, ActivationId activation, SiloAddress silo, GrainDirectoryEntryStatus registrationStatus)
        {
            if (log.IsEnabled(LogLevel.Trace))
            {
                log.Trace("Adding single activation for grain {0}{1}{2}", silo, grain, activation);
            }

            AddressAndTag result = new AddressAndTag();

            if (!IsValidSilo(silo))
            {
                return(result);
            }

            IGrainInfo grainInfo;

            lock (lockable)
            {
                if (!partitionData.TryGetValue(grain, out grainInfo))
                {
                    partitionData[grain] = grainInfo = new GrainInfo();
                }

                result.Address    = grainInfo.AddSingleActivation(grain, activation, silo, registrationStatus);
                result.VersionTag = grainInfo.VersionTag;
            }

            return(result);
        }
        /// <summary>
        /// Adds a new activation to the directory partition
        /// </summary>
        /// <param name="grain"></param>
        /// <param name="activation"></param>
        /// <param name="silo"></param>
        /// <returns>The version associated with this directory mapping</returns>
        internal virtual int AddActivation(GrainId grain, ActivationId activation, SiloAddress silo)
        {
            if (!IsValidSilo(silo))
            {
                return(GrainInfo.NO_ETAG);
            }

            IGrainInfo grainInfo;

            lock (lockable)
            {
                if (!partitionData.TryGetValue(grain, out grainInfo))
                {
                    partitionData[grain] = grainInfo = new GrainInfo();
                }

                grainInfo.AddActivation(activation, silo);
            }

            if (log.IsEnabled(LogLevel.Trace))
            {
                log.Trace("Adding activation for grain {0}", grain.ToString());
            }
            return(grainInfo.VersionTag);
        }
Example #4
0
        /// <summary>
        /// Adds a new activation to the directory partition
        /// </summary>
        /// <param name="grain"></param>
        /// <param name="activation"></param>
        /// <param name="silo"></param>
        /// <returns>The registered ActivationAddress and version associated with this directory mapping</returns>
        internal virtual AddressAndTag AddSingleActivation(GrainId grain, ActivationId activation, SiloAddress silo)
        {
            if (log.IsEnabled(LogLevel.Trace))
            {
                log.Trace("Adding single activation for grain {0}{1}{2}", silo, grain, activation);
            }

            AddressAndTag result = new AddressAndTag();

            if (!IsValidSilo(silo))
            {
                var siloStatus = this.siloStatusOracle.GetApproximateSiloStatus(silo);
                throw new OrleansException($"Trying to register {grain} on invalid silo: {silo}. Known status: {siloStatus}");
            }

            IGrainInfo grainInfo;

            lock (lockable)
            {
                if (!partitionData.TryGetValue(grain, out grainInfo))
                {
                    partitionData[grain] = grainInfo = new GrainInfo();
                }

                result.Address    = grainInfo.AddSingleActivation(grain, activation, silo);
                result.VersionTag = grainInfo.VersionTag;
            }

            return(result);
        }
Example #5
0
 /// <summary>
 /// Adds a new activation to the directory partition
 /// </summary>
 /// <param name="grain"></param>
 /// <param name="activation"></param>
 /// <param name="silo"></param>
 /// <returns>The version associated with this directory mapping</returns>
 internal virtual int AddActivation(GrainId grain, ActivationId activation, SiloAddress silo)
 {
     if (!IsValidSilo(silo))
     {
         return(GrainInfo.NO_ETAG);
     }
     lock (lockable)
     {
         if (!partitionData.ContainsKey(grain))
         {
             partitionData[grain] = new GrainInfo();
         }
         partitionData[grain].AddActivation(activation, silo);
     }
     if (log.IsVerbose3)
     {
         log.Verbose3("Adding activation for grain {0}", grain.ToString());
     }
     return(partitionData[grain].VersionTag);
 }
Example #6
0
        /// <summary>
        /// Adds a new activation to the directory partition
        /// </summary>
        /// <param name="grain"></param>
        /// <param name="activation"></param>
        /// <param name="silo"></param>
        /// <returns>The registered ActivationAddress and version associated with this directory mapping</returns>
        internal virtual Tuple <ActivationAddress, int> AddSingleActivation(GrainId grain, ActivationId activation, SiloAddress silo)
        {
            if (log.IsVerbose3)
            {
                log.Verbose3("Adding single activation for grain {0}{1}{2}", silo, grain, activation);
            }

            if (!IsValidSilo(silo))
            {
                return(null);
            }

            ActivationAddress result;

            lock (lockable)
            {
                if (!partitionData.ContainsKey(grain))
                {
                    partitionData[grain] = new GrainInfo();
                }
                result = partitionData[grain].AddSingleActivation(grain, activation, silo);
            }
            return(Tuple.Create(result, partitionData[grain].VersionTag));
        }
        /// <summary>
        /// Adds a new activation to the directory partition
        /// </summary>
        /// <param name="grain"></param>
        /// <param name="activation"></param>
        /// <param name="silo"></param>
        /// <returns>The registered ActivationAddress and version associated with this directory mapping</returns>
        internal virtual Tuple<ActivationAddress, int> AddSingleActivation(GrainId grain, ActivationId activation, SiloAddress silo)
        {
            if (log.IsVerbose3) log.Verbose3("Adding single activation for grain {0}{1}{2}", silo, grain, activation);

            if (!IsValidSilo(silo))
                return null;
            
            ActivationAddress result;
            lock (lockable)
            {
                if (!partitionData.ContainsKey(grain))
                {
                    partitionData[grain] = new GrainInfo();
                }
                result = partitionData[grain].AddSingleActivation(grain, activation, silo);
            }
            return Tuple.Create(result, partitionData[grain].VersionTag);
        }
 /// <summary>
 /// Adds a new activation to the directory partition
 /// </summary>
 /// <param name="grain"></param>
 /// <param name="activation"></param>
 /// <param name="silo"></param>
 /// <returns>The version associated with this directory mapping</returns>
 internal virtual int AddActivation(GrainId grain, ActivationId activation, SiloAddress silo)
 {
     if (!IsValidSilo(silo))
     {
         return GrainInfo.NO_ETAG;
     }
     lock (lockable)
     {
         if (!partitionData.ContainsKey(grain))
         {
             partitionData[grain] = new GrainInfo();
         }
         partitionData[grain].AddActivation(activation, silo);
     }
     if (log.IsVerbose3) log.Verbose3("Adding activation for grain {0}", grain.ToString());
     return partitionData[grain].VersionTag;
 }
        /// <summary>
        /// Adds a new activation to the directory partition
        /// </summary>
        /// <param name="grain"></param>
        /// <param name="activation"></param>
        /// <param name="silo"></param>
        /// <param name="registrationStatus"></param>
        /// <returns>The registered ActivationAddress and version associated with this directory mapping</returns>
        internal virtual AddressAndTag AddSingleActivation(GrainId grain, ActivationId activation, SiloAddress silo, GrainDirectoryEntryStatus registrationStatus)
        {
            if (log.IsVerbose3) log.Verbose3("Adding single activation for grain {0}{1}{2}", silo, grain, activation);

            AddressAndTag result = new AddressAndTag();

            if (!IsValidSilo(silo))
                return result;
            
            lock (lockable)
            {
                if (!partitionData.ContainsKey(grain))
                {
                    partitionData[grain] = new GrainInfo();
                }
                var grainInfo = partitionData[grain];
                result.Address = grainInfo.AddSingleActivation(grain, activation, silo, registrationStatus);
                result.VersionTag = grainInfo.VersionTag;
            }
            return result;
        }
        /// <summary>
        /// Adds a new activation to the directory partition
        /// </summary>
        /// <param name="grain"></param>
        /// <param name="activation"></param>
        /// <param name="silo"></param>
        /// <returns>The version associated with this directory mapping</returns>
        internal virtual int AddActivation(GrainId grain, ActivationId activation, SiloAddress silo)
        {
            if (!IsValidSilo(silo))
            {
                return GrainInfo.NO_ETAG;
            }

            IGrainInfo grainInfo;
            lock (lockable)
            {
                if (!partitionData.TryGetValue(grain, out grainInfo))
                {
                    partitionData[grain] = grainInfo = new GrainInfo();
                }

                grainInfo.AddActivation(activation, silo);
            }

            if (log.IsVerbose3) log.Verbose3("Adding activation for grain {0}", grain.ToString());
            return grainInfo.VersionTag;
        }