{"record":{"id":"22b6cb3ac3d3945e","repo":"redis/redis-py","slug":"xcfgset-requires-at-least-one-of-idmp-duration-or","errorCode":null,"errorMessage":"XCFGSET requires at least one of idmp_duration or idmp_maxsize","messagePattern":"XCFGSET requires at least one of idmp_duration or idmp_maxsize","errorType":"validation","errorClass":"DataError","httpStatus":null,"severity":"error","filePath":"redis/commands/core.py","lineNumber":7110,"sourceCode":"            idmp_duration: How long Redis remembers each iid in seconds.\n                Default: 100 seconds (or value set by stream-idmp-duration config).\n                Minimum: 1 second, Maximum: 300 seconds.\n                Redis won't forget an iid for this duration (unless maxsize is reached).\n                Should accommodate application crash recovery time.\n            idmp_maxsize: Maximum number of iids Redis remembers per producer ID (pid).\n                Default: 100 iids (or value set by stream-idmp-maxsize config).\n                Minimum: 1 iid, Maximum: 1,000,000 (1M) iids.\n                Should be set to: mark-delay [in msec] × (messages/msec) + margin.\n                Example: 10K msgs/sec (10 msgs/msec), 80 msec mark-delay\n                → maxsize = 10 × 80 + margin = 1000 iids.\n\n        Returns:\n            OK on success.\n\n        For more information, see https://redis.io/commands/xcfgset\n        \"\"\"\n        if idmp_duration is None and idmp_maxsize is None:\n            raise DataError(\n                \"XCFGSET requires at least one of idmp_duration or idmp_maxsize\"\n            )\n\n        pieces: list[EncodableT] = []\n\n        if idmp_duration is not None:\n            if (\n                not isinstance(idmp_duration, int)\n                or idmp_duration < 1\n                or idmp_duration > 300\n            ):\n                raise DataError(\n                    \"XCFGSET idmp_duration must be an integer between 1 and 300\"\n                )\n            pieces.extend([b\"IDMP-DURATION\", idmp_duration])\n\n        if idmp_maxsize is not None:\n            if (","sourceCodeStart":7092,"sourceCodeEnd":7128,"githubUrl":"https://github.com/redis/redis-py/blob/6a6b581b48225afa0b76912d1028c6035baee932/redis/commands/core.py#L7092-L7128","documentation":"Raised by xcfgset() when both idmp_duration and idmp_maxsize are None. XCFGSET configures a stream's IDMP map and must set at least one of the two parameters (retention duration or max size); a call with neither is a no-op and therefore rejected. It is a DataError.","triggerScenarios":"Calling client.xcfgset('mystream') with no keyword arguments, or client.xcfgset('mystream', None, None).","commonSituations":"Calling xcfgset with config values that resolved to None, or invoking it speculatively without parameters.","solutions":["Pass at least one of idmp_duration (int seconds, 1-300) or idmp_maxsize (int, 1-1000000).","If the values come from optional config, ensure at least one is non-None before calling."],"exampleFix":"# before\nclient.xcfgset('mystream')\n\n# after\nclient.xcfgset('mystream', idmp_duration=120, idmp_maxsize=1000)","handlingStrategy":"validation","validationCode":"if idmp_duration is None and idmp_maxsize is None:\n    raise ValueError('xcfgset requires at least one of idmp_duration or idmp_maxsize')\nclient.xcfgset(name, idmp_duration=idmp_duration, idmp_maxsize=idmp_maxsize)","typeGuard":null,"tryCatchPattern":"from redis.exceptions import DataError\ntry:\n    client.xcfgset(name, idmp_duration=idmp_duration, idmp_maxsize=idmp_maxsize)\nexcept DataError as e:\n    if 'requires at least one' in str(e):\n        client.xcfgset(name, idmp_duration=100)","preventionTips":["Ensure at least one of idmp_duration/idmp_maxsize is non-None from config before calling.","Default to sensible values (e.g. duration=100, maxsize=1000) rather than leaving both unset."],"tags":["streams","xcfgset","idempotency","required-argument","validation"],"backgroundTag":null,"analyzedSha":"6a6b581b48225afa0b76912d1028c6035baee932","analyzedAt":"2026-08-10T12:52:44.840Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-21T04:17:39.646Z"}