redis Fix XSETID with max_deleted_entry_id issue (#11444)

Date: Wed Nov 2 16
Author: Wen Hui wen.hui.ware@gmail.com

Fix XSETID with max_deleted_entry_id issue (#11444) Resolve an edge case where the ID of a stream is updated retroactively to an ID lower than the already set max_deleted_entry_id. Currently, if we have command as below: xsetid mystream 1-1 MAXDELETEDID 1-2 Then we will get the following error: (error) ERR The ID specified in XSETID is smaller than the provided max_deleted_entry_id Becuase the provided MAXDELETEDID 1-2 is greated than input last-id: 1-1 Then we could assume there is a similar situation: step 1: we add three items in the mystream 127.0.0.1:6381> xadd mystream 1-1 a 1 “1-1” 127.0.0.1:6381> xadd mystream 1-2 b 2 “1-2” 127.0.0.1:6381> xadd mystream 1-3 c 3 “1-3” step 2: we could check the mystream infomation as below: **127.0.0.1:6381> xinfo stream mystream 1) “length” 2) (integer) 3 7) “last-generated-id” 8) “1-3” 9) “max-deleted-entry-id” 10) “0-0” step 3: we delete the item id 1-2 and 1-3 as below: 127.0.0.1:6381> xdel mystream 1-2 (integer) 1 127.0.0.1:6381> xdel mystream 1-3 (integer) 1 step 4: we check the mystream information: 127.0.0.1:6381> xinfo stream mystream 1) “length” 2) (integer) 1 7) “last-generated-id” 8) “1-3” 9) “max-deleted-entry-id” 10) “1-3” we could notice that the max-deleted-entry-id update to 1-3, so right now, if we just run: xsetid mystream 1-2 the above command has the same effect with xsetid mystream 1-2 MAXDELETEDID 1-3 So we should return an error to the client that (error) ERR The ID specified in XSETID is smaller than current max_deleted_entry_id