Skip to content

Commit 322d143

Browse files
committed
fix: Handle negotiation failed on kerberos sasl connection
1 parent 8db504f commit 322d143

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

pyiceberg/catalog/hive.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -142,22 +142,33 @@ class _HiveClient:
142142
_ugi: Optional[List[str]]
143143

144144
def __init__(self, uri: str, ugi: Optional[str] = None, kerberos_auth: Optional[bool] = HIVE_KERBEROS_AUTH_DEFAULT):
145-
url_parts = urlparse(uri)
145+
self._uri = uri
146+
self._kerberos_auth = kerberos_auth
147+
self._ugi = ugi.split(":") if ugi else None
148+
149+
self._init_thrift_client()
150+
151+
def _init_thrift_client(self):
152+
url_parts = urlparse(self._uri)
146153

147-
transport = TSocket.TSocket(url_parts.hostname, url_parts.port)
154+
socket = TSocket.TSocket(url_parts.hostname, url_parts.port)
148155

149-
if not kerberos_auth:
150-
self._transport = TTransport.TBufferedTransport(transport)
156+
if not self._kerberos_auth:
157+
self._transport = TTransport.TBufferedTransport(socket)
151158
else:
152-
self._transport = TTransport.TSaslClientTransport(transport, host=url_parts.hostname, service="hive")
159+
self._transport = TTransport.TSaslClientTransport(socket, host=url_parts.hostname, service="hive")
153160

154161
protocol = TBinaryProtocol.TBinaryProtocol(self._transport)
155162

156163
self._client = Client(protocol)
157-
self._ugi = ugi.split(":") if ugi else None
158164

159165
def __enter__(self) -> Client:
160-
self._transport.open()
166+
if not self._kerberos_auth:
167+
self._transport.open()
168+
else:
169+
self._init_thrift_client()
170+
self._transport.open()
171+
161172
if self._ugi:
162173
self._client.set_ugi(*self._ugi)
163174
return self._client

0 commit comments

Comments
 (0)