YouJiacheng opened a new issue, #9734:
URL: https://github.com/apache/iotdb/issues/9734

   ### Search before asking
   
   - [X] I searched in the [issues](https://github.com/apache/iotdb/issues) and 
found nothing similar.
   
   
   ### Version
   
   Windows 11 22H2
   IoTDB 1.1.0
   
   ### Describe the bug and provide the minimal reproduce step
   
   In class `IoTDBContainer`:
   ```python
       def _connect(self):
           session = Session(
               self.get_container_host_ip(), self.get_exposed_port(6667), 
"root", "root"
           )
           session.open(False)
           session.close()
   ```
   `get_exposed_port` return a `str`.
   
   
[Exampe](https://iotdb.apache.org/UserGuide/Master/API/Programming-Python-Native-API.html#how-to-use-example)
 use `str` port as well.
   
   However, `TSocket` in `thrift` actually expect an `int` for `port`:
   ```python
   class TSocket(TSocketBase):
       """Socket implementation of TTransport base."""
   
       def __init__(self, host='localhost', port=9090, unix_socket=None,
                    socket_family=socket.AF_UNSPEC,
                    socket_keepalive=False):
           """Initialize a TSocket
   
           @param host(str)  The host to connect to.
           @param port(int)  The (TCP) port to connect to.
           @param unix_socket(str)  The filename of a unix socket to connect to.
                                    (host and port will be ignored.)
           @param socket_family(int)  The socket family to use with this socket.
           @param socket_keepalive(bool) enable TCP keepalive, default off.
           """
   ```
   ```python
       @property
       def _address(self):
           return self._unix_socket if self._unix_socket else '%s:%d' % 
(self.host, self.port)
       def open(self):
           if self.handle:
               raise TTransportException(type=TTransportException.ALREADY_OPEN, 
message="already open")
           try:
               addrs = self._resolveAddr()
           except socket.gaierror as gai:
               msg = 'failed to resolve sockaddr for ' + str(self._address)
           ...
   ```
   Note the `%d` here. if the `self.port` is a `str`, when resolve address 
fail, an unrelated error will be raised:
   ```
   socket.gaierror: [Errno 11001] getaddrinfo failed
   
   During handling of the above exception, another exception occurred:
   ... LONG stack trace
   TypeError: %d format: a real number is required, not str
   ```
   I omit stack trace here, but in fact the terminal filled with stack trace 
and the plausible TypeError distracted me from discover the real bug: 
`self.get_container_host_ip()` return `'localnpipe`.
   
   How to reproduce:
   (on Windows)
   ```python
   from iotdb.IoTDBContainer import IoTDBContainer
   IoTDBContainer()
   ```
   
   ### What did you expect to see?
   
   1. no `TypeError: %d format: a real number is required, not str` raised.
   2. host should be `localhost` instead of 'localnpipe` (This seems an 
upstream bug)
   
   ### What did you see instead?
   
   `TypeError: %d format: a real number is required, not str` is raised.
   IoTDBContainer use `localnpipe` instead of `localhost`.
   
   ### Anything else?
   
   _No response_
   
   ### Are you willing to submit a PR?
   
   - [ ] I'm willing to submit a PR!


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to