r4fek / django-cassandra-engine

Django Cassandra Engine - the Cassandra backend for Django
BSD 2-Clause "Simplified" License
364 stars 85 forks source link

Can't connect to K8ssandra in minikube, problem with settings #153

Closed caniko closed 2 years ago

caniko commented 2 years ago

I set up a local K8ssandra cluster using minikube; moreover, I am not able to connect to it using the package in Django.

I am connecting just fine using cqlsh:

╰─λ cqlsh -u k8ssandra-superuser -p V32sXb1W2URgp6TfxN2R
Connected to k8ssandra at 127.0.0.1:9042
[cqlsh 6.0.0 | Cassandra 3.11.8 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
k8ssandra-superuser@cqlsh>

settings.py, databases:

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.sqlite3",
        "NAME": BASE_DIR / "db.sqlite3",
    },
    "cassandra": {
        "ENGINE": "django_cassandra_engine",
        "NAME": "k8ssandra_test",
        "USER": "k8ssandra-superuser",
        "PASSWORD": "V32sXb1W2URgp6TfxN2R",
        "TEST_NAME": "k8ssandra_test",
        "HOST": "127.0.0.1:9042",
        "OPTIONS": {
            "replication": {
                "strategy_class": "SimpleStrategy",
                "replication_factor": 1,
            },
            "connection": {
                "consistency": ConsistencyLevel.LOCAL_ONE,
                "retry_connect": True
                # + All connection options for cassandra.cluster.Cluster()
            },
            "session": {
                "default_timeout": 10,
                "default_fetch_size": 10000
                # + All options for cassandra.cluster.Session()
            },
        },
    },
}

Stack trace:

(syndb-gXcvWyiL-py3.9) [can@Pyramidal SynDB]$ poetry run python application/manage.py migrate
Traceback (most recent call last):
  File "/home/can/.cache/pypoetry/virtualenvs/syndb-gXcvWyiL-py3.9/lib/python3.9/site-packages/django_cassandra_engine/connection.py", line 78, in register
    connection.get_connection(name=self.alias)
  File "/home/can/.cache/pypoetry/virtualenvs/syndb-gXcvWyiL-py3.9/lib/python3.9/site-packages/cassandra/cqlengine/connection.py", line 247, in get_connection
    raise CQLEngineException("Connection name '{0}' doesn't exist in the registry.".format(name))
cassandra.cqlengine.CQLEngineException: Connection name 'cassandra' doesn't exist in the registry.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/can/Software_Projects/SynDB/application/manage.py", line 22, in <module>
    main()
  File "/home/can/Software_Projects/SynDB/application/manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/home/can/.cache/pypoetry/virtualenvs/syndb-gXcvWyiL-py3.9/lib/python3.9/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/home/can/.cache/pypoetry/virtualenvs/syndb-gXcvWyiL-py3.9/lib/python3.9/site-packages/django/core/management/__init__.py", line 395, in execute
    django.setup()
  File "/home/can/.cache/pypoetry/virtualenvs/syndb-gXcvWyiL-py3.9/lib/python3.9/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/home/can/.cache/pypoetry/virtualenvs/syndb-gXcvWyiL-py3.9/lib/python3.9/site-packages/django/apps/registry.py", line 114, in populate
    app_config.import_models()
  File "/home/can/.cache/pypoetry/virtualenvs/syndb-gXcvWyiL-py3.9/lib/python3.9/site-packages/django_cassandra_engine/apps.py", line 62, in import_models
    self.connect()
  File "/home/can/.cache/pypoetry/virtualenvs/syndb-gXcvWyiL-py3.9/lib/python3.9/site-packages/django_cassandra_engine/apps.py", line 59, in connect
    conn.connect()
  File "/home/can/.cache/pypoetry/virtualenvs/syndb-gXcvWyiL-py3.9/lib/python3.9/site-packages/django_cassandra_engine/base/__init__.py", line 118, in connect
    self.connection = CassandraConnection(self.alias, **settings)
  File "/home/can/.cache/pypoetry/virtualenvs/syndb-gXcvWyiL-py3.9/lib/python3.9/site-packages/django_cassandra_engine/connection.py", line 74, in __init__
    self.register()
  File "/home/can/.cache/pypoetry/virtualenvs/syndb-gXcvWyiL-py3.9/lib/python3.9/site-packages/django_cassandra_engine/connection.py", line 96, in register
    connection.register_connection(
  File "/home/can/.cache/pypoetry/virtualenvs/syndb-gXcvWyiL-py3.9/lib/python3.9/site-packages/cassandra/cqlengine/connection.py", line 201, in register_connection
    conn.setup()
  File "/home/can/.cache/pypoetry/virtualenvs/syndb-gXcvWyiL-py3.9/lib/python3.9/site-packages/cassandra/cqlengine/connection.py", line 106, in setup
    self.cluster = Cluster(self.hosts, **self.cluster_options)
  File "cassandra/cluster.py", line 1181, in cassandra.cluster.Cluster.__init__
cassandra.UnresolvableContactPoints: {}
caniko commented 2 years ago

The settings manager doesn't parse the port. Removing the port reference fixes the issue. Before:

"HOST": "127.0.0.1:9042",

After:

"HOST": "127.0.0.1",

9042 is set by default.