exception_handlers.py 2.5 KB
Newer Older
P
peng.xu 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
import logging
from milvus.grpc_gen import milvus_pb2, milvus_pb2_grpc, status_pb2
from mishards import grpc_server as server, exceptions

logger = logging.getLogger(__name__)


def resp_handler(err, error_code):
    if not isinstance(err, exceptions.BaseException):
        return status_pb2.Status(error_code=error_code, reason=str(err))

    status = status_pb2.Status(error_code=error_code, reason=err.message)

    if err.metadata is None:
        return status

    resp_class = err.metadata.get('resp_class', None)
    if not resp_class:
        return status

    if resp_class == milvus_pb2.BoolReply:
        return resp_class(status=status, bool_reply=False)

    if resp_class == milvus_pb2.VectorIds:
        return resp_class(status=status, vector_id_array=[])

27 28 29 30 31
    if resp_class == milvus_pb2.TopKQueryResult:
        return resp_class(status=status,
                          row_num=0,
                          ids=[],
                          distances=[])
P
peng.xu 已提交
32

B
BossZou 已提交
33 34
    if resp_class == milvus_pb2.CollectionRowCount:
        return resp_class(status=status, collection_row_count=-1)
P
peng.xu 已提交
35

B
BossZou 已提交
36 37
    if resp_class == milvus_pb2.CollectionName:
        return resp_class(status=status, collection_name=[])
P
peng.xu 已提交
38 39 40 41

    if resp_class == milvus_pb2.StringReply:
        return resp_class(status=status, string_reply='')

B
BossZou 已提交
42 43
    if resp_class == milvus_pb2.CollectionSchema:
        return milvus_pb2.CollectionSchema(
P
peng.xu 已提交
44 45 46 47 48
            status=status
        )

    if resp_class == milvus_pb2.IndexParam:
        return milvus_pb2.IndexParam(
B
BossZou 已提交
49
            collection_name=milvus_pb2.CollectionName(
P
peng.xu 已提交
50 51 52 53 54 55 56 57
                status=status
            )
        )

    status.error_code = status_pb2.UNEXPECTED_ERROR
    return status


B
BossZou 已提交
58 59
@server.errorhandler(exceptions.CollectionNotFoundError)
def CollectionNotFoundErrorHandler(err):
P
peng.xu 已提交
60
    logger.error(err)
B
BossZou 已提交
61
    return resp_handler(err, status_pb2.COLLECTION_NOT_EXISTS)
P
peng.xu 已提交
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85


@server.errorhandler(exceptions.InvalidTopKError)
def InvalidTopKErrorHandler(err):
    logger.error(err)
    return resp_handler(err, status_pb2.ILLEGAL_TOPK)


@server.errorhandler(exceptions.InvalidArgumentError)
def InvalidArgumentErrorHandler(err):
    logger.error(err)
    return resp_handler(err, status_pb2.ILLEGAL_ARGUMENT)


@server.errorhandler(exceptions.DBError)
def DBErrorHandler(err):
    logger.error(err)
    return resp_handler(err, status_pb2.UNEXPECTED_ERROR)


@server.errorhandler(exceptions.InvalidRangeError)
def InvalidArgumentErrorHandler(err):
    logger.error(err)
    return resp_handler(err, status_pb2.ILLEGAL_RANGE)