Hi Ariel, thank you for your quick answer.
I found that behavior only with ERROR = 1.0, even with ERROR = 0.99 doesn’t happen. Please, take a look in the following output:
127.0.0.1:6379> BF.INSERT filter2 ERROR 0.5 ITEMS foo bar
- (integer) 1
- (integer) 1
127.0.0.1:6379> BF.INSERT filter3 ERROR 0.7 ITEMS foo bar
- (integer) 1
- (integer) 1
127.0.0.1:6379> BF.INSERT filter4 ERROR 0.9 ITEMS foo bar
- (integer) 1
- (integer) 1
127.0.0.1:6379> BF.INSERT filter5 ERROR 0.99 ITEMS foo bar
- (integer) 1
- (integer) 1
So, even using ERROR = 0.99 the response is that both items were inserted
Please don’t try:
BF.INSERT filter5 ERROR 0.9999 ITEMS foo bar
It crashed my local Redis server!!
But when I try the following:
127.0.0.1:6379> BF.INSERT filter6 ERROR 1.0 ITEMS foo bar
- (integer) 0
- (integer) 0
seems that foo and bar items are not inserted since the response is [0, 0]
Then, if a check the existence of those items in every filter inserted before:
127.0.0.1:6379> BF.MEXISTS filter2 foo bar
- (integer) 1
- (integer) 1
127.0.0.1:6379> BF.MEXISTS filter3 foo bar
- (integer) 1
- (integer) 1
127.0.0.1:6379> BF.MEXISTS filter4 foo bar
- (integer) 1
- (integer) 1
127.0.0.1:6379> BF.MEXISTS filter5 foo bar
- (integer) 1
- (integer) 1
127.0.0.1:6379> BF.MEXISTS filter6 foo bar
- (integer) 1
- (integer) 1
So far, so good, but executing the command below it is impossible to know if they were inserted since ‘noitem’ which was not inserted appear as inserted:
127.0.0.1:6379> BF.MEXISTS filter6 foo bar noitem
- (integer) 1
- (integer) 1
- (integer) 1
Anyway, this is not the problem since having 100% allowed error gives a false positive calling BF.MEXISTS.
I’m with you, having 100% allowed error is ok, what I don’t know if it is a bug is the response coming when both items are inserted with ERROR = 1.0, which is:
127.0.0.1:6379> BF.INSERT filter6 ERROR 1.0 ITEMS foo bar
- (integer) 0
- (integer) 0
I think that even having a 100% allowed error the response still should be:
- (integer) 1
- (integer) 1
What do you think?