Skip to content

Commit

Permalink
add more correct session support and use production protobufs
Browse files Browse the repository at this point in the history
this starts to get to a more correct/usable Session
  • Loading branch information
mattrobenolt committed Jan 14, 2024
1 parent 341b722 commit a2701f4
Show file tree
Hide file tree
Showing 8 changed files with 165 additions and 111 deletions.
38 changes: 2 additions & 36 deletions Makefile
@@ -1,25 +1,12 @@
app = ps-http-sim
gomod := github.com/mattrobenolt/$(app)

PSDB_PROTO_OUT := types
PSDB_PROTO_ROOT := $(PSDB_PROTO_OUT)/psdb
PSDB_V1ALPHA1 := $(PSDB_PROTO_ROOT)/v1alpha1

BIN := bin

UNAME_OS := $(shell uname -s)
UNAME_ARCH := $(shell uname -m)

all: $(BIN)/$(app)

proto: \
$(PSDB_V1ALPHA1)/database.pb.go

clean: clean-bin clean-dist

clean-proto:
rm -rf $(PSDB_PROTO_OUT)

clean-bin:
rm -rf $(BIN)

Expand All @@ -29,32 +16,11 @@ clean-dist:
$(BIN):
mkdir -p $(BIN)

$(PSDB_PROTO_OUT):
mkdir -p $(PSDB_PROTO_OUT)

GO_INSTALL := env GOBIN=$(PWD)/$(BIN) go install -ldflags "-s -w" -trimpath

$(BIN)/buf: Makefile | $(BIN)
$(GO_INSTALL) github.com/bufbuild/buf/cmd/buf@v1.28.0

$(BIN)/protoc-gen-go: Makefile | $(BIN)
$(GO_INSTALL) google.golang.org/protobuf/cmd/protoc-gen-go

$(BIN)/protoc-gen-connect-go: Makefile | $(BIN)
$(GO_INSTALL) connectrpc.com/connect/cmd/protoc-gen-connect-go

$(BIN)/protoc-gen-go-vtproto: Makefile | $(BIN)
$(GO_INSTALL) github.com/planetscale/vtprotobuf/cmd/protoc-gen-go-vtproto@v0.5.0

$(BIN)/goreleaser: Makefile | $(BIN)
$(GO_INSTALL) github.com/goreleaser/goreleaser@v1.22.1

PROTO_TOOLS := $(BIN)/buf $(BIN)/protoc-gen-go $(BIN)/protoc-gen-connect-go $(BIN)/protoc-gen-go-vtproto
tools: $(PROTO_TOOLS)

$(PSDB_V1ALPHA1)/database.pb.go: $(PROTO_TOOLS) proto-src/planetscale/psdb/v1alpha1/database.proto | $(PSDB_PROTO_OUT)
$(BIN)/buf generate -v proto-src/planetscale/psdb/v1alpha1/database.proto

$(BIN)/$(app): main.go go.mod go.sum | $(BIN)
$(GO_INSTALL) $(gomod)

Expand All @@ -73,9 +39,9 @@ docker:
docker buildx build --target=local --rm -t $(app) .

run-mysql:
docker run -it --rm --name $(app)-mysqld -e MYSQL_ALLOW_EMPTY_PASSWORD="true" -e MYSQL_ROOT_PASSWORD="" -p 127.0.0.1:3306:3306 mysql:8.0.29
docker run -it --rm --name $(app)-mysqld -e MYSQL_ALLOW_EMPTY_PASSWORD="true" -e MYSQL_ROOT_PASSWORD="" -p 127.0.0.1:3306:3306 mysql:8.0.34

publish: clean $(BIN)/goreleaser
$(BIN)/goreleaser release

.PHONY: all proto clean clean-proto clean-bin clean-dist tools run run-mysql publish
.PHONY: all clean clean-bin clean-dist run docker run-mysql publish
18 changes: 0 additions & 18 deletions buf.gen.yaml

This file was deleted.

4 changes: 0 additions & 4 deletions buf.work.yaml

This file was deleted.

13 changes: 7 additions & 6 deletions go.mod
Expand Up @@ -2,15 +2,15 @@ module github.com/mattrobenolt/ps-http-sim

go 1.21

toolchain go1.21.4
toolchain go1.21.6

require (
connectrpc.com/connect v1.12.0
connectrpc.com/connect v1.14.0
github.com/matoous/go-nanoid/v2 v2.0.0
github.com/planetscale/log v0.0.0-20230818230039-324540f3f1cf
github.com/planetscale/psdb v0.0.0-20230808180222-628a2f94488d
golang.org/x/net v0.18.0
google.golang.org/protobuf v1.31.0
github.com/planetscale/psdb v0.0.0-20240109164348-6848e728f6e7
golang.org/x/net v0.20.0
google.golang.org/protobuf v1.32.0
vitess.io/vitess v0.18.0
)

Expand Down Expand Up @@ -48,6 +48,7 @@ require (
github.com/philhofer/fwd v1.1.2 // indirect
github.com/pires/go-proxyproto v0.7.0 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/planetscale/vitess-types v0.0.0-20230808182149-da48f87540fa // indirect
github.com/prometheus/client_golang v1.17.0 // indirect
github.com/prometheus/client_model v0.5.0 // indirect
github.com/prometheus/common v0.45.0 // indirect
Expand All @@ -74,7 +75,7 @@ require (
go4.org/unsafe/assume-no-moving-gc v0.0.0-20230525183740-e7c30c78aeb2 // indirect
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect
golang.org/x/mod v0.14.0 // indirect
golang.org/x/sys v0.14.0 // indirect
golang.org/x/sys v0.16.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/time v0.4.0 // indirect
golang.org/x/tools v0.15.0 // indirect
Expand Down
26 changes: 14 additions & 12 deletions go.sum
Expand Up @@ -35,8 +35,8 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
connectrpc.com/connect v1.12.0 h1:HwKdOY0lGhhoHdsza+hW55aqHEC64pYpObRNoAgn70g=
connectrpc.com/connect v1.12.0/go.mod h1:3AGaO6RRGMx5IKFfqbe3hvK1NqLosFNP2BxDYTPmNPo=
connectrpc.com/connect v1.14.0 h1:PDS+J7uoz5Oui2VEOMcfz6Qft7opQM9hPiKvtGC01pA=
connectrpc.com/connect v1.14.0/go.mod h1:uoAq5bmhhn43TwhaKdGKN/bZcGtzPW1v+ngDTn5u+8s=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU=
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8=
Expand Down Expand Up @@ -234,8 +234,10 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
github.com/planetscale/log v0.0.0-20230818230039-324540f3f1cf h1:CrZS7fPVvV/JyAIvWxANPPA8zNlXdqfAQqO4fgEuxJI=
github.com/planetscale/log v0.0.0-20230818230039-324540f3f1cf/go.mod h1:iVAMoEFq8Xkpego+6LNR+RVoTAgMOY0Mjtp1PTAH25U=
github.com/planetscale/psdb v0.0.0-20230808180222-628a2f94488d h1:ud5e7kvr1Uf9EY+qe6odddM6rl2LrMFLMzjkpj/Hrps=
github.com/planetscale/psdb v0.0.0-20230808180222-628a2f94488d/go.mod h1:0JRGa3ZPwB34zjqOfcTnPV7hQOlJCO58+tyxMXel/IA=
github.com/planetscale/psdb v0.0.0-20240109164348-6848e728f6e7 h1:dxdoFKWVDlV1gq8UQC8NWCofLjCEjEHw47gfeojgs28=
github.com/planetscale/psdb v0.0.0-20240109164348-6848e728f6e7/go.mod h1:WZmi4gw3rOK+ryd1inGxgfKwoFV04O7xBCqzWzv0/0U=
github.com/planetscale/vitess-types v0.0.0-20230808182149-da48f87540fa h1:juLtMTt8CSth379yqZZh1v8JP9UpI/wQlBpsfo/qhdE=
github.com/planetscale/vitess-types v0.0.0-20230808182149-da48f87540fa/go.mod h1:xzNXoqcNPoV2oI52AwXf+213wzzf46KSOAjGXHrju7U=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
Expand Down Expand Up @@ -342,8 +344,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA=
golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g=
golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc=
golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
Expand Down Expand Up @@ -416,8 +418,8 @@ golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo=
golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
Expand Down Expand Up @@ -482,8 +484,8 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q=
golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
Expand Down Expand Up @@ -658,8 +660,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I=
google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/DataDog/dd-trace-go.v1 v1.57.0 h1:fhF8rUmpJhXT6wQVKcfm0Wc4VfBwthgLabjQOJR2HV0=
gopkg.in/DataDog/dd-trace-go.v1 v1.57.0/go.mod h1:ANES99E9pKUJ22wHBQkMsrt776+lz7V1nwAanwibU7U=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
Expand Down
40 changes: 40 additions & 0 deletions internal/session/session.go
@@ -0,0 +1,40 @@
package session

import (
"math/rand"

gonanoid "github.com/matoous/go-nanoid/v2"
psdbv1alpha1 "github.com/planetscale/psdb/types/psdb/v1alpha1"
querypb "github.com/planetscale/vitess-types/gen/vitess/query/v16"
vtgatepb "github.com/planetscale/vitess-types/gen/vitess/vtgate/v16"
)

func UUID(session *psdbv1alpha1.Session) string {
if session != nil && session.VitessSession != nil {
return session.VitessSession.SessionUUID
}
return ""
}

func New() *psdbv1alpha1.Session {
// we're not doing anything with the signature, and it's opaque bytes
// to clients, so just generate a random 32 bytes
var signature [32]byte
rand.Read(signature[:])

session := &psdbv1alpha1.Session{
Signature: signature[:],
VitessSession: &vtgatepb.Session{
Options: &querypb.ExecuteOptions{
IncludedFields: querypb.ExecuteOptions_ALL,
Workload: querypb.ExecuteOptions_UNSPECIFIED,
ClientFoundRows: true,
},
Autocommit: true,
DDLStrategy: "direct",
SessionUUID: gonanoid.Must(),
EnableSystemSettings: true,
},
}
return session
}
50 changes: 50 additions & 0 deletions internal/vitess/vitess.go
@@ -0,0 +1,50 @@
package vitess

import (
"context"
"unsafe"

querypb "github.com/planetscale/vitess-types/gen/vitess/query/v16"
vtrpcpb "github.com/planetscale/vitess-types/gen/vitess/vtrpc/v16"
"vitess.io/vitess/go/sqltypes"
vitessquerypb "vitess.io/vitess/go/vt/proto/query"
)

// Code returns the error code if it's a vtError.
// If err is nil, it returns ok.
func Code(err error) vtrpcpb.Code {
if err == nil {
return vtrpcpb.Code_OK
}

// Handle some special cases.
switch err {
case context.Canceled:
return vtrpcpb.Code_CANCELED
case context.DeadlineExceeded:
return vtrpcpb.Code_DEADLINE_EXCEEDED
}
return vtrpcpb.Code_UNKNOWN
}

func ToVTRPC(err error) *vtrpcpb.RPCError {
if err == nil {
return nil
}
return &vtrpcpb.RPCError{
Code: Code(err),
Message: err.Error(),
}
}

func ResultToProto(qr *sqltypes.Result) *querypb.QueryResult {
return unsafeCastQueryResult(sqltypes.ResultToProto3(qr))
}

func castTo[RT any, T any](a T) RT {
return (*(*RT)(unsafe.Pointer(&a)))
}

func unsafeCastQueryResult(qr *vitessquerypb.QueryResult) *querypb.QueryResult {
return castTo[*querypb.QueryResult](qr)
}

0 comments on commit a2701f4

Please sign in to comment.