diff --git a/go.mod b/go.mod index c99edd34d..e590bdd1b 100644 --- a/go.mod +++ b/go.mod @@ -29,7 +29,6 @@ require ( github.com/molecula/apophenia v0.0.0-20190827192002-68b7a14a478b github.com/opentracing/opentracing-go v1.1.0 github.com/pelletier/go-toml v1.4.0 - github.com/pilosa/pilosa/v2 v2.0.0-alpha.1 // indirect github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.0.0 github.com/prometheus/client_model v0.1.0 @@ -55,7 +54,7 @@ require ( golang.org/x/sys v0.0.0-20210510120138-977fb7262007 // indirect golang.org/x/text v0.3.5 // indirect google.golang.org/grpc v1.28.0 - gopkg.in/yaml.v2 v2.3.0 + gopkg.in/yaml.v2 v2.3.0 // indirect modernc.org/mathutil v1.0.0 modernc.org/strutil v1.0.0 sigs.k8s.io/yaml v1.2.0 // indirect diff --git a/go.sum b/go.sum index a415da534..5f4d1be61 100644 --- a/go.sum +++ b/go.sum @@ -16,14 +16,12 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/CAFxX/gcnotifier v0.0.0-20190112062741-224a280d589d h1:n0G4ckjMEj7bWuGYUX0i8YlBeBBJuZ+HEHvHfyBDZtI= github.com/CAFxX/gcnotifier v0.0.0-20190112062741-224a280d589d/go.mod h1:Rn2zM2MnHze07LwkneP48TWt6UiZhzQTwCvw6djVGfE= -github.com/DataDog/datadog-go v0.0.0-20180822151419-281ae9f2d895/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/datadog-go v2.2.0+incompatible h1:V5BKkxACZLjzHjSgBbr2gvLA2Ae49yhc6CSY7MLy5k4= github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/HdrHistogram/hdrhistogram-go v1.1.0 h1:6dpdDPTRoo78HxAJ6T1HfMiKSnqhgRRqzCuPshRkQ7I= github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/StackExchange/wmi v0.0.0-20181212234831-e0a55b97c705/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk= github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= @@ -33,7 +31,6 @@ github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRF github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/beevik/ntp v0.3.0 h1:xzVrPrE4ziasFXgBVBZJDP0Wg/KpMwk2KHJ4Ba8GrDw= @@ -45,7 +42,6 @@ github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= -github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -55,11 +51,8 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa h1:OaNxuTZr7kxeODyLWsRMC+OD03aFUH+mW6r2d+MWa5Y= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -109,7 +102,6 @@ github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/me github.com/go-test/deep v1.0.7 h1:/VSMRlnY/JSyqxQUzQLKVMAskpY/NZKFA5j2P+0pP2M= github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= @@ -212,7 +204,6 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/lib/pq v1.8.0 h1:9xohqzkUwzR4Ga4ivdTcawVS89YSDVxXMa3xJX3cGzg= github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= @@ -253,8 +244,6 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.4.0 h1:u3Z1r+oOXJIkxqw34zVhyPgjBsm6X2wn21NWs/HfSeg= github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= -github.com/pilosa/pilosa/v2 v2.0.0-alpha.1 h1:dkKXzEtEvTHiJ7paskW6yqPBaUchOMj2VeXiM1QyEeQ= -github.com/pilosa/pilosa/v2 v2.0.0-alpha.1/go.mod h1:CHRsL8ZpARQmEqiknUHFJSuEw9964DWCAdJQeT8vRK8= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -285,7 +274,6 @@ github.com/prometheus/prom2json v1.3.0/go.mod h1:rMN7m0ApCowcoDlypBHlkNbp5eJQf/+ github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= -github.com/remyoudompheng/bigfft v0.0.0-20190321074620-2f0d2b0e0001/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237 h1:HQagqIiBmr8YXawX/le3+O26N+vPPC1PtjaF3mwnook= github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= @@ -297,11 +285,8 @@ github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/shirou/gopsutil v2.18.12+incompatible h1:1eaJvGomDnH74/5cF4CTmTbLHAriGFsTZppLXDX93OM= -github.com/shirou/gopsutil v2.18.12+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/gopsutil/v3 v3.20.11 h1:NeVf1K0cgxsWz+N3671ojRptdgzvp7BXL3KV21R0JnA= github.com/shirou/gopsutil/v3 v3.20.11/go.mod h1:igHnfak0qnw1biGeI2qKQvu0ZkwvEkUcCLlYhZzdr/4= -github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= @@ -327,7 +312,6 @@ github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.1/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= @@ -345,18 +329,13 @@ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69 github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/uber-go/atomic v1.4.0/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g= -github.com/uber/jaeger-client-go v2.16.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/uber/jaeger-client-go v2.25.0+incompatible h1:IxcNZ7WRY1Y3G4poYlx24szfsn/3LvK9QHCq9oQw8+U= github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= -github.com/uber/jaeger-lib v2.0.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/uber/jaeger-lib v2.4.0+incompatible h1:fY7QsGQWiCt8pajv4r7JEvmATdCVaWxXbjwyYwsNaLQ= github.com/uber/jaeger-lib v2.4.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/zeebo/assert v1.1.0 h1:hU1L1vLTHsnO8x8c9KAR5GmM5QscxHg5RNU5z5qbUWY= @@ -379,9 +358,7 @@ go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -427,7 +404,6 @@ golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190424112056-4829fb13d2c6/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= @@ -456,12 +432,10 @@ golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190429190828-d89cdac9e872/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/pg/protocol.go b/pg/protocol.go index 041c331a4..29dd62638 100644 --- a/pg/protocol.go +++ b/pg/protocol.go @@ -258,8 +258,10 @@ type Result struct { } type PgType byte +// Constants used to indicated query interception +// Only pgPassOn is allowed to be processed in Featurebase query handling const ( - pgNotPg PgType = 'x' + pgPassOn PgType = 'x' pgBackendPid PgType = 'a' pgVersion PgType = 'b' pgCountType PgType = 'c' @@ -291,7 +293,7 @@ func (p *Portal) Reset() { vprint.VV("Portal Reset") p.Name = "" p.sql = "" - p.pgspecial = pgNotPg + p.pgspecial = pgPassOn p.commands = p.commands[:0] } @@ -335,6 +337,7 @@ func (p *Portal) Parse(data []byte) { case sql.SQLTypeSet: p.Name = "SET" set := query.Statement.(*sqlparser.Set) + p.pgspecial = 0 for _, item := range set.Exprs { vprint.VV("SET name=(%v) ", item.Name) if item.Name.String() == "application_name" { @@ -348,7 +351,7 @@ func (p *Portal) Parse(data []byte) { } case sql.SQLTypeSelect: p.Name = "SELECT" - p.pgspecial = pgNotPg + p.pgspecial = pgPassOn stmt := query.Statement.(*sqlparser.Select) for _, item := range stmt.SelectExprs { switch expr := item.(type) { @@ -360,12 +363,9 @@ func (p *Portal) Parse(data []byte) { case "pg_backend_pid": //SELECT pg_backend_pid() p.pgspecial = pgBackendPid - //p.encoder.RowDescription() //TODO(twg) move to the right spt case "pg_terminate_backend": - //need the arg 100 //select pg_terminate_backend(100) vprint.VV("terminate %#v", colExpr.Exprs) - //colExpr.Exprs[0] p.pgspecial = pgTerminate case "version": //SELECT VERSION() AS version @@ -395,20 +395,15 @@ func (p *Portal) Parse(data []byte) { } p.sql = string(b) case sql.SQLTypeBegin: + // Ignore BEGIN p.pgspecial = pgBegin - // panic("TODO") - // ingnore for now case sql.SQLTypeShow: p.Name = "SHOW" - p.pgspecial = pgNotPg + p.pgspecial = pgPassOn p.sql = string(b) } } } - // TODO (twg) hack parsing for short term - // parts := strings.Split(strings.TrimSuffix(string(data), "\x00"), " ") - // p.Name = parts[0][1:] //TODO (twg) major hack - vprint.VV("PG SET:(%v)", p.pgspecial) } else { vprint.VV("SETTING EMPTY") p.pgspecial = pgEmpty @@ -428,14 +423,15 @@ func (p *Portal) Describe() { */ } -func (p *Portal) Execute() (shouldTerminate bool, queryReady bool) { +func (p *Portal) Execute() (shouldTerminate bool, queryReady bool, err error) { queryReady = true vprint.VV("port.Execute: (%v) q=(%v)", p.pgspecial, p.sql) switch p.pgspecial { case pgBackendPid: - rowDescription, err := p.Encoder.EncodeColumn("pg_backend_pid", int32(23), 4) - if err != nil { - panic(err) + rowDescription, e := p.Encoder.EncodeColumn("pg_backend_pid", int32(23), 4) + if e != nil { + err = e + return } p.Add(rowDescription) pid := fmt.Sprintf("%v", p.pid) @@ -443,31 +439,30 @@ func (p *Portal) Execute() (shouldTerminate bool, queryReady bool) { p.Add(dataRow) //needs data row with cancel token case pgVersion: - rowDescription, err := p.Encoder.EncodeColumn("version", int32(25), -1) - if err != nil { - panic(err) + rowDescription, e := p.Encoder.EncodeColumn("version", int32(25), -1) + if e != nil { + err = e + return } p.Add(rowDescription) dataRow, _ := p.Encoder.TextRow("PostgresSQL 13.0 (molecula)") p.Add(dataRow) case pgSelect1: - rowDescription, err := p.Encoder.EncodeColumn("?column?", int32(23), 4) - if err != nil { - panic(err) + rowDescription, e := p.Encoder.EncodeColumn("?column?", int32(23), 4) + if e != nil { + err = e + return } p.Add(rowDescription) dataRow, _ := p.Encoder.TextRow("1") p.Add(dataRow) case pgCountType: //need to block - vprint.VV("blocking til terminated") <-p.server.lookerChannel - vprint.VV("Released") - //now need to send ParseComplete,BindComplete,RowDescription,Error(Terminate) - //TODO(twg) handle the error - rowDescription, err := p.Encoder.EncodeColumn("count", int32(20), 8) + rowDescription, e := p.Encoder.EncodeColumn("count", int32(20), 8) if err != nil { - panic(err) + err = e + return } p.Add(rowDescription) errorResponse, _ := p.Encoder.Error( @@ -485,52 +480,68 @@ func (p *Portal) Execute() (shouldTerminate bool, queryReady bool) { }, ) p.Add(errorResponse) - p.Sync() //send and Reset - return true, queryReady + e = p.Sync() //send and Reset + + if e != nil { + err = e + return + } + return true, queryReady, nil case pgQueryTime: // need to return something so that the id can be queried //need to return SELECT pid as id, query as stmt, EXTRACT(seconds from query_start - NOW()) as elapsed_time FROM pg_stat_activity //seems like we need a map of pids to querys - err := p.server.dumpPortalsTo(p) - if err != nil { + e := p.server.dumpPortalsTo(p) + if e != nil { + err = e return } case pgTerminate: //note just have 1 lock that blocks all who try to count the activities - vprint.VV("removing the block ") //TODO (twg) lock this close(p.server.lookerChannel) //release all the other blockers and allow them to terminate p.server.lookerChannel = make(chan struct{}) //create a new one just in case // i think it needs to return boolean true - rowDescription, err := p.Encoder.EncodeColumn("pg_terminate_backend", int32(16), 1) - if err != nil { - panic(err) + rowDescription, e := p.Encoder.EncodeColumn("pg_terminate_backend", int32(16), 1) + if e != nil { + err = e + return } p.Add(rowDescription) dataRow, _ := p.Encoder.TextRow("t") p.Add(dataRow) - commandComplete, _ := p.Encoder.CommandComplete("SELECT 1") + commandComplete, e := p.Encoder.CommandComplete("SELECT 1") + if e != nil { + err = e + return + } p.Add(commandComplete) - p.Sync() - return false, queryReady + e = p.Sync() + if e != nil { + err = e + return + } + return false, queryReady, nil case pgEmpty: p.Add(message.NoData) p.Add(message.EmptyQueryResponse) - p.Sync() + e := p.Sync() + if e != nil { + err = e + return + } queryReady = true - return false, queryReady + return false, queryReady, nil case pgSetApplication: //needs to add/send status - msg, err := p.Encoder.ParameterStatus("application_name", "PostgreSQL JDBC Driver") //TODO (twg) should be saved from parse - if err != nil { + msg, e := p.Encoder.ParameterStatus("application_name", "PostgreSQL JDBC Driver") + if e != nil { + err = e return } p.Add(msg) case pgSchema: - //need to add the descrition for the 3 fields - // ---[Field 01]--- name='table_schema' type=19 type_len=64 type_mod=4294967295 relid=13276 attnum=2 format=0 - // ---[Field 02]--- name='table_name' type=19 type_len=64 type_mod=4294967295 relid=13276 attnum=3 format=0 parts := []message.SimpleColumn{ { Name: "table_schema", @@ -543,27 +554,28 @@ func (p *Portal) Execute() (shouldTerminate bool, queryReady bool) { Typelen: 64, }, } - rowDescription, err := p.Encoder.EncodeColumns(parts...) - if err != nil { //TODO (twg) shadowing err + rowDescription, e := p.Encoder.EncodeColumns(parts...) + if e != nil { + err = e return } p.Add(rowDescription) - err = p.HandleSchema() - if err != nil { + e = p.HandleSchema() + if e != nil { + err = e return } - vprint.VV("SHOULd make schema") - case pgNotPg: - vprint.VV("GOOOO>(%v)", p.sql) + case pgPassOn: query := SimpleQuery(p.sql) - err := p.server.handleQuery(p, query, p.cancelNotify) - if err != nil { + e := p.server.handleQuery(p, query, p.cancelNotify) + if e != nil { + err = e return } + return case pgBegin: - vprint.VV("BEGIN") p.Name = "BEGIN" } @@ -571,25 +583,23 @@ func (p *Portal) Execute() (shouldTerminate bool, queryReady bool) { if len(p.Name) > 0 { //only send command complete for those that have names vprint.VV("EXECING NAME: '%v'", p.Name) message, _ := p.Encoder.CommandComplete(p.Name) - vprint.VV("AFTER") p.Add(message) } return } // handleStandard handles a connection in the standard postgres wire protocol. -func (p *Portal) Sync() { +func (p *Portal) Sync() error { for _, m := range p.commands { vprint.VV("Sending: '%v'", m.Type) err := p.Writer.WriteMessage(m) if err != nil { - //TODO (twg) need to change signature to return error - vprint.VV("error %v", err) - return + return err } } p.Writer.Flush() p.Reset() + return nil } func (p *Portal) Add(m message.Message) { cp := message.Message{Type: m.Type, Data: make([]byte, len(m.Data))} @@ -607,7 +617,6 @@ func (p *Portal) HandleSchema() error { return p.server.QueryHandler.HandleSchema(context.Background(), p) } -//implement the QueryResultWriterqueryResultR func (p *Portal) WriteMessage(m message.Message) error { p.Add(m) return nil @@ -637,7 +646,7 @@ func (s *Server) handleStandard(ctx context.Context, proto Protocol, conn net.Co if err != nil { return errors.Wrap(err, "parsing parameters") } - fmt.Printf("postgres connection params\n%#v\n", params) //TODO (twg) remove + vprint.VV("postgres connection params\n%#v\n", params) //TODO (twg) remove if user, ok := params["user"]; ok { // Log the connection. s.Logger.Debugf("new postgres connection from user %q at %v", user, conn.RemoteAddr()) @@ -647,7 +656,6 @@ func (s *Server) handleStandard(ctx context.Context, proto Protocol, conn net.Co } // Set up message input and output. - // Set up a reader that will preempt the connection when the context is canceled. ir := idleReader{ conn: conn, @@ -790,8 +798,6 @@ func (s *Server) handleStandard(ctx context.Context, proto Protocol, conn net.Co for { if !queryReady { // Indicate that we are ready for a query. - // TODO: provide a valid transaction state. - //msg, err := encoder.ReadyForQuery(message.TransactionStatusActive) portal.sql = "" msg, err := encoder.ReadyForQuery(message.TransactionStatusIdle) if err != nil { @@ -855,31 +861,30 @@ func (s *Server) handleStandard(ctx context.Context, proto Protocol, conn net.Co return w.Flush() case message.TypeParse: - fmt.Println("Type Parse", strings.Trim(string(msg.Data), "\x00")) + vprint.VV("Type Parse (%v)", strings.Trim(string(msg.Data), "\x00")) portal.Parse(msg.Data) case message.TypeBind: - fmt.Println("Type Bind", strings.Trim(string(msg.Data), "\x00")) - //TODO(twg) apply values to bindings in the future - // Parse the query message (a null-terminated string). + vprint.VV("Type Bind (%v)", strings.Trim(string(msg.Data), "\x00")) portal.Bind() case message.TypeExecute: - fmt.Println("Type Execute", strings.Trim(string(msg.Data), "\x00")) - //term, qr := portal.Execute() - term, qr := portal.Execute() + vprint.VV("Type Execute (%v)", strings.Trim(string(msg.Data), "\x00")) + term, qr, err := portal.Execute() + if err != nil { + return err + } if term { return w.Flush() } queryReady = qr case message.TypeSync: - fmt.Println("Type Sync", strings.Trim(string(msg.Data), "\x00")) - portal.Sync() + vprint.VV("Type Sync", strings.Trim(string(msg.Data), "\x00")) + err := portal.Sync() + if err != nil { + return err + } queryReady = false case message.TypeSimpleQuery: - // Execute a simple query. - queryReady = false - - // Parse the query message (a null-terminated string). query := SimpleQuery(strings.TrimSuffix(string(msg.Data), "\x00")) // Execute the query. @@ -887,16 +892,7 @@ func (s *Server) handleStandard(ctx context.Context, proto Protocol, conn net.Co if err != nil { return err } - label := "N/A" - switch msg.Data[0] { - case 'S': //prepared statement - label = "prepared statement" - case 'P': //portal - label = "portal" - } - vprint.VV("describe %v:'%v'", label, msg.Data[1:]) case message.TypeDescribe: - //TODO (twg) major hack alet portal.Describe() case message.TypeClose: return w.Flush() diff --git a/server/pg_test.go b/server/pg_test.go index 012986afc..bd8a88521 100644 --- a/server/pg_test.go +++ b/server/pg_test.go @@ -21,7 +21,7 @@ import ( "testing" "time" - "github.com/molecula/featurebase/v2" + pilosa "github.com/molecula/featurebase/v2" "github.com/molecula/featurebase/v2/logger" "github.com/molecula/featurebase/v2/pg" "github.com/molecula/featurebase/v2/pg/pgtest" @@ -33,7 +33,7 @@ func TestPostgresHandler(t *testing.T) { m := test.RunCommand(t) defer m.Close() - pgh := server.NewPostgresHandler(m.API, logger.NewLogfLogger(t)) + pgh := server.NewPostgresHandler(m.API, logger.NewLogfLogger(t), server.SqlV1) m.MustCreateIndex(t, "i", pilosa.IndexOptions{TrackExistence: true}) m.MustCreateField(t, "i", "set")