redis-om-python icon indicating copy to clipboard operation
redis-om-python copied to clipboard

Redis-om model randomly returns NotFoundError

Open llastowski opened this issue 1 year ago • 4 comments

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",
            )

llastowski avatar Aug 13 '24 08:08 llastowski

The error is observed in 0.3.2 and 0.3.1, previously we were using 0.2.1 without observing this issue.

llastowski avatar Aug 13 '24 10:08 llastowski

How large is the index you are querying, and how large is the result set when you call all?

slorello89 avatar Aug 22 '24 14:08 slorello89

Experiencing the same issue with an index sized at 10K approximately. Issue with Object.get(Object.id == 'abcd...'). Not experiencing issues with Object.find(Object.id == 'abcd...').all()

redis-om version 0.3.1

ivanbelenky avatar Aug 27 '24 19:08 ivanbelenky

How large is the index you are querying, and how large is the result set when you call all?

there are 4 keys in that specific model in the DB, approx 10KB in total, the index is 128 Bytes Whole database in the specific environment is just 56 keys

llastowski avatar Aug 28 '24 05:08 llastowski