# File lib/mongo/cluster/topology/base.rb, line 53
        def initialize(options, monitoring, cluster)
          options = validate_options(options, cluster)

          @options = options
          @monitoring = monitoring
          @cluster = cluster
          # The list of server descriptions is simply fixed at the time of
          # topology creation. If server description change later, a
          # new topology instance should be created.
          @server_descriptions = {}
          (servers = cluster.servers_list).each do |server|
            @server_descriptions[server.address.to_s] = server.description
          end

          begin
            server_descriptions.each do |address_str, desc|
              unless desc.unknown?
                desc.features.check_driver_support!
              end
            end
          rescue Error::UnsupportedFeatures => e
            @compatible = false
            @compatibility_error = e
          else
            @compatible = true
          end

          @have_data_bearing_servers = false
          @logical_session_timeout = server_descriptions.inject(nil) do |min, (address_str, desc)|
            # LST is only read from data-bearing servers
            if desc.data_bearing?
              @have_data_bearing_servers = true
              break unless timeout = desc.logical_session_timeout
              [timeout, (min || timeout)].min
            else
              min
            end
          end

          if Mongo::Lint.enabled?
            freeze
          end
        end