Skip to content

Redis-om model randomly returns NotFoundError  #648

@llastowski

Description

@llastowski

The model below, with indexed fields, as pasted below, returns data without issues in 13 cases and fails 2, running the same 15 unit tests core function to retrieve the object from Redis. In to cases, however, it fails to pull data with no apparent reason; The workaround added to find ALL entries when catching exception works, but the same behavior is observed in multiple other places with different models, all related to the same query.

The environmental variables and the name parameter are the same for all tests, but it only fails on 2 runs of the same function.
It also fails to find the object in related Python debugger console attached at breakpoint.

Model definition:

class PlatformR(JsonModel):
    """DDI Platform representation."""

    model_config = ConfigDict(
        strict=False,
    )

    id: str = RedisField(index=True)
    name: str = RedisField(index=True)

    hostname: str = RedisField(index=True)
    company: str = RedisField(index=True)
    api_version: Optional[str] = None
    credentials: Optional[PlatformCredentials] = None

Lookup function

    def get_hostname_by_name(self, ddi_platform: str) -> str:
        """Get hostname by platform name."""
        logging.debug("Get hostname by platform name")
        try:
            return (
                PlatformR.find(PlatformR.name == ddi_platform).first().hostname
            )
        except NotFoundError:
            logging.error(f"Platform {ddi_platform} not found")
            ### Workaround - find all object, filter manually by Python iteration
            for platform in PlatformR.find().all(): 
                if platform.name == ddi_platform:
                    return platform.hostname
            raise HTTPException(
                status_code=status.HTTP_400_BAD_REQUEST,
                detail=f"Platform {ddi_platform} not found",
            )

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions