)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1004568,"name":"Jared Casey","email":"jared.casey@couchbase.com","username":"thejcfactor","avatars":[{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e313952f735b8b4958bf34aaa7852f0e5ee2b201","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"942528fb_6dbfc18d","updated":"2026-02-04 00:35:38.000000000","message":"Looks good so far.  Did have a question on the validation we do as I think the C++ core will handle that.\n\nIf the C++ core does not handle that, I think moving the validation to the ClusterLogic class might be best so that it can be centralized.","commit_id":"408c8dbd0ccd98069d1ca791cfcfd4679469e73f"},{"author":{"_account_id":1005381,"name":"Anirudh Lakhotia","display_name":"Anirudh Lakhotia","email":"anirudh.lakhotia@couchbase.com","username":"anirudhlakhotia","avatars":[{"url":"https://www.gravatar.com/avatar/9b86347dbed7e8c52746d07945b7649b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9b86347dbed7e8c52746d07945b7649b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9b86347dbed7e8c52746d07945b7649b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9b86347dbed7e8c52746d07945b7649b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"7a641de69f834ebc35cffe1734f1fc1319edccd5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"da950db3_7e429fba","in_reply_to":"942528fb_6dbfc18d","updated":"2026-02-06 08:48:40.000000000","message":"I\u0027ll address the validation concerns in my replies below. The C++ core does handle some of this, so I\u0027ll remove the redundant checks.","commit_id":"408c8dbd0ccd98069d1ca791cfcfd4679469e73f"},{"author":{"_account_id":1004568,"name":"Jared Casey","email":"jared.casey@couchbase.com","username":"thejcfactor","avatars":[{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"6fbd2a67d6bba3211937a81b42a46be20239744f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"55c79601_2714dbfb","updated":"2026-03-27 15:48:57.000000000","message":"LGTM 👍","commit_id":"58044124641603df3b51f94ffcda94c630105a6a"}],"couchbase/cluster.py":[{"author":{"_account_id":1004568,"name":"Jared Casey","email":"jared.casey@couchbase.com","username":"thejcfactor","avatars":[{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e313952f735b8b4958bf34aaa7852f0e5ee2b201","unresolved":true,"context_lines":[{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        # RFC: Validate TLS requirement"},{"line_number":269,"context_line":"        # CertificateAuthenticator and JwtAuthenticator require TLS"},{"line_number":270,"context_line":"        if isinstance(authenticator, (CertificateAuthenticator, JwtAuthenticator)):"},{"line_number":271,"context_line":"            conn_info \u003d self._get_client_connection_info()"},{"line_number":272,"context_line":"            tls_enabled \u003d conn_info.get(\u0027enable_tls\u0027, False)"},{"line_number":273,"context_line":"            if not tls_enabled:"}],"source_content_type":"text/x-python","patch_set":2,"id":"16f8faf3_bf4ecda7","line":270,"updated":"2026-02-04 00:35:38.000000000","message":"I was under the impression that the C++ core will handle the validation here. Is that not the case?","commit_id":"408c8dbd0ccd98069d1ca791cfcfd4679469e73f"},{"author":{"_account_id":1005381,"name":"Anirudh Lakhotia","display_name":"Anirudh Lakhotia","email":"anirudh.lakhotia@couchbase.com","username":"anirudhlakhotia","avatars":[{"url":"https://www.gravatar.com/avatar/9b86347dbed7e8c52746d07945b7649b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9b86347dbed7e8c52746d07945b7649b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9b86347dbed7e8c52746d07945b7649b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9b86347dbed7e8c52746d07945b7649b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"7a641de69f834ebc35cffe1734f1fc1319edccd5","unresolved":true,"context_lines":[{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        # RFC: Validate TLS requirement"},{"line_number":269,"context_line":"        # CertificateAuthenticator and JwtAuthenticator require TLS"},{"line_number":270,"context_line":"        if isinstance(authenticator, (CertificateAuthenticator, JwtAuthenticator)):"},{"line_number":271,"context_line":"            conn_info \u003d self._get_client_connection_info()"},{"line_number":272,"context_line":"            tls_enabled \u003d conn_info.get(\u0027enable_tls\u0027, False)"},{"line_number":273,"context_line":"            if not tls_enabled:"}],"source_content_type":"text/x-python","patch_set":2,"id":"2a5235f4_f7550b8d","line":270,"in_reply_to":"16f8faf3_bf4ecda7","updated":"2026-02-06 08:48:40.000000000","message":"You\u0027re right, I checked the C++ core and it does handle TLS-requiring credentials at core/cluster.cxx:647. When `auth.requires_tls()` is true, it attempts to reconfigure the TLS context and reverts the credentials if that fails.\nThe difference is the C++ core doesn\u0027t pre-validate \"TLS must already be enabled\", it just tries and fails. I added this Python-side check to give a clearer upfront error message, but I agree it\u0027s somewhat redundant.\nShould I remove this validation and let the C++ core handle it?","commit_id":"408c8dbd0ccd98069d1ca791cfcfd4679469e73f"},{"author":{"_account_id":1005381,"name":"Anirudh Lakhotia","display_name":"Anirudh Lakhotia","email":"anirudh.lakhotia@couchbase.com","username":"anirudhlakhotia","avatars":[{"url":"https://www.gravatar.com/avatar/9b86347dbed7e8c52746d07945b7649b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9b86347dbed7e8c52746d07945b7649b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9b86347dbed7e8c52746d07945b7649b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9b86347dbed7e8c52746d07945b7649b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0328527a901174e969ec8a702a928b89a2187304","unresolved":false,"context_lines":[{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        # RFC: Validate TLS requirement"},{"line_number":269,"context_line":"        # CertificateAuthenticator and JwtAuthenticator require TLS"},{"line_number":270,"context_line":"        if isinstance(authenticator, (CertificateAuthenticator, JwtAuthenticator)):"},{"line_number":271,"context_line":"            conn_info \u003d self._get_client_connection_info()"},{"line_number":272,"context_line":"            tls_enabled \u003d conn_info.get(\u0027enable_tls\u0027, False)"},{"line_number":273,"context_line":"            if not tls_enabled:"}],"source_content_type":"text/x-python","patch_set":2,"id":"57dd68a3_c5f1c37b","line":270,"in_reply_to":"2a5235f4_f7550b8d","updated":"2026-03-26 18:42:52.000000000","message":"Acknowledged","commit_id":"408c8dbd0ccd98069d1ca791cfcfd4679469e73f"},{"author":{"_account_id":1004568,"name":"Jared Casey","email":"jared.casey@couchbase.com","username":"thejcfactor","avatars":[{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/20ac69da8a1fb4cc11bdd1c880389132.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e313952f735b8b4958bf34aaa7852f0e5ee2b201","unresolved":true,"context_lines":[{"line_number":299,"context_line":"                message\u003d\"Cannot switch authenticator types. Must use PasswordAuthenticator.\""},{"line_number":300,"context_line":"            )"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        super()._set_authenticator(auth\u003dauthenticator.as_dict())"},{"line_number":303,"context_line":"        self._auth \u003d authenticator.as_dict()"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    def wait_until_ready(self,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ce4ef3f5_cd7be631","line":302,"updated":"2026-02-04 00:35:38.000000000","message":"I don\u0027t think it is a big deal, but might be nice to have only a single call to `authenticator.as_dict()`","commit_id":"408c8dbd0ccd98069d1ca791cfcfd4679469e73f"},{"author":{"_account_id":1005381,"name":"Anirudh Lakhotia","display_name":"Anirudh Lakhotia","email":"anirudh.lakhotia@couchbase.com","username":"anirudhlakhotia","avatars":[{"url":"https://www.gravatar.com/avatar/9b86347dbed7e8c52746d07945b7649b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9b86347dbed7e8c52746d07945b7649b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9b86347dbed7e8c52746d07945b7649b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9b86347dbed7e8c52746d07945b7649b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"7a641de69f834ebc35cffe1734f1fc1319edccd5","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                message\u003d\"Cannot switch authenticator types. Must use PasswordAuthenticator.\""},{"line_number":300,"context_line":"            )"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        super()._set_authenticator(auth\u003dauthenticator.as_dict())"},{"line_number":303,"context_line":"        self._auth \u003d authenticator.as_dict()"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    def wait_until_ready(self,"}],"source_content_type":"text/x-python","patch_set":2,"id":"392a7a0f_07ab04a3","line":302,"in_reply_to":"ce4ef3f5_cd7be631","updated":"2026-02-06 08:48:40.000000000","message":"Acknowledged","commit_id":"408c8dbd0ccd98069d1ca791cfcfd4679469e73f"}]}
