aboutsummaryrefslogtreecommitdiffstats
path: root/consensus/ethash/algorithm_go1.8_test.go
diff options
context:
space:
mode:
authorFelix Lange <fjl@users.noreply.github.com>2018-01-23 18:05:30 +0800
committerPéter Szilágyi <peterke@gmail.com>2018-01-23 18:05:30 +0800
commit924065e19d08cc7e6af0b3a5b5b1ef3785b79bd4 (patch)
tree9aefabb6b4c375971570555486ce5b172660661d /consensus/ethash/algorithm_go1.8_test.go
parent5d4267911a7791bfa60f275a97347372fbf0ce99 (diff)
downloadgo-tangerine-924065e19d08cc7e6af0b3a5b5b1ef3785b79bd4.tar
go-tangerine-924065e19d08cc7e6af0b3a5b5b1ef3785b79bd4.tar.gz
go-tangerine-924065e19d08cc7e6af0b3a5b5b1ef3785b79bd4.tar.bz2
go-tangerine-924065e19d08cc7e6af0b3a5b5b1ef3785b79bd4.tar.lz
go-tangerine-924065e19d08cc7e6af0b3a5b5b1ef3785b79bd4.tar.xz
go-tangerine-924065e19d08cc7e6af0b3a5b5b1ef3785b79bd4.tar.zst
go-tangerine-924065e19d08cc7e6af0b3a5b5b1ef3785b79bd4.zip
consensus/ethash: improve cache/dataset handling (#15864)
* consensus/ethash: add maxEpoch constant * consensus/ethash: improve cache/dataset handling There are two fixes in this commit: Unmap the memory through a finalizer like the libethash wrapper did. The release logic was incorrect and freed the memory while it was being used, leading to crashes like in #14495 or #14943. Track caches and datasets using simplelru instead of reinventing LRU logic. This should make it easier to see whether it's correct. * consensus/ethash: restore 'future item' logic in lru * consensus/ethash: use mmap even in test mode This makes it possible to shorten the time taken for TestCacheFileEvict. * consensus/ethash: shuffle func calc*Size comments around * consensus/ethash: ensure future cache/dataset is in the lru cache * consensus/ethash: add issue link to the new test * consensus/ethash: fix vet * consensus/ethash: fix test * consensus: tiny issue + nitpick fixes
Diffstat (limited to 'consensus/ethash/algorithm_go1.8_test.go')
-rw-r--r--consensus/ethash/algorithm_go1.8_test.go23
1 files changed, 7 insertions, 16 deletions
diff --git a/consensus/ethash/algorithm_go1.8_test.go b/consensus/ethash/algorithm_go1.8_test.go
index a822944a6..6648bd6a9 100644
--- a/consensus/ethash/algorithm_go1.8_test.go
+++ b/consensus/ethash/algorithm_go1.8_test.go
@@ -23,24 +23,15 @@ import "testing"
// Tests whether the dataset size calculator works correctly by cross checking the
// hard coded lookup table with the value generated by it.
func TestSizeCalculations(t *testing.T) {
- var tests []uint64
-
- // Verify all the cache sizes from the lookup table
- defer func(sizes []uint64) { cacheSizes = sizes }(cacheSizes)
- tests, cacheSizes = cacheSizes, []uint64{}
-
- for i, test := range tests {
- if size := cacheSize(uint64(i*epochLength) + 1); size != test {
- t.Errorf("cache %d: cache size mismatch: have %d, want %d", i, size, test)
+ // Verify all the cache and dataset sizes from the lookup table.
+ for epoch, want := range cacheSizes {
+ if size := calcCacheSize(epoch); size != want {
+ t.Errorf("cache %d: cache size mismatch: have %d, want %d", epoch, size, want)
}
}
- // Verify all the dataset sizes from the lookup table
- defer func(sizes []uint64) { datasetSizes = sizes }(datasetSizes)
- tests, datasetSizes = datasetSizes, []uint64{}
-
- for i, test := range tests {
- if size := datasetSize(uint64(i*epochLength) + 1); size != test {
- t.Errorf("dataset %d: dataset size mismatch: have %d, want %d", i, size, test)
+ for epoch, want := range datasetSizes {
+ if size := calcDatasetSize(epoch); size != want {
+ t.Errorf("dataset %d: dataset size mismatch: have %d, want %d", epoch, size, want)
}
}
}