While debugging WT-3199, I noticed a periodic failure:
WT_CURSOR.search: Failed lookup in bloom filter: WT_ROLLBACK:
|
conflict between concurrent operations
|
Reproduces with this format configuration:
############################################
|
# RUN PARAMETERS
|
############################################
|
abort=0
|
alter=0
|
auto_throttle=0
|
backups=0
|
bitcnt=8
|
bloom=1
|
bloom_bit_count=17
|
bloom_hash_count=13
|
bloom_oldest=0
|
cache=60
|
checkpoints=1
|
checksum=uncompressed
|
chunk_size=2
|
compaction=0
|
compression=snappy
|
data_extend=0
|
data_source=lsm
|
delete_pct=9
|
dictionary=1
|
direct_io=0
|
encryption=none
|
evict_max=4
|
file_type=row-store
|
firstfit=0
|
huffman_key=0
|
huffman_value=0
|
in_memory=0
|
insert_pct=28
|
internal_key_truncation=1
|
internal_page_max=11
|
isolation=random
|
key_gap=18
|
key_max=122
|
key_min=21
|
leaf_page_max=12
|
leak_memory=0
|
logging=1
|
logging_archive=0
|
logging_compression=snappy
|
logging_prealloc=0
|
long_running_txn=0
|
lsm_worker_threads=4
|
merge_max=4
|
mmap=1
|
ops=100000
|
prefix_compression=0
|
prefix_compression_min=1
|
read_pct=6
|
rebalance=1
|
repeat_data_pct=32
|
reverse=0
|
rows=100000
|
runs=100
|
salvage=1
|
split_pct=65
|
statistics=1
|
statistics_server=0
|
threads=22
|
timer=20
|
transaction-frequency=55
|
value_max=3051
|
value_min=1
|
verify=1
|
wiredtiger_config=
|
write_pct=57
|
rebalance=1
|
############################################
|
Alexander Gorrod and Michael Cahill commented:
> That's a bug. It means that the bloom filter and contents of the table it filters are out of sync
> Could we get that rollback because of a cache full condition?
> Yes - that’s possible (and a bit horrible). I’d be reluctant to completely remove the error message from that path, though I guess we could only log an error if WT_NOTFOUND is returned - that’s the surprising failure mode.