diff --git a/client/genericclient/generic_stream_service.go b/client/genericclient/generic_stream_service.go index 44698ea26a..bd92d1e383 100644 --- a/client/genericclient/generic_stream_service.go +++ b/client/genericclient/generic_stream_service.go @@ -26,8 +26,7 @@ func StreamingServiceInfo(g generic.Generic) *serviceinfo.ServiceInfo { } func newClientStreamingServiceInfo(g generic.Generic) *serviceinfo.ServiceInfo { - readerWriter := g.MessageReaderWriter() - if readerWriter == nil { + if g.PayloadCodec() != nil { // TODO: support grpc binary generic panic("binary generic streaming is not supported") } @@ -37,12 +36,12 @@ func newClientStreamingServiceInfo(g generic.Generic) *serviceinfo.ServiceInfo { nil, func() interface{} { args := &generic.Args{} - args.SetCodec(readerWriter) + args.SetCodec(g.MessageReaderWriter()) return args }, func() interface{} { result := &generic.Result{} - result.SetCodec(readerWriter) + result.SetCodec(g.MessageReaderWriter()) return result }, false, @@ -52,12 +51,12 @@ func newClientStreamingServiceInfo(g generic.Generic) *serviceinfo.ServiceInfo { nil, func() interface{} { args := &generic.Args{} - args.SetCodec(readerWriter) + args.SetCodec(g.MessageReaderWriter()) return args }, func() interface{} { result := &generic.Result{} - result.SetCodec(readerWriter) + result.SetCodec(g.MessageReaderWriter()) return result }, false, @@ -67,12 +66,12 @@ func newClientStreamingServiceInfo(g generic.Generic) *serviceinfo.ServiceInfo { nil, func() interface{} { args := &generic.Args{} - args.SetCodec(readerWriter) + args.SetCodec(g.MessageReaderWriter()) return args }, func() interface{} { result := &generic.Result{} - result.SetCodec(readerWriter) + result.SetCodec(g.MessageReaderWriter()) return result }, false, @@ -82,12 +81,12 @@ func newClientStreamingServiceInfo(g generic.Generic) *serviceinfo.ServiceInfo { nil, func() interface{} { args := &generic.Args{} - args.SetCodec(readerWriter) + args.SetCodec(g.MessageReaderWriter()) return args }, func() interface{} { result := &generic.Result{} - result.SetCodec(readerWriter) + result.SetCodec(g.MessageReaderWriter()) return result }, false, diff --git a/pkg/generic/generic.go b/pkg/generic/generic.go index e69757b856..5e99cde6c4 100644 --- a/pkg/generic/generic.go +++ b/pkg/generic/generic.go @@ -142,6 +142,7 @@ func SetBinaryWithBase64(g Generic, enable bool) error { c.codec.convOpts.NoBase64Binary = !enable c.codec.convOptsWithThriftBase.NoBase64Binary = !enable } + return c.codec.updateMessageReaderWriter() case *jsonThriftGeneric: if c.codec == nil { return fmt.Errorf("empty codec for %#v", c) @@ -152,15 +153,16 @@ func SetBinaryWithBase64(g Generic, enable bool) error { c.codec.convOptsWithThriftBase.NoBase64Binary = !enable c.codec.convOptsWithException.NoBase64Binary = !enable } + return c.codec.updateMessageReaderWriter() case *mapThriftGeneric: if c.codec == nil { return fmt.Errorf("empty codec for %#v", c) } c.codec.binaryWithBase64 = enable + return c.codec.updateMessageReaderWriter() default: return fmt.Errorf("Base64Binary is unavailable for %#v", g) } - return nil } // SetBinaryWithByteSlice enable/disable returning []byte for binary field. @@ -171,10 +173,10 @@ func SetBinaryWithByteSlice(g Generic, enable bool) error { return fmt.Errorf("empty codec for %#v", c) } c.codec.binaryWithByteSlice = enable + return c.codec.updateMessageReaderWriter() default: return fmt.Errorf("returning []byte for binary fields is unavailable for %#v", g) } - return nil } // SetFieldsForEmptyStructMode is a enum for EnableSetFieldsForEmptyStruct() @@ -202,10 +204,10 @@ func EnableSetFieldsForEmptyStruct(g Generic, mode SetFieldsForEmptyStructMode) return fmt.Errorf("empty codec for %#v", c) } c.codec.setFieldsForEmptyStruct = uint8(mode) + return c.codec.updateMessageReaderWriter() default: return fmt.Errorf("SetFieldsForEmptyStruct only supports map-generic at present") } - return nil } var thriftCodec = thrift.NewThriftCodec() diff --git a/pkg/generic/generic_service.go b/pkg/generic/generic_service.go index 5bff8c6f1c..0b23511451 100644 --- a/pkg/generic/generic_service.go +++ b/pkg/generic/generic_service.go @@ -32,7 +32,7 @@ type Service interface { // ServiceInfoWithGeneric create a generic ServiceInfo func ServiceInfoWithGeneric(g Generic) *serviceinfo.ServiceInfo { isCombinedServices := getIsCombinedServices(g) - return newServiceInfo(g.PayloadCodecType(), g.MessageReaderWriter(), g.IDLServiceName(), isCombinedServices) + return newServiceInfo(g, isCombinedServices) } func getIsCombinedServices(g Generic) bool { @@ -44,16 +44,16 @@ func getIsCombinedServices(g Generic) bool { return false } -func newServiceInfo(pcType serviceinfo.PayloadCodec, messageReaderWriter interface{}, serviceName string, isCombinedServices bool) *serviceinfo.ServiceInfo { +func newServiceInfo(g Generic, isCombinedServices bool) *serviceinfo.ServiceInfo { handlerType := (*Service)(nil) - methods, svcName := GetMethodInfo(messageReaderWriter, serviceName) + methods, svcName := getMethodInfo(g, g.IDLServiceName()) svcInfo := &serviceinfo.ServiceInfo{ ServiceName: svcName, HandlerType: handlerType, Methods: methods, - PayloadCodec: pcType, + PayloadCodec: g.PayloadCodecType(), Extra: make(map[string]interface{}), } svcInfo.Extra["generic"] = true @@ -63,7 +63,37 @@ func newServiceInfo(pcType serviceinfo.PayloadCodec, messageReaderWriter interfa return svcInfo } -// GetMethodInfo is only used in kitex, please DON'T USE IT. This method may be removed in the future +func getMethodInfo(g Generic, serviceName string) (methods map[string]serviceinfo.MethodInfo, svcName string) { + if g.PayloadCodec() != nil { + // note: binary generic cannot be used with multi-service feature + svcName = serviceinfo.GenericService + methods = map[string]serviceinfo.MethodInfo{ + serviceinfo.GenericMethod: serviceinfo.NewMethodInfo(callHandler, newGenericServiceCallArgs, newGenericServiceCallResult, false), + } + } else { + svcName = serviceName + methods = map[string]serviceinfo.MethodInfo{ + serviceinfo.GenericMethod: serviceinfo.NewMethodInfo( + callHandler, + func() interface{} { + args := &Args{} + args.SetCodec(g.MessageReaderWriter()) + return args + }, + func() interface{} { + result := &Result{} + result.SetCodec(g.MessageReaderWriter()) + return result + }, + false, + ), + } + } + return +} + +// GetMethodInfo is only used in kitex, please DON'T USE IT. +// DEPRECATED: this method is no longer used. This method will be removed in the future func GetMethodInfo(messageReaderWriter interface{}, serviceName string) (methods map[string]serviceinfo.MethodInfo, svcName string) { if messageReaderWriter == nil { // note: binary generic cannot be used with multi-service feature diff --git a/pkg/generic/httppbthrift_codec.go b/pkg/generic/httppbthrift_codec.go index 0e546eb1c4..94f4f0a4d9 100644 --- a/pkg/generic/httppbthrift_codec.go +++ b/pkg/generic/httppbthrift_codec.go @@ -19,6 +19,7 @@ package generic import ( "context" "errors" + "fmt" "io" "net/http" "strings" @@ -37,12 +38,13 @@ import ( var _ Closer = &httpPbThriftCodec{} type httpPbThriftCodec struct { - svcDsc atomic.Value // *idl - pbSvcDsc atomic.Value // *pbIdl - provider DescriptorProvider - pbProvider PbDescriptorProvider - svcName string - extra map[string]string + svcDsc atomic.Value // *idl + pbSvcDsc atomic.Value // *pbIdl + provider DescriptorProvider + pbProvider PbDescriptorProvider + svcName string + extra map[string]string + readerWriter atomic.Value // *thrift.HTTPPbReaderWriter } func newHTTPPbThriftCodec(p DescriptorProvider, pbp PbDescriptorProvider) *httpPbThriftCodec { @@ -57,6 +59,7 @@ func newHTTPPbThriftCodec(p DescriptorProvider, pbp PbDescriptorProvider) *httpP c.setCombinedServices(svc.IsCombinedServices) c.svcDsc.Store(svc) c.pbSvcDsc.Store(pbSvc) + c.readerWriter.Store(thrift.NewHTTPPbReaderWriter(svc, pbSvc)) go c.update() return c } @@ -77,6 +80,7 @@ func (c *httpPbThriftCodec) update() { c.setCombinedServices(svc.IsCombinedServices) c.svcDsc.Store(svc) c.pbSvcDsc.Store(pbSvc) + c.readerWriter.Store(thrift.NewHTTPPbReaderWriter(svc, pbSvc)) } } @@ -105,16 +109,12 @@ func (c *httpPbThriftCodec) getMethod(req interface{}) (*Method, error) { } func (c *httpPbThriftCodec) getMessageReaderWriter() interface{} { - svcDsc, ok := c.svcDsc.Load().(*descriptor.ServiceDescriptor) - if !ok { - return errors.New("get parser ServiceDescriptor failed") - } - pbSvcDsc, ok := c.pbSvcDsc.Load().(*desc.ServiceDescriptor) - if !ok { - return errors.New("get parser PbServiceDescriptor failed") + v := c.readerWriter.Load() + if rw, ok := v.(*thrift.HTTPPbReaderWriter); !ok { + panic(fmt.Sprintf("get readerWriter failed: expected *thrift.HTTPPbReaderWriter, got %T", v)) + } else { + return rw } - - return thrift.NewHTTPPbReaderWriter(svcDsc, pbSvcDsc) } func (c *httpPbThriftCodec) Name() string { diff --git a/pkg/generic/httppbthrift_codec_test.go b/pkg/generic/httppbthrift_codec_test.go index d1f669e0ea..062eb59283 100644 --- a/pkg/generic/httppbthrift_codec_test.go +++ b/pkg/generic/httppbthrift_codec_test.go @@ -71,8 +71,6 @@ func TestHTTPPbThriftCodec(t *testing.T) { test.Assert(t, htc.extra[CombineServiceKey] == "false") rw := htc.getMessageReaderWriter() - _, ok := rw.(thrift.MessageWriter) - test.Assert(t, ok) - _, ok = rw.(thrift.MessageReader) + _, ok := rw.(*thrift.HTTPPbReaderWriter) test.Assert(t, ok) } diff --git a/pkg/generic/httpthrift_codec.go b/pkg/generic/httpthrift_codec.go index 4644f37449..c13126ef15 100644 --- a/pkg/generic/httpthrift_codec.go +++ b/pkg/generic/httpthrift_codec.go @@ -19,6 +19,7 @@ package generic import ( "context" "errors" + "fmt" "io" "net/http" "sync/atomic" @@ -50,6 +51,7 @@ type httpThriftCodec struct { useRawBodyForHTTPResp bool svcName string extra map[string]string + readerWriter atomic.Value // *thrift.HTTPReaderWriter } func newHTTPThriftCodec(p DescriptorProvider, opts *Options) *httpThriftCodec { @@ -73,6 +75,7 @@ func newHTTPThriftCodec(p DescriptorProvider, opts *Options) *httpThriftCodec { } c.setCombinedServices(svc.IsCombinedServices) c.svcDsc.Store(svc) + c.configureMessageReaderWriter(svc) go c.update() return c } @@ -86,9 +89,26 @@ func (c *httpThriftCodec) update() { c.svcName = svc.Name c.setCombinedServices(svc.IsCombinedServices) c.svcDsc.Store(svc) + c.configureMessageReaderWriter(svc) } } +func (c *httpThriftCodec) updateMessageReaderWriter() (err error) { + svc, ok := c.svcDsc.Load().(*descriptor.ServiceDescriptor) + if !ok { + return errors.New("get parser ServiceDescriptor failed") + } + c.configureMessageReaderWriter(svc) + return nil +} + +func (c *httpThriftCodec) configureMessageReaderWriter(svc *descriptor.ServiceDescriptor) { + rw := thrift.NewHTTPReaderWriter(svc) + c.configureHTTPRequestWriter(rw.WriteHTTPRequest) + c.configureHTTPResponseReader(rw.ReadHTTPResponse) + c.readerWriter.Store(rw) +} + func (c *httpThriftCodec) setCombinedServices(isCombinedServices bool) { if isCombinedServices { c.extra[CombineServiceKey] = "true" @@ -98,14 +118,12 @@ func (c *httpThriftCodec) setCombinedServices(isCombinedServices bool) { } func (c *httpThriftCodec) getMessageReaderWriter() interface{} { - svcDsc, ok := c.svcDsc.Load().(*descriptor.ServiceDescriptor) - if !ok { - return errors.New("get parser ServiceDescriptor failed") + v := c.readerWriter.Load() + if rw, ok := v.(*thrift.HTTPReaderWriter); !ok { + panic(fmt.Sprintf("get readerWriter failed: expected *thrift.HTTPReaderWriter, got %T", v)) + } else { + return rw } - rw := thrift.NewHTTPReaderWriter(svcDsc) - c.configureHTTPRequestWriter(rw.WriteHTTPRequest) - c.configureHTTPResponseReader(rw.ReadHTTPResponse) - return rw } func (c *httpThriftCodec) configureHTTPRequestWriter(writer *thrift.WriteHTTPRequest) { diff --git a/pkg/generic/httpthrift_codec_test.go b/pkg/generic/httpthrift_codec_test.go index 4457c19891..edc127cc91 100644 --- a/pkg/generic/httpthrift_codec_test.go +++ b/pkg/generic/httpthrift_codec_test.go @@ -72,9 +72,7 @@ func TestHttpThriftCodec(t *testing.T) { test.Assert(t, !ok) rw = htc.getMessageReaderWriter() - _, ok = rw.(thrift.MessageWriter) - test.Assert(t, ok) - _, ok = rw.(thrift.MessageReader) + _, ok = rw.(*thrift.HTTPReaderWriter) test.Assert(t, ok) } @@ -105,9 +103,7 @@ func TestHttpThriftCodecWithDynamicGo(t *testing.T) { test.Assert(t, htc.extra[CombineServiceKey] == "false") rw := htc.getMessageReaderWriter() - _, ok := rw.(thrift.MessageWriter) - test.Assert(t, ok) - _, ok = rw.(thrift.MessageReader) + _, ok := rw.(*thrift.HTTPReaderWriter) test.Assert(t, ok) } diff --git a/pkg/generic/jsonpb_codec.go b/pkg/generic/jsonpb_codec.go index fcae93ae9e..33d2cd65c6 100644 --- a/pkg/generic/jsonpb_codec.go +++ b/pkg/generic/jsonpb_codec.go @@ -18,7 +18,6 @@ package generic import ( "context" - "errors" "fmt" "sync/atomic" @@ -42,6 +41,7 @@ type jsonPbCodec struct { dynamicgoEnabled bool // currently set to true by default svcName string extra map[string]string + readerWriter atomic.Value // *proto.JSONReaderWriter } func newJsonPbCodec(p PbDescriptorProviderDynamicGo, opts *Options) *jsonPbCodec { @@ -57,8 +57,8 @@ func newJsonPbCodec(p PbDescriptorProviderDynamicGo, opts *Options) *jsonPbCodec c.convOpts = convOpts c.setCombinedServices(svc.IsCombinedServices()) c.setPackageName(svc.PackageName()) - c.svcDsc.Store(svc) + c.readerWriter.Store(proto.NewJsonReaderWriter(svc, &convOpts)) go c.update() return c } @@ -72,6 +72,7 @@ func (c *jsonPbCodec) update() { c.svcName = svc.Name() c.setCombinedServices(svc.IsCombinedServices()) c.svcDsc.Store(svc) + c.readerWriter.Store(proto.NewJsonReaderWriter(svc, &c.convOpts)) } } @@ -88,12 +89,12 @@ func (c *jsonPbCodec) setPackageName(pkg string) { } func (c *jsonPbCodec) getMessageReaderWriter() interface{} { - pbSvc, ok := c.svcDsc.Load().(*dproto.ServiceDescriptor) - if !ok { - return errors.New("get parser dynamicgo ServiceDescriptor failed") + v := c.readerWriter.Load() + if rw, ok := v.(*proto.JSONReaderWriter); !ok { + panic(fmt.Sprintf("get readerWriter failed: expected *proto.JSONReaderWriter, got %T", v)) + } else { + return rw } - - return proto.NewJsonReaderWriter(pbSvc, &c.convOpts) } func (c *jsonPbCodec) getMethod(req interface{}, method string) (*Method, error) { diff --git a/pkg/generic/jsonpb_codec_test.go b/pkg/generic/jsonpb_codec_test.go index 43a84e84a5..2baffa1364 100644 --- a/pkg/generic/jsonpb_codec_test.go +++ b/pkg/generic/jsonpb_codec_test.go @@ -56,9 +56,7 @@ func TestJsonPbCodec(t *testing.T) { test.Assert(t, jpc.extra[packageNameKey] == "test") rw := jpc.getMessageReaderWriter() - _, ok := rw.(gproto.MessageWriter) - test.Assert(t, ok) - _, ok = rw.(gproto.MessageReader) + _, ok := rw.(*gproto.JSONReaderWriter) test.Assert(t, ok) p, err = NewPbFileProviderWithDynamicGo(testIDLPath, context.Background(), opts) diff --git a/pkg/generic/jsonthrift_codec.go b/pkg/generic/jsonthrift_codec.go index f6455971db..d65ba49a22 100644 --- a/pkg/generic/jsonthrift_codec.go +++ b/pkg/generic/jsonthrift_codec.go @@ -19,6 +19,7 @@ package generic import ( "context" "errors" + "fmt" "sync/atomic" "github.com/cloudwego/dynamicgo/conv" @@ -43,6 +44,7 @@ type jsonThriftCodec struct { convOptsWithException conv.Options // used for dynamicgo conversion with ConvertException turned on svcName string extra map[string]string + readerWriter atomic.Value // *thrift.JSONReaderWriter } func newJsonThriftCodec(p DescriptorProvider, opts *Options) *jsonThriftCodec { @@ -72,6 +74,7 @@ func newJsonThriftCodec(p DescriptorProvider, opts *Options) *jsonThriftCodec { c.convOptsWithException = convOptsWithException } c.svcDsc.Store(svc) + c.configureMessageReaderWriter(svc) go c.update() return c } @@ -85,9 +88,26 @@ func (c *jsonThriftCodec) update() { c.svcName = svc.Name c.setCombinedServices(svc.IsCombinedServices) c.svcDsc.Store(svc) + c.configureMessageReaderWriter(svc) } } +func (c *jsonThriftCodec) updateMessageReaderWriter() (err error) { + svc, ok := c.svcDsc.Load().(*descriptor.ServiceDescriptor) + if !ok { + return errors.New("get parser ServiceDescriptor failed") + } + c.configureMessageReaderWriter(svc) + return nil +} + +func (c *jsonThriftCodec) configureMessageReaderWriter(svc *descriptor.ServiceDescriptor) { + rw := thrift.NewJsonReaderWriter(svc) + c.configureJSONWriter(rw.WriteJSON) + c.configureJSONReader(rw.ReadJSON) + c.readerWriter.Store(rw) +} + func (c *jsonThriftCodec) setCombinedServices(isCombinedServices bool) { if isCombinedServices { c.extra[CombineServiceKey] = "true" @@ -97,15 +117,12 @@ func (c *jsonThriftCodec) setCombinedServices(isCombinedServices bool) { } func (c *jsonThriftCodec) getMessageReaderWriter() interface{} { - svcDsc, ok := c.svcDsc.Load().(*descriptor.ServiceDescriptor) - if !ok { - return errors.New("get parser ServiceDescriptor failed") + v := c.readerWriter.Load() + if rw, ok := v.(*thrift.JSONReaderWriter); !ok { + panic(fmt.Sprintf("get readerWriter failed: expected *thrift.JSONReaderWriter, got %T", v)) + } else { + return rw } - - rw := thrift.NewJsonReaderWriter(svcDsc) - c.configureJSONWriter(rw.WriteJSON) - c.configureJSONReader(rw.ReadJSON) - return rw } func (c *jsonThriftCodec) configureJSONWriter(writer *thrift.WriteJSON) { diff --git a/pkg/generic/jsonthrift_codec_test.go b/pkg/generic/jsonthrift_codec_test.go index f287afe0ac..69132b5b00 100644 --- a/pkg/generic/jsonthrift_codec_test.go +++ b/pkg/generic/jsonthrift_codec_test.go @@ -46,9 +46,7 @@ func TestJsonThriftCodec(t *testing.T) { test.Assert(t, jtc.extra[CombineServiceKey] == "false") rw := jtc.getMessageReaderWriter() - _, ok := rw.(thrift.MessageWriter) - test.Assert(t, ok) - _, ok = rw.(thrift.MessageReader) + _, ok := rw.(*thrift.JSONReaderWriter) test.Assert(t, ok) } @@ -76,9 +74,7 @@ func TestJsonThriftCodecWithDynamicGo(t *testing.T) { test.Assert(t, jtc.extra[CombineServiceKey] == "false") rw := jtc.getMessageReaderWriter() - _, ok := rw.(thrift.MessageWriter) - test.Assert(t, ok) - _, ok = rw.(thrift.MessageReader) + _, ok := rw.(*thrift.JSONReaderWriter) test.Assert(t, ok) } diff --git a/pkg/generic/mapthrift_codec.go b/pkg/generic/mapthrift_codec.go index c35a6474a4..cf300b65d8 100644 --- a/pkg/generic/mapthrift_codec.go +++ b/pkg/generic/mapthrift_codec.go @@ -19,6 +19,7 @@ package generic import ( "context" "errors" + "fmt" "sync/atomic" "github.com/cloudwego/kitex/pkg/generic/descriptor" @@ -39,6 +40,7 @@ type mapThriftCodec struct { setFieldsForEmptyStruct uint8 svcName string extra map[string]string + readerWriter atomic.Value // *thrift.StructReaderWriter } func newMapThriftCodec(p DescriptorProvider) *mapThriftCodec { @@ -52,6 +54,7 @@ func newMapThriftCodec(p DescriptorProvider) *mapThriftCodec { } c.setCombinedServices(svc.IsCombinedServices) c.svcDsc.Store(svc) + c.configureMessageReaderWriter(svc) go c.update() return c } @@ -71,9 +74,31 @@ func (c *mapThriftCodec) update() { c.svcName = svc.Name c.setCombinedServices(svc.IsCombinedServices) c.svcDsc.Store(svc) + c.configureMessageReaderWriter(svc) } } +func (c *mapThriftCodec) updateMessageReaderWriter() (err error) { + svc, ok := c.svcDsc.Load().(*descriptor.ServiceDescriptor) + if !ok { + return errors.New("get parser ServiceDescriptor failed") + } + c.configureMessageReaderWriter(svc) + return nil +} + +func (c *mapThriftCodec) configureMessageReaderWriter(svc *descriptor.ServiceDescriptor) { + var rw *thrift.StructReaderWriter + if c.forJSON { + rw = thrift.NewStructReaderWriterForJSON(svc) + } else { + rw = thrift.NewStructReaderWriter(svc) + } + c.configureStructWriter(rw.WriteStruct) + c.configureStructReader(rw.ReadStruct) + c.readerWriter.Store(rw) +} + func (c *mapThriftCodec) setCombinedServices(isCombinedServices bool) { if isCombinedServices { c.extra[CombineServiceKey] = "true" @@ -83,19 +108,12 @@ func (c *mapThriftCodec) setCombinedServices(isCombinedServices bool) { } func (c *mapThriftCodec) getMessageReaderWriter() interface{} { - svcDsc, ok := c.svcDsc.Load().(*descriptor.ServiceDescriptor) - if !ok { - return errors.New("get parser ServiceDescriptor failed") - } - var rw *thrift.StructReaderWriter - if c.forJSON { - rw = thrift.NewStructReaderWriterForJSON(svcDsc) + v := c.readerWriter.Load() + if rw, ok := v.(*thrift.StructReaderWriter); !ok { + panic(fmt.Sprintf("get readerWriter failed: expected *thrift.StructReaderWriter, got %T", v)) } else { - rw = thrift.NewStructReaderWriter(svcDsc) + return rw } - c.configureStructWriter(rw.WriteStruct) - c.configureStructReader(rw.ReadStruct) - return rw } func (c *mapThriftCodec) configureStructWriter(writer *thrift.WriteStruct) { diff --git a/pkg/generic/mapthrift_codec_test.go b/pkg/generic/mapthrift_codec_test.go index 7be2bd67ef..92d103d3b6 100644 --- a/pkg/generic/mapthrift_codec_test.go +++ b/pkg/generic/mapthrift_codec_test.go @@ -59,9 +59,7 @@ func TestMapThriftCodecSelfRef(t *testing.T) { test.Assert(t, mtc.svcName == "Mock") rw := mtc.getMessageReaderWriter() - _, ok := rw.(thrift.MessageWriter) - test.Assert(t, ok) - _, ok = rw.(thrift.MessageReader) + _, ok := rw.(*thrift.StructReaderWriter) test.Assert(t, ok) } @@ -79,8 +77,6 @@ func TestMapThriftCodecForJSON(t *testing.T) { test.Assert(t, mtc.svcName == "Mock") rw := mtc.getMessageReaderWriter() - _, ok := rw.(thrift.MessageWriter) - test.Assert(t, ok) - _, ok = rw.(thrift.MessageReader) + _, ok := rw.(*thrift.StructReaderWriter) test.Assert(t, ok) } diff --git a/pkg/generic/pbidl_provider.go b/pkg/generic/pbidl_provider.go index 32651c8007..4521d3b518 100644 --- a/pkg/generic/pbidl_provider.go +++ b/pkg/generic/pbidl_provider.go @@ -56,6 +56,8 @@ func NewPbContentProvider(main string, includes map[string]string) (PbDescriptor return p, nil } +// UpdateIDL updates idl +// NOTE: Since an IDL update is asynchronous, it may not be applied immediately, potentially causing a temporary data inconsistency. func (p *PbContentProvider) UpdateIDL(main string, includes map[string]string) error { sd, err := parseProto(main, includes) if err != nil { @@ -140,6 +142,8 @@ func NewPbContentProviderWithDynamicGo(ctx context.Context, options dproto.Optio return p, nil } +// UpdateIDL updates idl +// NOTE: Since an IDL update is asynchronous, it may not be applied immediately, potentially causing a temporary data inconsistency. func (p *PbFileProviderWithDynamicGo) UpdateIDL(ctx context.Context, options dproto.Options, mainPath, mainContent string, includes map[string]string) error { sd, err := options.NewDesccriptorFromContent(ctx, mainPath, mainContent, includes) if err != nil { diff --git a/pkg/generic/thriftidl_provider.go b/pkg/generic/thriftidl_provider.go index fc89e333ba..82cd96d461 100644 --- a/pkg/generic/thriftidl_provider.go +++ b/pkg/generic/thriftidl_provider.go @@ -205,7 +205,8 @@ func NewThriftContentProviderWithDynamicGo(main string, includes map[string]stri return p, nil } -// UpdateIDL ... +// UpdateIDL updates idl +// NOTE: Since an IDL update is asynchronous, it may not be applied immediately, potentially causing a temporary data inconsistency. func (p *ThriftContentProvider) UpdateIDL(main string, includes map[string]string) error { var svc *descriptor.ServiceDescriptor tree, err := ParseContent(defaultMainIDLPath, main, includes, false) @@ -388,7 +389,8 @@ func NewThriftContentWithAbsIncludePathProviderWithDynamicGo(mainIDLPath string, return p, nil } -// UpdateIDL update idl by given args +// UpdateIDL updates idl +// NOTE: Since an IDL update is asynchronous, it may not be applied immediately, potentially causing a temporary data inconsistency. func (p *ThriftContentWithAbsIncludePathProvider) UpdateIDL(mainIDLPath string, includes map[string]string) error { mainIDLContent, ok := includes[mainIDLPath] if !ok {