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); } }
public void PostHostInfo(Contracts.HostInfo host, Contracts.DynamicHostID?hid) { if (!Running || m_SubHosts == null || host == null) { return; } registerSubordinateHost(host, hid); }
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)); }
/// <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); } }
public void PostHostInfo(Contracts.HostInfo host, Contracts.DynamicHostID?hid) { ZoneGovernorService.Instance.PostHostInfo(host, hid); }
public void RegisterSubordinateHost(Contracts.HostInfo host, Contracts.DynamicHostID?hid) { ZoneGovernorService.Instance.RegisterSubordinateHost(host, hid); }
public void PostHostInfo(Contracts.HostInfo host, Contracts.DynamicHostID?hid) => Service.PostHostInfo(host, hid);
public void RegisterSubordinateHost(Contracts.HostInfo host, Contracts.DynamicHostID?hid) => Service.RegisterSubordinateHost(host, hid);