pkj
pkj

Reputation: 781

Error while creating Neo4jGraph object using langchain

I am trying to create a neo4j object using the following code. While I run the code, I receive error. Kindly help me fix this error. I have verified that the environment variables are read correctly. I am running this on my local Ubuntu machine.

Code -

from langchain_neo4j import Neo4jGraph 
import os
from dotenv import load_dotenv 
load_dotenv() 
neo4j_uri = os.getenv('NEO4J_URI') 
print(f"Neo4j URI: {neo4j_uri}")
graph = Neo4jGraph(url= neo4j_uri,username = os.getenv('NEO4J_USERNAME'),password = os.getenv('NEO4J_PASSWORD'))

Output of the code-

Neo4j URI: neo4j+s://53XXXe0e.databases.neo4j.io
---------------------------------------------------------------------------
gaierror                                  Traceback (most recent call last)
File ~/python3.10_venv/lib/python3.10/site-packages/neo4j/_async_compat/network/_util.py:144, in NetworkUtil._dns_resolver(address, family)
    143 try:
--> 144     info = NetworkUtil.get_address_info(
    145         address.host,
    146         address.port,
    147         family=family,
    148         type=socket.SOCK_STREAM,
    149     )
    150 except OSError as e:

File ~/python3.10_venv/lib/python3.10/site-packages/neo4j/_async_compat/network/_util.py:130, in NetworkUtil.get_address_info(host, port, family, type, proto, flags)
    128 @staticmethod
    129 def get_address_info(host, port, *, family=0, type=0, proto=0, flags=0):
--> 130     return socket.getaddrinfo(host, port, family, type, proto, flags)

File /usr/lib/python3.10/socket.py:967, in getaddrinfo(host, port, family, type, proto, flags)
    966 addrlist = []
--> 967 for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
    968     af, socktype, proto, canonname, sa = res

gaierror: [Errno -2] Name or service not known

The above exception was the direct cause of the following exception:

ValueError                                Traceback (most recent call last)
Cell In[1], line 6
      4 from dotenv import load_dotenv
      5 load_dotenv() 
----> 6 graph = Neo4jGraph(
      7                     url      = os.getenv('NEO4J_URI'),
      8                     username = os.getenv('NEO4J_USERNAME'),
      9                     password = os.getenv('NEO4J_PASSWORD')
     10                 )

File ~/python3.10_venv/lib/python3.10/site-packages/langchain_neo4j/graphs/neo4j_graph.py:379, in Neo4jGraph.__init__(self, url, username, password, database, timeout, sanitize, refresh_schema, driver_config, enhanced_schema)
    377 # Verify connection
    378 try:
--> 379     self._driver.verify_connectivity()
    380 except neo4j.exceptions.ConfigurationError:
    381     raise ValueError(
    382         "Could not connect to Neo4j database. "
    383         "Please ensure that the driver config is correct"
    384     )

File ~/python3.10_venv/lib/python3.10/site-packages/neo4j/_sync/driver.py:1081, in Driver.verify_connectivity(self, **config)
   1074     experimental_warn(
   1075         "All configuration key-word arguments to "
   1076         "verify_connectivity() are experimental. They might be "
   1077         "changed or removed in any future version without prior "
   1078         "notice."
   1079     )
   1080 session_config = self._read_session_config(config)
-> 1081 self._get_server_info(session_config)

File ~/python3.10_venv/lib/python3.10/site-packages/neo4j/_sync/driver.py:1296, in Driver._get_server_info(self, session_config)
   1294 def _get_server_info(self, session_config) -> ServerInfo:
   1295     with self._session(session_config) as session:
-> 1296         return session._get_server_info()

File ~/python3.10_venv/lib/python3.10/site-packages/neo4j/_sync/work/session.py:183, in Session._get_server_info(self)
    181 def _get_server_info(self):
    182     assert not self._connection
--> 183     self._connect(READ_ACCESS, liveness_check_timeout=0)
    184     server_info = self._connection.server_info
    185     self._disconnect()

File ~/python3.10_venv/lib/python3.10/site-packages/neo4j/_sync/work/session.py:136, in Session._connect(self, access_mode, **acquire_kwargs)
    134     access_mode = self._config.default_access_mode
    135 try:
--> 136     super()._connect(
    137         access_mode, auth=self._config.auth, **acquire_kwargs
    138     )
    139 except asyncio.CancelledError:
    140     self._handle_cancellation(message="_connect")

File ~/python3.10_venv/lib/python3.10/site-packages/neo4j/_sync/work/workspace.py:167, in Workspace._connect(self, access_mode, auth, **acquire_kwargs)
    159     else:
    160         # This is the first time we open a connection to a server in a
    161         # cluster environment for this session without explicitly
   (...)
    164         # we shall use this database explicitly for all subsequent
    165         # actions within this session.
    166         log.debug("[#0000]  _: <WORKSPACE> resolve home database")
--> 167         self._pool.update_routing_table(
    168             database=self._config.database,
    169             imp_user=self._config.impersonated_user,
    170             bookmarks=self._get_bookmarks(),
    171             auth=auth,
    172             acquisition_timeout=acquisition_timeout,
    173             database_callback=self._set_cached_database,
    174         )
    175 acquire_kwargs_ = {
    176     "access_mode": access_mode,
    177     "timeout": acquisition_timeout,
   (...)
    181     "liveness_check_timeout": None,
    182 }
    183 acquire_kwargs_.update(acquire_kwargs)

File ~/python3.10_venv/lib/python3.10/site-packages/neo4j/_sync/io/_pool.py:900, in Neo4jPool.update_routing_table(self, database, imp_user, bookmarks, auth, acquisition_timeout, database_callback)
    890 existing_routers = set(routing_table.routers)
    892 prefer_initial_routing_address = self.routing_tables[
    893     database
    894 ].initialized_without_writers
    896 if (
    897     prefer_initial_routing_address
    898     and
    899     # TODO: Test this state
--> 900     self._update_routing_table_from(
    901         self.address,
    902         database=database,
    903         imp_user=imp_user,
    904         bookmarks=bookmarks,
    905         auth=auth,
    906         acquisition_timeout=acquisition_timeout,
    907         database_callback=database_callback,
    908     )
    909 ):
    910     # Why is only the first initial routing address used?
    911     return
    912 if self._update_routing_table_from(
    913     *(existing_routers - {self.address}),
    914     database=database,
   (...)
    919     database_callback=database_callback,
    920 ):

File ~/python3.10_venv/lib/python3.10/site-packages/neo4j/_sync/io/_pool.py:830, in Neo4jPool._update_routing_table_from(self, database, imp_user, bookmarks, auth, acquisition_timeout, database_callback, *routers)
    822     log.debug(
    823         (
    824             "[#0000]  _: <POOL> "
   (...)
    827         ", ".join(map(repr, routers)),
    828     )
    829 for router in routers:
--> 830     for address in NetworkUtil.resolve_address(
    831         router, resolver=self.pool_config.resolver
    832     ):
    833         new_routing_table = self.fetch_routing_table(
    834             address=address,
    835             acquisition_timeout=acquisition_timeout,
   (...)
    839             auth=auth,
    840         )
    841         if new_routing_table is not None:

File ~/python3.10_venv/lib/python3.10/site-packages/neo4j/_async_compat/network/_util.py:196, in NetworkUtil.resolve_address(address, family, resolver)
    194             yield address_dns_resolved
    195 else:
--> 196     for address_dns_resolved in NetworkUtil._dns_resolver(
    197         address, family=family
    198     ):
    199         log.debug(
    200             "[#0000]  _: <RESOLVE> dns resolver out: %s",
    201             address_dns_resolved,
    202         )
    203         yield address_dns_resolved

File ~/python3.10_venv/lib/python3.10/site-packages/neo4j/_async_compat/network/_util.py:151, in NetworkUtil._dns_resolver(address, family)
    144     info = NetworkUtil.get_address_info(
    145         address.host,
    146         address.port,
    147         family=family,
    148         type=socket.SOCK_STREAM,
    149     )
    150 except OSError as e:
--> 151     raise ValueError(f"Cannot resolve address {address}") from e
    152 return _resolved_addresses_from_info(info, address._host_name)

ValueError: Cannot resolve address 53XXXe0e.databases.neo4j.io:7687

Clearing DNS with sudo resolvectl flush-caches, did not help. At this point I am clueless what could be wrong.

Upvotes: 0

Views: 18

Answers (1)

pkj
pkj

Reputation: 781

I learn that the instance on neo4jaura was paused. Turning it on, solved the problem.

Upvotes: 0

Related Questions