Пример #1
0
        private void registerSubordinateHost(Contracts.HostInfo host, Contracts.DynamicHostID?hid)
        {
            try
            {
                var shost = App.Metabase.CatalogReg.NavigateHost(host.Name);
                if (!shost.HasDirectOrIndirectParentZoneGovernor(App.GetThisHostMetabaseSection(), iAmZoneGovernor: false, transcendNOC: false))
                {
                    throw new AZGOVException(StringConsts.AZGOV_REGISTER_SUBORDINATE_HOST_PARENT_ERROR.Args(App.HostName, host.Name));
                }
            }
            catch (Exception error)
            {
                throw new AZGOVException(StringConsts.AZGOV_REGISTER_SUBORDINATE_HOST_ERROR.Args(host.Name, error.ToMessageWithType()), error);
            }

            m_SubHosts.RegisterOrReplace(host);
            if (hid.HasValue && m_DynamicHostSlots != null)
            {
                var slot = m_DynamicHostSlots[hid.Value.ID];
                if (slot != null)
                {
                    slot.Host = host.Name;
                }
            }

            if (host.RandomSample.HasValue)
            {
                Platform.RandomGenerator.Instance.FeedExternalEntropySample(host.RandomSample.Value);
            }
        }
Пример #2
0
        public void PostHostInfo(Contracts.HostInfo host, Contracts.DynamicHostID?hid)
        {
            if (!Running || m_SubHosts == null || host == null)
            {
                return;
            }

            registerSubordinateHost(host, hid);
        }
Пример #3
0
                              private NetSvcPeer resolveDynamicHostAddress(string fullHostName, string net, string svc, SectionHost fromh, SectionHost toh, NetSvcPeer toPeer)
                              {
                                  Contracts.HostInfo hinfo = null;

                                  SectionZone zone = toh.ParentZone;

                                  while (zone != null)
                                  {
                                      var hzgovs = zone.ZoneGovernorHosts.Where(h => !h.Dynamic);//Where for safeguard check, as dynamic host can not be zonegov, but in case someone ignores AMM error
                                      foreach (var hzgov in hzgovs)
                                      {
                                          try
                                          {
                                              using (var cl = Contracts.ServiceClientHub.New <Contracts.IZoneHostRegistryClient>(hzgov))
                                              {
                                                  cl.TimeoutMs = this.m_ResolveDynamicHostNetSvcTimeoutMs;
                                                  hinfo        = cl.GetSubordinateHost(fullHostName);
                                                  break;
                                              }
                                          }
                                          catch (Exception error)
                                          {
                                              //todo Perf counter
                                              log(MessageType.Error,
                                                  "resolveDynamicHostAddress()",
                                                  "Error resolving net svc on dynamic host '{0}' while contacting zgov on '{1}': {2}".Args(fullHostName, hzgov.RegionPath, error.ToMessageWithType()),
                                                  error);
                                          }
                                      } //foreach
                                      zone = zone.ParentZone; //loop only WITHIN the NOC
                                  }     //while

                                  if (hinfo == null)
                                  {
                                      throw new MetabaseException(StringConsts.METABASE_NET_SVC_RESOLVER_DYN_HOST_UNKNOWN_ERROR.Args(svc, fromh.RegionPath, toh.RegionPath, net));
                                  }

                                  var pattern = toPeer.Address + "*";

                                  foreach (var nic in hinfo.NetInfo.Adapters)
                                  {
                                      foreach (var addr in nic.Addresses.Where(a => a.Unicast))
                                      {
                                          if (NFX.Parsing.Utils.MatchPattern(addr.Name, pattern))
                                          {
                                              return(new NetSvcPeer(addr.Name, toPeer.Port, toPeer.Group));
                                          }
                                      }
                                  }

                                  throw new MetabaseException(StringConsts.METABASE_NET_SVC_RESOLVER_DYN_HOST_NO_ADDR_MATCH_ERROR.Args(svc, fromh.RegionPath, toh.RegionPath, net, toPeer.Address));
                              }
Пример #4
0
        /// <summary>
        /// Registers /updates existing subordinate host information. This method implements IZoneHostRegistry contract
        /// </summary>
        public void RegisterSubordinateHost(Contracts.HostInfo host, Contracts.DynamicHostID?hid)
        {
            if (!Running || m_SubHosts == null || host == null)
            {
                return;
            }

            registerSubordinateHost(host, hid);

            var zHosts = App.GetThisHostMetabaseSection().ParentZone.ZoneGovernorHosts.Where(hh => !App.HostName.IsSameRegionPath(hh.RegionPath));

            foreach (var z in zHosts)
            {
                using (var cl = App.GetServiceClientHub().MakeNew <Contracts.IZoneHostReplicatorClient>(z))
                    cl.Async_PostHostInfo(host, hid);
            }
        }
Пример #5
0
 public void PostHostInfo(Contracts.HostInfo host, Contracts.DynamicHostID?hid)
 {
     ZoneGovernorService.Instance.PostHostInfo(host, hid);
 }
Пример #6
0
 public void RegisterSubordinateHost(Contracts.HostInfo host, Contracts.DynamicHostID?hid)
 {
     ZoneGovernorService.Instance.RegisterSubordinateHost(host, hid);
 }
Пример #7
0
 public void PostHostInfo(Contracts.HostInfo host, Contracts.DynamicHostID?hid)
 => Service.PostHostInfo(host, hid);
Пример #8
0
 public void RegisterSubordinateHost(Contracts.HostInfo host, Contracts.DynamicHostID?hid)
 => Service.RegisterSubordinateHost(host, hid);