cockroachdb / pebble

RocksDB/LevelDB inspired key-value database in Go

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

TestMeta: incorrect result after downloading external file

RaduBerinde opened this issue · comments

Init(0 /* dbs */, 41 /* batches */, 57 /* iters */, 44 /* snapshots */, 1 /* externalObjs */)
batch5 = db1.NewIndexedBatch()
batch5.Set("t", "bdgepzgefnbmoadh")
batch5.Delete("n")
batch5.Merge("r", "bswhibfochbzhriv")
external0 = batch5.NewExternalObj()
db1.IngestExternalFiles(external0, "aoaaaiumi" /* start */, "avqkpipyc" /* end */, "" /* syntheticSuffix */, "a" /* syntheticPrefix */, external0, "fppaqamjaiyf" /* start */, "vph" /* end */, "" /* syntheticSuffix */, "" /* syntheticPrefix */)
db1.Download("a" /* start */, "p" /* end */, true /* viaBackingFileDownload */, "i" /* start */, "l" /* end */, false /* viaBackingFileDownload */, "b" /* start */, "g" /* end */, true /* viaBackingFileDownload */, "d" /* start */, "q" /* end */, false /* viaBackingFileDownload */, "c" /* start */, "k" /* end */, true /* viaBackingFileDownload */, "h" /* start */, "o" /* end */, false /* viaBackingFileDownload */, "e" /* start */, "f" /* end */, false /* viaBackingFileDownload */, "j" /* start */, "m" /* end */, false /* viaBackingFileDownload */)
iter34 = db1.NewIter("", "", 0 /* key types */, 59, 85, false /* use L6 filters */, "" /* masking suffix */)
iter34.SeekLT("s", "")
-iter34.SeekLT("s", "") // [true,"r","bswhibfochbzhriv",<no range>] <nil> #9
+iter34.SeekLT("s", "") // [true,"at","bdgepzgefnbmoadh",<no range>] <nil> #9

Issue seems to be in the CopySpan path. If I force it to fall back to copyWholeFileBecauseOfUnsupportedFeature, the problem goes away.

Probably related to block property filters. Problem goes away if I remove the filter:

		opts.PointKeyFilters = []pebble.BlockPropertyFilter{
			sstable.NewTestKeysBlockPropertyFilter(o.filterMin, o.filterMax),
		}

I think our solution of having no block properties in the index block doesn't work. It looks like it assumes an empty encoded data, which translates to an empty interval for the interval block filter.