Example #1
0
                                  private bool validate_Contracts(ValidationContext ctx)
                                  {
                                      var output = ctx.Output;

                                      try
                                      {
                                          var instance = SkyApp.GetServiceClientHub();
                                      }
                                      catch (Exception error)
                                      {
                                          output.Add(new MetabaseValidationMsg(MetabaseValidationMessageType.Error, null, null, StringConsts.METABASE_CONTRACTS_SERVICE_HUB_ERROR + error.ToMessageWithType()));
                                          return(false);
                                      }

                                      foreach (var mapping in SkyApp.GetServiceClientHub().CachedMap)
                                      {
                                          if (mapping.Local.Service.IsNullOrWhiteSpace())
                                          {
                                              output.Add(new MetabaseValidationMsg(MetabaseValidationMessageType.Warning, null, null, " Contract mapping '{0}' does not specify local service name".Args(mapping)));
                                          }

                                          if (mapping.Global.Service.IsNullOrWhiteSpace())
                                          {
                                              output.Add(new MetabaseValidationMsg(MetabaseValidationMessageType.Warning, null, null, " Contract mapping '{0}' does not specify global service name".Args(mapping)));
                                          }
                                      }

                                      return(true);
                                  }
Example #2
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 = SkyApp.GetServiceClientHub().MakeNew <Contracts.IZoneHostRegistryClient>(hzgov))
                                                  {
                                                      cl.TimeoutMs = this.m_ResolveDynamicHostNetSvcTimeoutMs;
                                                      hinfo        = cl.GetSubordinateHost(fullHostName);
                                                      break;
                                                  }
                                              }
                                              catch (Exception error)
                                              {
                                                  //todo Perf counter
                                                  WriteLog(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 (Text.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));
                                  }
Example #3
0
                                  private void validate_GDIDAuthorities(ValidationContext ctx)
                                  {
                                      var output = ctx.Output;

                                      var authorities = GDIDAuthorities;

                                      if (!authorities.Any())
                                      {
                                          output.Add(new MetabaseValidationMsg(MetabaseValidationMessageType.Warning, null, null, StringConsts.METABASE_GDID_AUTHORITIES_NONE_DEFINED_WARNING));
                                          return;
                                      }

                                      if (authorities.Count() != authorities.Distinct().Count())
                                      {
                                          output.Add(new MetabaseValidationMsg(MetabaseValidationMessageType.Error, null, null, StringConsts.METABASE_GDID_AUTHORITIES_DUPLICATION_ERROR));
                                      }


                                      foreach (var authority in authorities)
                                      {
                                          var host = CatalogReg[authority.Name] as SectionHost;
                                          if (host == null)
                                          {
                                              output.Add(new MetabaseValidationMsg(MetabaseValidationMessageType.Error, null, null, StringConsts.METABASE_GDID_AUTHORITY_BAD_HOST_ERROR.Args(authority.Name)));
                                              continue;
                                          }

                                          if (!host.Role.AppNames.Any(n => INVSTRCMP.Equals(n, SysConsts.APP_NAME_GDIDA)))
                                          {
                                              output.Add(new MetabaseValidationMsg(MetabaseValidationMessageType.Error, null, null, StringConsts.METABASE_GDID_AUTHORITY_HOST_NOT_AGDIDA_ERROR.Args(authority.Name, host.Role)));
                                          }

                                          try
                                          {
                                              SkyApp.GetServiceClientHub().RunTestSetupOf <Contracts.IGdidAuthorityClient>(host.RegionPath);
                                          }
                                          catch (Exception error)
                                          {
                                              output.Add(new MetabaseValidationMsg(MetabaseValidationMessageType.Error, null, null, StringConsts.METABASE_GDID_AUTHORITY_SVC_RESOLUTION_ERROR.Args(authority.Name, error.ToMessageWithType())));
                                          }
                                      }
                                  }
Example #4
0
                                  private string resolveNetworkServiceToConnectString(string host, string net, string svc, string binding = null, string fromHost = null)
                                  {
                                      if (host.IsNullOrWhiteSpace() ||
                                          net.IsNullOrWhiteSpace() ||
                                          svc.IsNullOrWhiteSpace())
                                      {
                                          throw new MetabaseException(StringConsts.ARGUMENT_ERROR + "Metabase.ResolveNetSvc(host|net|svc==null|empty)");
                                      }

                                      if (fromHost.IsNullOrWhiteSpace())
                                      {
                                          fromHost = SkyApp.GetThisHostName();
                                      }

                                      if (fromHost.IsNullOrWhiteSpace())
                                      {
                                          throw new MetabaseException(StringConsts.ARGUMENT_ERROR + "Metabase.ResolveNetSvc(fromHost==null|empty & SkySystem is not avail)");
                                      }

                                      var sb = new StringBuilder();

                                      sb.Append(host); sb.Append(';');
                                      sb.Append(net); sb.Append(';');
                                      sb.Append(svc); sb.Append(';');
                                      sb.Append(binding.IsNullOrWhiteSpace() ? SysConsts.NULL : binding); sb.Append(';');
                                      sb.Append(fromHost);

                                      var cacheKey = sb.ToString();

                                      string result = null;

                                      if (m_NetResolverCache.TryGetValue(cacheKey, out result))
                                      {
                                          return(result);
                                      }


                                      var bindingNode = GetNetworkSvcBindingConfNode(net, svc, binding);

                                      binding = bindingNode.Name;
                                      var dfltAddress = bindingNode.AttrByName(CONFIG_ADDRESS_ATTR).Value;
                                      var dfltPort    = bindingNode.AttrByName(CONFIG_PORT_ATTR).Value;


                                      var fromh = CatalogReg.NavigateHost(fromHost);
                                      var toh   = CatalogReg.NavigateHost(host);

                                      var scope = GetNetworkScope(net);
                                      var nsvc  = GetNetworkSvcConfNode(net, svc);

                                      if (scope == NetworkScope.NOC || scope == NetworkScope.NOCGroup)
                                      {
                                          if (!fromh.NOC.IsLogicallyTheSame(toh.NOC))
                                          {
                                              throw new MetabaseException(StringConsts.METABASE_NET_SVC_RESOLVER_TARGET_NOC_INACCESSIBLE_ERROR.Args(svc, fromh.RegionPath, toh.RegionPath, net, scope));
                                          }
                                      }



                                      var toPeer = new NetSvcPeer(dfltAddress, dfltPort, null);

                                      foreach (var segment in toh.SectionsOnPath)
                                      {
                                          var level = segment.MatchNetworkRoute(net, svc, binding, fromh.RegionPath);
                                          toPeer = toPeer.Override(level);
                                      }


                                      if (scope == NetworkScope.Group || scope == NetworkScope.NOCGroup)
                                      {
                                          if (toPeer.Group.IsNotNullOrWhiteSpace())
                                          {
                                              var fromPeer = new NetSvcPeer(dfltAddress, dfltPort, null);
                                              foreach (var segment in fromh.SectionsOnPath)
                                              {
                                                  var level = segment.MatchNetworkRoute(net, svc, binding, fromh.RegionPath);
                                                  fromPeer = fromPeer.Override(level);
                                              }

                                              if (!INVSTRCMP.Equals(fromPeer.Group, toPeer.Group))
                                              {
                                                  throw new MetabaseException(StringConsts.METABASE_NET_SVC_RESOLVER_TARGET_GROUP_INACCESSIBLE_ERROR.Args(svc, fromh.RegionPath, toh.RegionPath, net, scope));
                                              }
                                          }
                                      }

                                      if (toh.Dynamic)
                                      {
                                          var dynPeer = resolveDynamicHostAddress(host, net, svc, fromh, toh, toPeer);
                                          result = "{0}://{1}:{2}".Args(binding, dynPeer.Address, dynPeer.Port);
                                          //TODO no cache for dynamic host? or use cahce_Put...
                                      }
                                      else
                                      {
                                          result = "{0}://{1}:{2}".Args(binding, toPeer.Address, toPeer.Port);
                                          m_NetResolverCache.TryAdd(cacheKey, result);//put in cache ONLY for non-dynamic hosts
                                      }

                                      return(result);
                                  }