diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index fb9a93c0..a48507fc 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -1,13 +1,10 @@ name: Build and Run Tests -on: - pull_request: - push: - branches: - - master +on: [pull_request] jobs: build: name: Build strategy: + fail-fast: false matrix: os: [ubuntu-latest, windows-2019, macos-latest] @@ -25,6 +22,9 @@ jobs: if: ${{ matrix.os != 'windows-2019' }} run: ./build.sh --generate-protos + - name: Misc tests + run: go test -v ./esdb -run TestMisc + tests: needs: build name: Tests diff --git a/.github/workflows/test-dispatch.yml b/.github/workflows/test-dispatch.yml new file mode 100644 index 00000000..44ca8a6e --- /dev/null +++ b/.github/workflows/test-dispatch.yml @@ -0,0 +1,16 @@ +name: "Dispatch" + +on: + workflow_dispatch: + inputs: + version: + description: "Version tag" + required: true + type: string + +jobs: + test: + name: Test + uses: ./.github/workflows/tests.yml + with: + esdb_version: ${{ inputs.version }} diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 2d910d18..d3fb22c3 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -18,12 +18,16 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 + + - name: Generate certificates + run: docker-compose --file docker-compose.yml up - name: Run Go Tests run: go test -v ./esdb -run Test${{ matrix.test }} env: EVENTSTORE_DOCKER_TAG_ENV: ${{ inputs.esdb_version }} + EVENTSTORE_INSECURE: true secure: name: Secure @@ -35,6 +39,8 @@ jobs: runs-on: ubuntu-latest steps: + - uses: actions/checkout@v3 + - name: Generate certificates run: docker-compose --file docker-compose.yml up @@ -43,11 +49,7 @@ jobs: env: EVENTSTORE_DOCKER_TAG_ENV: ${{ inputs.esdb_version }} - SECURE: true - - - name: Shutdown secure - run: docker-compose -f docker-compose.yml down - if: always() + EVENTSTORE_INSECURE: false cluster: name: Cluster @@ -70,8 +72,8 @@ jobs: env: EVENTSTORE_DOCKER_TAG_ENV: ${{ inputs.esdb_version }} + EVENTSTORE_INSECURE: false CLUSTER: true - SECURE: true - name: Shutdown cluster run: docker-compose -f cluster-docker-compose.yml down diff --git a/Makefile b/Makefile index cb671722..5d380dbc 100644 --- a/Makefile +++ b/Makefile @@ -1,24 +1,58 @@ +.DEFAULT_GOAL := help + +help: + @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) + +OS := $(shell uname) + +GENERATE_PROTOS_FLAG := + +.PHONY: build +build: ## Build based on the OS. +ifeq ($(OS),Linux) + ./build.sh $(GENERATE_PROTOS_FLAG) +else ifeq ($(OS),Darwin) + ./build.sh $(GENERATE_PROTOS_FLAG) +else + .\build.ps1 $(GENERATE_PROTOS_FLAG) +endif + +.PHONY: generate-protos +generate-protos: ## Regenerate protobuf and gRPC files while building. +ifeq ($(OS),Linux) + $(eval GENERATE_PROTOS_FLAG := --generate-protos) +else + $(eval GENERATE_PROTOS_FLAG := -generateProtos) +endif + build + + DOCKER_COMPOSE_CMD := $(shell command -v docker-compose 2> /dev/null) ifeq ($(DOCKER_COMPOSE_CMD),) DOCKER_COMPOSE_CMD := docker compose endif .PHONY: singleNode -singleNode: - @go test -v ./esdb -run 'TestStreams|TestPersistentSubscriptions|TestExpectations' +singleNode: ## Run tests against a single node. + @EVENTSTORE_INSECURE=true go test -count=1 -v ./esdb -run 'TestStreams|TestPersistentSubscriptions|Expectations' .PHONY: secureNode -secureNode: +secureNode: ## Run tests against a secure node. @$(DOCKER_COMPOSE_CMD) down -v @$(DOCKER_COMPOSE_CMD) pull @$(DOCKER_COMPOSE_CMD) up -d - @EVENTSTORE_INSECURE=FALSE go test -v ./esdb -run 'TestStreams|TestPersistentSubscriptions' + @EVENTSTORE_INSECURE=false go test -v ./esdb -run 'TestStreams|TestPersistentSubscriptions' @$(DOCKER_COMPOSE_CMD) down .PHONY: clusterNode -clusterNode: - @$(DOCKER_COMPOSE_CMD) -f cluster-docker-compose.yml down -v +clusterNode: ## Run tests against a cluster node. + @$(DOCKER_COMPOSE_CMD) -f cluster-docker-compose.yml down --remove-orphans -v @$(DOCKER_COMPOSE_CMD) -f cluster-docker-compose.yml pull @$(DOCKER_COMPOSE_CMD) -f cluster-docker-compose.yml up -d - @EVENTSTORE_INSECURE=FALSE go test -v ./esdb -run 'TestStreams|TestPersistentSubscriptions' - @$(DOCKER_COMPOSE_CMD) -f cluster-docker-compose.yml down + @echo "Waiting for services to be fully ready..." + @sleep 5 + @EVENTSTORE_INSECURE=false CLUSTER=true go test -count=1 -v ./esdb -run 'TestStreams|TestPersistentSubscriptions' + @$(DOCKER_COMPOSE_CMD) -f cluster-docker-compose.yml down --remove-orphans + +.PHONY: test +test: singleNode secureNode clusterNode ## Run all tests. \ No newline at end of file diff --git a/README.md b/README.md index 00821c07..dabcf14c 100644 --- a/README.md +++ b/README.md @@ -47,17 +47,8 @@ To also regenerate protobuf and gRPC files while building ## Run tests -Run docker compose for generating certificates: - -```shell -docker-compose up -docker-compose down ``` - -```shell -docker-compose -f cluster-docker-compose.yml up -d -go test ./esdb -docker-compose -f cluster-docker-compose.yml down +make test ``` By default the tests use `ghcr.io/eventstore/eventstore:ci`. To override this, set the `EVENTSTORE_DOCKER_TAG_ENV` environment variable to the tag you wish to use: diff --git a/esdb/append_test.go b/esdb/append_test.go index a78671f1..597239ca 100644 --- a/esdb/append_test.go +++ b/esdb/append_test.go @@ -115,7 +115,9 @@ func appendWithInvalidStreamRevision(db *esdb.Client) TestCall { func appendToSystemStreamWithIncorrectCredentials(container *Container) TestCall { return func(t *testing.T) { - if container == nil { + isInsecure := GetEnvOrDefault("EVENTSTORE_INSECURE", "true") == "true" + + if container == nil || isInsecure { t.Skip() } diff --git a/esdb/client_test.go b/esdb/client_test.go index d70a731f..c64a51bd 100644 --- a/esdb/client_test.go +++ b/esdb/client_test.go @@ -1,43 +1,73 @@ package esdb_test import ( - "os" "testing" ) -type DatabaseType int - -const ( - Empty DatabaseType = iota - Prepopulated - Insecure - Cluster -) - func TestStreams(t *testing.T) { emptyContainer, emptyClient := CreateEmptyDatabase(t) - defer emptyContainer.Close() - defer emptyClient.Close() + + if emptyContainer != nil { + defer emptyContainer.Close() + } + + if emptyClient != nil { + defer emptyClient.Close() + } populatedContainer, populatedClient := CreatePopulatedDatabase(t) - defer populatedContainer.Close() - defer populatedClient.Close() + + if populatedContainer != nil { + defer populatedContainer.Close() + } + + if populatedClient != nil { + defer populatedClient.Close() + } + + isCluster := GetEnvOrDefault("CLUSTER", "false") == "true" + isInsecure := GetEnvOrDefault("EVENTSTORE_INSECURE", "true") == "true" + + if isCluster { + ClusterTests(t) + } AppendTests(t, emptyContainer, emptyClient) ReadStreamTests(t, emptyClient, populatedClient) SubscriptionTests(t, emptyClient, populatedClient) DeleteTests(t, emptyClient) ConnectionTests(t, emptyContainer) + + if !isCluster { + if !isInsecure { + TLSTests(t, emptyContainer) + SecureAuthenticationTests(t, emptyClient) + } else { + InsecureAuthenticationTests(t, emptyClient) + } + } } func TestPersistentSubscriptions(t *testing.T) { emptyContainer, emptyClient := CreateEmptyDatabase(t) - defer emptyContainer.Close() - defer emptyClient.Close() + + if emptyContainer != nil { + defer emptyContainer.Close() + } + + if emptyClient != nil { + defer emptyClient.Close() + } populatedContainer, populatedClient := CreatePopulatedDatabase(t) - defer populatedContainer.Close() - defer populatedClient.Close() + + if populatedContainer != nil { + defer populatedContainer.Close() + } + + if populatedClient != nil { + defer populatedClient.Close() + } PersistentSubReadTests(t, emptyClient) PersistentSubTests(t, emptyClient, populatedClient) @@ -45,25 +75,18 @@ func TestPersistentSubscriptions(t *testing.T) { func TestExpectations(t *testing.T) { populatedContainer, populatedClient := CreatePopulatedDatabase(t) - defer populatedContainer.Close() - defer populatedClient.Close() + + if populatedContainer != nil { + defer populatedContainer.Close() + } + + if populatedClient != nil { + defer populatedClient.Close() + } ReadAllTests(t, populatedClient) } func TestMisc(t *testing.T) { - os.Setenv("EVENTSTORE_INSECURE", "false") - emptyContainer, emptyClient := CreateEmptyDatabase(t) - defer emptyContainer.Close() - defer emptyClient.Close() - - TLSTests(t, emptyContainer) - SecureAuthenticationTests(t, emptyClient) - - os.Setenv("EVENTSTORE_INSECURE", "true") - insecureContainer, insecureClient := CreateEmptyDatabase(t) - defer insecureContainer.Close() - defer insecureClient.Close() - - InsecureAuthenticationTests(t, insecureClient) + // tests that don't require a database } diff --git a/esdb/connection_test.go b/esdb/connection_test.go index df993cbb..2f41975d 100644 --- a/esdb/connection_test.go +++ b/esdb/connection_test.go @@ -18,7 +18,7 @@ func ConnectionTests(t *testing.T, emptyDB *Container) { func closeConnection(container *Container) TestCall { return func(t *testing.T) { - db := CreateTestClient(container, t) + db := GetClient(t, container) testEvent := createTestEvent() testEvent.EventID = uuid.FromStringOrNil("38fffbc2-339e-11ea-8c7b-784f43837872") diff --git a/esdb/containers_test.go b/esdb/containers_test.go index 5f8d59f9..593aac7d 100644 --- a/esdb/containers_test.go +++ b/esdb/containers_test.go @@ -53,7 +53,7 @@ var defaultEventStoreDockerConfig = EventStoreDockerConfig{ Port: DEFAULT_EVENTSTORE_DOCKER_PORT, } -func getEnvOrDefault(key, defaultValue string) string { +func GetEnvOrDefault(key, defaultValue string) string { if value, exists := os.LookupEnv(key); exists { return value } @@ -61,9 +61,9 @@ func getEnvOrDefault(key, defaultValue string) string { } func readEnvironmentVariables(config EventStoreDockerConfig) EventStoreDockerConfig { - config.Repository = getEnvOrDefault(EVENTSTORE_DOCKER_REPOSITORY_ENV, config.Repository) - config.Tag = getEnvOrDefault(EVENTSTORE_DOCKER_TAG_ENV, config.Tag) - config.Port = getEnvOrDefault(EVENTSTORE_DOCKER_PORT_ENV, config.Port) + config.Repository = GetEnvOrDefault(EVENTSTORE_DOCKER_REPOSITORY_ENV, config.Repository) + config.Tag = GetEnvOrDefault(EVENTSTORE_DOCKER_TAG_ENV, config.Tag) + config.Port = GetEnvOrDefault(EVENTSTORE_DOCKER_PORT_ENV, config.Port) fmt.Println(spew.Sdump(config)) return config @@ -113,8 +113,12 @@ func getDockerOptions() *dockertest.RunOptions { config := readEnvironmentVariables(defaultEventStoreDockerConfig) var envs []string - if insecureValue, exists := os.LookupEnv("EVENTSTORE_INSECURE"); exists { - envs = append(envs, fmt.Sprintf("EVENTSTORE_INSECURE=%s", insecureValue)) + if isInsecure, exists := os.LookupEnv("EVENTSTORE_INSECURE"); exists { + envs = append(envs, fmt.Sprintf("EVENTSTORE_INSECURE=%s", isInsecure)) + } + + if len(envs) == 0 { + envs = append(envs, fmt.Sprintf("EVENTSTORE_INSECURE=%s", "true")) } return &dockertest.RunOptions{ @@ -133,15 +137,19 @@ func (container *Container) Close() { } // TODO - Keep retrying when the healthcheck failed. We should try creating a new container instead of failing the test. -func getDatabase(t *testing.T, options *dockertest.RunOptions, secureHealthCheck bool) *Container { +func getDatabase(t *testing.T, options *dockertest.RunOptions) *Container { pool, err := dockertest.NewPool("") if err != nil { t.Fatalf("Could not connect to docker. Reason: %v", err) } - err = setTLSContext(options) - if err != nil { - t.Fatal(err) + isInsecure := GetEnvOrDefault("EVENTSTORE_INSECURE", "true") == "true" + + if !isInsecure { + err = setTLSContext(options) + if err != nil { + t.Fatal(err) + } } fmt.Println("Starting docker container...") @@ -175,7 +183,7 @@ func getDatabase(t *testing.T, options *dockertest.RunOptions, secureHealthCheck } scheme := "https" - if !secureHealthCheck { + if isInsecure { scheme = "http" } @@ -272,33 +280,38 @@ func getRootDir() (string, error) { } func GetClient(t *testing.T, container *Container) *esdb.Client { - if insecureValue, exists := os.LookupEnv("EVENTSTORE_INSECURE"); exists { - if insecureValue == "true" { - return createTestClient(fmt.Sprintf("esdb://%s?tls=false", container.Endpoint), container, t) - } + isInsecure := GetEnvOrDefault("EVENTSTORE_INSECURE", "true") == "true" + isCluster := GetEnvOrDefault("CLUSTER", "false") == "true" + + if isCluster { + return CreateClient("esdb://admin:changeit@localhost:2111,localhost:2112,localhost:2113?nodepreference=leader&tlsverifycert=false", t) + } else if isInsecure { + return createTestClient(fmt.Sprintf("esdb://%s?tls=false", container.Endpoint), container, t) } - return createTestClient(fmt.Sprintf("esdb://admin:changeit@%s?tlsverifycert=false", container.Endpoint), container, t) + return createTestClient(fmt.Sprintf("esdb://admin:changeit@%s?tlsverifycert=false&tls=true", container.Endpoint), container, t) } func CreateEmptyDatabase(t *testing.T) (*Container, *esdb.Client) { - isInsecure := getEnvOrDefault("EVENTSTORE_INSECURE", "false") != "true" + isInsecure := GetEnvOrDefault("EVENTSTORE_INSECURE", "true") == "true" + var container *Container + var client *esdb.Client - if isInsecure { - t.Log("[debug] starting insecure database container...") + if GetEnvOrDefault("CLUSTER", "false") == "true" { + container = nil + client = GetClient(t, container) } else { - t.Log("[debug] starting empty database container...") - } + if isInsecure { + t.Log("[debug] starting insecure database container...") + } else { + t.Log("[debug] starting empty database container...") + } - if getEnvOrDefault("CLUSTER", "false") == "true" { - return nil, GetClient(t, nil) + options := getDockerOptions() + container = getDatabase(t, options) + client = GetClient(t, container) } - options := getDockerOptions() - - container := getDatabase(t, options, isInsecure) - client := GetClient(t, container) - WaitForAdminToBeAvailable(t, client) WaitForLeaderToBeElected(t, client) @@ -306,19 +319,28 @@ func CreateEmptyDatabase(t *testing.T) (*Container, *esdb.Client) { } func CreatePopulatedDatabase(t *testing.T) (*Container, *esdb.Client) { - t.Log("[debug] starting prepopulated database container...") + isInsecure := GetEnvOrDefault("EVENTSTORE_INSECURE", "true") == "true" + + if GetEnvOrDefault("CLUSTER", "false") == "true" { + return nil, nil + } else { + if isInsecure { + t.Log("[debug] starting prepopulated insecure database container...") + } else { + t.Log("[debug] starting prepopulated database container...") + } - options := getDockerOptions() - options.Env = append(options.Env, "EVENTSTORE_DB=/data/integration-tests", "EVENTSTORE_MEM_DB=false") + options := getDockerOptions() + options.Env = append(options.Env, "EVENTSTORE_DB=/data/integration-tests", "EVENTSTORE_MEM_DB=false") - container := getDatabase(t, options, true) - client := GetClient(t, container) + container := getDatabase(t, options) + client := GetClient(t, container) - return container, client -} + WaitForAdminToBeAvailable(t, client) + + return container, client + } -func CreateTestClient(container *Container, t *testing.T) *esdb.Client { - return createTestClient(fmt.Sprintf("esdb://admin:changeit@%s?tlsverifycert=false", container.Endpoint), container, t) } func createTestClient(conn string, container *Container, t *testing.T) *esdb.Client { diff --git a/esdb/read_all_test.go b/esdb/read_all_test.go index 7d29e564..896f0e4c 100644 --- a/esdb/read_all_test.go +++ b/esdb/read_all_test.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "io/ioutil" + "os" "testing" "time" @@ -24,7 +25,7 @@ func ReadAllTests(t *testing.T, populatedDBClient *esdb.Client) { func readAllEventsForwardsFromZeroPosition(db *esdb.Client) TestCall { return func(t *testing.T) { - eventsContent, err := ioutil.ReadFile("../resources/test/all-e0-e10.json") + eventsContent, err := os.ReadFile("../resources/test/all-e0-e10.json") require.NoError(t, err) var testEvents []TestEvent @@ -120,7 +121,7 @@ func readAllEventsForwardsFromNonZeroPosition(db *esdb.Client) TestCall { func readAllEventsBackwardsFromZeroPosition(db *esdb.Client) TestCall { return func(t *testing.T) { - eventsContent, err := ioutil.ReadFile("../resources/test/all-back-e0-e10.json") + eventsContent, err := os.ReadFile("../resources/test/all-back-e0-e10.json") require.NoError(t, err) var testEvents []TestEvent diff --git a/esdb/read_stream_test.go b/esdb/read_stream_test.go index 1d157d21..88fd00e1 100644 --- a/esdb/read_stream_test.go +++ b/esdb/read_stream_test.go @@ -266,6 +266,12 @@ func readStreamWithMaxAge(db *esdb.Client) TestCall { func readStreamWithCredentialsOverride(db *esdb.Client) TestCall { return func(t *testing.T) { + isInsecure := GetEnvOrDefault("EVENTSTORE_INSECURE", "true") == "true" + + if isInsecure { + t.Skip() + } + streamName := NAME_GENERATOR.Generate() opts := esdb.AppendToStreamOptions{ Authenticated: &esdb.Credentials{ diff --git a/esdb/subscriptions_test.go b/esdb/subscriptions_test.go index ab33dc79..97438e73 100644 --- a/esdb/subscriptions_test.go +++ b/esdb/subscriptions_test.go @@ -26,6 +26,10 @@ func SubscriptionTests(t *testing.T, emptyDBClient *esdb.Client, populatedDBClie func streamSubscriptionDeliversAllEventsInStreamAndListensForNewEvents(db *esdb.Client) TestCall { return func(t *testing.T) { + if db == nil { + t.Skip() + } + streamID := "dataset20M-0" testEvent := createTestEvent() testEvent.EventID = uuid.FromStringOrNil("84c8e36c-4e64-11ea-8b59-b7f658acfc9f") @@ -90,6 +94,10 @@ type Position struct { func allSubscriptionWithFilterDeliversCorrectEvents(db *esdb.Client) TestCall { return func(t *testing.T) { + if db == nil { + t.Skip() + } + positionsContent, err := ioutil.ReadFile("../resources/test/all-positions-filtered-stream-194-e0-e30.json") require.NoError(t, err) versionsContent, err := ioutil.ReadFile("../resources/test/all-versions-filtered-stream-194-e0-e30.json") @@ -177,6 +185,10 @@ func subscriptionAllFilter(db *esdb.Client) TestCall { func connectionClosing(db *esdb.Client) TestCall { return func(t *testing.T) { + if db == nil { + t.Skip() + } + var droppedEvent sync.WaitGroup subscription, err := db.SubscribeToStream(context.Background(), "dataset20M-0", esdb.SubscribeToStreamOptions{ @@ -216,6 +228,10 @@ func connectionClosing(db *esdb.Client) TestCall { func subscriptionAllWithCredentialsOverride(db *esdb.Client) TestCall { return func(t *testing.T) { + if db == nil { + t.Skip() + } + opts := esdb.SubscribeToAllOptions{ Authenticated: &esdb.Credentials{ Login: "admin", diff --git a/go.mod b/go.mod index 8e346a86..a430e160 100644 --- a/go.mod +++ b/go.mod @@ -16,6 +16,5 @@ require ( golang.org/x/net v0.7.0 // indirect google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f google.golang.org/grpc v1.53.0 - google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 // indirect google.golang.org/protobuf v1.28.1 ) diff --git a/go.sum b/go.sum index d34d2a79..43d8ba1a 100644 --- a/go.sum +++ b/go.sum @@ -1180,9 +1180,8 @@ google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCD google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0 h1:M1YKkFIboKNieVO5DLUEVzQfGwJD30Nv2jfUgzb5UcE= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 h1:rNBFJjBCOgVr9pWD7rs/knKL4FRTKgpZmsRfV214zcA= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0/go.mod h1:Dk1tviKTvMCz5tvh7t+fh94dhmQVHuCt2OzJB3CTW9Y= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/protos/code/code.pb.go b/protos/code/code.pb.go index 6cc1ba57..5224f9ba 100644 --- a/protos/code/code.pb.go +++ b/protos/code/code.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.0 // source: code.proto @@ -36,7 +36,6 @@ const ( // The canonical error codes for gRPC APIs. // -// // Sometimes multiple error codes may apply. Services should return // the most specific error code that applies. For example, prefer // `OUT_OF_RANGE` over `FAILED_PRECONDITION` if both codes apply. @@ -118,15 +117,16 @@ const ( // // Service implementors can use the following guidelines to decide // between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`: - // (a) Use `UNAVAILABLE` if the client can retry just the failing call. - // (b) Use `ABORTED` if the client should retry at a higher level - // (e.g., when a client-specified test-and-set fails, indicating the - // client should restart a read-modify-write sequence). - // (c) Use `FAILED_PRECONDITION` if the client should not retry until - // the system state has been explicitly fixed. E.g., if an "rmdir" - // fails because the directory is non-empty, `FAILED_PRECONDITION` - // should be returned since the client should not retry unless - // the files are deleted from the directory. + // + // (a) Use `UNAVAILABLE` if the client can retry just the failing call. + // (b) Use `ABORTED` if the client should retry at a higher level + // (e.g., when a client-specified test-and-set fails, indicating the + // client should restart a read-modify-write sequence). + // (c) Use `FAILED_PRECONDITION` if the client should not retry until + // the system state has been explicitly fixed. E.g., if an "rmdir" + // fails because the directory is non-empty, `FAILED_PRECONDITION` + // should be returned since the client should not retry unless + // the files are deleted from the directory. // // HTTP Mapping: 400 Bad Request Code_FAILED_PRECONDITION Code = 9 diff --git a/protos/gossip/gossip.pb.go b/protos/gossip/gossip.pb.go index bdef2de9..e423c579 100644 --- a/protos/gossip/gossip.pb.go +++ b/protos/gossip/gossip.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.0 // source: gossip.proto diff --git a/protos/gossip/gossip_grpc.pb.go b/protos/gossip/gossip_grpc.pb.go index d8e22fa8..12dec1bd 100644 --- a/protos/gossip/gossip_grpc.pb.go +++ b/protos/gossip/gossip_grpc.pb.go @@ -1,8 +1,4 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.2.0 -// - protoc v3.20.0 -// source: gossip.proto package gossip diff --git a/protos/persistent/persistent.pb.go b/protos/persistent/persistent.pb.go index a9933acc..f66051bc 100644 --- a/protos/persistent/persistent.pb.go +++ b/protos/persistent/persistent.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.0 // source: persistent.proto @@ -180,6 +180,7 @@ type ReadReq struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Content: + // // *ReadReq_Options_ // *ReadReq_Ack_ // *ReadReq_Nack_ @@ -274,6 +275,7 @@ type ReadResp struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Content: + // // *ReadResp_Event // *ReadResp_SubscriptionConfirmation_ Content isReadResp_Content `protobuf_oneof:"content"` @@ -1145,6 +1147,7 @@ type ReadReq_Options struct { unknownFields protoimpl.UnknownFields // Types that are assignable to StreamOption: + // // *ReadReq_Options_StreamIdentifier // *ReadReq_Options_All StreamOption isReadReq_Options_StreamOption `protobuf_oneof:"stream_option"` @@ -1375,6 +1378,7 @@ type ReadReq_Options_UUIDOption struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Content: + // // *ReadReq_Options_UUIDOption_Structured // *ReadReq_Options_UUIDOption_String_ Content isReadReq_Options_UUIDOption_Content `protobuf_oneof:"content"` @@ -1457,10 +1461,12 @@ type ReadResp_ReadEvent struct { Event *ReadResp_ReadEvent_RecordedEvent `protobuf:"bytes,1,opt,name=event,proto3" json:"event,omitempty"` Link *ReadResp_ReadEvent_RecordedEvent `protobuf:"bytes,2,opt,name=link,proto3" json:"link,omitempty"` // Types that are assignable to Position: + // // *ReadResp_ReadEvent_CommitPosition // *ReadResp_ReadEvent_NoPosition Position isReadResp_ReadEvent_Position `protobuf_oneof:"position"` // Types that are assignable to Count: + // // *ReadResp_ReadEvent_RetryCount // *ReadResp_ReadEvent_NoRetryCount Count isReadResp_ReadEvent_Count `protobuf_oneof:"count"` @@ -1742,6 +1748,7 @@ type CreateReq_Options struct { unknownFields protoimpl.UnknownFields // Types that are assignable to StreamOption: + // // *CreateReq_Options_Stream // *CreateReq_Options_All StreamOption isCreateReq_Options_StreamOption `protobuf_oneof:"stream_option"` @@ -1849,6 +1856,7 @@ type CreateReq_StreamOptions struct { StreamIdentifier *shared.StreamIdentifier `protobuf:"bytes,1,opt,name=stream_identifier,json=streamIdentifier,proto3" json:"stream_identifier,omitempty"` // Types that are assignable to RevisionOption: + // // *CreateReq_StreamOptions_Revision // *CreateReq_StreamOptions_Start // *CreateReq_StreamOptions_End @@ -1950,11 +1958,13 @@ type CreateReq_AllOptions struct { unknownFields protoimpl.UnknownFields // Types that are assignable to AllOption: + // // *CreateReq_AllOptions_Position // *CreateReq_AllOptions_Start // *CreateReq_AllOptions_End AllOption isCreateReq_AllOptions_AllOption `protobuf_oneof:"all_option"` // Types that are assignable to FilterOption: + // // *CreateReq_AllOptions_Filter // *CreateReq_AllOptions_NoFilter FilterOption isCreateReq_AllOptions_FilterOption `protobuf_oneof:"filter_option"` @@ -2153,10 +2163,12 @@ type CreateReq_Settings struct { // Deprecated: Do not use. NamedConsumerStrategy CreateReq_ConsumerStrategy `protobuf:"varint,13,opt,name=named_consumer_strategy,json=namedConsumerStrategy,proto3,enum=event_store.client.persistent_subscriptions.CreateReq_ConsumerStrategy" json:"named_consumer_strategy,omitempty"` // Types that are assignable to MessageTimeout: + // // *CreateReq_Settings_MessageTimeoutTicks // *CreateReq_Settings_MessageTimeoutMs MessageTimeout isCreateReq_Settings_MessageTimeout `protobuf_oneof:"message_timeout"` // Types that are assignable to CheckpointAfter: + // // *CreateReq_Settings_CheckpointAfterTicks // *CreateReq_Settings_CheckpointAfterMs CheckpointAfter isCreateReq_Settings_CheckpointAfter `protobuf_oneof:"checkpoint_after"` @@ -2361,10 +2373,12 @@ type CreateReq_AllOptions_FilterOptions struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Filter: + // // *CreateReq_AllOptions_FilterOptions_StreamIdentifier // *CreateReq_AllOptions_FilterOptions_EventType Filter isCreateReq_AllOptions_FilterOptions_Filter `protobuf_oneof:"filter"` // Types that are assignable to Window: + // // *CreateReq_AllOptions_FilterOptions_Max // *CreateReq_AllOptions_FilterOptions_Count Window isCreateReq_AllOptions_FilterOptions_Window `protobuf_oneof:"window"` @@ -2546,6 +2560,7 @@ type UpdateReq_Options struct { unknownFields protoimpl.UnknownFields // Types that are assignable to StreamOption: + // // *UpdateReq_Options_Stream // *UpdateReq_Options_All StreamOption isUpdateReq_Options_StreamOption `protobuf_oneof:"stream_option"` @@ -2653,6 +2668,7 @@ type UpdateReq_StreamOptions struct { StreamIdentifier *shared.StreamIdentifier `protobuf:"bytes,1,opt,name=stream_identifier,json=streamIdentifier,proto3" json:"stream_identifier,omitempty"` // Types that are assignable to RevisionOption: + // // *UpdateReq_StreamOptions_Revision // *UpdateReq_StreamOptions_Start // *UpdateReq_StreamOptions_End @@ -2754,6 +2770,7 @@ type UpdateReq_AllOptions struct { unknownFields protoimpl.UnknownFields // Types that are assignable to AllOption: + // // *UpdateReq_AllOptions_Position // *UpdateReq_AllOptions_Start // *UpdateReq_AllOptions_End @@ -2915,10 +2932,12 @@ type UpdateReq_Settings struct { HistoryBufferSize int32 `protobuf:"varint,12,opt,name=history_buffer_size,json=historyBufferSize,proto3" json:"history_buffer_size,omitempty"` NamedConsumerStrategy UpdateReq_ConsumerStrategy `protobuf:"varint,13,opt,name=named_consumer_strategy,json=namedConsumerStrategy,proto3,enum=event_store.client.persistent_subscriptions.UpdateReq_ConsumerStrategy" json:"named_consumer_strategy,omitempty"` // Types that are assignable to MessageTimeout: + // // *UpdateReq_Settings_MessageTimeoutTicks // *UpdateReq_Settings_MessageTimeoutMs MessageTimeout isUpdateReq_Settings_MessageTimeout `protobuf_oneof:"message_timeout"` // Types that are assignable to CheckpointAfter: + // // *UpdateReq_Settings_CheckpointAfterTicks // *UpdateReq_Settings_CheckpointAfterMs CheckpointAfter isUpdateReq_Settings_CheckpointAfter `protobuf_oneof:"checkpoint_after"` @@ -3114,6 +3133,7 @@ type DeleteReq_Options struct { unknownFields protoimpl.UnknownFields // Types that are assignable to StreamOption: + // // *DeleteReq_Options_StreamIdentifier // *DeleteReq_Options_All StreamOption isDeleteReq_Options_StreamOption `protobuf_oneof:"stream_option"` @@ -3202,6 +3222,7 @@ type GetInfoReq_Options struct { unknownFields protoimpl.UnknownFields // Types that are assignable to StreamOption: + // // *GetInfoReq_Options_StreamIdentifier // *GetInfoReq_Options_All StreamOption isGetInfoReq_Options_StreamOption `protobuf_oneof:"stream_option"` @@ -3457,10 +3478,12 @@ type ReplayParkedReq_Options struct { GroupName string `protobuf:"bytes,1,opt,name=group_name,json=groupName,proto3" json:"group_name,omitempty"` // Types that are assignable to StreamOption: + // // *ReplayParkedReq_Options_StreamIdentifier // *ReplayParkedReq_Options_All StreamOption isReplayParkedReq_Options_StreamOption `protobuf_oneof:"stream_option"` // Types that are assignable to StopAtOption: + // // *ReplayParkedReq_Options_StopAt // *ReplayParkedReq_Options_NoLimit StopAtOption isReplayParkedReq_Options_StopAtOption `protobuf_oneof:"stop_at_option"` @@ -3585,6 +3608,7 @@ type ListReq_Options struct { unknownFields protoimpl.UnknownFields // Types that are assignable to ListOption: + // // *ListReq_Options_ListAllSubscriptions // *ListReq_Options_ListForStream ListOption isListReq_Options_ListOption `protobuf_oneof:"list_option"` @@ -3665,6 +3689,7 @@ type ListReq_StreamOption struct { unknownFields protoimpl.UnknownFields // Types that are assignable to StreamOption: + // // *ListReq_StreamOption_Stream // *ListReq_StreamOption_All StreamOption isListReq_StreamOption_StreamOption `protobuf_oneof:"stream_option"` diff --git a/protos/persistent/persistent_grpc.pb.go b/protos/persistent/persistent_grpc.pb.go index e678e637..14ca2fcb 100644 --- a/protos/persistent/persistent_grpc.pb.go +++ b/protos/persistent/persistent_grpc.pb.go @@ -1,8 +1,4 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.2.0 -// - protoc v3.20.0 -// source: persistent.proto package persistent diff --git a/protos/serverfeatures/serverfeatures.pb.go b/protos/serverfeatures/serverfeatures.pb.go index 84f12c41..f16ba2bf 100644 --- a/protos/serverfeatures/serverfeatures.pb.go +++ b/protos/serverfeatures/serverfeatures.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.0 // source: serverfeatures.proto diff --git a/protos/serverfeatures/serverfeatures_grpc.pb.go b/protos/serverfeatures/serverfeatures_grpc.pb.go index 7e5fac9a..9567ae97 100644 --- a/protos/serverfeatures/serverfeatures_grpc.pb.go +++ b/protos/serverfeatures/serverfeatures_grpc.pb.go @@ -1,8 +1,4 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.2.0 -// - protoc v3.20.0 -// source: serverfeatures.proto package serverfeatures diff --git a/protos/shared/shared.pb.go b/protos/shared/shared.pb.go index 966fc49d..1124dbed 100644 --- a/protos/shared/shared.pb.go +++ b/protos/shared/shared.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.0 // source: shared.proto @@ -27,6 +27,7 @@ type UUID struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Value: + // // *UUID_Structured_ // *UUID_String_ Value isUUID_Value `protobuf_oneof:"value"` @@ -247,10 +248,12 @@ type WrongExpectedVersion struct { unknownFields protoimpl.UnknownFields // Types that are assignable to CurrentStreamRevisionOption: + // // *WrongExpectedVersion_CurrentStreamRevision // *WrongExpectedVersion_CurrentNoStream CurrentStreamRevisionOption isWrongExpectedVersion_CurrentStreamRevisionOption `protobuf_oneof:"current_stream_revision_option"` // Types that are assignable to ExpectedStreamPositionOption: + // // *WrongExpectedVersion_ExpectedStreamPosition // *WrongExpectedVersion_ExpectedAny // *WrongExpectedVersion_ExpectedStreamExists diff --git a/protos/status/status.pb.go b/protos/status/status.pb.go index 8ea7b8c3..bc7f99a6 100644 --- a/protos/status/status.pb.go +++ b/protos/status/status.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.0 // source: status.proto diff --git a/protos/streams/streams.pb.go b/protos/streams/streams.pb.go index 9d3dce6b..f05fac57 100644 --- a/protos/streams/streams.pb.go +++ b/protos/streams/streams.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.0 // source: streams.proto @@ -123,6 +123,7 @@ type ReadResp struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Content: + // // *ReadResp_Event // *ReadResp_Confirmation // *ReadResp_Checkpoint_ @@ -273,6 +274,7 @@ type AppendReq struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Content: + // // *AppendReq_Options_ // *AppendReq_ProposedMessage_ Content isAppendReq_Content `protobuf_oneof:"content"` @@ -353,6 +355,7 @@ type AppendResp struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Result: + // // *AppendResp_Success_ // *AppendResp_WrongExpectedVersion_ Result isAppendResp_Result `protobuf_oneof:"result"` @@ -505,11 +508,13 @@ type BatchAppendResp struct { CorrelationId *shared.UUID `protobuf:"bytes,1,opt,name=correlation_id,json=correlationId,proto3" json:"correlation_id,omitempty"` // Types that are assignable to Result: + // // *BatchAppendResp_Error // *BatchAppendResp_Success_ Result isBatchAppendResp_Result `protobuf_oneof:"result"` StreamIdentifier *shared.StreamIdentifier `protobuf:"bytes,4,opt,name=stream_identifier,json=streamIdentifier,proto3" json:"stream_identifier,omitempty"` // Types that are assignable to ExpectedStreamPosition: + // // *BatchAppendResp_StreamPosition // *BatchAppendResp_NoStream // *BatchAppendResp_Any @@ -716,6 +721,7 @@ type DeleteResp struct { unknownFields protoimpl.UnknownFields // Types that are assignable to PositionOption: + // // *DeleteResp_Position_ // *DeleteResp_NoPosition PositionOption isDeleteResp_PositionOption `protobuf_oneof:"position_option"` @@ -843,6 +849,7 @@ type TombstoneResp struct { unknownFields protoimpl.UnknownFields // Types that are assignable to PositionOption: + // // *TombstoneResp_Position_ // *TombstoneResp_NoPosition PositionOption isTombstoneResp_PositionOption `protobuf_oneof:"position_option"` @@ -923,16 +930,19 @@ type ReadReq_Options struct { unknownFields protoimpl.UnknownFields // Types that are assignable to StreamOption: + // // *ReadReq_Options_Stream // *ReadReq_Options_All StreamOption isReadReq_Options_StreamOption `protobuf_oneof:"stream_option"` ReadDirection ReadReq_Options_ReadDirection `protobuf:"varint,3,opt,name=read_direction,json=readDirection,proto3,enum=event_store.client.streams.ReadReq_Options_ReadDirection" json:"read_direction,omitempty"` ResolveLinks bool `protobuf:"varint,4,opt,name=resolve_links,json=resolveLinks,proto3" json:"resolve_links,omitempty"` // Types that are assignable to CountOption: + // // *ReadReq_Options_Count // *ReadReq_Options_Subscription CountOption isReadReq_Options_CountOption `protobuf_oneof:"count_option"` // Types that are assignable to FilterOption: + // // *ReadReq_Options_Filter // *ReadReq_Options_NoFilter FilterOption isReadReq_Options_FilterOption `protobuf_oneof:"filter_option"` @@ -1118,6 +1128,7 @@ type ReadReq_Options_StreamOptions struct { StreamIdentifier *shared.StreamIdentifier `protobuf:"bytes,1,opt,name=stream_identifier,json=streamIdentifier,proto3" json:"stream_identifier,omitempty"` // Types that are assignable to RevisionOption: + // // *ReadReq_Options_StreamOptions_Revision // *ReadReq_Options_StreamOptions_Start // *ReadReq_Options_StreamOptions_End @@ -1219,6 +1230,7 @@ type ReadReq_Options_AllOptions struct { unknownFields protoimpl.UnknownFields // Types that are assignable to AllOption: + // // *ReadReq_Options_AllOptions_Position // *ReadReq_Options_AllOptions_Start // *ReadReq_Options_AllOptions_End @@ -1406,10 +1418,12 @@ type ReadReq_Options_FilterOptions struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Filter: + // // *ReadReq_Options_FilterOptions_StreamIdentifier // *ReadReq_Options_FilterOptions_EventType Filter isReadReq_Options_FilterOptions_Filter `protobuf_oneof:"filter"` // Types that are assignable to Window: + // // *ReadReq_Options_FilterOptions_Max // *ReadReq_Options_FilterOptions_Count Window isReadReq_Options_FilterOptions_Window `protobuf_oneof:"window"` @@ -1535,6 +1549,7 @@ type ReadReq_Options_UUIDOption struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Content: + // // *ReadReq_Options_UUIDOption_Structured // *ReadReq_Options_UUIDOption_String_ Content isReadReq_Options_UUIDOption_Content `protobuf_oneof:"content"` @@ -1719,6 +1734,7 @@ type ReadResp_ReadEvent struct { Event *ReadResp_ReadEvent_RecordedEvent `protobuf:"bytes,1,opt,name=event,proto3" json:"event,omitempty"` Link *ReadResp_ReadEvent_RecordedEvent `protobuf:"bytes,2,opt,name=link,proto3" json:"link,omitempty"` // Types that are assignable to Position: + // // *ReadResp_ReadEvent_CommitPosition // *ReadResp_ReadEvent_NoPosition Position isReadResp_ReadEvent_Position `protobuf_oneof:"position"` @@ -2066,6 +2082,7 @@ type AppendReq_Options struct { StreamIdentifier *shared.StreamIdentifier `protobuf:"bytes,1,opt,name=stream_identifier,json=streamIdentifier,proto3" json:"stream_identifier,omitempty"` // Types that are assignable to ExpectedStreamRevision: + // // *AppendReq_Options_Revision // *AppendReq_Options_NoStream // *AppendReq_Options_Any @@ -2307,10 +2324,12 @@ type AppendResp_Success struct { unknownFields protoimpl.UnknownFields // Types that are assignable to CurrentRevisionOption: + // // *AppendResp_Success_CurrentRevision // *AppendResp_Success_NoStream CurrentRevisionOption isAppendResp_Success_CurrentRevisionOption `protobuf_oneof:"current_revision_option"` // Types that are assignable to PositionOption: + // // *AppendResp_Success_Position // *AppendResp_Success_NoPosition PositionOption isAppendResp_Success_PositionOption `protobuf_oneof:"position_option"` @@ -2428,19 +2447,23 @@ type AppendResp_WrongExpectedVersion struct { unknownFields protoimpl.UnknownFields // Types that are assignable to CurrentRevisionOption_20_6_0: + // // *AppendResp_WrongExpectedVersion_CurrentRevision_20_6_0 // *AppendResp_WrongExpectedVersion_NoStream_20_6_0 CurrentRevisionOption_20_6_0 isAppendResp_WrongExpectedVersion_CurrentRevisionOption_20_6_0 `protobuf_oneof:"current_revision_option_20_6_0"` // Types that are assignable to ExpectedRevisionOption_20_6_0: + // // *AppendResp_WrongExpectedVersion_ExpectedRevision_20_6_0 // *AppendResp_WrongExpectedVersion_Any_20_6_0 // *AppendResp_WrongExpectedVersion_StreamExists_20_6_0 ExpectedRevisionOption_20_6_0 isAppendResp_WrongExpectedVersion_ExpectedRevisionOption_20_6_0 `protobuf_oneof:"expected_revision_option_20_6_0"` // Types that are assignable to CurrentRevisionOption: + // // *AppendResp_WrongExpectedVersion_CurrentRevision // *AppendResp_WrongExpectedVersion_CurrentNoStream CurrentRevisionOption isAppendResp_WrongExpectedVersion_CurrentRevisionOption `protobuf_oneof:"current_revision_option"` // Types that are assignable to ExpectedRevisionOption: + // // *AppendResp_WrongExpectedVersion_ExpectedRevision // *AppendResp_WrongExpectedVersion_ExpectedAny // *AppendResp_WrongExpectedVersion_ExpectedStreamExists @@ -2685,6 +2708,7 @@ type BatchAppendReq_Options struct { StreamIdentifier *shared.StreamIdentifier `protobuf:"bytes,1,opt,name=stream_identifier,json=streamIdentifier,proto3" json:"stream_identifier,omitempty"` // Types that are assignable to ExpectedStreamPosition: + // // *BatchAppendReq_Options_StreamPosition // *BatchAppendReq_Options_NoStream // *BatchAppendReq_Options_Any @@ -2879,10 +2903,12 @@ type BatchAppendResp_Success struct { unknownFields protoimpl.UnknownFields // Types that are assignable to CurrentRevisionOption: + // // *BatchAppendResp_Success_CurrentRevision // *BatchAppendResp_Success_NoStream CurrentRevisionOption isBatchAppendResp_Success_CurrentRevisionOption `protobuf_oneof:"current_revision_option"` // Types that are assignable to PositionOption: + // // *BatchAppendResp_Success_Position // *BatchAppendResp_Success_NoPosition PositionOption isBatchAppendResp_Success_PositionOption `protobuf_oneof:"position_option"` @@ -3001,6 +3027,7 @@ type DeleteReq_Options struct { StreamIdentifier *shared.StreamIdentifier `protobuf:"bytes,1,opt,name=stream_identifier,json=streamIdentifier,proto3" json:"stream_identifier,omitempty"` // Types that are assignable to ExpectedStreamRevision: + // // *DeleteReq_Options_Revision // *DeleteReq_Options_NoStream // *DeleteReq_Options_Any @@ -3172,6 +3199,7 @@ type TombstoneReq_Options struct { StreamIdentifier *shared.StreamIdentifier `protobuf:"bytes,1,opt,name=stream_identifier,json=streamIdentifier,proto3" json:"stream_identifier,omitempty"` // Types that are assignable to ExpectedStreamRevision: + // // *TombstoneReq_Options_Revision // *TombstoneReq_Options_NoStream // *TombstoneReq_Options_Any diff --git a/protos/streams/streams_grpc.pb.go b/protos/streams/streams_grpc.pb.go index d15322ad..d492a6f3 100644 --- a/protos/streams/streams_grpc.pb.go +++ b/protos/streams/streams_grpc.pb.go @@ -1,8 +1,4 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.2.0 -// - protoc v3.20.0 -// source: streams.proto package streams