public TADWrapperObject FindServerByFqdnWithException(string fqdn, out Exception ex)
        {
            ex = null;
            string nodeNameFromFqdn = MachineName.GetNodeNameFromFqdn(fqdn);

            return(SimpleAdObjectLookup <TADWrapperObject> .FindAdObjectByServerNameStatic(this.AdSession, nodeNameFromFqdn, out ex));
        }
        public static List <string> GetServersWithServerRoleInSite(string serverName, ServerRole serverRole)
        {
            IADToplogyConfigurationSession iadtoplogyConfigurationSession = ADSessionFactory.CreateIgnoreInvalidRootOrgSession(true);
            IADServer iadserver = null;

            if (!string.IsNullOrEmpty(serverName))
            {
                if (!SharedHelper.StringIEquals(serverName, "localhost"))
                {
                    goto IL_2F;
                }
            }
            try
            {
                iadserver = iadtoplogyConfigurationSession.FindServerByName(Environment.MachineName);
                goto IL_5A;
            }
            catch (LocalServerNotFoundException)
            {
                goto IL_5A;
            }
IL_2F:
            string nodeNameFromFqdn = MachineName.GetNodeNameFromFqdn(serverName);

            iadserver = iadtoplogyConfigurationSession.FindServerByName(nodeNameFromFqdn);
            string arg = "FindServerByName";

            if (iadserver == null)
            {
                ExTraceGlobals.ReplayConfigurationTracer.TraceDebug <string, string>(0L, "GetServersWithServerRoleInSite: {0} didn't find any server for {1}", arg, serverName);
            }
IL_5A:
            return(ReplayConfiguration.GetServersWithServerRoleInSiteByServer(iadserver, serverRole));
        }
		internal static NetworkPath InternalChooseDagNetworkPath(string targetName, string networkName, NetworkPath.ConnectionPurpose purpose)
		{
			string nodeNameFromFqdn = MachineName.GetNodeNameFromFqdn(targetName);
			NetworkManager manager = NetworkManager.GetManager();
			NetworkPath networkPath = null;
			DagNetConfig dagNetConfig = null;
			manager.TryWaitForInitialization();
			if (manager.m_netMap != null)
			{
				networkPath = manager.m_netMap.ChoosePath(nodeNameFromFqdn, networkName);
			}
			else
			{
				DagNetRoute dagNetRoute = null;
				DagNetRoute[] array = DagNetChooser.ProposeRoutes(targetName, out dagNetConfig);
				if (networkName != null)
				{
					foreach (DagNetRoute dagNetRoute2 in array)
					{
						if (StringUtil.IsEqualIgnoreCase(dagNetRoute2.NetworkName, networkName))
						{
							dagNetRoute = dagNetRoute2;
							break;
						}
					}
				}
				else if (array != null && array.Length > 0)
				{
					dagNetRoute = array[0];
				}
				if (dagNetRoute != null)
				{
					networkPath = new NetworkPath(targetName, dagNetRoute.TargetIPAddr, dagNetRoute.TargetPort, dagNetRoute.SourceIPAddr);
					networkPath.NetworkName = dagNetRoute.NetworkName;
					networkPath.CrossSubnet = dagNetRoute.IsCrossSubnet;
				}
			}
			if (networkPath == null)
			{
				networkPath = NetworkManager.BuildDnsNetworkPath(targetName, NetworkManager.GetReplicationPort());
			}
			networkPath.Purpose = purpose;
			if (dagNetConfig == null)
			{
				dagNetConfig = DagNetEnvironment.FetchNetConfig();
			}
			networkPath.ApplyNetworkPolicy(dagNetConfig);
			return networkPath;
		}
Exemple #4
0
        public TADWrapperObject FindServerByFqdnWithException(string fqdn, out Exception exception)
        {
            ExAssert.RetailAssert(typeof(TADWrapperObject) == typeof(IADServer), "This function should only be called with Server objects!");
            if (typeof(TADWrapperObject) != typeof(IADServer))
            {
                throw new NotImplementedException("This only works for Server objects.");
            }
            exception = null;
            Exception           ex     = null;
            AdObjectLookupFlags flags  = AdObjectLookupFlags.None;
            string           shortName = MachineName.GetNodeNameFromFqdn(fqdn);
            TADWrapperObject result    = this.LookupOrFindAdObject(shortName, () => SimpleAdObjectLookup <TADWrapperObject> .FindAdObjectByServerNameStatic(this.AdSession, shortName, out ex), flags);

            exception = ex;
            return(result);
        }
Exemple #5
0
 internal DatabaseCopyRedundancy(DbHealthInfoPersisted dbHealth, DbCopyHealthInfoPersisted dbchip)
 {
     this.DatabaseGuid = dbHealth.DbGuid;
     this.DatabaseName = dbHealth.DbName;
     this.ServerName   = MachineName.GetNodeNameFromFqdn(dbchip.ServerFqdn).ToUpperInvariant();
     this.m_copyName   = string.Format("{0}\\{1}", this.DatabaseName, this.ServerName);
     this.Identity     = this.m_copyName;
     this.LastCopyStatusTransitionTime = DateTimeHelper.ToNullableLocalDateTime(dbchip.LastCopyStatusTransitionTime);
     this.CopyFoundInAD       = TransitionInfo.ConstructFromRemoteSerializable(dbchip.CopyFoundInAD);
     this.CopyStatusRetrieved = TransitionInfo.ConstructFromRemoteSerializable(dbchip.CopyStatusRetrieved);
     this.CopyIsAvailable     = TransitionInfo.ConstructFromRemoteSerializable(dbchip.CopyIsAvailable);
     this.CopyIsRedundant     = TransitionInfo.ConstructFromRemoteSerializable(dbchip.CopyIsRedundant);
     this.CopyStatusHealthy   = TransitionInfo.ConstructFromRemoteSerializable(dbchip.CopyStatusHealthy);
     this.CopyStatusActive    = TransitionInfo.ConstructFromRemoteSerializable(dbchip.CopyStatusActive);
     this.CopyStatusMounted   = TransitionInfo.ConstructFromRemoteSerializable(dbchip.CopyStatusMounted);
     this.IsCopyFoundInAD     = this.CopyFoundInAD.IsSuccess;
     this.IsCopyAvailable     = this.CopyIsAvailable.IsSuccess;
     this.IsCopyRedundant     = this.CopyIsRedundant.IsSuccess;
 }
        public IADServer FindMiniServerByFqdn(string serverFqdn)
        {
            string nodeNameFromFqdn = MachineName.GetNodeNameFromFqdn(serverFqdn);

            return(this.FindMiniServerByShortName(nodeNameFromFqdn));
        }
Exemple #7
0
        private static List <ADObjectId> GetMasterServerIdsForDatabase(IFindAdObject <IADDatabaseAvailabilityGroup> dagLookup, IADDatabase database, out Exception exception)
        {
            IADToplogyConfigurationSession adSession = dagLookup.AdSession;
            List <ADObjectId> list = new List <ADObjectId>(16);

            exception = null;
            try
            {
                ADObjectId masterServerOrAvailabilityGroup = database.MasterServerOrAvailabilityGroup;
                if (masterServerOrAvailabilityGroup == null)
                {
                    return(null);
                }
                if (masterServerOrAvailabilityGroup.IsDeleted)
                {
                    ActiveManagerUtil.Tracer.TraceError <string, string>(0L, "GetMasterServerIdsForDatabase() for database '{0}' found the MasterServerOrAvailabilityGroup to be a link to a deleted object. Returning an empty collection. MasterServerOrAvailabilityGroup = [{1}]", database.Name, masterServerOrAvailabilityGroup.Name);
                    return(null);
                }
                IADDatabaseAvailabilityGroup iaddatabaseAvailabilityGroup = dagLookup.ReadAdObjectByObjectId(masterServerOrAvailabilityGroup);
                if (iaddatabaseAvailabilityGroup != null)
                {
                    list.AddRange(iaddatabaseAvailabilityGroup.Servers);
                }
                else
                {
                    IADDatabase iaddatabase = adSession.ReadADObject <IADDatabase>(database.Id);
                    ADObjectId  adobjectId  = null;
                    if (iaddatabase != null)
                    {
                        adobjectId = iaddatabase.MasterServerOrAvailabilityGroup;
                        if (!masterServerOrAvailabilityGroup.Equals(adobjectId))
                        {
                            ActiveManagerUtil.Tracer.TraceDebug <ADObjectId, ADObjectId>(0L, "GetMasterServerIdsForDatabase() re-read the Database object and it made a difference. MasterServerOrDag was {0} and is now {1}", masterServerOrAvailabilityGroup, adobjectId);
                            iaddatabaseAvailabilityGroup = adSession.ReadADObject <IADDatabaseAvailabilityGroup>(adobjectId);
                            if (iaddatabaseAvailabilityGroup == null)
                            {
                                goto IL_165;
                            }
                            HashSet <string> hashSet = new HashSet <string>(StringComparer.OrdinalIgnoreCase);
                            foreach (string fqdn in iaddatabaseAvailabilityGroup.StoppedMailboxServers)
                            {
                                hashSet.Add(MachineName.GetNodeNameFromFqdn(fqdn));
                            }
                            using (MultiValuedProperty <ADObjectId> .Enumerator enumerator2 = iaddatabaseAvailabilityGroup.Servers.GetEnumerator())
                            {
                                while (enumerator2.MoveNext())
                                {
                                    ADObjectId adobjectId2 = enumerator2.Current;
                                    if (!hashSet.Contains(adobjectId2.Name))
                                    {
                                        list.Add(adobjectId2);
                                    }
                                }
                                goto IL_165;
                            }
                        }
                        ActiveManagerUtil.Tracer.TraceDebug <ADObjectId>(0L, "GetMasterServerIdsForDatabase: re-reading the Database object made no difference. MasterServerOrDag is still {0}.", masterServerOrAvailabilityGroup);
                    }
IL_165:
                    if (iaddatabaseAvailabilityGroup == null && adobjectId != null)
                    {
                        IADServer iadserver = adSession.ReadMiniServer(adobjectId);
                        if (iadserver != null)
                        {
                            list.Add(adobjectId);
                        }
                    }
                }
            }
            catch (DataValidationException ex)
            {
                exception = ex;
            }
            catch (ADTransientException ex2)
            {
                exception = ex2;
            }
            catch (ADOperationException ex3)
            {
                exception = ex3;
            }
            catch (ADTopologyUnexpectedException ex4)
            {
                exception = ex4;
            }
            catch (ADTopologyPermanentException ex5)
            {
                exception = ex5;
            }
            if (exception != null)
            {
                ActiveManagerUtil.Tracer.TraceDebug <Exception>(0L, "GetMasterServerIdsForDatabase() got exception: {0}", exception);
                list = null;
            }
            return(list);
        }
Exemple #8
0
 internal static string GetNodeNameFromFqdn(string nodeName)
 {
     return(MachineName.GetNodeNameFromFqdn(nodeName));
 }