Projects STRLCPY dolt Commits e87a8262
🤬
  • Merge branch 'andy/chunk-source-hash-error' into andy/chunk-journal-2

  • Loading...
  • Andy Arthur committed 1 year ago
    e87a8262
    1 parent 9b5b25b1
  • ■ ■ ■ ■ ■
    docker/Dockerfile
    skipped 3 lines
    4 4  ARG DOLT_VERSION
    5 5  ARG BUILDARCH
    6 6   
     7 +RUN apt update -y && \
     8 + apt install -y \
     9 + tini
     10 + 
    7 11  ADD https://github.com/dolthub/dolt/releases/download/v${DOLT_VERSION}/dolt-linux-${BUILDARCH}.tar.gz dolt-linux-${BUILDARCH}.tar.gz
    8 12  RUN tar zxvf dolt-linux-${BUILDARCH}.tar.gz && \
    9 13   cp dolt-linux-${BUILDARCH}/bin/dolt /usr/local/bin && \
    10 14   rm -rf dolt-linux-${BUILDARCH} dolt-linux-${BUILDARCH}.tar.gz
    11 15   
    12  -ENTRYPOINT ["/usr/local/bin/dolt"]
     16 +ENTRYPOINT ["tini", "--", "/usr/local/bin/dolt"]
    13 17   
  • ■ ■ ■ ■ ■ ■
    docker/serverDockerfile
    1 1  # syntax=docker/dockerfile:1.3-labs
    2  -FROM --platform=$BUILDPLATFORM ubuntu:22.04 as builder
     2 +FROM --platform=$BUILDPLATFORM ubuntu:22.04
    3 3   
    4 4  ARG DOLT_VERSION
    5 5  ARG BUILDARCH
     6 + 
     7 +RUN apt update -y && \
     8 + apt install -y \
     9 + tini
    6 10   
    7 11  ADD https://github.com/dolthub/dolt/releases/download/v${DOLT_VERSION}/dolt-linux-${BUILDARCH}.tar.gz dolt-linux-${BUILDARCH}.tar.gz
    8 12  RUN tar zxvf dolt-linux-${BUILDARCH}.tar.gz && \
    9 13   cp dolt-linux-${BUILDARCH}/bin/dolt /usr/local/bin && \
    10 14   rm -rf dolt-linux-${BUILDARCH} dolt-linux-${BUILDARCH}.tar.gz
    11 15   
    12  - 
    13  -FROM --platform=$BUILDPLATFORM builder
    14  - 
    15 16  RUN mkdir /docker-entrypoint-initdb.d
    16 17  VOLUME /var/lib/dolt
    17 18   
    18 19  COPY docker/docker-entrypoint.sh /usr/local/bin/
    19 20  RUN chmod +x /usr/local/bin/docker-entrypoint.sh
    20  -ENTRYPOINT ["docker-entrypoint.sh"]
     21 +ENTRYPOINT ["tini", "--", "docker-entrypoint.sh"]
    21 22   
    22 23  EXPOSE 3306 33060
    23 24  WORKDIR /var/lib/dolt
    skipped 2 lines
  • ■ ■ ■ ■
    go/cmd/dolt/dolt.go
    skipped 55 lines
    56 56  )
    57 57   
    58 58  const (
    59  - Version = "0.51.4"
     59 + Version = "0.51.5"
    60 60  )
    61 61   
    62 62  var dumpDocsCommand = &commands.DumpDocsCmd{}
    skipped 386 lines
  • ■ ■ ■ ■ ■ ■
    go/go.mod
    skipped 2 lines
    3 3  require (
    4 4   cloud.google.com/go/storage v1.12.0
    5 5   github.com/BurntSushi/toml v0.3.1
    6  - github.com/HdrHistogram/hdrhistogram-go v1.0.0
     6 + github.com/HdrHistogram/hdrhistogram-go v1.1.2
    7 7   github.com/abiosoft/readline v0.0.0-20180607040430-155bce2042db
    8 8   github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883
    9 9   github.com/attic-labs/kingpin v2.2.7-0.20180312050558-442efcfac769+incompatible
    skipped 48 lines
    58 58   github.com/cenkalti/backoff/v4 v4.1.3
    59 59   github.com/cespare/xxhash v1.1.0
    60 60   github.com/creasty/defaults v1.6.0
    61  - github.com/dolthub/go-mysql-server v0.14.1-0.20221122083400-0ba736613080
     61 + github.com/dolthub/go-mysql-server v0.14.1-0.20221123030146-5f1008d63c1a
    62 62   github.com/google/flatbuffers v2.0.6+incompatible
    63 63   github.com/kch42/buzhash v0.0.0-20160816060738-9bdec3dec7c6
    64 64   github.com/mitchellh/go-ps v1.0.0
    skipped 80 lines
  • ■ ■ ■ ■ ■
    go/go.sum
    skipped 22 lines
    23 23  cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
    24 24  cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
    25 25  cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
    26  -cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
    27 26  cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
    28 27  cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
    29 28  cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
    skipped 21 lines
    51 50  github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
    52 51  github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60=
    53 52  github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
    54  -github.com/Djarvur/go-err113 v0.0.0-20200511133814-5174e21577d5/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs=
    55  -github.com/HdrHistogram/hdrhistogram-go v1.0.0 h1:jivTvI9tBw5B8wW9Qd0uoQ2qaajb29y4TPhYTgh8Lb0=
    56  -github.com/HdrHistogram/hdrhistogram-go v1.0.0/go.mod h1:YzE1EgsuAz8q9lfGdlxBZo2Ma655+PfKp2mlzcAqIFw=
     53 +github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM=
     54 +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo=
    57 55  github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
    58  -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
    59 56  github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE=
    60 57  github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
    61  -github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM=
    62 58  github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
    63 59  github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
    64  -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
    65 60  github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE=
    66 61  github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
    67 62  github.com/abiosoft/ishell v2.0.0+incompatible/go.mod h1:HQR9AqF2R3P4XXpMpI0NAzgHf/aS6+zVXRj14cVk9qg=
    skipped 2 lines
    70 65  github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c=
    71 66  github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY=
    72 67  github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk=
     68 +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
    73 69  github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b h1:slYM766cy2nI3BwyRiyQj/Ud48djTMtMebDqepE95rw=
    74 70  github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM=
    75 71  github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
    skipped 7 lines
    83 79  github.com/aliyun/aliyun-oss-go-sdk v2.2.5+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8=
    84 80  github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ=
    85 81  github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
    86  -github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y=
    87 82  github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
    88 83  github.com/apache/thrift v0.0.0-20181112125854-24918abba929/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
    89 84  github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
    skipped 1 lines
    91 86  github.com/apache/thrift v0.13.1-0.20201008052519-daf620915714 h1:Jz3KVLYY5+JO7rDiX0sAuRGtuv2vG01r17Y9nLMWNUw=
    92 87  github.com/apache/thrift v0.13.1-0.20201008052519-daf620915714/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
    93 88  github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
    94  -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
    95 89  github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
    96 90  github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
    97 91  github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A=
    skipped 25 lines
    123 117  github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
    124 118  github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
    125 119  github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
    126  -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
    127 120  github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4=
    128 121  github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
    129  -github.com/bombsimon/wsl/v3 v3.1.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc=
    130 122  github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
    131 123  github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
    132 124  github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
    skipped 17 lines
    150 142  github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
    151 143  github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
    152 144  github.com/colinmarc/hdfs/v2 v2.1.1/go.mod h1:M3x+k8UKKmxtFu++uAZ0OtDU8jR3jnaZIAc6yK4Ue0c=
    153  -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
    154  -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
    155  -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
    156 145  github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
    157  -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
    158 146  github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
    159  -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
    160 147  github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
    161  -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
    162 148  github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
    163  -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
    164 149  github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
    165 150  github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
    166 151  github.com/creasty/defaults v1.6.0 h1:ltuE9cfphUtlrBeomuu8PEyISTXnxqkBIoQfXgv7BSc=
    167 152  github.com/creasty/defaults v1.6.0/go.mod h1:iGzKe6pbEHnpMPtfDXZEr0NVxWnPTjb1bbDy08fPzYM=
    168  -github.com/daixiang0/gci v0.2.4/go.mod h1:+AV8KmHTGxxwp/pY84TLQfFKp2vuKXXJVzF3kD/hfR4=
    169 153  github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
    170 154  github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
    171 155  github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
    172  -github.com/denis-tingajkin/go-header v0.3.1/go.mod h1:sq/2IxMhaZX+RRcgHfCRx/m0M5na0fBt4/CRe7Lrji0=
    173 156  github.com/denisbrodbeck/machineid v1.0.1 h1:geKr9qtkB876mXguW2X6TU4ZynleN6ezuMSRhl4D7AQ=
    174 157  github.com/denisbrodbeck/machineid v1.0.1/go.mod h1:dJUwb7PTidGDeYyUBmXZ2GphQBbjJCrnectwCyxcUSI=
    175 158  github.com/denisenkom/go-mssqldb v0.10.0 h1:QykgLZBorFE95+gO3u9esLd0BmbvpWp0/waNNZfHBM8=
    176 159  github.com/denisenkom/go-mssqldb v0.10.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
    177 160  github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
    178  -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
    179 161  github.com/dolthub/flatbuffers v1.13.0-dh.1 h1:OWJdaPep22N52O/0xsUevxJ6Qfw1M2txCjZPOdjXybE=
    180 162  github.com/dolthub/flatbuffers v1.13.0-dh.1/go.mod h1:CorYGaDmXjHz1Z7i50PYXG1Ricn31GcA2wNOTFIQAKE=
    181 163  github.com/dolthub/fslock v0.0.3 h1:iLMpUIvJKMKm92+N1fmHVdxJP5NdyDK5bK7z7Ba2s2U=
    182 164  github.com/dolthub/fslock v0.0.3/go.mod h1:QWql+P17oAAMLnL4HGB5tiovtDuAjdDTPbuqx7bYfa0=
    183  -github.com/dolthub/go-mysql-server v0.14.1-0.20221122083400-0ba736613080 h1:gPzF+rlUZB/GQzcPsSM/oOP3ijQMOHAfNLnqqKFGIH0=
    184  -github.com/dolthub/go-mysql-server v0.14.1-0.20221122083400-0ba736613080/go.mod h1:drVceZC7lt+ZRzd0LnS7o3CURk7xGDDfjbsDfTKR7O0=
     165 +github.com/dolthub/go-mysql-server v0.14.1-0.20221123030146-5f1008d63c1a h1:JBngpMUczXHoHtrPqYU9bCpRJ/yw2nTwze5fh3YJY6M=
     166 +github.com/dolthub/go-mysql-server v0.14.1-0.20221123030146-5f1008d63c1a/go.mod h1:drVceZC7lt+ZRzd0LnS7o3CURk7xGDDfjbsDfTKR7O0=
    185 167  github.com/dolthub/ishell v0.0.0-20220112232610-14e753f0f371 h1:oyPHJlzumKta1vnOQqUnfdz+pk3EmnHS3Nd0cCT0I2g=
    186 168  github.com/dolthub/ishell v0.0.0-20220112232610-14e753f0f371/go.mod h1:dhGBqcCEfK5kuFmeO5+WOx3hqc1k3M29c1oS/R7N4ms=
    187 169  github.com/dolthub/jsonpath v0.0.0-20210609232853-d49537a30474 h1:xTrR+l5l+1Lfq0NvhiEsctylXinUMFhhsqaEcl414p8=
    skipped 16 lines
    204 186  github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
    205 187  github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
    206 188  github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
    207  -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
    208 189  github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w=
    209 190  github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
    210 191  github.com/flynn-archive/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BMXYYRWTLOJKlh+lOBt6nUQgXAfB7oVIQt5cNreqSLI=
    211 192  github.com/flynn-archive/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:rZfgFAXFS/z/lEd6LJmf9HVZ1LkgYiHx5pHhV5DR16M=
     193 +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
    212 194  github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
    213 195  github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
    214 196  github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
    215 197  github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20=
    216 198  github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
    217  -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
    218 199  github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
    219  -github.com/go-critic/go-critic v0.5.2/go.mod h1:cc0+HvdE3lFpqLecgqMaJcvWWH77sLdBp+wLGPM1Yyo=
    220 200  github.com/go-fonts/dejavu v0.1.0 h1:JSajPXURYqpr+Cu8U9bt8K+XcACIHWqWrvWCKyeFmVQ=
    221 201  github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g=
    222 202  github.com/go-fonts/latin-modern v0.2.0 h1:5/Tv1Ek/QCr20C6ZOz15vw3g7GELYL98KWr8Hgo+3vk=
    skipped 19 lines
    242 222  github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
    243 223  github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
    244 224  github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
    245  -github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8=
    246 225  github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
    247 226  github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
    248 227  github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M=
    skipped 5 lines
    254 233  github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
    255 234  github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
    256 235  github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
    257  -github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4=
    258  -github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ=
    259  -github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY=
    260  -github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw=
    261  -github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU=
    262  -github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI=
    263  -github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc=
    264  -github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8=
    265  -github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU=
    266  -github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU=
    267  -github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM=
    268 236  github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
    269 237  github.com/gocraft/dbr/v2 v2.7.2 h1:ccUxMuz6RdZvD7VPhMRRMSS/ECF3gytPhPtcavjktHk=
    270 238  github.com/gocraft/dbr/v2 v2.7.2/go.mod h1:5bCqyIXO5fYn3jEp/L06QF4K1siFdhxChMjdNu6YJrg=
    271  -github.com/gofrs/flock v0.8.0/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
    272 239  github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
    273 240  github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
    274 241  github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
    skipped 5 lines
    280 247  github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
    281 248  github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
    282 249  github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
    283  -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
    284 250  github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
    285 251  github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
    286 252  github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY=
    skipped 26 lines
    313 279  github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
    314 280  github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
    315 281  github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
    316  -github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4=
    317  -github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk=
    318  -github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0=
    319  -github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8=
    320  -github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3/go.mod h1:JXrF4TWy4tXYn62/9x8Wm/K/dm06p8tCKwFRDPZG/1o=
    321  -github.com/golangci/gocyclo v0.0.0-20180528144436-0a533e8fa43d/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU=
    322  -github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU=
    323  -github.com/golangci/golangci-lint v1.31.0/go.mod h1:aMQuNCA+NDU5+4jLL5pEuFHoue0IznKE2+/GsFvvs8A=
    324  -github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc/go.mod h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU=
    325  -github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg=
    326  -github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o=
    327  -github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA=
    328  -github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI=
    329  -github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4=
    330  -github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ=
    331 282  github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
    332 283  github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
    333 284  github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
    skipped 31 lines
    365 316  github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
    366 317  github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM=
    367 318  github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
    368  -github.com/gookit/color v1.2.5/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1KB7xg=
    369 319  github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
    370 320  github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
    371 321  github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
    372 322  github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
    373 323  github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
    374  -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
    375  -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
    376  -github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE=
    377  -github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE=
    378  -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
    379 324  github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
    380 325  github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
    381  -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
    382 326  github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
    383 327  github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
    384  -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
    385 328  github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=
    386  -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
    387 329  github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
    388 330  github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
    389 331  github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
    skipped 12 lines
    402 344  github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
    403 345  github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
    404 346  github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
    405  -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
    406 347  github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
    407 348  github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
    408 349  github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
    skipped 5 lines
    414 355  github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
    415 356  github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
    416 357  github.com/jcmturner/gofork v0.0.0-20180107083740-2aebee971930/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o=
    417  -github.com/jingyugao/rowserrcheck v0.0.0-20191204022205-72ab7603b68a/go.mod h1:xRskid8CManxVta/ALEhJha/pweKBaVG6fWgc0yH25s=
    418  -github.com/jirfag/go-printf-func-name v0.0.0-20191110105641-45db9963cdd3/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0=
    419 358  github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
    420 359  github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik=
    421 360  github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
    422 361  github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
    423 362  github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
    424 363  github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
    425  -github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
    426  -github.com/jmoiron/sqlx v1.2.1-0.20190826204134-d7d95172beb5/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
    427 364  github.com/jmoiron/sqlx v1.3.4 h1:wv+0IJZfL5z0uZoUjlpKgHkgaFSYD+r9CfrXjEXsO7w=
    428 365  github.com/jmoiron/sqlx v1.3.4/go.mod h1:2BljVx/86SuTyjE+aPYlHCTNvZrnJXghYGpNiXLBMCQ=
    429 366  github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
    skipped 13 lines
    443 380  github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
    444 381  github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
    445 382  github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
     383 +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
    446 384  github.com/kch42/buzhash v0.0.0-20160816060738-9bdec3dec7c6 h1:l6Y3mFnF46A+CeZsTrT8kVIuhayq1266oxWpDKE7hnQ=
    447 385  github.com/kch42/buzhash v0.0.0-20160816060738-9bdec3dec7c6/go.mod h1:UtDV9qK925GVmbdjR+e1unqoo+wGWNHHC6XB1Eu6wpE=
    448 386  github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
    skipped 1 lines
    450 388  github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
    451 389  github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
    452 390  github.com/klauspost/compress v1.10.5/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
    453  -github.com/klauspost/compress v1.10.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
    454 391  github.com/klauspost/compress v1.10.10 h1:a/y8CglcM7gLGYmlbP/stPE5sR3hbhFRUjCBfd/0B3I=
    455 392  github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
    456 393  github.com/klauspost/cpuid/v2 v2.0.12 h1:p9dKCg8i4gmOxtv35DvrYoWqYzQrvEVdjQ762Y0OqZE=
    skipped 9 lines
    466 403  github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
    467 404  github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
    468 405  github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
    469  -github.com/kyoh86/exportloopref v0.1.7/go.mod h1:h1rDl2Kdj97+Kwh4gdz3ujE7XHmH51Q0lUiZ1z4NLj8=
    470 406  github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
    471 407  github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
    472 408  github.com/lestrrat-go/strftime v1.0.4 h1:T1Rb9EPkAhgxKqbcMIPguPq8glqXTA1koF8n9BHElA8=
    473 409  github.com/lestrrat-go/strftime v1.0.4/go.mod h1:E1nN3pCbtMSu1yjSVeyuRFVm/U0xoR76fd03sz+Qz4g=
    474  -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
    475 410  github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
    476 411  github.com/lib/pq v1.10.0 h1:Zx5DJFEYQXio93kgXnQ09fXNiUKsqv4OUEu2UtGcB1E=
    477 412  github.com/lib/pq v1.10.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
    478 413  github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
    479 414  github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
    480  -github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
    481 415  github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
    482 416  github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
    483 417  github.com/lyft/protoc-gen-star v0.5.2/go.mod h1:9toiA3cC7z5uVbODF7kEQ91Xn7XNFkVUl+SrEe+ZORU=
    484 418  github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
    485  -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
    486  -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
    487  -github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU=
    488  -github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s=
    489 419  github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
    490 420  github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
    491  -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
    492  -github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
    493 421  github.com/mattn/go-colorable v0.1.9 h1:sqDoxXbdeALODt0DAeJCVp38ps9ZogZEAXjus69YV3U=
    494 422  github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
    495 423  github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E=
    skipped 1 lines
    497 425  github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
    498 426  github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
    499 427  github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
    500  -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
    501  -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
    502 428  github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
    503 429  github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
    504 430  github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
    505 431  github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
    506 432  github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU=
    507 433  github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
    508  -github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
    509 434  github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
    510 435  github.com/mattn/go-sqlite3 v1.14.7 h1:fxWBnXkxfM6sRiuH3bqJ4CfzZojMOLVc0UTsTglEghA=
    511 436  github.com/mattn/go-sqlite3 v1.14.7/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
    512  -github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw=
    513 437  github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
    514 438  github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
    515 439  github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
    516 440  github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
    517 441  github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
    518  -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
    519 442  github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc=
    520 443  github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg=
    521 444  github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
    skipped 7 lines
    529 452  github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
    530 453  github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
    531 454  github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
    532  -github.com/mozilla/tls-observatory v0.0.0-20200317151703-4fa42e1c2dee/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk=
    533 455  github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
    534 456  github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
    535  -github.com/nakabonne/nestif v0.3.0/go.mod h1:dI314BppzXjJ4HsCnbo7XzrJHPszZsjnk5wEBSYHI2c=
    536 457  github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg=
    537 458  github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU=
    538 459  github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k=
    skipped 1 lines
    540 461  github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
    541 462  github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
    542 463  github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
    543  -github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU=
    544 464  github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8=
    545 465  github.com/ncw/swift v1.0.52/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM=
    546 466  github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
    547  -github.com/nishanths/exhaustive v0.0.0-20200811152831-6cf413ae40e0/go.mod h1:wBEpHwM2OdmeNpdCvRPUlkEbBuaFmcK4Wv8Q7FuGW3c=
    548  -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
    549 467  github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
    550 468  github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
    551  -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
    552 469  github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
    553 470  github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
    554 471  github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
    555  -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
    556  -github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0=
    557 472  github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
    558  -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
    559  -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
    560 473  github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
    561 474  github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis=
    562 475  github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
    skipped 8 lines
    571 484  github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
    572 485  github.com/pborman/getopt v0.0.0-20180729010549-6fdd0a2c7117/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o=
    573 486  github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
    574  -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
    575 487  github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
    576  -github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw=
    577 488  github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY=
    578 489  github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
    579 490  github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
    skipped 17 lines
    597 508  github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
    598 509  github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
    599 510  github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
    600  -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
    601 511  github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
    602 512  github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
    603 513  github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
    skipped 6 lines
    610 520  github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
    611 521  github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
    612 522  github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
    613  -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
    614 523  github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
    615  -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
    616 524  github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
    617 525  github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
    618 526  github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
    skipped 1 lines
    620 528  github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
    621 529  github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
    622 530  github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
    623  -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
    624 531  github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
    625 532  github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
    626 533  github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
    627 534  github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4=
    628 535  github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
    629  -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
    630  -github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI=
    631  -github.com/quasilyte/go-ruleguard v0.2.0/go.mod h1:2RT/tf0Ce0UDj5y243iWKosQogJd8+1G3Rs2fxmlYnw=
    632  -github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0=
    633 536  github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
    634 537  github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
    635 538  github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
    636 539  github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
    637 540  github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
    638 541  github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
    639  -github.com/rogpeppe/go-internal v1.6.0/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
    640 542  github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
    641 543  github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w=
    642 544  github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk=
    643  -github.com/ryancurrah/gomodguard v1.1.0/go.mod h1:4O8tr7hBODaGE6VIhfJDHcwzh5GUccKSJBU0UMXJFVM=
    644  -github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA=
    645 545  github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
    646 546  github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
    647  -github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw=
    648 547  github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
    649  -github.com/securego/gosec/v2 v2.4.0/go.mod h1:0/Q4cjmlFDfDUj1+Fib61sc+U5IQb2w+Iv9/C3wPVko=
    650 548  github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
    651 549  github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
    652  -github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs=
    653  -github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc=
    654 550  github.com/shirou/gopsutil/v3 v3.22.1 h1:33y31Q8J32+KstqPfscvFwBlNJ6xLaBy4xqBXzlYV5w=
    655 551  github.com/shirou/gopsutil/v3 v3.22.1/go.mod h1:WapW1AOOPlHyXr+yOyw3uYx36enocrtSoSBy0L5vUHY=
    656  -github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc=
    657 552  github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ=
    658 553  github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
    659  -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk=
    660  -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ=
    661 554  github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
    662 555  github.com/silvasur/buzhash v0.0.0-20160816060738-9bdec3dec7c6 h1:31fhvQj+O9qDqMxUgQDOCQA5RV1iIFMzYPhBUyzg2p0=
    663 556  github.com/silvasur/buzhash v0.0.0-20160816060738-9bdec3dec7c6/go.mod h1:jk5gVE20+MCoyJ2TFiiMrbWPyaH4t9T5F3HwVdthB2w=
    skipped 7 lines
    671 564  github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
    672 565  github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
    673 566  github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
    674  -github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI=
    675 567  github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
    676  -github.com/sourcegraph/go-diff v0.6.0/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs=
    677 568  github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ=
    678 569  github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
    679  -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
    680 570  github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
    681 571  github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4=
    682  -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
    683 572  github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
    684  -github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
    685  -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
    686 573  github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
    687  -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
    688  -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
    689  -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
    690  -github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
    691  -github.com/ssgreg/nlreturn/v2 v2.1.0/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I=
    692 574  github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
    693 575  github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
    694 576  github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
    skipped 11 lines
    706 588  github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
    707 589  github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
    708 590  github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
    709  -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
    710  -github.com/tdakkota/asciicheck v0.0.0-20200416190851-d7f85be797a2/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM=
    711 591  github.com/tealeg/xlsx v1.0.5 h1:+f8oFmvY8Gw1iUXzPk+kz+4GpbDZPK1FhPiQRd+ypgE=
    712 592  github.com/tealeg/xlsx v1.0.5/go.mod h1:btRS8dz54TDnvKNosuAqxrM1QgN1udgk9O34bDCnORM=
    713  -github.com/tetafro/godot v0.4.8/go.mod h1:/7NLHhv08H1+8DNj0MElpAACw1ajsCuf3TKNQxA5S+0=
    714  -github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk=
    715 593  github.com/tklauser/go-sysconf v0.3.9 h1:JeUVdAOWhhxVcU6Eqr/ATFHgXk/mmiItdKeJPev3vTo=
    716 594  github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs=
    717 595  github.com/tklauser/numcpus v0.3.0 h1:ILuRUQBtssgnxw0XXIjKUC56fgnOrFoQQ/4+DeU2biQ=
    718 596  github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8=
    719 597  github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
    720  -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
    721  -github.com/tommy-muehle/go-mnd v1.3.1-0.20200224220436-e6f9a994e8fa/go.mod h1:dSUh0FtTP8VhvkL1S+gUR1OKd9ZnSaozuI6r3m6wOig=
    722  -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
    723  -github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA=
    724  -github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA=
    725 598  github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
    726 599  github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
    727  -github.com/uudashr/gocognit v1.0.1/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM=
    728  -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
    729  -github.com/valyala/fasthttp v1.15.1/go.mod h1:YOKImeEosDdBPnxc0gy7INqi3m1zK6A+xl6TwOBhHCA=
    730  -github.com/valyala/quicktemplate v1.6.2/go.mod h1:mtEJpQtUiBV0SHhMX6RtiJtqxncgrfmjcUy5T68X8TM=
    731  -github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio=
    732 600  github.com/vbauerster/mpb v3.4.0+incompatible h1:mfiiYw87ARaeRW6x5gWwYRUawxaW1tLAD8IceomUCNw=
    733 601  github.com/vbauerster/mpb v3.4.0+incompatible/go.mod h1:zAHG26FUhVKETRu+MWqYXcI70POlC6N8up9p1dID7SU=
    734 602  github.com/vbauerster/mpb/v8 v8.0.2 h1:alVQG69Jg5+Ku9Hu1dakDx50uACEHnIzS7i356NQ/Vs=
    skipped 6 lines
    741 609  github.com/xitongsys/parquet-go-source v0.0.0-20200817004010-026bad9b25d0/go.mod h1:HYhIKsdns7xz80OgkbgJYrtQY7FjHWHKH6cvN7+czGE=
    742 610  github.com/xitongsys/parquet-go-source v0.0.0-20211010230925-397910c5e371 h1:RfGiOP/lWKBeNgpXmCeandYGV4pAnZsl42kX50p1UgE=
    743 611  github.com/xitongsys/parquet-go-source v0.0.0-20211010230925-397910c5e371/go.mod h1:qLb2Itmdcp7KPa5KZKvhE9U1q5bYSOmgeOckF/H2rQA=
    744  -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
    745 612  github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
    746 613  github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
    747 614  github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
    skipped 8 lines
    756 623  github.com/zeebo/pcg v1.0.1/go.mod h1:09F0S9iiKrwn9rlI5yjLkmrug154/YRW6KnnXVDM/l4=
    757 624  github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0=
    758 625  github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA=
    759  -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
    760 626  go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
    761 627  go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU=
    762 628  go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4=
    skipped 15 lines
    778 644  go.opentelemetry.io/otel/trace v1.7.0 h1:O37Iogk1lEkMRXewVtZ1BBTVn5JEp8GrJvP92bJqC6o=
    779 645  go.opentelemetry.io/otel/trace v1.7.0/go.mod h1:fzLSB9nqR2eXzxPXb2JW9IKE+ScyXA48yyE4TNvoHqU=
    780 646  go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
    781  -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
    782 647  go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
    783 648  go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk=
    784 649  go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
    skipped 23 lines
    808 673  golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
    809 674  golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg=
    810 675  golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
     676 +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
     677 +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
    811 678  golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
     679 +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
    812 680  golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
    813 681  golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
    814 682  golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
    skipped 4 lines
    819 687  golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
    820 688  golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6 h1:QE6XYQK6naiK1EPAe1g/ILLxN5RBoH5xkJk3CqlMI/Y=
    821 689  golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
     690 +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
    822 691  golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
    823 692  golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
    824 693  golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
    skipped 41 lines
    866 735  golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
    867 736  golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
    868 737  golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
    869  -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
    870 738  golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
    871 739  golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
    872 740  golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
    skipped 11 lines
    884 752  golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
    885 753  golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
    886 754  golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
    887  -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
    888 755  golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
    889 756  golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
    890 757  golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
    skipped 43 lines
    934 801  golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    935 802  golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    936 803  golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    937  -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    938 804  golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    939 805  golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    940  -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    941 806  golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    942 807  golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    943  -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    944 808  golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    945 809  golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    946 810  golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    skipped 10 lines
    957 821  golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    958 822  golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    959 823  golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    960  -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    961 824  golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    962  -golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    963 825  golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    964 826  golang.org/x/sys v0.0.0-20200620081246-981b61492c35/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    965 827  golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    skipped 36 lines
    1002 864  golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
    1003 865  golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
    1004 866  golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
    1005  -golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
    1006 867  golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
    1007  -golang.org/x/tools v0.0.0-20190221204921-83362c3779f5/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
     868 +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
    1008 869  golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
    1009 870  golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
    1010  -golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
    1011 871  golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
    1012 872  golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
    1013  -golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
    1014 873  golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
    1015 874  golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
    1016 875  golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
    skipped 1 lines
    1018 877  golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
    1019 878  golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
    1020 879  golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
    1021  -golang.org/x/tools v0.0.0-20190719005602-e377ae9d6386/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI=
    1022 880  golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
    1023  -golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
    1024 881  golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
    1025 882  golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
    1026 883  golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
    1027 884  golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
    1028  -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
    1029  -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
    1030 885  golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
    1031 886  golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
    1032 887  golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
    skipped 3 lines
    1036 891  golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
    1037 892  golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
    1038 893  golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
    1039  -golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
    1040 894  golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
    1041 895  golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
    1042 896  golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
    skipped 3 lines
    1046 900  golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
    1047 901  golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
    1048 902  golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
    1049  -golang.org/x/tools v0.0.0-20200321224714-0d839f3cf2ed/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
    1050  -golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
    1051 903  golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
    1052  -golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
    1053  -golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
    1054 904  golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
    1055 905  golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
    1056 906  golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
    1057  -golang.org/x/tools v0.0.0-20200519015757-0d0afa43d58a/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
    1058 907  golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
    1059 908  golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
    1060  -golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
    1061  -golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
    1062  -golang.org/x/tools v0.0.0-20200701041122-1837592efa10/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
    1063  -golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
    1064 909  golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
    1065 910  golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
    1066  -golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
    1067 911  golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
    1068 912  golang.org/x/tools v0.0.0-20200828161849-5deb26317202/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
    1069 913  golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=
    skipped 8 lines
    1078 922  golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
    1079 923  golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
    1080 924  golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
     925 +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
     926 +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0=
    1081 927  gonum.org/v1/gonum v0.11.0 h1:f1IJhK4Km5tBJmaiJXtk/PkL4cdVX6J+tGiM187uT5E=
     928 +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
     929 +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
    1082 930  gonum.org/v1/plot v0.11.0 h1:z2ZkgNqW34d0oYUzd80RRlc0L9kWtenqK4kflZG1lGc=
    1083 931  gonum.org/v1/plot v0.11.0/go.mod h1:fH9YnKnDKax0u5EzHVXvhN5HJwtMFWIOLNuhgUahbCQ=
    1084 932  google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
    skipped 112 lines
    1197 1045  gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
    1198 1046  gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
    1199 1047  gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
    1200  -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
    1201 1048  gopkg.in/jcmturner/aescts.v1 v1.0.1/go.mod h1:nsR8qBOg+OucoIW+WMhB3GspUQXq9XorLnQb9XtvcOo=
    1202 1049  gopkg.in/jcmturner/dnsutils.v1 v1.0.1/go.mod h1:m3v+5svpVOhtFAP/wSz+yzh4Mc0Fg7eRhxkJMWSIz9Q=
    1203 1050  gopkg.in/jcmturner/goidentity.v3 v3.0.0/go.mod h1:oG2kH0IvSYNIu80dVAyu/yoefjq1mNfM5bm88whjWx4=
    skipped 26 lines
    1230 1077  honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
    1231 1078  honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
    1232 1079  honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
    1233  -honnef.co/go/tools v0.0.1-2020.1.5/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
    1234 1080  honnef.co/go/tools v0.1.3 h1:qTakTkI6ni6LFD5sBwwsdSO+AQqbSIxOauHTTQKZ/7o=
    1235 1081  honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las=
    1236  -mvdan.cc/gofumpt v0.0.0-20200709182408-4fd085cb6d5f/go.mod h1:9VQ397fNXEnF84t90W4r4TRCQK+pg9f8ugVfyj+S26w=
    1237  -mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc=
    1238  -mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4=
    1239  -mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f/go.mod h1:4G1h5nDURzA3bwVMZIVpwbkw+04kSxk3rAtzlimaUJw=
    1240 1082  rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
    1241 1083  rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4=
     1084 +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
    1242 1085  rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
    1243 1086  rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
    1244 1087  sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
    skipped 2 lines
  • ■ ■ ■ ■ ■ ■
    go/libraries/doltcore/doltdb/doltdb.go
    skipped 1148 lines
    1149 1149   return datas.ChunkStoreFromDatabase(ddb.db).Rebase(ctx)
    1150 1150  }
    1151 1151   
    1152  -// GC performs garbage collection on this ddb. Values passed in |uncommitedVals| will be temporarily saved during gc.
    1153  -func (ddb *DoltDB) GC(ctx context.Context, uncommitedVals ...hash.Hash) error {
     1152 +// GC performs garbage collection on this ddb. Values passed in |uncommittedVals| will be temporarily saved during gc.
     1153 +func (ddb *DoltDB) GC(ctx context.Context, uncommittedVals ...hash.Hash) error {
    1154 1154   collector, ok := ddb.db.Database.(datas.GarbageCollector)
    1155 1155   if !ok {
    1156 1156   return fmt.Errorf("this database does not support garbage collection")
    skipped 8 lines
    1165 1165   if err != nil {
    1166 1166   return err
    1167 1167   }
    1168  - newGen := hash.NewHashSet(uncommitedVals...)
     1168 + newGen := hash.NewHashSet(uncommittedVals...)
    1169 1169   oldGen := make(hash.HashSet)
    1170 1170   err = datasets.IterAll(ctx, func(keyStr string, h hash.Hash) error {
    1171 1171   var isOldGen bool
    skipped 153 lines
  • ■ ■ ■ ■
    go/libraries/doltcore/env/environment.go
    skipped 1128 lines
    1129 1129   return absPath, nil
    1130 1130  }
    1131 1131   
    1132  -// GetGCKeepers returns the hashes of all the objects in the environment provided that should be perserved during GC.
     1132 +// GetGCKeepers returns the hashes of all the objects in the environment provided that should be preserved during GC.
    1133 1133  // TODO: this should be unnecessary since we now store the working set in a noms dataset, remove it
    1134 1134  func GetGCKeepers(ctx context.Context, env *DoltEnv) ([]hash.Hash, error) {
    1135 1135   workingRoot, err := env.WorkingRoot(ctx)
    skipped 158 lines
  • ■ ■ ■ ■ ■
    go/libraries/doltcore/migrate/transform.go
    skipped 106 lines
    107 107   return migrateInitCommit(ctx, oldCm, new, prog)
    108 108   }
    109 109   
    110  - prog.Log(ctx, "migrating commit %s", oldHash.String())
     110 + hs := oldHash.String()
     111 + prog.Log(ctx, "migrating commit %s", hs)
    111 112   
    112 113   oldRoot, err := oldCm.GetRootValue(ctx)
    113 114   if err != nil {
    skipped 588 lines
  • ■ ■ ■ ■
    go/libraries/doltcore/remotesrv/grpc.go
    skipped 387 lines
    388 388   err = cs.Rebase(ctx)
    389 389   
    390 390   if err != nil {
    391  - logger.Printf("error occurred during processing of Rebace rpc of %s details: %v", repoPath, err)
     391 + logger.Printf("error occurred during processing of Rebase rpc of %s details: %v", repoPath, err)
    392 392   return nil, status.Errorf(codes.Internal, "failed to rebase: %v", err)
    393 393   }
    394 394   
    skipped 256 lines
  • ■ ■ ■ ■
    go/libraries/doltcore/remotestorage/chunk_store.go
    skipped 1135 lines
    1136 1136   return concurrentExec(work[0:largeCutoff+1], dcs.concurrency.ConcurrentLargeFetches)
    1137 1137   })
    1138 1138   eg.Go(func() error {
    1139  - return concurrentExec(work[largeCutoff+1:len(work)], dcs.concurrency.ConcurrentSmallFetches)
     1139 + return concurrentExec(work[largeCutoff+1:], dcs.concurrency.ConcurrentSmallFetches)
    1140 1140   })
    1141 1141   
    1142 1142   defer func() {
    skipped 259 lines
  • ■ ■ ■ ■ ■ ■
    go/libraries/doltcore/schema/schema.go
    skipped 147 lines
    148 148   if !colCollIsEqual {
    149 149   return false
    150 150   }
     151 + 
     152 + // Pks and Non-pks are in the same order as the key tuple and value tuple fields
     153 + if !ColCollsAreEqual(sch1.GetPKCols(), sch2.GetPKCols()) {
     154 + return false
     155 + }
     156 + 
     157 + if !ColCollsAreEqual(sch1.GetNonPKCols(), sch2.GetNonPKCols()) {
     158 + return false
     159 + }
     160 + 
    151 161   return sch1.Indexes().Equals(sch2.Indexes())
    152 162  }
    153 163   
    skipped 181 lines
  • ■ ■ ■ ■ ■ ■
    go/libraries/doltcore/sqle/dprocedures/dolt_gc.go
     1 +// Copyright 2022 Dolthub, Inc.
     2 +//
     3 +// Licensed under the Apache License, Version 2.0 (the "License");
     4 +// you may not use this file except in compliance with the License.
     5 +// You may obtain a copy of the License at
     6 +//
     7 +// http://www.apache.org/licenses/LICENSE-2.0
     8 +//
     9 +// Unless required by applicable law or agreed to in writing, software
     10 +// distributed under the License is distributed on an "AS IS" BASIS,
     11 +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 +// See the License for the specific language governing permissions and
     13 +// limitations under the License.
     14 + 
     15 +package dprocedures
     16 + 
     17 +import (
     18 + "fmt"
     19 + 
     20 + "github.com/dolthub/go-mysql-server/sql"
     21 + 
     22 + "github.com/dolthub/dolt/go/libraries/doltcore/branch_control"
     23 + "github.com/dolthub/dolt/go/libraries/doltcore/sqle/dsess"
     24 +)
     25 + 
     26 +const (
     27 + cmdFailure = 0
     28 + cmdSuccess = 1
     29 +)
     30 + 
     31 +// doltGC is the stored procedure to run online garbage collection on a database.
     32 +func doltGC(ctx *sql.Context, args ...string) (sql.RowIter, error) {
     33 + res, err := doDoltGC(ctx, args)
     34 + if err != nil {
     35 + return nil, err
     36 + }
     37 + return rowToIter(int64(res)), nil
     38 +}
     39 + 
     40 +func doDoltGC(ctx *sql.Context, args []string) (int, error) {
     41 + dbName := ctx.GetCurrentDatabase()
     42 + 
     43 + if len(dbName) == 0 {
     44 + return cmdFailure, fmt.Errorf("Empty database name.")
     45 + }
     46 + if err := branch_control.CheckAccess(ctx, branch_control.Permissions_Write); err != nil {
     47 + return cmdFailure, err
     48 + }
     49 + 
     50 + dSess := dsess.DSessFromSess(ctx.Session)
     51 + ddb, ok := dSess.GetDoltDB(ctx, dbName)
     52 + if !ok {
     53 + return cmdFailure, fmt.Errorf("Could not load database %s", dbName)
     54 + }
     55 + 
     56 + err := ddb.ShallowGC(ctx)
     57 + if err != nil {
     58 + return cmdFailure, err
     59 + }
     60 + 
     61 + return cmdSuccess, nil
     62 +}
     63 + 
  • ■ ■ ■ ■ ■ ■
    go/libraries/doltcore/sqle/dprocedures/init.go
    skipped 25 lines
    26 26   {Name: "dolt_commit", Schema: stringSchema("hash"), Function: doltCommit},
    27 27   {Name: "dolt_conflicts_resolve", Schema: int64Schema("status"), Function: doltConflictsResolve},
    28 28   {Name: "dolt_fetch", Schema: int64Schema("success"), Function: doltFetch},
     29 + {Name: "dolt_gc", Schema: int64Schema("success"), Function: doltGC},
    29 30   {Name: "dolt_merge", Schema: int64Schema("fast_forward", "conflicts"), Function: doltMerge},
    30 31   {Name: "dolt_pull", Schema: int64Schema("fast_forward", "conflicts"), Function: doltPull},
    31 32   {Name: "dolt_push", Schema: int64Schema("success"), Function: doltPush},
    skipped 11 lines
    43 44   {Name: "dclone", Schema: int64Schema("status"), Function: doltClone},
    44 45   {Name: "dcommit", Schema: stringSchema("hash"), Function: doltCommit},
    45 46   {Name: "dfetch", Schema: int64Schema("success"), Function: doltFetch},
     47 + {Name: "dgc", Schema: int64Schema("status"), Function: doltGC},
    46 48   {Name: "dmerge", Schema: int64Schema("fast_forward", "conflicts"), Function: doltMerge},
    47 49   {Name: "dpull", Schema: int64Schema("fast_forward", "conflicts"), Function: doltPull},
    48 50   {Name: "dpush", Schema: int64Schema("success"), Function: doltPush},
    skipped 42 lines
  • ■ ■ ■ ■ ■
    go/libraries/doltcore/sqle/enginetest/dolt_engine_test.go
    skipped 45 lines
    46 46  // SkipPreparedsCount is used by the "ci-check-repo CI workflow
    47 47  // as a reminder to consider prepareds when adding a new
    48 48  // enginetest suite.
    49  -const SkipPreparedsCount = 84
     49 +const SkipPreparedsCount = 85
    50 50   
    51 51  const skipPreparedFlag = "DOLT_SKIP_PREPARED_ENGINETESTS"
    52 52   
    skipped 916 lines
    969 969  func TestDoltReset(t *testing.T) {
    970 970   for _, script := range DoltReset {
    971 971   // dolt versioning conflicts with reset harness -- use new harness every time
     972 + enginetest.TestScript(t, newDoltHarness(t), script)
     973 + }
     974 +}
     975 + 
     976 +func TestDoltGC(t *testing.T) {
     977 + // TODO: This does not work because `db.chunkStore().(nbs.TableFileStore)`
     978 + // returns not ok in PruneTableFiles
     979 + t.Skip()
     980 + for _, script := range DoltGC {
    972 981   enginetest.TestScript(t, newDoltHarness(t), script)
    973 982   }
    974 983  }
    skipped 724 lines
  • ■ ■ ■ ■ ■ ■
    go/libraries/doltcore/sqle/enginetest/dolt_queries.go
    skipped 1471 lines
    1472 1472   },
    1473 1473   },
    1474 1474   },
     1475 + {
     1476 + Name: "dolt_history table filter correctness",
     1477 + SetUpScript: []string{
     1478 + "create table xy (x int primary key, y int);",
     1479 + "call dolt_add('.');",
     1480 + "call dolt_commit('-m', 'creating table');",
     1481 + "insert into xy values (0, 1);",
     1482 + "call dolt_commit('-am', 'add data');",
     1483 + "insert into xy values (2, 3);",
     1484 + "call dolt_commit('-am', 'add data');",
     1485 + "insert into xy values (4, 5);",
     1486 + "call dolt_commit('-am', 'add data');",
     1487 + },
     1488 + Assertions: []queries.ScriptTestAssertion{
     1489 + {
     1490 + Query: "select count(*) from dolt_history_xy where commit_hash = (select dolt_log.commit_hash from dolt_log limit 1 offset 1)",
     1491 + Expected: []sql.Row{
     1492 + {2},
     1493 + },
     1494 + },
     1495 + },
     1496 + },
    1475 1497  }
    1476 1498   
    1477 1499  // BrokenHistorySystemTableScriptTests contains tests that work for non-prepared, but don't work
    skipped 2409 lines
    3887 3909   {
    3888 3910   Query: "CALL DOLT_MERGE('--abort')",
    3889 3911   ExpectedErrStr: "fatal: There is no merge to abort",
     3912 + },
     3913 + },
     3914 + },
     3915 +}
     3916 + 
     3917 +func gcSetup() []string {
     3918 + queries := []string{
     3919 + "create table t (pk int primary key);",
     3920 + "call dolt_commit('-Am', 'create table');",
     3921 + }
     3922 + for i := 0; i < 250; i++ {
     3923 + queries = append(
     3924 + queries,
     3925 + fmt.Sprintf("INSERT INTO t VALUES (%d);", i),
     3926 + fmt.Sprintf("CALL DOLT_COMMIT('-am', 'added pk %d')", i),
     3927 + )
     3928 + }
     3929 + return queries
     3930 +}
     3931 + 
     3932 +var DoltGC = []queries.ScriptTest{
     3933 + {
     3934 + Name: "base case: shallow gc",
     3935 + SetUpScript: gcSetup(),
     3936 + Assertions: []queries.ScriptTestAssertion{
     3937 + {
     3938 + Query: "CALL DOLT_GC();",
     3939 + Expected: []sql.Row{{0}},
    3890 3940   },
    3891 3941   },
    3892 3942   },
    skipped 4541 lines
  • ■ ■ ■ ■ ■
    go/libraries/doltcore/sqle/history_table.go
    skipped 89 lines
    90 90  // NewHistoryTable creates a history table
    91 91  func NewHistoryTable(table *DoltTable, ddb *doltdb.DoltDB, head *doltdb.Commit) sql.Table {
    92 92   cmItr := doltdb.CommitItrForRoots(ddb, head)
     93 + 
    93 94   h := &HistoryTable{
    94 95   doltTable: table,
    95 96   cmItr: cmItr,
    skipped 163 lines
    259 260   return names
    260 261  }
    261 262   
     263 +func (ht *HistoryTable) ProjectedTags() []uint64 {
     264 + if len(ht.projectedCols) > 0 {
     265 + return ht.projectedCols
     266 + }
     267 + return append(ht.doltTable.ProjectedTags(), schema.HistoryCommitHashTag, schema.HistoryCommitterTag, schema.HistoryCommitDateTag)
     268 +}
     269 + 
    262 270  // Name returns the name of the history table
    263 271  func (ht *HistoryTable) Name() string {
    264 272   return doltdb.DoltHistoryTablePrefix + ht.doltTable.Name()
    skipped 55 lines
    320 328  // PartitionRows takes a partition and returns a row iterator for that partition
    321 329  func (ht *HistoryTable) PartitionRows(ctx *sql.Context, part sql.Partition) (sql.RowIter, error) {
    322 330   cp := part.(*commitPartition)
    323  - 
    324  - return newRowItrForTableAtCommit(ctx, ht.Name(), ht.doltTable, cp.h, cp.cm, ht.indexLookup, ht.projectedCols)
     331 + return newRowItrForTableAtCommit(ctx, ht.Name(), ht.doltTable, cp.h, cp.cm, ht.indexLookup, ht.ProjectedTags())
    325 332  }
    326 333   
    327 334  // commitPartition is a single commit
    skipped 170 lines
  • ■ ■ ■ ■
    go/libraries/doltcore/sqle/sqlinsert_test.go
    skipped 315 lines
    316 316   SelectQuery: "select id, first_name, last_name, is_married, age, rating from people where id = 7 ORDER BY id",
    317 317   ExpectedRows: ToSqlRows(
    318 318   CompressSchema(SubsetSchema(PeopleTestSchema, "id", "first_name", "last_name", "is_married", "age", "rating")),
    319  - NewResultSetRow(types.Int(7), types.String("Maggie"), types.String("Simpson"), types.Int(0), types.Int(1), types.Float(5.1)),
     319 + NewResultSetRow(types.Int(7), types.String("Maggie"), types.String("Simpson"), types.Int(1), types.Int(1), types.Float(5.1)),
    320 320   ),
    321 321   ExpectedSchema: CompressSchema(SubsetSchema(PeopleTestSchema, "id", "first_name", "last_name", "is_married", "age", "rating")),
    322 322   },
    skipped 133 lines
  • ■ ■ ■ ■ ■ ■
    go/libraries/doltcore/sqle/tables.go
    skipped 974 lines
    975 975   return names
    976 976  }
    977 977   
     978 +func (t *DoltTable) ProjectedTags() []uint64 {
     979 + if len(t.projectedCols) > 0 {
     980 + return t.projectedCols
     981 + }
     982 + return t.sch.GetAllCols().Tags
     983 +}
     984 + 
    978 985  // WithProjections implements sql.ProjectedTable
    979 986  func (t *DoltTable) WithProjections(colNames []string) sql.Table {
    980 987   nt := *t
    skipped 1755 lines
  • ■ ■ ■ ■ ■ ■
    go/store/datas/pull/pull_test.go
    skipped 546 lines
    547 547   src := &TestTableFileStore{
    548 548   root: hash.Of(hashBytes[:]),
    549 549   tableFiles: map[string]*TestTableFile{
    550  - "file1": &TestTableFile{
     550 + "file1": {
    551 551   fileID: "file1",
    552 552   numChunks: 1,
    553 553   data: []byte("Call me Ishmael. Some years ago—never mind how long precisely—having little or no money in my purse, "),
    554 554   },
    555  - "file2": &TestTableFile{
     555 + "file2": {
    556 556   fileID: "file2",
    557 557   numChunks: 2,
    558 558   data: []byte("and nothing particular to interest me on shore, I thought I would sail about a little and see the watery "),
    559 559   },
    560  - "file3": &TestTableFile{
     560 + "file3": {
    561 561   fileID: "file3",
    562 562   numChunks: 3,
    563 563   data: []byte("part of the world. It is a way I have of driving off the spleen and regulating the "),
    564 564   },
    565  - "file4": &TestTableFile{
     565 + "file4": {
    566 566   fileID: "file4",
    567 567   numChunks: 4,
    568 568   data: []byte("circulation. Whenever I find myself growing grim about the mouth; whenever it is a damp, drizzly "),
    569 569   },
    570  - "file5": &TestTableFile{
     570 + "file5": {
    571 571   fileID: "file5",
    572 572   numChunks: 5,
    573 573   data: []byte("November in my soul; whenever I find myself involuntarily pausing before coffin warehouses, and bringing "),
    skipped 73 lines
  • ■ ■ ■ ■ ■ ■
    go/store/nbs/aws_chunk_source.go
    skipped 26 lines
    27 27   "time"
    28 28  )
    29 29   
     30 +func tableExistsInChunkSource(ctx context.Context, ddb *ddbTableStore, s3 *s3ObjectReader, al awsLimits, name addr, chunkCount uint32, q MemoryQuotaProvider, stats *Stats) (bool, error) {
     31 + idxSz := int(indexSize(chunkCount) + footerSize)
     32 + offsetSz := int((chunkCount - (chunkCount / 2)) * offsetSize)
     33 + buf, err := q.AcquireQuotaBytes(ctx, uint64(idxSz+offsetSz))
     34 + if err != nil {
     35 + return false, err
     36 + }
     37 + p := buf[:idxSz]
     38 + 
     39 + if al.tableMayBeInDynamo(chunkCount) {
     40 + data, err := ddb.ReadTable(ctx, name, nil)
     41 + if err != nil {
     42 + return false, err
     43 + }
     44 + if data == nil {
     45 + return false, nil
     46 + }
     47 + if len(p) > len(data) {
     48 + return false, errors.New("not enough data for chunk count")
     49 + }
     50 + return true, nil
     51 + }
     52 + 
     53 + n, _, err := s3.ReadFromEnd(ctx, name, p, stats)
     54 + if err != nil {
     55 + return false, err
     56 + }
     57 + if len(p) != n {
     58 + return false, errors.New("failed to read all data")
     59 + }
     60 + return true, nil
     61 +}
     62 + 
    30 63  func newAWSChunkSource(ctx context.Context, ddb *ddbTableStore, s3 *s3ObjectReader, al awsLimits, name addr, chunkCount uint32, q MemoryQuotaProvider, stats *Stats) (cs chunkSource, err error) {
    31 64   var tra tableReaderAt
    32 65   index, err := loadTableIndex(ctx, stats, chunkCount, q, func(p []byte) error {
    skipped 59 lines
  • ■ ■ ■ ■ ■ ■
    go/store/nbs/aws_table_persister.go
    skipped 92 lines
    93 93   )
    94 94  }
    95 95   
     96 +func (s3p awsTablePersister) Exists(ctx context.Context, name addr, chunkCount uint32, stats *Stats) (bool, error) {
     97 + return tableExistsInChunkSource(
     98 + ctx,
     99 + s3p.ddb,
     100 + &s3ObjectReader{s3: s3p.s3, bucket: s3p.bucket, readRl: s3p.rl, ns: s3p.ns},
     101 + s3p.limits,
     102 + name,
     103 + chunkCount,
     104 + s3p.q,
     105 + stats,
     106 + )
     107 +}
     108 + 
    96 109  type s3UploadedPart struct {
    97 110   idx int64
    98 111   etag string
    skipped 382 lines
    481 494   break
    482 495   }
    483 496   if sws.dataLen <= maxPartSize {
    484  - h, err := sws.source.hash()
    485  - 
    486  - if err != nil {
    487  - return nil, nil, nil, err
    488  - }
    489  - 
     497 + h := sws.source.hash()
    490 498   copies = append(copies, copyPart{h.String(), 0, int64(sws.dataLen)})
    491 499   continue
    492 500   }
    skipped 3 lines
    496 504   
    497 505   var srcStart int64
    498 506   for _, length := range lens {
    499  - h, err := sws.source.hash()
    500  - 
    501  - if err != nil {
    502  - return nil, nil, nil, err
    503  - }
    504  - 
     507 + h := sws.source.hash()
    505 508   copies = append(copies, copyPart{h.String(), srcStart, length})
    506 509   srcStart += length
    507 510   }
    skipped 64 lines
    572 575   return
    573 576  }
    574 577   
    575  -func (s3p awsTablePersister) PruneTableFiles(ctx context.Context, contents manifestContents) error {
     578 +func (s3p awsTablePersister) PruneTableFiles(ctx context.Context, contents manifestContents, t time.Time) error {
    576 579   return chunks.ErrUnsupportedOperation
    577 580  }
    578 581   
    skipped 4 lines
  • ■ ■ ■ ■ ■ ■
    go/store/nbs/aws_table_persister_test.go
    skipped 59 lines
    60 60   require.NoError(t, err)
    61 61   
    62 62   if assert.True(mustUint32(src.count()) > 0) {
    63  - if r, err := s3svc.readerForTableWithNamespace(ctx, ns, mustAddr(src.hash())); assert.NotNil(r) && assert.NoError(err) {
     63 + if r, err := s3svc.readerForTableWithNamespace(ctx, ns, src.hash()); assert.NotNil(r) && assert.NoError(err) {
    64 64   assertChunksInReader(testChunks, r, assert)
    65 65   }
    66 66   }
    skipped 9 lines
    76 76   src, err := s3p.Persist(context.Background(), mt, nil, &Stats{})
    77 77   require.NoError(t, err)
    78 78   if assert.True(mustUint32(src.count()) > 0) {
    79  - if r, err := s3svc.readerForTableWithNamespace(ctx, ns, mustAddr(src.hash())); assert.NotNil(r) && assert.NoError(err) {
     79 + if r, err := s3svc.readerForTableWithNamespace(ctx, ns, src.hash()); assert.NotNil(r) && assert.NoError(err) {
    80 80   assertChunksInReader(testChunks, r, assert)
    81 81   }
    82 82   }
    skipped 18 lines
    101 101   require.NoError(t, err)
    102 102   assert.True(mustUint32(src.count()) == 0)
    103 103   
    104  - _, present := s3svc.data[mustAddr(src.hash()).String()]
     104 + _, present := s3svc.data[src.hash().String()]
    105 105   assert.False(present)
    106 106   })
    107 107   
    skipped 30 lines
    138 138   src, err := s3p.Persist(context.Background(), mt, nil, &Stats{})
    139 139   require.NoError(t, err)
    140 140   if assert.True(mustUint32(src.count()) > 0) {
    141  - if r, err := ddb.readerForTable(ctx, mustAddr(src.hash())); assert.NotNil(r) && assert.NoError(err) {
     141 + if r, err := ddb.readerForTable(ctx, src.hash()); assert.NotNil(r) && assert.NoError(err) {
    142 142   assertChunksInReader(testChunks, r, assert)
    143 143   }
    144 144   }
    skipped 17 lines
    162 162   src, err := s3p.Open(context.Background(), name, uint32(len(testChunks)), &Stats{})
    163 163   require.NoError(t, err)
    164 164   if assert.True(mustUint32(src.count()) > 0) {
    165  - if r, err := ddb.readerForTable(ctx, mustAddr(src.hash())); assert.NotNil(r) && assert.NoError(err) {
     165 + if r, err := ddb.readerForTable(ctx, src.hash()); assert.NotNil(r) && assert.NoError(err) {
    166 166   assertChunksInReader(testChunks, r, assert)
    167 167   }
    168 168   if data, present := tc.Get(name); assert.True(present) {
    skipped 14 lines
    183 183   src, err := s3p.Persist(context.Background(), mt, nil, &Stats{})
    184 184   require.NoError(t, err)
    185 185   if assert.True(mustUint32(src.count()) > 0) {
    186  - if r, err := ddb.readerForTable(ctx, mustAddr(src.hash())); assert.Nil(r) && assert.NoError(err) {
    187  - if r, err := s3svc.readerForTable(ctx, mustAddr(src.hash())); assert.NotNil(r) && assert.NoError(err) {
     186 + if r, err := ddb.readerForTable(ctx, src.hash()); assert.Nil(r) && assert.NoError(err) {
     187 + if r, err := s3svc.readerForTable(ctx, src.hash()); assert.NotNil(r) && assert.NoError(err) {
    188 188   assertChunksInReader(testChunks, r, assert)
    189 189   }
    190 190   }
    skipped 12 lines
    203 203   src, err := s3p.Persist(context.Background(), mt, nil, &Stats{})
    204 204   require.NoError(t, err)
    205 205   if assert.True(mustUint32(src.count()) > 0) {
    206  - if r, err := ddb.readerForTable(ctx, mustAddr(src.hash())); assert.Nil(r) && assert.NoError(err) {
    207  - if r, err := s3svc.readerForTable(ctx, mustAddr(src.hash())); assert.NotNil(r) && assert.NoError(err) {
     206 + if r, err := ddb.readerForTable(ctx, src.hash()); assert.Nil(r) && assert.NoError(err) {
     207 + if r, err := s3svc.readerForTable(ctx, src.hash()); assert.NotNil(r) && assert.NoError(err) {
    208 208   assertChunksInReader(testChunks, r, assert)
    209 209   }
    210 210   }
    skipped 71 lines
    282 282   perTableDataSize[c.name] = totalSize
    283 283   }
    284 284   assert.Len(perTableDataSize, 2)
    285  - assert.Contains(perTableDataSize, mustAddr(justRight.hash()).String())
    286  - assert.Contains(perTableDataSize, mustAddr(tooBig.hash()).String())
     285 + assert.Contains(perTableDataSize, justRight.hash().String())
     286 + assert.Contains(perTableDataSize, tooBig.hash().String())
    287 287   ti, err := justRight.index()
    288 288   require.NoError(t, err)
    289  - assert.EqualValues(calcChunkDataLen(ti), perTableDataSize[mustAddr(justRight.hash()).String()])
     289 + assert.EqualValues(calcChunkDataLen(ti), perTableDataSize[justRight.hash().String()])
    290 290   ti, err = tooBig.index()
    291 291   require.NoError(t, err)
    292  - assert.EqualValues(calcChunkDataLen(ti), perTableDataSize[mustAddr(tooBig.hash()).String()])
     292 + assert.EqualValues(calcChunkDataLen(ti), perTableDataSize[tooBig.hash().String()])
    293 293   
    294 294   assert.Len(manuals, 1)
    295 295   ti, err = tooSmall.index()
    skipped 78 lines
    374 374   require.NoError(t, err)
    375 375   
    376 376   if assert.True(mustUint32(src.count()) > 0) {
    377  - if r, err := s3svc.readerForTable(ctx, mustAddr(src.hash())); assert.NotNil(r) && assert.NoError(err) {
     377 + if r, err := s3svc.readerForTable(ctx, src.hash()); assert.NotNil(r) && assert.NoError(err) {
    378 378   assertChunksInReader(chunks, r, assert)
    379 379   }
    380 380   }
    skipped 9 lines
    390 390   require.NoError(t, err)
    391 391   
    392 392   if assert.True(mustUint32(src.count()) > 0) {
    393  - if r, err := s3svc.readerForTable(ctx, mustAddr(src.hash())); assert.NotNil(r) && assert.NoError(err) {
     393 + if r, err := s3svc.readerForTable(ctx, src.hash()); assert.NotNil(r) && assert.NoError(err) {
    394 394   assertChunksInReader(smallChunks, r, assert)
    395 395   }
    396 396   }
    skipped 29 lines
    426 426   require.NoError(t, err)
    427 427   
    428 428   if assert.True(mustUint32(src.count()) > 0) {
    429  - if r, err := s3svc.readerForTable(ctx, mustAddr(src.hash())); assert.NotNil(r) && assert.NoError(err) {
     429 + if r, err := s3svc.readerForTable(ctx, src.hash()); assert.NotNil(r) && assert.NoError(err) {
    430 430   assertChunksInReader(bigUns1, r, assert)
    431 431   assertChunksInReader(bigUns2, r, assert)
    432 432   }
    skipped 29 lines
    462 462   require.NoError(t, err)
    463 463   
    464 464   if assert.True(mustUint32(src.count()) > 0) {
    465  - if r, err := s3svc.readerForTable(ctx, mustAddr(src.hash())); assert.NotNil(r) && assert.NoError(err) {
     465 + if r, err := s3svc.readerForTable(ctx, src.hash()); assert.NotNil(r) && assert.NoError(err) {
    466 466   assertChunksInReader(bigUns1, r, assert)
    467 467   assertChunksInReader(medChunks, r, assert)
    468 468   }
    skipped 43 lines
    512 512   require.NoError(t, err)
    513 513   
    514 514   if assert.True(mustUint32(src.count()) > 0) {
    515  - if r, err := s3svc.readerForTable(ctx, mustAddr(src.hash())); assert.NotNil(r) && assert.NoError(err) {
     515 + if r, err := s3svc.readerForTable(ctx, src.hash()); assert.NotNil(r) && assert.NoError(err) {
    516 516   assertChunksInReader(smallChunks, r, assert)
    517 517   assertChunksInReader(bigUns1, r, assert)
    518 518   assertChunksInReader(medChunks, r, assert)
    skipped 27 lines
  • ■ ■ ■ ■
    go/store/nbs/block_store_test.go
    skipped 489 lines
    490 490   }
    491 491   conjoined, err := p.ConjoinAll(context.Background(), srcs, stats)
    492 492   require.NoError(t, err)
    493  - cannedSpecs := []tableSpec{{mustAddr(conjoined.hash()), mustUint32(conjoined.count())}}
     493 + cannedSpecs := []tableSpec{{conjoined.hash(), mustUint32(conjoined.count())}}
    494 494   return cannedConjoin{true, append(cannedSpecs, keepers...)}
    495 495   }
    496 496   
    skipped 128 lines
  • ■ ■ ■ ■ ■ ■
    go/store/nbs/bs_persister.go
    skipped 16 lines
    17 17  import (
    18 18   "context"
    19 19   "io"
     20 + "time"
    20 21   
    21 22   "github.com/dolthub/dolt/go/store/blobstore"
    22 23   "github.com/dolthub/dolt/go/store/chunks"
    skipped 36 lines
    59 60   
    60 61  // Open a table named |name|, containing |chunkCount| chunks.
    61 62  func (bsp *blobstorePersister) Open(ctx context.Context, name addr, chunkCount uint32, stats *Stats) (chunkSource, error) {
    62  - return newBSChunkSource(ctx, bsp.bs, name, chunkCount, bsp.blockSize, bsp.q, stats)
     63 + return newBSChunkSource(ctx, bsp.bs, name, chunkCount, bsp.q, stats)
     64 +}
     65 + 
     66 +func (bsp *blobstorePersister) Exists(ctx context.Context, name addr, chunkCount uint32, stats *Stats) (bool, error) {
     67 + return bsp.bs.Exists(ctx, name.String())
    63 68  }
    64 69   
    65 70  type bsTableReaderAt struct {
    skipped 29 lines
    95 100   return totalRead, nil
    96 101  }
    97 102   
    98  -func newBSChunkSource(ctx context.Context, bs blobstore.Blobstore, name addr, chunkCount uint32, blockSize uint64, q MemoryQuotaProvider, stats *Stats) (cs chunkSource, err error) {
     103 +func newBSChunkSource(ctx context.Context, bs blobstore.Blobstore, name addr, chunkCount uint32, q MemoryQuotaProvider, stats *Stats) (cs chunkSource, err error) {
    99 104   
    100 105   index, err := loadTableIndex(ctx, stats, chunkCount, q, func(p []byte) error {
    101 106   rc, _, err := bs.Get(ctx, name.String(), blobstore.NewBlobRange(-int64(len(p)), 0))
    skipped 21 lines
    123 128   return &chunkSourceAdapter{tr, name}, nil
    124 129  }
    125 130   
    126  -func (bsp *blobstorePersister) PruneTableFiles(ctx context.Context, contents manifestContents) error {
     131 +func (bsp *blobstorePersister) PruneTableFiles(ctx context.Context, contents manifestContents, t time.Time) error {
    127 132   return chunks.ErrUnsupportedOperation
    128 133  }
    129 134   
    skipped 4 lines
  • ■ ■ ■ ■ ■ ■
    go/store/nbs/chunk_journal.go
    skipped 20 lines
    21 21   "os"
    22 22   "path/filepath"
    23 23   "sort"
     24 + "time"
    24 25   
    25 26   "golang.org/x/sync/errgroup"
    26 27   
    skipped 72 lines
    99 100   return nil, fmt.Errorf("missing manifest while initializing chunk journal")
    100 101   }
    101 102   
    102  - a, err := cs.hash()
    103  - if err != nil {
    104  - return nil, err
    105  - }
    106  - sources := map[addr]chunkSource{a: cs}
     103 + sources := map[addr]chunkSource{cs.hash(): cs}
    107 104   
    108 105   // add |cs| to in-memory specs, but not to persisted specs
    109 106   cnt, _ := cs.count()
    110  - contents.specs = append(contents.specs, tableSpec{name: a, chunkCount: cnt})
     107 + contents.specs = append(contents.specs, tableSpec{name: cs.hash(), chunkCount: cnt})
    111 108   
    112 109   return &chunkJournal{
    113 110   journal: wr,
    skipped 92 lines
    206 203   return src, nil
    207 204  }
    208 205   
     206 +// Exists implements tablePersister.
     207 +func (j *chunkJournal) Exists(ctx context.Context, name addr, chunkCount uint32, stats *Stats) (bool, error) {
     208 + panic("unimplemented")
     209 +}
     210 + 
    209 211  // PruneTableFiles implements tablePersister.
    210  -func (j *chunkJournal) PruneTableFiles(ctx context.Context, contents manifestContents) error {
     212 +func (j *chunkJournal) PruneTableFiles(ctx context.Context, contents manifestContents, mtime time.Time) error {
    211 213   panic("unimplemented")
    212 214  }
    213 215   
    skipped 180 lines
    394 396   return s.compressedSz, nil
    395 397  }
    396 398   
    397  -func (s journalChunkSource) hash() (addr, error) {
    398  - return s.address, nil
     399 +func (s journalChunkSource) hash() addr {
     400 + return s.address
    399 401  }
    400 402   
    401 403  // reader implements chunkSource.
    skipped 32 lines
  • ■ ■ ■ ■ ■ ■
    go/store/nbs/chunk_source_adapter.go
    skipped 20 lines
    21 21   h addr
    22 22  }
    23 23   
    24  -func (csa chunkSourceAdapter) hash() (addr, error) {
    25  - return csa.h, nil
     24 +func (csa chunkSourceAdapter) hash() addr {
     25 + return csa.h
    26 26  }
    27 27   
    28 28  func newReaderFromIndexData(ctx context.Context, q MemoryQuotaProvider, idxData []byte, name addr, tra tableReaderAt, blockSize uint64) (cs chunkSource, err error) {
    skipped 24 lines
  • ■ ■ ■ ■ ■
    go/store/nbs/conjoiner.go
    skipped 220 lines
    221 221   return tableSpec{}, nil, nil, err
    222 222   }
    223 223   
    224  - h, err := conjoinedSrc.hash()
    225  - 
    226  - if err != nil {
    227  - return tableSpec{}, nil, nil, err
    228  - }
    229  - 
     224 + h := conjoinedSrc.hash()
    230 225   cnt, err = conjoinedSrc.count()
    231  - 
    232 226   if err != nil {
    233 227   return tableSpec{}, nil, nil, err
    234 228   }
    skipped 49 lines
    284 278   specs := make([]tableSpec, len(srcs))
    285 279   for i, src := range srcs {
    286 280   cnt, err := src.count()
    287  - 
    288 281   if err != nil {
    289 282   return nil, err
    290  - }
    291  - 
    292  - if cnt <= 0 {
     283 + } else if cnt <= 0 {
    293 284   return nil, errors.New("invalid table spec has no sources")
    294 285   }
    295 286   
    296  - h, err := src.hash()
    297  - 
    298  - if err != nil {
    299  - return nil, err
    300  - }
    301  - 
     287 + h := src.hash()
    302 288   cnt, err = src.count()
    303  - 
    304 289   if err != nil {
    305 290   return nil, err
    306 291   }
    307  - 
    308 292   specs[i] = tableSpec{h, cnt}
    309 293   }
    310 294   
    skipped 3 lines
  • ■ ■ ■ ■ ■ ■
    go/store/nbs/conjoiner_test.go
    skipped 74 lines
    75 75   // Makes a tableSet with len(tableSizes) upstream tables containing tableSizes[N] unique chunks
    76 76   makeTestTableSpecs := func(tableSizes []uint32, p tablePersister) (specs []tableSpec) {
    77 77   for _, src := range makeTestSrcs(t, tableSizes, p) {
    78  - specs = append(specs, tableSpec{mustAddr(src.hash()), mustUint32(src.count())})
     78 + specs = append(specs, tableSpec{src.hash(), mustUint32(src.count())})
    79 79   err := src.close()
    80 80   require.NoError(t, err)
    81 81   }
    skipped 61 lines
    143 143   mt.addChunk(computeAddr(data), data)
    144 144   src, err := p.Persist(context.Background(), mt, nil, &Stats{})
    145 145   require.NoError(t, err)
    146  - return tableSpec{mustAddr(src.hash()), mustUint32(src.count())}
     146 + return tableSpec{src.hash(), mustUint32(src.count())}
    147 147   }
    148 148   
    149 149   tc := []struct {
    skipped 224 lines
  • ■ ■ ■ ■ ■ ■
    go/store/nbs/empty_chunk_source.go
    skipped 60 lines
    61 61   return 0, nil
    62 62  }
    63 63   
    64  -func (ecs emptyChunkSource) hash() (addr, error) {
    65  - return addr{}, nil
     64 +func (ecs emptyChunkSource) hash() addr {
     65 + return addr{}
    66 66  }
    67 67   
    68 68  func (ecs emptyChunkSource) index() (tableIndex, error) {
    skipped 23 lines
  • ■ ■ ■ ■ ■ ■
    go/store/nbs/file_table_persister.go
    skipped 53 lines
    54 54   return newFileTableReader(ctx, ftp.dir, name, chunkCount, ftp.q, ftp.fc)
    55 55  }
    56 56   
     57 +func (ftp *fsTablePersister) Exists(ctx context.Context, name addr, chunkCount uint32, stats *Stats) (bool, error) {
     58 + return tableFileExists(ctx, ftp.dir, name)
     59 +}
     60 + 
    57 61  func (ftp *fsTablePersister) Persist(ctx context.Context, mt *memTable, haver chunkReader, stats *Stats) (chunkSource, error) {
    58 62   t1 := time.Now()
    59 63   defer stats.PersistLatency.SampleTimeSince(t1)
    skipped 125 lines
    185 189   return ftp.Open(ctx, name, plan.chunkCount, stats)
    186 190  }
    187 191   
    188  -func (ftp *fsTablePersister) PruneTableFiles(ctx context.Context, contents manifestContents) error {
     192 +func (ftp *fsTablePersister) PruneTableFiles(ctx context.Context, contents manifestContents, mtime time.Time) error {
    189 193   ss := contents.getSpecSet()
    190 194   
    191 195   fileInfos, err := os.ReadDir(ftp.dir)
    skipped 35 lines
    227 231   
    228 232   if _, ok := ss[addy]; ok {
    229 233   continue // file is referenced in the manifest
     234 + }
     235 + 
     236 + i, err := info.Info()
     237 + 
     238 + if err != nil {
     239 + ea.add(filePath, err)
     240 + }
     241 + 
     242 + ctime := i.ModTime()
     243 + 
     244 + if ctime.After(mtime) {
     245 + continue // file has been updated more recently than manifest
    230 246   }
    231 247   
    232 248   err = file.Remove(filePath)
    skipped 16 lines
  • ■ ■ ■ ■ ■ ■
    go/store/nbs/file_table_persister_test.go
    skipped 125 lines
    126 126   src, err := persistTableData(fts, testChunks...)
    127 127   require.NoError(t, err)
    128 128   if assert.True(mustUint32(src.count()) > 0) {
    129  - buff, err := os.ReadFile(filepath.Join(dir, mustAddr(src.hash()).String()))
     129 + buff, err := os.ReadFile(filepath.Join(dir, src.hash().String()))
    130 130   require.NoError(t, err)
    131 131   ti, err := parseTableIndexByCopy(ctx, buff, &UnlimitedQuotaProvider{})
    132 132   require.NoError(t, err)
    skipped 33 lines
    166 166   require.NoError(t, err)
    167 167   assert.True(mustUint32(src.count()) == 0)
    168 168   
    169  - _, err = os.Stat(filepath.Join(dir, mustAddr(src.hash()).String()))
     169 + _, err = os.Stat(filepath.Join(dir, src.hash().String()))
    170 170   assert.True(os.IsNotExist(err), "%v", err)
    171 171  }
    172 172   
    skipped 9 lines
    182 182   func() {
    183 183   src, err := persistTableData(fts, testChunks...)
    184 184   require.NoError(t, err)
    185  - name = mustAddr(src.hash())
     185 + name = src.hash()
    186 186   }()
    187 187   
    188 188   // Table should still be cached
    skipped 39 lines
    228 228   require.NoError(t, err)
    229 229   
    230 230   if assert.True(mustUint32(src.count()) > 0) {
    231  - buff, err := os.ReadFile(filepath.Join(dir, mustAddr(src.hash()).String()))
     231 + buff, err := os.ReadFile(filepath.Join(dir, src.hash().String()))
    232 232   require.NoError(t, err)
    233 233   ti, err := parseTableIndexByCopy(ctx, buff, &UnlimitedQuotaProvider{})
    234 234   require.NoError(t, err)
    skipped 33 lines
    268 268   require.NoError(t, err)
    269 269   
    270 270   if assert.True(mustUint32(src.count()) > 0) {
    271  - buff, err := os.ReadFile(filepath.Join(dir, mustAddr(src.hash()).String()))
     271 + buff, err := os.ReadFile(filepath.Join(dir, src.hash().String()))
    272 272   require.NoError(t, err)
    273 273   ti, err := parseTableIndexByCopy(ctx, buff, &UnlimitedQuotaProvider{})
    274 274   require.NoError(t, err)
    skipped 7 lines
  • ■ ■ ■ ■ ■
    go/store/nbs/file_table_reader.go
    skipped 40 lines
    41 41   fileBlockSize = 1 << 12
    42 42  )
    43 43   
     44 +func tableFileExists(ctx context.Context, dir string, h addr) (bool, error) {
     45 + path := filepath.Join(dir, h.String())
     46 + _, err := os.Stat(path)
     47 + 
     48 + if os.IsNotExist(err) {
     49 + return false, nil
     50 + }
     51 + 
     52 + return err == nil, err
     53 +}
     54 + 
    44 55  func newFileTableReader(ctx context.Context, dir string, h addr, chunkCount uint32, q MemoryQuotaProvider, fc *fdCache) (cs chunkSource, err error) {
    45 56   path := filepath.Join(dir, h.String())
    46 57   
    skipped 72 lines
    119 130   }, nil
    120 131  }
    121 132   
    122  -func (mmtr *fileTableReader) hash() (addr, error) {
    123  - return mmtr.h, nil
     133 +func (mmtr *fileTableReader) hash() addr {
     134 + return mmtr.h
    124 135  }
    125 136   
    126 137  func (mmtr *fileTableReader) close() error {
    skipped 40 lines
  • ■ ■ ■ ■ ■ ■
    go/store/nbs/manifest.go
    skipped 300 lines
    301 301   return
    302 302  }
    303 303   
    304  -func (mm manifestManager) Fetch(ctx context.Context, stats *Stats) (exists bool, contents manifestContents, err error) {
     304 +func (mm manifestManager) Fetch(ctx context.Context, stats *Stats) (exists bool, contents manifestContents, t time.Time, err error) {
    305 305   entryTime := time.Now()
    306 306   
    307 307   mm.lockOutFetch()
    skipped 5 lines
    313 313   }
    314 314   }()
    315 315   
    316  - f := func() (bool, manifestContents, error) {
     316 + f := func() (bool, manifestContents, time.Time, error) {
    317 317   cached, t, hit := mm.cache.Get(mm.Name())
    318 318   
    319 319   if hit && t.After(entryTime) {
    320 320   // Cache contains a manifest which is newer than entry time.
    321  - return true, cached, nil
     321 + return true, cached, t, nil
    322 322   }
    323 323   
    324 324   t = time.Now()
    skipped 1 lines
    326 326   exists, contents, err := mm.m.ParseIfExists(ctx, stats, nil)
    327 327   
    328 328   if err != nil {
    329  - return false, manifestContents{}, err
     329 + return false, manifestContents{}, t, err
    330 330   }
    331 331   
    332 332   err = mm.cache.Put(mm.Name(), contents, t)
    333 333   
    334 334   if err != nil {
    335  - return false, manifestContents{}, err
     335 + return false, manifestContents{}, t, err
    336 336   }
    337 337   
    338  - return exists, contents, nil
     338 + return exists, contents, t, nil
    339 339   }
    340 340   
    341  - exists, contents, err = f()
     341 + exists, contents, t, err = f()
    342 342   return
    343 343  }
    344 344   
    skipped 169 lines
  • ■ ■ ■ ■ ■
    go/store/nbs/root_tracker_test.go
    skipped 26 lines
    27 27   "fmt"
    28 28   "sync"
    29 29   "testing"
     30 + "time"
    30 31   
    31 32   "github.com/stretchr/testify/assert"
    32 33   "github.com/stretchr/testify/require"
    skipped 256 lines
    289 290   go func() {
    290 291   defer wg.Done()
    291 292   var err error
    292  - _, fetched, err = mm.Fetch(context.Background(), nil)
     293 + _, fetched, _, err = mm.Fetch(context.Background(), nil)
    293 294   require.NoError(t, err)
    294 295   }()
    295 296   }
    skipped 102 lines
    398 399   return hash.Hash{}, nil, err
    399 400   }
    400 401   
    401  - fm.set(constants.NomsVersion, newLock, newRoot, []tableSpec{{mustAddr(src.hash()), uint32(len(chunks) + 1)}}, nil)
     402 + fm.set(constants.NomsVersion, newLock, newRoot, []tableSpec{{src.hash(), uint32(len(chunks) + 1)}}, nil)
    402 403   
    403 404   if err = src.close(); err != nil {
    404 405   return [20]byte{}, nil, err
    skipped 170 lines
    575 576   ch <- rec
    576 577   })
    577 578   if err != nil {
    578  - ch <- extractRecord{a: mustAddr(src.hash()), err: err}
     579 + ch <- extractRecord{a: src.hash(), err: err}
    579 580   }
    580 581   }()
    581 582   
    skipped 41 lines
    623 624   return chunkSourceAdapter{cs, name}, nil
    624 625  }
    625 626   
    626  -func (ftp fakeTablePersister) PruneTableFiles(_ context.Context, _ manifestContents) error {
     627 +func (ftp fakeTablePersister) Exists(ctx context.Context, name addr, chunkCount uint32, stats *Stats) (bool, error) {
     628 + if _, ok := ftp.sourcesToFail[name]; ok {
     629 + return false, errors.New("intentional failure")
     630 + }
     631 + return true, nil
     632 +}
     633 + 
     634 +func (ftp fakeTablePersister) PruneTableFiles(_ context.Context, _ manifestContents, _ time.Time) error {
    627 635   return chunks.ErrUnsupportedOperation
    628 636  }
    629 637   
    skipped 26 lines
  • ■ ■ ■ ■ ■ ■
    go/store/nbs/store.go
    skipped 234 lines
    235 235   
    236 236   var updatedContents manifestContents
    237 237   for {
    238  - ok, contents, ferr := nbs.mm.Fetch(ctx, nbs.stats)
     238 + ok, contents, _, ferr := nbs.mm.Fetch(ctx, nbs.stats)
    239 239   if ferr != nil {
    240 240   return manifestContents{}, ferr
    241 241   } else if !ok {
    skipped 20 lines
    262 262   
    263 263   contents.lock = generateLockHash(contents.root, contents.specs, contents.appendix)
    264 264   
    265  - // ensure we dont drop existing appendices
     265 + // ensure we don't drop existing appendices
    266 266   if contents.appendix != nil && len(contents.appendix) > 0 {
    267 267   contents, err = fromManifestAppendixOptionNewContents(contents, contents.appendix, ManifestAppendixOption_Set)
    268 268   if err != nil {
    269 269   return manifestContents{}, err
    270 270   }
     271 + }
     272 + 
     273 + err = nbs.tables.checkAllTablesExist(ctx, contents.specs, nbs.stats)
     274 + if err != nil {
     275 + return manifestContents{}, err
    271 276   }
    272 277   
    273 278   updatedContents, err = nbs.mm.Update(ctx, originalLock, contents, nbs.stats, nil)
    skipped 37 lines
    311 316   
    312 317   var updatedContents manifestContents
    313 318   for {
    314  - ok, contents, ferr := nbs.mm.Fetch(ctx, nbs.stats)
     319 + ok, contents, _, ferr := nbs.mm.Fetch(ctx, nbs.stats)
    315 320   
    316 321   if ferr != nil {
    317 322   return manifestContents{}, ferr
    skipped 29 lines
    347 352   return manifestContents{}, err
    348 353   }
    349 354   
     355 + err = nbs.tables.checkAllTablesExist(ctx, contents.specs, nbs.stats)
     356 + if err != nil {
     357 + return manifestContents{}, err
     358 + }
     359 + 
    350 360   updatedContents, err = nbs.mm.Update(ctx, originalLock, contents, nbs.stats, nil)
    351 361   if err != nil {
    352 362   return manifestContents{}, err
    skipped 216 lines
    569 579   t1 := time.Now()
    570 580   defer nbs.stats.OpenLatency.SampleTimeSince(t1)
    571 581   
    572  - exists, contents, err := nbs.mm.Fetch(ctx, nbs.stats)
     582 + exists, contents, _, err := nbs.mm.Fetch(ctx, nbs.stats)
    573 583   
    574 584   if err != nil {
    575 585   return nil, err
    skipped 324 lines
    900 910  func (nbs *NomsBlockStore) Rebase(ctx context.Context) error {
    901 911   nbs.mu.Lock()
    902 912   defer nbs.mu.Unlock()
    903  - exists, contents, err := nbs.mm.Fetch(ctx, nbs.stats)
     913 + exists, contents, _, err := nbs.mm.Fetch(ctx, nbs.stats)
    904 914   if err != nil {
    905 915   return err
    906 916   }
    skipped 185 lines
    1092 1102   return err
    1093 1103   }
    1094 1104   
    1095  - // ensure we dont drop appendices on commit
     1105 + // ensure we don't drop appendices on commit
    1096 1106   var appendixSpecs []tableSpec
    1097 1107   if nbs.upstream.appendix != nil && len(nbs.upstream.appendix) > 0 {
    1098 1108   appendixSet := nbs.upstream.getAppendixSet()
    skipped 202 lines
    1301 1311  func (nbs *NomsBlockStore) chunkSourcesByAddr() (map[addr]chunkSource, error) {
    1302 1312   css := make(map[addr]chunkSource, len(nbs.tables.upstream)+len(nbs.tables.novel))
    1303 1313   for _, cs := range nbs.tables.upstream {
    1304  - a, err := cs.hash()
    1305  - if err != nil {
    1306  - return nil, err
    1307  - }
    1308  - css[a] = cs
     1314 + css[cs.hash()] = cs
    1309 1315   }
    1310 1316   for _, cs := range nbs.tables.novel {
    1311  - a, err := cs.hash()
    1312  - if err != nil {
    1313  - return nil, err
    1314  - }
    1315  - css[a] = cs
     1317 + css[cs.hash()] = cs
    1316 1318   }
    1317 1319   return css, nil
    1318 1320   
    skipped 118 lines
    1437 1439   // infinitely retries without backoff in the case off errOptimisticLockFailedTables
    1438 1440   }
    1439 1441   
    1440  - ok, contents, err := nbs.mm.Fetch(ctx, &Stats{})
     1442 + ok, contents, t, err := nbs.mm.Fetch(ctx, &Stats{})
    1441 1443   if err != nil {
    1442 1444   return err
    1443 1445   }
    skipped 1 lines
    1445 1447   return nil // no manifest exists
    1446 1448   }
    1447 1449   
    1448  - return nbs.p.PruneTableFiles(ctx, contents)
     1450 + return nbs.p.PruneTableFiles(ctx, contents, t)
    1449 1451  }
    1450 1452   
    1451 1453  func (nbs *NomsBlockStore) MarkAndSweepChunks(ctx context.Context, last hash.Hash, keepChunks <-chan []hash.Hash, dest chunks.ChunkStore) error {
    skipped 57 lines
    1509 1511   return nbs.upstream
    1510 1512   }()
    1511 1513   
    1512  - return nbs.p.PruneTableFiles(ctx, currentContents)
     1514 + t := time.Now()
     1515 + return nbs.p.PruneTableFiles(ctx, currentContents, t)
    1513 1516   } else {
    1514 1517   fileIdToNumChunks := tableSpecsToMap(specs)
    1515 1518   err = destNBS.AddTableFilesToManifest(ctx, fileIdToNumChunks)
    skipped 163 lines
  • ■ ■ ■ ■
    go/store/nbs/table.go
    skipped 240 lines
    241 241   chunkReader
    242 242   
    243 243   // hash returns the hash address of this chunkSource.
    244  - hash() (addr, error)
     244 + hash() addr
    245 245   
    246 246   // opens a Reader to the first byte of the chunkData segment of this table.
    247 247   reader(context.Context) (io.Reader, error)
    skipped 67 lines
  • ■ ■ ■ ■ ■
    go/store/nbs/table_persister.go
    skipped 28 lines
    29 29   "errors"
    30 30   "io"
    31 31   "sort"
     32 + "time"
    32 33  )
    33 34   
    34 35  var errCacheMiss = errors.New("index cache miss")
    skipped 15 lines
    50 51   // Open a table named |name|, containing |chunkCount| chunks.
    51 52   Open(ctx context.Context, name addr, chunkCount uint32, stats *Stats) (chunkSource, error)
    52 53   
     54 + // Exists checks if a table named |name| exists.
     55 + Exists(ctx context.Context, name addr, chunkCount uint32, stats *Stats) (bool, error)
     56 + 
    53 57   // PruneTableFiles deletes old table files that are no longer referenced in the manifest.
    54  - PruneTableFiles(ctx context.Context, contents manifestContents) error
     58 + PruneTableFiles(ctx context.Context, contents manifestContents, mtime time.Time) error
    55 59   
    56 60   io.Closer
    57 61  }
    skipped 21 lines
    79 83   }
    80 84   
    81 85   if cntI == cntJ {
    82  - hi, err := srcI.hash()
    83  - 
    84  - if err != nil {
    85  - csbc.err = err
    86  - return false
    87  - }
    88  - 
    89  - hj, err := srcJ.hash()
    90  - 
    91  - if err != nil {
    92  - csbc.err = err
    93  - return false
    94  - }
    95  - 
     86 + hi := srcI.hash()
     87 + hj := srcJ.hash()
    96 88   return bytes.Compare(hi[:], hj[:]) < 0
    97 89   }
    98 90   
    skipped 13 lines
    112 104  func (csbds chunkSourcesByDescendingDataSize) Less(i, j int) bool {
    113 105   swsI, swsJ := csbds.sws[i], csbds.sws[j]
    114 106   if swsI.dataLen == swsJ.dataLen {
    115  - hi, err := swsI.source.hash()
    116  - 
    117  - if err != nil {
    118  - csbds.err = err
    119  - return false
    120  - }
    121  - 
    122  - hj, err := swsJ.source.hash()
    123  - 
    124  - if err != nil {
    125  - csbds.err = err
    126  - return false
    127  - }
    128  - 
     107 + hi := swsI.source.hash()
     108 + hj := swsJ.source.hash()
    129 109   return bytes.Compare(hi[:], hj[:]) < 0
    130 110   }
    131 111   return swsI.dataLen > swsJ.dataLen
    skipped 155 lines
  • ■ ■ ■ ■ ■ ■
    go/store/nbs/table_set.go
    skipped 319 lines
    320 320   return flattened, nil
    321 321  }
    322 322   
     323 +func (ts tableSet) checkAllTablesExist(ctx context.Context, specs []tableSpec, stats *Stats) error {
     324 + for _, spec := range specs {
     325 + exists, err := ts.p.Exists(ctx, spec.name, spec.chunkCount, stats)
     326 + if err != nil {
     327 + return err
     328 + }
     329 + if !exists {
     330 + return fmt.Errorf("table spec does not exist")
     331 + }
     332 + }
     333 + return nil
     334 +}
     335 + 
    323 336  // rebase returns a new tableSet holding the novel tables managed by |ts| and
    324 337  // those specified by |specs|.
    325 338  func (ts tableSet) rebase(ctx context.Context, specs []tableSpec, stats *Stats) (tableSet, error) {
    skipped 30 lines
    356 369   
    357 370   existing := make(map[addr]chunkSource, len(ts.upstream))
    358 371   for _, cs := range ts.upstream {
    359  - a, err := cs.hash()
    360  - if err != nil {
    361  - return tableSet{}, err
    362  - }
    363  - existing[a] = cs
     372 + existing[cs.hash()] = cs
    364 373   }
    365 374   
    366 375   // newly opened tables are unowned, we must
    skipped 53 lines
    420 429   }
    421 430   
    422 431   if cnt > 0 {
    423  - h, err := src.hash()
    424  - 
    425  - if err != nil {
    426  - return nil, err
    427  - }
    428  - 
     432 + h := src.hash()
    429 433   tableSpecs = append(tableSpecs, tableSpec{h, cnt})
    430 434   }
    431 435   }
    skipped 8 lines
    440 444   return nil, errors.New("no upstream chunks")
    441 445   }
    442 446   
    443  - h, err := src.hash()
    444  - 
    445  - if err != nil {
    446  - return nil, err
    447  - }
    448  - 
     447 + h := src.hash()
    449 448   tableSpecs = append(tableSpecs, tableSpec{h, cnt})
    450 449   }
    451 450   return tableSpecs, nil
    skipped 4 lines
    456 455   for _, tbl := range all {
    457 456   rdr, ok := tbl.(*fileTableReader)
    458 457   if !ok {
    459  - h, _ := tbl.hash()
    460  - err = fmt.Errorf("chunkSource %s is not a fileTableReader", h.String())
     458 + err = fmt.Errorf("chunkSource %s is not a fileTableReader", tbl.hash().String())
    461 459   return
    462 460   }
    463 461   
    skipped 16 lines
  • ■ ■ ■ ■ ■ ■
    integration-tests/bats/garbage_collection.bats
    skipped 268 lines
    269 269   [[ "${lines[1]}" =~ "9,99" ]] || false
    270 270  }
    271 271   
     272 +create_many_commits() {
     273 + dolt sql <<SQL
     274 +CREATE TABLE test (pk int PRIMARY KEY);
     275 +CALL DOLT_COMMIT('-Am', 'Create test table');
     276 +SQL
     277 +
     278 + # Create a lot of commits to create some conjoin garbage
     279 + NUM_COMMITS=250
     280 + 
     281 + for i in $(eval echo "{1..$NUM_COMMITS}")
     282 + do
     283 + dolt sql <<SQL
     284 +INSERT INTO test VALUES ($i);
     285 +CALL DOLT_COMMIT('-am', 'Add new val $i');
     286 +SQL
     287 + done
     288 + 
     289 + run dolt sql -q "select count(*) from test"
     290 + [ "$status" -eq 0 ]
     291 + [[ "$output" =~ "$NUM_COMMITS" ]] || false
     292 +}
     293 + 
     294 +@test "garbage_collection: shallow gc" {
     295 + create_many_commits
     296 + 
     297 + # leave data in the working set
     298 + dolt sql -q "INSERT INTO test VALUES ($(($NUM_COMMITS+1))),($(($NUM_COMMITS+2))),($(($NUM_COMMITS+3)));"
     299 + 
     300 + BEFORE=$(du -c .dolt/noms/ | grep total | sed 's/[^0-9]*//g')
     301 + run dolt gc --shallow
     302 + [ "$status" -eq 0 ]
     303 + 
     304 + run dolt sql -q "select count(*) from test"
     305 + [ "$status" -eq 0 ]
     306 + [[ "$output" =~ "$(($NUM_COMMITS+3))" ]] || false
     307 + 
     308 + AFTER=$(du -c .dolt/noms/ | grep total | sed 's/[^0-9]*//g')
     309 + 
     310 + # assert space was reclaimed
     311 + echo "$BEFORE"
     312 + echo "$AFTER"
     313 + [ "$BEFORE" -gt "$AFTER" ]
     314 +}
     315 + 
     316 +@test "garbage_collection: online shallow gc" {
     317 + create_many_commits
     318 + 
     319 + # leave data in the working set
     320 + dolt sql -q "INSERT INTO test VALUES ($(($NUM_COMMITS+1))),($(($NUM_COMMITS+2))),($(($NUM_COMMITS+3)));"
     321 + 
     322 + BEFORE=$(du -c .dolt/noms/ | grep total | sed 's/[^0-9]*//g')
     323 + run dolt sql -q "call dolt_gc();"
     324 + [ "$status" -eq 0 ]
     325 + 
     326 + run dolt sql -q "select count(*) from test"
     327 + [ "$status" -eq 0 ]
     328 + [[ "$output" =~ "$(($NUM_COMMITS+3))" ]] || false
     329 + 
     330 + AFTER=$(du -c .dolt/noms/ | grep total | sed 's/[^0-9]*//g')
     331 + 
     332 + # assert space was reclaimed
     333 + echo "$BEFORE"
     334 + echo "$AFTER"
     335 + [ "$BEFORE" -gt "$AFTER" ]
     336 +}
  • ■ ■ ■ ■ ■ ■
    integration-tests/bats/migrate.bats
    skipped 302 lines
    303 303   [[ "$output" =~ "already migrated" ]] || false
    304 304  }
    305 305   
     306 +@test "migrate: changing primary key ordinals should migrate" {
     307 + dolt sql -q "create table t (col1 int, col2 int, col3 enum('a', 'b'), primary key (col1, col2, col3))"
     308 + dolt sql -q "insert into t values (1, 2, 'a'), (2, 3, 'b'), (3, 4, 'a');"
     309 + dolt commit -Am "initial"
     310 + 
     311 + dolt sql -q "alter table t drop primary key;"
     312 + dolt sql -q "alter table t add primary key (col3, col2, col1);"
     313 + dolt commit -am "change primary key order"
     314 + 
     315 + dolt sql -q "insert into t values (5, 6, 'b');"
     316 + dolt commit -am "add new row"
     317 + 
     318 + dolt migrate
     319 + run dolt sql -r csv -q "select * from t order by col1 asc;"
     320 + [ $status -eq 0 ]
     321 + [[ $output =~ "col1,col2,col3" ]]
     322 + [[ $output =~ "1,2,a" ]]
     323 + [[ $output =~ "2,3,b" ]]
     324 + [[ $output =~ "3,4,a" ]]
     325 + [[ $output =~ "5,6,b" ]]
     326 +}
     327 + 
Please wait...
Page is in error, reload to recover