Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
uint32 to uint64 in slice methods (#323)
## Problem I'm currently on Dgraph 21.12 unable to export my data. Export fails on just two nodes out of 7 with the "Unexpected EOF" error: ``` Dec 14 11:31:51 dm-dgraph-04 dgraph[224355]: I1214 11:31:51.840130 224355 log.go:34] Export [01h26m22s] Scan (12): ~2.1 TiB/2.5 TiB at 177 MiB/sec. Sent: 801.5 GiB at 231 MiB/sec. jemalloc: 7.5 GiB Dec 14 11:31:55 dm-dgraph-04 dgraph[224355]: W1214 11:31:55.408201 224355 log.go:36] Error while sending: unexpected EOF ``` Skipping rather long investigation of this issue I came to find length of slice, written to the Buffer during export exceed the size of uint32 (i've decoded varint before Value field in Badger KV struct with RDF's to get something around 4.5Gb, which is expected for a rather bloated reverse edge to the one of the most common nodes in my DB. Also count query returns 72 105 794 connected nodes which is, welp, quite a lot). Not to mention that working with `int` which is almost always is `int64` and then casually casting it to `uint32` w/o any checks or warnings is as bad as it gets. ## Solution Find any `4` and `Uint32` and carefully replace them with `8` and `Uint64`. As this happens only in slice-related methods the fix is quite easy. Locally tests run just fine, but i had to patch the sort one to accommodate for size changes. Also i did test 21.12-related badger version and tests run fine too.
- Loading branch information