From c519b04551b22ccf271e10ab46b429bf5da5a433 Mon Sep 17 00:00:00 2001 From: Alex Sharp <alexsharp@Alexs-MacBook-Pro.local> Date: Sun, 19 Sep 2021 11:41:51 +0100 Subject: [PATCH] Revert "state mphf experiment" This reverts commit b0182d7834f4f410b7ba5e59ea594e1e877bda7f. --- cmd/hack/hack.go | 93 ++++++++++-------------------------------------- go.mod | 4 +-- go.sum | 9 +++-- 3 files changed, 24 insertions(+), 82 deletions(-) diff --git a/cmd/hack/hack.go b/cmd/hack/hack.go index 07f34ed5e1..c55e31f531 100644 --- a/cmd/hack/hack.go +++ b/cmd/hack/hack.go @@ -22,7 +22,6 @@ import ( "github.com/holiman/uint256" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/mdbx" - "github.com/ledgerwatch/erigon-lib/recsplit" "github.com/ledgerwatch/erigon/consensus/ethash" "github.com/ledgerwatch/erigon/consensus/misc" "github.com/ledgerwatch/erigon/core" @@ -1141,109 +1140,53 @@ func testGetProof(chaindata string, address common.Address, rewind int, regen bo func dumpState(chaindata string) error { db := mdbx.MustOpen(chaindata) defer db.Close() - f, err := os.Create("statedump.hex") + f, err := os.Create("statedump") if err != nil { return err } defer f.Close() w := bufio.NewWriter(f) defer w.Flush() - kf, err := os.Create("keys.dat") - if err != nil { - return err - } - defer kf.Close() - kw := bufio.NewWriter(kf) - defer kw.Flush() stAccounts := 0 stStorage := 0 - valueSize := 0 - var rs *recsplit.RecSplit + var varintBuf [10]byte // Buffer for varint number if err := db.View(context.Background(), func(tx kv.Tx) error { c, err := tx.Cursor(kv.PlainState) if err != nil { return err } - var count uint64 - if count, err = c.Count(); err != nil { - return err - } - if rs, err = recsplit.NewRecSplit(recsplit.RecSplitArgs{ - KeyCount: int(count), - BucketSize: 2000, - Salt: 0, - LeafSize: 8, - TmpDir: "", - StartSeed: []uint32{1000000, 2000000, 3000000, 4000000, 5000000, 6000000, 7000000, 8000000, 9000000, 10000000, 11000000, 12000000, 13000000, 14000000}, - }); err != nil { - return err - } - var prevKey []byte k, v, e := c.First() for ; k != nil && e == nil; k, v, e = c.Next() { - fmt.Fprintf(w, "%x\n", k) - valueSize++ - valueSize += len(v) - - rs.AddKey(k) - prefixLen := 0 - for ; prefixLen < len(prevKey) && prefixLen < len(k) && prevKey[prefixLen] == k[prefixLen]; prefixLen++ { - } - - if len(k) > 28 { - stStorage++ - } else { - stAccounts++ - } - if err = kw.WriteByte(byte(len(k))); err != nil { + keyLen := binary.PutUvarint(varintBuf[:], uint64(len(k))) + if _, err = w.Write(varintBuf[:keyLen]); err != nil { return err } - if err = kw.WriteByte(byte(prefixLen)); err != nil { + if _, err = w.Write([]byte(k)); err != nil { return err } - if _, err = kw.Write(k[prefixLen:]); err != nil { + valLen := binary.PutUvarint(varintBuf[:], uint64(len(v))) + if _, err = w.Write(varintBuf[:valLen]); err != nil { return err } - prevKey = common.CopyBytes(k) - if (stStorage+stAccounts)%100000 == 0 { - log.Info("State", "record", stStorage+stAccounts) + if len(v) > 0 { + if _, err = w.Write(v); err != nil { + return err + } } - } - if e != nil { - return e - } - start := time.Now() - log.Info("Building recsplit...") - if err = rs.Build(); err != nil { - return err - } - s1, s2 := rs.Stats() - log.Info("Done", "time", time.Since(start), "s1", s1, "s2", s2) - start = time.Now() - log.Info("Testing bijection") - bitCount := (count + 63) / 64 - bits := make([]uint64, bitCount) - k, v, e = c.First() - for ; k != nil && e == nil; k, v, e = c.Next() { - idx := rs.Lookup(k) - if idx >= int(count) { - return fmt.Errorf("idx %d >= count %d", idx, count) + if len(k) > 28 { + stStorage++ + } else { + stAccounts++ } - mask := uint64(1) << (idx & 63) - if bits[idx>>6]&mask != 0 { - return fmt.Errorf("no bijection count=%d", count) + if (stStorage+stAccounts)%100000 == 0 { + fmt.Printf("State records: %d\n", stStorage+stAccounts) } - bits[idx>>6] |= mask } - if e != nil { - return e - } - log.Info("Done", "time", time.Since(start)) return e }); err != nil { return err } - fmt.Printf("stAccounts = %d, stStorage = %d, valueSize = %d\n", stAccounts, stStorage, valueSize) + fmt.Printf("stAccounts = %d, stStorage = %d\n", stAccounts, stStorage) return nil } diff --git a/go.mod b/go.mod index 9db0400c1a..060da76615 100644 --- a/go.mod +++ b/go.mod @@ -36,7 +36,7 @@ require ( github.com/json-iterator/go v1.1.11 github.com/julienschmidt/httprouter v1.3.0 github.com/kevinburke/go-bindata v3.21.0+incompatible - github.com/ledgerwatch/erigon-lib v0.0.0-20210919103541-afaed4b09586 + github.com/ledgerwatch/erigon-lib v0.0.0-20210918130108-95f4ac34fd13 github.com/ledgerwatch/log/v3 v3.3.0 github.com/ledgerwatch/secp256k1 v0.0.0-20210626115225-cd5cd00ed72d github.com/logrusorgru/aurora/v3 v3.0.0 @@ -57,7 +57,7 @@ require ( go.uber.org/atomic v1.9.0 golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - golang.org/x/sys v0.0.0-20210917161153-d61c044b1678 + golang.org/x/sys v0.0.0-20210910150752-751e447fb3d0 golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 golang.org/x/tools v0.1.2 google.golang.org/grpc v1.39.1 diff --git a/go.sum b/go.sum index 77cee52f87..f029bbc07b 100644 --- a/go.sum +++ b/go.sum @@ -492,8 +492,8 @@ github.com/kylelemons/godebug v0.0.0-20170224010052-a616ab194758 h1:0D5M2HQSGD3P github.com/kylelemons/godebug v0.0.0-20170224010052-a616ab194758/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= -github.com/ledgerwatch/erigon-lib v0.0.0-20210919103541-afaed4b09586 h1:57x4CVH9G3EvqQboxMO1U04NiX8y7rRqw4Nb5hS+8RA= -github.com/ledgerwatch/erigon-lib v0.0.0-20210919103541-afaed4b09586/go.mod h1:darGhVf++67hq/fQQ92zT+1EjE+FDxHd/OU7OKK4uWI= +github.com/ledgerwatch/erigon-lib v0.0.0-20210918130108-95f4ac34fd13 h1:Pgs2rcuUTLmEIuFAiKSKN16cz36CWLfnGLqOntvi+Hs= +github.com/ledgerwatch/erigon-lib v0.0.0-20210918130108-95f4ac34fd13/go.mod h1:kZsi9wFAOYIkegoiSj10RXOVc0EmDtUxltnNP1f1ZE0= github.com/ledgerwatch/log/v3 v3.3.0 h1:k8N/3NQLILr8CKCMyza261vLFKU7VA+nMNNb0wVyQSc= github.com/ledgerwatch/log/v3 v3.3.0/go.mod h1:J58eOHHrIYHxl7LKkRsb/0YibKwtLfauUryl5SLRGm0= github.com/ledgerwatch/secp256k1 v0.0.0-20210626115225-cd5cd00ed72d h1:/IKMrJdfRsoYNc36PXqP4xMH3vhW/8IQyBKGQbKZUno= @@ -809,7 +809,6 @@ go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9i go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= -golang.org/dl v0.0.0-20210909185531-e2a88a019121/go.mod h1:IUMfjQLJQd4UTqG1Z90tenwKoCX93Gn3MAQJMOSBsDQ= golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1022,8 +1021,8 @@ golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210917161153-d61c044b1678 h1:J27LZFQBFoihqXoegpscI10HpjZ7B5WQLLKL2FZXQKw= -golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210910150752-751e447fb3d0 h1:xrCZDmdtoloIiooiA9q0OQb9r8HejIHYoHGhGCe1pGg= +golang.org/x/sys v0.0.0-20210910150752-751e447fb3d0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -- GitLab