diff --git a/cloudstate/crdt/flag_test.go b/cloudstate/crdt/flag_test.go index 9798a39..90f34c0 100644 --- a/cloudstate/crdt/flag_test.go +++ b/cloudstate/crdt/flag_test.go @@ -60,9 +60,6 @@ func TestFlag(t *testing.T) { }) t.Run("should return its state", func(t *testing.T) { f := NewFlag() - // if encDecState(f.State()).GetFlag().GetValue() { - // t.Fatal("value should be false but was not") - // } f.resetDelta() f.Enable() if !f.Value() { diff --git a/cloudstate/crdt/lwwregister_test.go b/cloudstate/crdt/lwwregister_test.go index cfcd984..d406461 100644 --- a/cloudstate/crdt/lwwregister_test.go +++ b/cloudstate/crdt/lwwregister_test.go @@ -134,7 +134,6 @@ func TestLWWRegister(t *testing.T) { t.Fatal(err) } r := NewLWWRegister(foo) - // r.Set(encoding.Struct(Example{Field1: "foo"})) // TODO: this is not the same, check bar, err := encoding.Struct(Example{Field1: "bar"}) if err != nil { t.Fatal(err) diff --git a/cloudstate/crdt/ormap_test.go b/cloudstate/crdt/ormap_test.go index dc13abb..2b55c52 100644 --- a/cloudstate/crdt/ormap_test.go +++ b/cloudstate/crdt/ormap_test.go @@ -124,9 +124,6 @@ func TestORMap(t *testing.T) { if !contains(delta.GetOrmap().GetRemoved(), "one", "two") { t.Fatalf("delta.removed should contain keys 'one','two' but did not: %v", delta.GetOrmap().GetRemoved()) } - // if d := m.Delta(); d != nil { - // t.Fatalf("m.Delta(): %v; want: %v", d, nil) - // } }) t.Run("should generate an update delta", func(t *testing.T) { m := NewORMap() @@ -149,9 +146,6 @@ func TestORMap(t *testing.T) { if i := entry.GetDelta().GetGcounter().GetIncrement(); i != 5 { t.Fatalf("increment: %v; want: %v", i, 5) } - // if d := m.Delta(); d != nil { - // t.Fatalf("m.Delta(): %v; want: %v", d, nil) - // } }) t.Run("should generate a clear delta", func(t *testing.T) { m := NewORMap() diff --git a/cloudstate/crdt/orset_test.go b/cloudstate/crdt/orset_test.go index 121e69a..c346843 100644 --- a/cloudstate/crdt/orset_test.go +++ b/cloudstate/crdt/orset_test.go @@ -141,7 +141,6 @@ func TestORSet(t *testing.T) { if s.Size() != 1 { t.Fatalf("s.Size(): %v; want: %v", s.Size(), 1) } - // delta := encDecDelta(s.Delta()) s.resetDelta() if s.HasDelta() { t.Fatalf("set has delta") diff --git a/cloudstate/crdt/type.go b/cloudstate/crdt/type.go index f505b33..ce2d424 100644 --- a/cloudstate/crdt/type.go +++ b/cloudstate/crdt/type.go @@ -21,7 +21,6 @@ type CRDT interface { Delta() *entity.CrdtDelta HasDelta() bool - // applyState(*entity.CrdtState) error applyDelta(*entity.CrdtDelta) error resetDelta() } diff --git a/cloudstate/crdt/vote_test.go b/cloudstate/crdt/vote_test.go index 06a0b6e..4026ca7 100644 --- a/cloudstate/crdt/vote_test.go +++ b/cloudstate/crdt/vote_test.go @@ -34,29 +34,6 @@ func TestVote(t *testing.T) { t.Fatalf("v.SelfVote(): %v; want: %v", v.SelfVote(), false) } }) - // t.Run("should reflect a state update", func(t *testing.T) { - // v := NewVote() - // err := v.applyState(encDecState(&entity.CrdtState{ - // State: &entity.CrdtState_Vote{ - // Vote: &entity.VoteState{ - // TotalVoters: 5, - // VotesFor: 3, - // SelfVote: true, - // }}, - // })) - // if err != nil { - // t.Fatal(err) - // } - // if v.VotesFor() != 3 { - // t.Fatalf("v.VotesFor(): %v; want: %v", v.VotesFor(), 3) - // } - // if v.Voters() != 5 { - // t.Fatalf("v.Voters(): %v; want: %v", v.Voters(), 5) - // } - // if v.SelfVote() != true { - // t.Fatalf("v.SelfVote(): %v; want: %v", v.SelfVote(), true) - // } - // }) t.Run("should reflect a delta update", func(t *testing.T) { v := NewVote() if err := v.applyDelta(encDecDelta(&entity.CrdtDelta{ diff --git a/protobuf/tck/tck_crdt2.proto b/protobuf/tck/tck_crdt2.proto index 112723d..5b90831 100644 --- a/protobuf/tck/tck_crdt2.proto +++ b/protobuf/tck/tck_crdt2.proto @@ -42,8 +42,8 @@ option go_package = "github.com/cloudstateio/go-support/tck/crdt2;crdt2"; // - The `ProcessStreamed` method must stream the current state in a `Response`, on any changes. // - A `StreamedRequest` message may have an end state, an update to apply on stream cancellation, or side effects. service CrdtTckModel { - rpc Process (Request) returns (Response); - rpc ProcessStreamed (StreamedRequest) returns (stream Response); + rpc Process(Request) returns (Response); + rpc ProcessStreamed(StreamedRequest) returns (stream Response); } // @@ -51,7 +51,7 @@ service CrdtTckModel { // The `Call` method is not required to do anything, and may simply return an empty `Response` message. // service CrdtTwo { - rpc Call (Request) returns (Response); + rpc Call(Request) returns (Response); } // @@ -68,12 +68,17 @@ message Request { // If `end_state` is set, it specifies a target state for ending the stream. // If `cancel_update` is set, it specifies an update to apply when the stream is cancelled. // If `effects` is set, it specifies side effects to return with every streamed response. +// If `initial_update` is set, it specifies an update to apply on the initial request. +// If `empty` is set, then no responses should be streamed (for testing empty stream connections). +// Otherwise, the current state should be streamed on changes. // message StreamedRequest { string id = 1 [(.cloudstate.entity_key) = true]; State end_state = 2; Update cancel_update = 3; repeated Effect effects = 4; + Update initial_update = 5; + bool empty = 6; } // @@ -174,8 +179,7 @@ enum LWWRegisterClockType { // // Update a Flag CRDT by enabling it. // -message FlagUpdate { -} +message FlagUpdate {} // // Update an ORMap CRDT by adding, updating, or removing entries, or clearing the map. @@ -217,8 +221,7 @@ enum UpdateWriteConsistency { // // Delete the CRDT. // -message Delete { -} +message Delete {} // // Replace the response with a forward to `cloudstate.tck.model.CrdtTwo/Call`. @@ -336,4 +339,4 @@ message VoteValue { bool self_vote = 1; int32 votes_for = 2; int32 total_voters = 3; -} \ No newline at end of file +} diff --git a/tck/crdt2/model.go b/tck/crdt2/model.go index 055981f..83b492f 100644 --- a/tck/crdt2/model.go +++ b/tck/crdt2/model.go @@ -48,12 +48,13 @@ func NewCrdtTwoEntity(id crdt.EntityID) crdt.EntityHandler { return &CrdtTwoEntity{} } -func (e *CrdtTckModelEntity) HandleCommand(ctx *crdt.CommandContext, name string, msg proto.Message) (*any.Any, error) { +func (e *CrdtTckModelEntity) processStreamed(ctx *crdt.CommandContext, name string, msg proto.Message) (*any.Any, error) { + r, ok := msg.(*StreamedRequest) + if !ok { + return nil, nil + } + fmt.Printf("processStreamed: %+v\n", ctx.EntityID) if ctx.Streamed() { - r, ok := msg.(*StreamedRequest) - if !ok { - return nil, nil - } ctx.ChangeFunc(func(c *crdt.CommandContext) (*any.Any, error) { for _, effect := range r.GetEffects() { req, err := encoding.MarshalAny(&Request{ @@ -79,6 +80,9 @@ func (e *CrdtTckModelEntity) HandleCommand(ctx *crdt.CommandContext, name string ctx.EndStream() } } + if r.GetEmpty() { + return nil, nil + } state, err := crdtState(c.CRDT()) if err != nil { return nil, err @@ -87,20 +91,33 @@ func (e *CrdtTckModelEntity) HandleCommand(ctx *crdt.CommandContext, name string State: state, }) }) - if r.GetCancelUpdate() != nil { + if u := r.GetCancelUpdate(); u != nil { ctx.CancelFunc(func(c *crdt.CommandContext) error { - return applyUpdate(c.CRDT(), r.GetCancelUpdate()) + return applyUpdate(c.CRDT(), u) }) } - state, err := crdtState(ctx.CRDT()) - if err != nil { + } + if u := r.GetInitialUpdate(); u != nil { + if err := applyUpdate(ctx.CRDT(), u); err != nil { return nil, err } - return encoding.MarshalAny(&Response{ - State: state, - }) } + if r.GetEmpty() { + return nil, nil + } + state, err := crdtState(ctx.CRDT()) + if err != nil { + return nil, err + } + return encoding.MarshalAny(&Response{ + State: state, + }) +} +func (e *CrdtTckModelEntity) HandleCommand(ctx *crdt.CommandContext, name string, msg proto.Message) (*any.Any, error) { + if name == "ProcessStreamed" { + return e.processStreamed(ctx, name, msg) + } r, ok := msg.(*Request) if !ok { return nil, nil diff --git a/tck/crdt2/tck_crdt2.pb.go b/tck/crdt2/tck_crdt2.pb.go index 8ef28e8..3fc886e 100644 --- a/tck/crdt2/tck_crdt2.pb.go +++ b/tck/crdt2/tck_crdt2.pb.go @@ -210,16 +210,21 @@ func (x *Request) GetActions() []*RequestAction { // If `end_state` is set, it specifies a target state for ending the stream. // If `cancel_update` is set, it specifies an update to apply when the stream is cancelled. // If `effects` is set, it specifies side effects to return with every streamed response. +// If `initial_update` is set, it specifies an update to apply on the initial request. +// If `empty` is set, then no responses should be streamed (for testing empty stream connections). +// Otherwise, the current state should be streamed on changes. // type StreamedRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - EndState *State `protobuf:"bytes,2,opt,name=end_state,json=endState,proto3" json:"end_state,omitempty"` - CancelUpdate *Update `protobuf:"bytes,3,opt,name=cancel_update,json=cancelUpdate,proto3" json:"cancel_update,omitempty"` - Effects []*Effect `protobuf:"bytes,4,rep,name=effects,proto3" json:"effects,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + EndState *State `protobuf:"bytes,2,opt,name=end_state,json=endState,proto3" json:"end_state,omitempty"` + CancelUpdate *Update `protobuf:"bytes,3,opt,name=cancel_update,json=cancelUpdate,proto3" json:"cancel_update,omitempty"` + Effects []*Effect `protobuf:"bytes,4,rep,name=effects,proto3" json:"effects,omitempty"` + InitialUpdate *Update `protobuf:"bytes,5,opt,name=initial_update,json=initialUpdate,proto3" json:"initial_update,omitempty"` + Empty bool `protobuf:"varint,6,opt,name=empty,proto3" json:"empty,omitempty"` } func (x *StreamedRequest) Reset() { @@ -282,6 +287,20 @@ func (x *StreamedRequest) GetEffects() []*Effect { return nil } +func (x *StreamedRequest) GetInitialUpdate() *Update { + if x != nil { + return x.InitialUpdate + } + return nil +} + +func (x *StreamedRequest) GetEmpty() bool { + if x != nil { + return x.Empty + } + return false +} + // // Each `RequestAction` is one of: // @@ -2122,8 +2141,8 @@ var file_tck_crdt2_proto_rawDesc = []byte{ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x74, 0x63, 0x6b, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x63, 0x72, 0x64, 0x74, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xeb, - 0x01, 0x0a, 0x0f, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xcb, + 0x02, 0x0a, 0x0f, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0x90, 0xb5, 0x18, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3d, 0x0a, 0x09, 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6c, @@ -2137,7 +2156,13 @@ var file_tck_crdt2_proto_rawDesc = []byte{ 0x3b, 0x0a, 0x07, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x74, 0x63, 0x6b, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x63, 0x72, 0x64, 0x74, 0x2e, 0x45, 0x66, 0x66, - 0x65, 0x63, 0x74, 0x52, 0x07, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x73, 0x22, 0xc7, 0x02, 0x0a, + 0x65, 0x63, 0x74, 0x52, 0x07, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x73, 0x12, 0x48, 0x0a, 0x0e, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x2e, 0x74, 0x63, 0x6b, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x63, 0x72, 0x64, 0x74, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x22, 0xc7, 0x02, 0x0a, 0x0d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x74, 0x63, 0x6b, 0x2e, @@ -2416,46 +2441,47 @@ var file_tck_crdt2_proto_depIdxs = []int32{ 21, // 1: cloudstate.tck.model.crdt.StreamedRequest.end_state:type_name -> cloudstate.tck.model.crdt.State 5, // 2: cloudstate.tck.model.crdt.StreamedRequest.cancel_update:type_name -> cloudstate.tck.model.crdt.Update 19, // 3: cloudstate.tck.model.crdt.StreamedRequest.effects:type_name -> cloudstate.tck.model.crdt.Effect - 5, // 4: cloudstate.tck.model.crdt.RequestAction.update:type_name -> cloudstate.tck.model.crdt.Update - 16, // 5: cloudstate.tck.model.crdt.RequestAction.delete:type_name -> cloudstate.tck.model.crdt.Delete - 17, // 6: cloudstate.tck.model.crdt.RequestAction.forward:type_name -> cloudstate.tck.model.crdt.Forward - 18, // 7: cloudstate.tck.model.crdt.RequestAction.fail:type_name -> cloudstate.tck.model.crdt.Fail - 19, // 8: cloudstate.tck.model.crdt.RequestAction.effect:type_name -> cloudstate.tck.model.crdt.Effect - 6, // 9: cloudstate.tck.model.crdt.Update.gcounter:type_name -> cloudstate.tck.model.crdt.GCounterUpdate - 7, // 10: cloudstate.tck.model.crdt.Update.pncounter:type_name -> cloudstate.tck.model.crdt.PNCounterUpdate - 8, // 11: cloudstate.tck.model.crdt.Update.gset:type_name -> cloudstate.tck.model.crdt.GSetUpdate - 9, // 12: cloudstate.tck.model.crdt.Update.orset:type_name -> cloudstate.tck.model.crdt.ORSetUpdate - 10, // 13: cloudstate.tck.model.crdt.Update.lwwregister:type_name -> cloudstate.tck.model.crdt.LWWRegisterUpdate - 12, // 14: cloudstate.tck.model.crdt.Update.flag:type_name -> cloudstate.tck.model.crdt.FlagUpdate - 13, // 15: cloudstate.tck.model.crdt.Update.ormap:type_name -> cloudstate.tck.model.crdt.ORMapUpdate - 15, // 16: cloudstate.tck.model.crdt.Update.vote:type_name -> cloudstate.tck.model.crdt.VoteUpdate - 1, // 17: cloudstate.tck.model.crdt.Update.write_consistency:type_name -> cloudstate.tck.model.crdt.UpdateWriteConsistency - 11, // 18: cloudstate.tck.model.crdt.LWWRegisterUpdate.clock:type_name -> cloudstate.tck.model.crdt.LWWRegisterClock - 0, // 19: cloudstate.tck.model.crdt.LWWRegisterClock.clockType:type_name -> cloudstate.tck.model.crdt.LWWRegisterClockType - 14, // 20: cloudstate.tck.model.crdt.ORMapUpdate.update:type_name -> cloudstate.tck.model.crdt.ORMapEntryUpdate - 5, // 21: cloudstate.tck.model.crdt.ORMapEntryUpdate.update:type_name -> cloudstate.tck.model.crdt.Update - 21, // 22: cloudstate.tck.model.crdt.Response.state:type_name -> cloudstate.tck.model.crdt.State - 22, // 23: cloudstate.tck.model.crdt.State.gcounter:type_name -> cloudstate.tck.model.crdt.GCounterValue - 23, // 24: cloudstate.tck.model.crdt.State.pncounter:type_name -> cloudstate.tck.model.crdt.PNCounterValue - 24, // 25: cloudstate.tck.model.crdt.State.gset:type_name -> cloudstate.tck.model.crdt.GSetValue - 25, // 26: cloudstate.tck.model.crdt.State.orset:type_name -> cloudstate.tck.model.crdt.ORSetValue - 26, // 27: cloudstate.tck.model.crdt.State.lwwregister:type_name -> cloudstate.tck.model.crdt.LWWRegisterValue - 27, // 28: cloudstate.tck.model.crdt.State.flag:type_name -> cloudstate.tck.model.crdt.FlagValue - 28, // 29: cloudstate.tck.model.crdt.State.ormap:type_name -> cloudstate.tck.model.crdt.ORMapValue - 30, // 30: cloudstate.tck.model.crdt.State.vote:type_name -> cloudstate.tck.model.crdt.VoteValue - 29, // 31: cloudstate.tck.model.crdt.ORMapValue.entries:type_name -> cloudstate.tck.model.crdt.ORMapEntryValue - 21, // 32: cloudstate.tck.model.crdt.ORMapEntryValue.value:type_name -> cloudstate.tck.model.crdt.State - 2, // 33: cloudstate.tck.model.crdt.CrdtTckModel.Process:input_type -> cloudstate.tck.model.crdt.Request - 3, // 34: cloudstate.tck.model.crdt.CrdtTckModel.ProcessStreamed:input_type -> cloudstate.tck.model.crdt.StreamedRequest - 2, // 35: cloudstate.tck.model.crdt.CrdtTwo.Call:input_type -> cloudstate.tck.model.crdt.Request - 20, // 36: cloudstate.tck.model.crdt.CrdtTckModel.Process:output_type -> cloudstate.tck.model.crdt.Response - 20, // 37: cloudstate.tck.model.crdt.CrdtTckModel.ProcessStreamed:output_type -> cloudstate.tck.model.crdt.Response - 20, // 38: cloudstate.tck.model.crdt.CrdtTwo.Call:output_type -> cloudstate.tck.model.crdt.Response - 36, // [36:39] is the sub-list for method output_type - 33, // [33:36] is the sub-list for method input_type - 33, // [33:33] is the sub-list for extension type_name - 33, // [33:33] is the sub-list for extension extendee - 0, // [0:33] is the sub-list for field type_name + 5, // 4: cloudstate.tck.model.crdt.StreamedRequest.initial_update:type_name -> cloudstate.tck.model.crdt.Update + 5, // 5: cloudstate.tck.model.crdt.RequestAction.update:type_name -> cloudstate.tck.model.crdt.Update + 16, // 6: cloudstate.tck.model.crdt.RequestAction.delete:type_name -> cloudstate.tck.model.crdt.Delete + 17, // 7: cloudstate.tck.model.crdt.RequestAction.forward:type_name -> cloudstate.tck.model.crdt.Forward + 18, // 8: cloudstate.tck.model.crdt.RequestAction.fail:type_name -> cloudstate.tck.model.crdt.Fail + 19, // 9: cloudstate.tck.model.crdt.RequestAction.effect:type_name -> cloudstate.tck.model.crdt.Effect + 6, // 10: cloudstate.tck.model.crdt.Update.gcounter:type_name -> cloudstate.tck.model.crdt.GCounterUpdate + 7, // 11: cloudstate.tck.model.crdt.Update.pncounter:type_name -> cloudstate.tck.model.crdt.PNCounterUpdate + 8, // 12: cloudstate.tck.model.crdt.Update.gset:type_name -> cloudstate.tck.model.crdt.GSetUpdate + 9, // 13: cloudstate.tck.model.crdt.Update.orset:type_name -> cloudstate.tck.model.crdt.ORSetUpdate + 10, // 14: cloudstate.tck.model.crdt.Update.lwwregister:type_name -> cloudstate.tck.model.crdt.LWWRegisterUpdate + 12, // 15: cloudstate.tck.model.crdt.Update.flag:type_name -> cloudstate.tck.model.crdt.FlagUpdate + 13, // 16: cloudstate.tck.model.crdt.Update.ormap:type_name -> cloudstate.tck.model.crdt.ORMapUpdate + 15, // 17: cloudstate.tck.model.crdt.Update.vote:type_name -> cloudstate.tck.model.crdt.VoteUpdate + 1, // 18: cloudstate.tck.model.crdt.Update.write_consistency:type_name -> cloudstate.tck.model.crdt.UpdateWriteConsistency + 11, // 19: cloudstate.tck.model.crdt.LWWRegisterUpdate.clock:type_name -> cloudstate.tck.model.crdt.LWWRegisterClock + 0, // 20: cloudstate.tck.model.crdt.LWWRegisterClock.clockType:type_name -> cloudstate.tck.model.crdt.LWWRegisterClockType + 14, // 21: cloudstate.tck.model.crdt.ORMapUpdate.update:type_name -> cloudstate.tck.model.crdt.ORMapEntryUpdate + 5, // 22: cloudstate.tck.model.crdt.ORMapEntryUpdate.update:type_name -> cloudstate.tck.model.crdt.Update + 21, // 23: cloudstate.tck.model.crdt.Response.state:type_name -> cloudstate.tck.model.crdt.State + 22, // 24: cloudstate.tck.model.crdt.State.gcounter:type_name -> cloudstate.tck.model.crdt.GCounterValue + 23, // 25: cloudstate.tck.model.crdt.State.pncounter:type_name -> cloudstate.tck.model.crdt.PNCounterValue + 24, // 26: cloudstate.tck.model.crdt.State.gset:type_name -> cloudstate.tck.model.crdt.GSetValue + 25, // 27: cloudstate.tck.model.crdt.State.orset:type_name -> cloudstate.tck.model.crdt.ORSetValue + 26, // 28: cloudstate.tck.model.crdt.State.lwwregister:type_name -> cloudstate.tck.model.crdt.LWWRegisterValue + 27, // 29: cloudstate.tck.model.crdt.State.flag:type_name -> cloudstate.tck.model.crdt.FlagValue + 28, // 30: cloudstate.tck.model.crdt.State.ormap:type_name -> cloudstate.tck.model.crdt.ORMapValue + 30, // 31: cloudstate.tck.model.crdt.State.vote:type_name -> cloudstate.tck.model.crdt.VoteValue + 29, // 32: cloudstate.tck.model.crdt.ORMapValue.entries:type_name -> cloudstate.tck.model.crdt.ORMapEntryValue + 21, // 33: cloudstate.tck.model.crdt.ORMapEntryValue.value:type_name -> cloudstate.tck.model.crdt.State + 2, // 34: cloudstate.tck.model.crdt.CrdtTckModel.Process:input_type -> cloudstate.tck.model.crdt.Request + 3, // 35: cloudstate.tck.model.crdt.CrdtTckModel.ProcessStreamed:input_type -> cloudstate.tck.model.crdt.StreamedRequest + 2, // 36: cloudstate.tck.model.crdt.CrdtTwo.Call:input_type -> cloudstate.tck.model.crdt.Request + 20, // 37: cloudstate.tck.model.crdt.CrdtTckModel.Process:output_type -> cloudstate.tck.model.crdt.Response + 20, // 38: cloudstate.tck.model.crdt.CrdtTckModel.ProcessStreamed:output_type -> cloudstate.tck.model.crdt.Response + 20, // 39: cloudstate.tck.model.crdt.CrdtTwo.Call:output_type -> cloudstate.tck.model.crdt.Response + 37, // [37:40] is the sub-list for method output_type + 34, // [34:37] is the sub-list for method input_type + 34, // [34:34] is the sub-list for extension type_name + 34, // [34:34] is the sub-list for extension extendee + 0, // [0:34] is the sub-list for field type_name } func init() { file_tck_crdt2_proto_init() }