Skip to content
This repository has been archived by the owner on Sep 20, 2024. It is now read-only.

General: MongoDB ability to specify replica set groups #2401

Conversation

iLLiCiTiT
Copy link
Member

@iLLiCiTiT iLLiCiTiT commented Dec 13, 2021

Brief description

Replica sets may require to pass mutliple urls into mongo url (e.g.: mongodb://localhost:27017,localhost:27018/?replicaSet=foo).

Description

That is not now possible because we're parsing mongo url into components for MongoHandler. As nothing from the decomposed url parts is at the end used we don't really need "real" connection data. This should give ability to enter any valid mongo url and not crash on logging creation.

Changes

  • removed decompose_url and compose_url from openpype lib and api
  • removed compose_url completelly
  • log use default url components
  • changed decompose_url to _decompose_url and use it only in get_default_components

How to test

  • have replica set mongo
  • pass mongo ulr with replica set group into igniter
  • everything should work

Resolves #2226

@mkolar
Copy link
Member

mkolar commented Dec 13, 2021

@iLLiCiTiT
Copy link
Member Author

This was not tested as I was not able to create replica set that actually works.

@iLLiCiTiT iLLiCiTiT self-assigned this Dec 13, 2021
@iLLiCiTiT iLLiCiTiT added the type: enhancement Enhancements to existing functionality label Dec 13, 2021
@kalisp
Copy link
Member

kalisp commented Dec 22, 2021

When using Local Setting and address like mongodb://admin:PASSWORD@cluster0-shard-00-00.tlfnb.mongodb.net:27017,cluster0-shard-00-01.tlfnb.mongodb.net:27017,cluster0-shard-00-02.tlfnb.mongodb.net:27017/?authSource=admin&replicaSet=atlas-vxnruu-shard-0
it throws:

Traceback (most recent call last):

  File "C:\Users\petrk\PycharmProjects\Pype3.0\pype\openpype\tools\settings\local_settings\mongo_widget.py", line 60, in _on_confirm_click
    change_openpype_mongo_url(value)

  File "C:\Users\petrk\PycharmProjects\Pype3.0\pype\openpype\lib\local_settings.py", line 544, in change_openpype_mongo_url
    validate_mongo_connection(new_mongo_url)

  File "C:\Users\petrk\PycharmProjects\Pype3.0\pype\openpype\lib\mongo.py", line 115, in validate_mongo_connection
    mongo_uri, retry_attempts=1

  File "C:\Users\petrk\PycharmProjects\Pype3.0\pype\openpype\lib\mongo.py", line 201, in create_connection
    raise last_exc

  File "C:\Users\petrk\PycharmProjects\Pype3.0\pype\openpype\lib\mongo.py", line 186, in create_connection
    mongo_client.server_info()

  File "C:\Users\petrk\PycharmProjects\Pype3.0\pype\.venv\lib\site-packages\pymongo\mongo_client.py", line 1996, in server_info
    session=session)

  File "C:\Users\petrk\PycharmProjects\Pype3.0\pype\.venv\lib\site-packages\pymongo\database.py", line 758, in command
    read_preference, session) as (sock_info, secondary_ok):

  File "c:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\contextlib.py", line 112, in __enter__
    return next(self.gen)

  File "C:\Users\petrk\PycharmProjects\Pype3.0\pype\.venv\lib\site-packages\pymongo\mongo_client.py", line 1387, in _socket_for_reads
    server = self._select_server(read_preference, session)

  File "C:\Users\petrk\PycharmProjects\Pype3.0\pype\.venv\lib\site-packages\pymongo\mongo_client.py", line 1346, in _select_server
    server = topology.select_server(server_selector)

  File "C:\Users\petrk\PycharmProjects\Pype3.0\pype\.venv\lib\site-packages\pymongo\topology.py", line 246, in select_server
    address))

  File "C:\Users\petrk\PycharmProjects\Pype3.0\pype\.venv\lib\site-packages\pymongo\topology.py", line 203, in select_servers
    selector, server_timeout, address)

  File "C:\Users\petrk\PycharmProjects\Pype3.0\pype\.venv\lib\site-packages\pymongo\topology.py", line 220, in _select_servers_loop
    (self._error_message(selector), timeout, self.description))

pymongo.errors.ServerSelectionTimeoutError: connection closed,connection closed,connection closed, Timeout: 1.0s, Topology Description: <TopologyDescription id: 61c300b3b92db470dbf101f7, topology_type: ReplicaSetNoPrimary, servers: [<ServerDescription ('cluster0-shard-00-00.tlfnb.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('connection closed')>, <ServerDescription ('cluster0-shard-00-01.tlfnb.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('connection closed')>, <ServerDescription ('cluster0-shard-00-02.tlfnb.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('connection closed')>]>

@kalisp
Copy link
Member

kalisp commented Dec 22, 2021

Adding &ssl=true to the url helped.

@iLLiCiTiT iLLiCiTiT merged commit d18eee8 into develop Dec 22, 2021
@iLLiCiTiT iLLiCiTiT deleted the feature/OP-2013_MongoDB-Ability-to-specify-replica-set-groups branch January 5, 2022 15:08
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
type: enhancement Enhancements to existing functionality
Projects
None yet
Development

Successfully merging this pull request may close these issues.

MongoDB: Ability to specify replica set groups
3 participants