如何捕捉到 minIO 服务器的连接问题?

How to catch connection issues to minIO server?

我正在尝试在 Python minio(minio 包)客户端上捕获身份验证错误:

from minio import Minio
from minio.error import MinioError, ResponseError

## Data Lake (Minio)
try :
    minioClient = Minio(endpoint= config['databases']['datalake']['hostip']+":"+config['databases']['datalake']['port'],
                access_key= config['databases']['datalake']['accesskey'],
                secret_key= config['databases']['datalake']['secretkey'],
                secure= False)

    app.logger.info("MinIO Server Connected!")

except MinioError as e:
    app.logger.info("Could not connect to MinIO Server")

我似乎无法在使用假(错误)信用时捕获身份验证错误。它总是通过...关于如何解决这类问题有什么想法吗?

Minio()只创建对象,不连接服务器。因此,对象创建也适用于伪造的凭据或伪造的 url 和参数,因为该对象暂时不用于连接某处。您的异常处理仅尝试捕获因简单 python 对象创建而引发的错误。

为了检查连接性,我尝试连接到一个不存在的存储桶。如果我收到一条错误消息,一切都很好,如果超时,您可以捕获并记录它。 (您也可以尝试连接到现有的存储桶,但这会增加检查 creating/reaching 此存储桶或存储中是否存在错误的复杂性)

#create object

client = Minio(
    host,
    access_key=user,
    secret_key=pass,
    more_access_data=...
)

# reach storage
try:
    if not client.bucket_exists("nonexistingbucket"):
        logging.debug("Object storage connected")
except:
    # raise error if storage not reachable
    logging.critical("Object storage not reachable")

如上所说:

To check the connectivity, I try to connect to a non existing bucket.

我不认为这是直观的,你为什么不使用 list_buckets() 代替,例如:

from urllib3.exceptions import MaxRetryError

self.config = {
    "endpoint": "localhost:9000",
    "access_key": "minioadmin",
    "secret_key": "minioadmin",
    "secure": False,
    "http_client": urllib3.PoolManager(
        num_pools=10,
        )
    }

try:
    self.client = Minio(**self.config)
    self.client.list_buckets()
except MaxRetryError:
    logging.critical("Object storage not reachable")

重要的是要告知,如果 Minio 未处于活动状态,根据您的应用程序的上下文,启动时间将比平时稍长一些。