protected void PopulateDomainNamingContexts(string partitionFqdn)
        {
            TopologyProvider.EnforceNonEmptyPartition(partitionFqdn);
            ADServerInfo defaultServerInfo = this.GetDefaultServerInfo(partitionFqdn);

            if (string.IsNullOrEmpty(defaultServerInfo.WritableNC) || string.IsNullOrEmpty(defaultServerInfo.RootDomainNC))
            {
                PooledLdapConnection pooledLdapConnection = LdapConnectionPool.CreateOneTimeConnection(null, defaultServerInfo, LocatorFlags.None);
                try
                {
                    if (string.IsNullOrEmpty(pooledLdapConnection.ADServerInfo.WritableNC) && !TopologyProvider.IsAdamTopology())
                    {
                        this.LogRootDSEReadFailureAndThrow("domainNamingContext", defaultServerInfo.FqdnPlusPort);
                    }
                    this.domainNCs[partitionFqdn] = ADObjectId.ParseExtendedDN(pooledLdapConnection.ADServerInfo.WritableNC);
                    if (string.IsNullOrEmpty(pooledLdapConnection.ADServerInfo.RootDomainNC) && !TopologyProvider.IsAdamTopology())
                    {
                        this.LogRootDSEReadFailureAndThrow("rootDomainNamingContext", defaultServerInfo.FqdnPlusPort);
                    }
                    this.rootDomainNCs[partitionFqdn] = ADObjectId.ParseExtendedDN(pooledLdapConnection.ADServerInfo.RootDomainNC);
                    return;
                }
                finally
                {
                    pooledLdapConnection.ReturnToPool();
                }
            }
            this.domainNCs[partitionFqdn]     = ADObjectId.ParseExtendedDN(defaultServerInfo.WritableNC);
            this.rootDomainNCs[partitionFqdn] = ADObjectId.ParseExtendedDN(defaultServerInfo.RootDomainNC);
        }
        protected void PopulateConfigNamingContexts(string partitionFqdn)
        {
            TopologyProvider.EnforceNonEmptyPartition(partitionFqdn);
            ADServerInfo configDCInfo = this.GetConfigDCInfo(partitionFqdn, true);

            if (string.IsNullOrEmpty(configDCInfo.ConfigNC) || string.IsNullOrEmpty(configDCInfo.SchemaNC))
            {
                PooledLdapConnection pooledLdapConnection = LdapConnectionPool.CreateOneTimeConnection(null, configDCInfo, LocatorFlags.None);
                try
                {
                    if (string.IsNullOrEmpty(pooledLdapConnection.ADServerInfo.ConfigNC))
                    {
                        this.LogRootDSEReadFailureAndThrow("configurationNamingContext", configDCInfo.FqdnPlusPort);
                    }
                    this.configNCs[partitionFqdn] = ADObjectId.ParseExtendedDN(pooledLdapConnection.ADServerInfo.ConfigNC);
                    if (string.IsNullOrEmpty(pooledLdapConnection.ADServerInfo.SchemaNC))
                    {
                        this.LogRootDSEReadFailureAndThrow("schemaNamingContext", configDCInfo.FqdnPlusPort);
                    }
                    this.schemaNCs[partitionFqdn] = ADObjectId.ParseExtendedDN(pooledLdapConnection.ADServerInfo.SchemaNC);
                    return;
                }
                finally
                {
                    pooledLdapConnection.ReturnToPool();
                }
            }
            this.configNCs[partitionFqdn] = ADObjectId.ParseExtendedDN(configDCInfo.ConfigNC);
            this.schemaNCs[partitionFqdn] = ADObjectId.ParseExtendedDN(configDCInfo.SchemaNC);
        }
 public override IList <TopologyVersion> GetTopologyVersions(IList <string> partitionFqdns)
 {
     if (partitionFqdns == null)
     {
         throw new ArgumentNullException("partitionFqdns");
     }
     ExTraceGlobals.TopologyProviderTracer.Information <int>((long)this.GetHashCode(), "GetTopologyVersions. Partitions {0}", partitionFqdns.Count);
     TopologyVersion[] array = new TopologyVersion[partitionFqdns.Count];
     LdapTopologyProvider.MiniTopology miniTopology = null;
     for (int i = 0; i < partitionFqdns.Count; i++)
     {
         TopologyProvider.EnforceNonEmptyPartition(partitionFqdns[i]);
         int version = 1;
         if (this.topologies.TryGetValue(partitionFqdns[i], out miniTopology))
         {
             version = miniTopology.Version;
         }
         array[i] = new TopologyVersion(partitionFqdns[i], version);
     }
     if (ExTraceGlobals.TopologyProviderTracer.IsTraceEnabled(TraceType.InfoTrace))
     {
         ExTraceGlobals.TopologyProviderTracer.Information <string>((long)this.GetHashCode(), "GetTopologyVersions. Partitions {0}", string.Join(",", (object[])array));
     }
     return(array);
 }
        protected void ClearDomainNamingContexts(string partitionFqdn)
        {
            TopologyProvider.EnforceNonEmptyPartition(partitionFqdn);
            ADObjectId adobjectId;

            this.domainNCs.TryRemove(partitionFqdn, out adobjectId);
            this.rootDomainNCs.TryRemove(partitionFqdn, out adobjectId);
        }
        protected void ClearConfigNamingContexts(string partitionFqdn)
        {
            TopologyProvider.EnforceNonEmptyPartition(partitionFqdn);
            ADObjectId adobjectId;

            this.configNCs.TryRemove(partitionFqdn, out adobjectId);
            this.schemaNCs.TryRemove(partitionFqdn, out adobjectId);
        }
        internal ADObjectId GetRootDomainNamingContext(string partitionFqdn)
        {
            TopologyProvider.EnforceNonEmptyPartition(partitionFqdn);
            ADObjectId result;

            if (!this.rootDomainNCs.TryGetValue(partitionFqdn, out result))
            {
                this.PopulateDomainNamingContexts(partitionFqdn);
                this.rootDomainNCs.TryGetValue(partitionFqdn, out result);
            }
            return(result);
        }
        public int GetTopologyVersion(string partitionFqdn)
        {
            TopologyProvider.EnforceNonEmptyPartition(partitionFqdn);
            IList <TopologyVersion> topologyVersions = this.GetTopologyVersions(new List <string>
            {
                partitionFqdn
            });

            if (topologyVersions.Count > 0)
            {
                return(topologyVersions[0].Version);
            }
            return(-1);
        }
 public string GetConfigDC(string partitionFqdn)
 {
     TopologyProvider.EnforceNonEmptyPartition(partitionFqdn);
     return(this.GetConfigDC(partitionFqdn, true));
 }