{"record":{"id":"5cddfc776aeb26db","repo":"redis/redis-py","slug":"given-database-is-not-a-member-of-database-list-5cddfc","errorCode":null,"errorMessage":"Given database is not a member of database list","messagePattern":"Given database is not a member of database list","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"redis/multidb/client.py","lineNumber":151,"sourceCode":"    def get_databases(self) -> Databases:\n        \"\"\"\n        Returns a sorted (by weight) list of all databases.\n        \"\"\"\n        return self._databases\n\n    def set_active_database(self, database: SyncDatabase) -> None:\n        \"\"\"\n        Promote one of the existing databases to become an active.\n        \"\"\"\n        exists = None\n\n        for existing_db, _ in self._databases:\n            if existing_db == database:\n                exists = True\n                break\n\n        if not exists:\n            raise ValueError(\"Given database is not a member of database list\")\n\n        self._bg_scheduler.run_coro_sync(self._check_db_health, database)\n\n        if database.circuit.state == CBState.CLOSED:\n            highest_weighted_db, _ = self._databases.get_top_n(1)[0]\n            self.command_executor.active_database = (\n                database,\n                GeoFailoverReason.MANUAL,\n            )\n            return\n\n        raise NoValidDatabaseException(\n            \"Cannot set active database, database is unhealthy\"\n        )\n\n    def add_database(\n        self, config: DatabaseConfig, skip_initial_health_check: bool = True\n    ):","sourceCodeStart":133,"sourceCodeEnd":169,"githubUrl":"https://github.com/redis/redis-py/blob/6a6b581b48225afa0b76912d1028c6035baee932/redis/multidb/client.py#L133-L169","documentation":"Raised as ValueError by MultiDBClient.set_active_database() (client.py:151) when the supplied Database object is not found in self._databases. Promotion to active requires the database to already be a registered member of the client's weighted database list; an unknown object is rejected before any health check runs.","triggerScenarios":"Passing a freshly constructed Database (not added via add_database()) to set_active_database(); passing a Database belonging to a different MultiDBClient instance; passing an object that fails equality against the registered entries (Database.__eq__ compares underlying fields).","commonSituations":"Calling set_active_database with a Database reference obtained outside the client; swapping client instances and reusing old Database handles; mutating fields that affect equality after registration.","solutions":["Only pass Database instances returned by client.get_databases() to set_active_database().","If the target isn't registered, add it first via client.add_database(config).","Resolve the desired database from get_databases() by matching its identity field rather than reconstructing it."],"exampleFix":"# before\nnew_db = Database(client=other_client, circuit=..., weight=1)\nclient.set_active_database(new_db)  # raises ValueError\n\n# after\nclient.add_database(db_config)            # register it first\ntarget = next(db for db, _ in client.get_databases() if db is desired)\nclient.set_active_database(target)","handlingStrategy":"validation","validationCode":"# Validate membership before promoting\nregistered = [db for db, _ in client.get_databases()]\nif database not in registered:\n    raise ValueError('database is not registered with this client')\nclient.set_active_database(database)","typeGuard":"from redis.multidb.client import MultiDBClient\n\ndef is_registered(client: MultiDBClient, database) -> bool:\n    return any(db is database for db, _ in client.get_databases())","tryCatchPattern":"try:\n    client.set_active_database(database)\nexcept ValueError as e:\n    if 'not a member' in str(e):\n        # register first, then promote\n        client.add_database(config_for(database))\n        client.set_active_database(database)\n    else:\n        raise","preventionTips":["Always obtain Database handles from get_databases(), never reconstruct them.","Do not reuse Database objects across different MultiDBClient instances.","Check membership before manual promotion."],"tags":["multidb","active-active","validation","api-misuse"],"backgroundTag":null,"analyzedSha":"6a6b581b48225afa0b76912d1028c6035baee932","analyzedAt":"2026-08-10T12:52:44.840Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}