@@ -133,26 +133,37 @@ cdef class ThinConnImpl(BaseConnImpl):
133133 AddressList address_list
134134 str connect_string
135135 Address address
136+
136137 # Retry connecting to the socket if an attempt fails and retry_count
137138 # is specified in the connect string. If an attempt succeeds, return
138139 # the socket and the valid address object.
139140 connect_string = _get_connect_data(description)
140141 for i in range (num_attempts):
141- # Iterate through each address_list in the description. If the
142+
143+ # iterate through each address_list in the description; if the
142144 # description level load_balance is on, keep track of the least
143- # recently used address for subsequent connections. If not,
144- # iterate through the list in order.
145+ # recently used address for subsequent connections; otherwise,
146+ # iterate through the list in order; note that if source_route is
147+ # enabled that only the first address list is examined as the rest
148+ # are used for routing on the server
149+ if description.source_route and num_lists > 0 :
150+ num_lists = 1
145151 for j in range (num_lists):
146152 if load_balance:
147153 idx1 = (j + description.lru_index) % num_lists
148154 else :
149155 idx1 = j
156+
157+ # iterate through each address in an address_list; if the
158+ # address_list level load_balance is on, keep track of the
159+ # least recently used address for subsequent connections;
160+ # otherwise, iterate through the list in order; note that if
161+ # source_route is enabled that only the first address is
162+ # examined and the rest are used for routing on the server
150163 address_list = address_lists[idx1]
151164 num_addresses = len (address_list.addresses)
152- # Iterate through each address in an address_list. If the
153- # address_list level load_balance is on, keep track of the
154- # least recently used address for subsequent connections. If
155- # not, iterate through the list in order.
165+ if address_list.source_route and num_addresses > 0 :
166+ num_addresses = 1
156167 for k in range (num_addresses):
157168 if address_list.load_balance:
158169 idx2 = (k + address_list.lru_index) % num_addresses
@@ -182,6 +193,8 @@ cdef class ThinConnImpl(BaseConnImpl):
182193 ssize_t i, idx, num_descriptions = len (descriptions)
183194 Description description
184195 bint final_desc = False
196+ if description_list.source_route and num_descriptions > 0 :
197+ num_descriptions = 1
185198 for i in range (num_descriptions):
186199 if i == num_descriptions - 1 :
187200 final_desc = True
0 commit comments