diff --git a/.golangci.yml b/.golangci.yml index f712f66..c5df077 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -34,15 +34,12 @@ linters: # All available linters list: 0 { - md = metadata.New(rpcMetadata) + // old meta should not be used in response in new API + md := metadata.New(rpcMetadata) + + // we assume that if there are no new headers and trailers, an old PHP-GRPC client is used + if len(md.Get(headers)) == 0 && len(md.Get(trailers)) == 0 { + // backward compatibility + _ = st.SetHeader(md) + goto parseErr + } + + // New API headers + if len(md.Get(headers)) > 0 { + mdh := make(map[string]any) + err = json.Unmarshal([]byte(md.Get(headers)[0]), &mdh) + if err != nil { + // we don't need to return this error, log it + p.log.Error("error unmarshalling headers", zap.Error(err)) + } + + for k, v := range mdh { + switch tt := v.(type) { + case string: + _ = st.SetHeader(metadata.Pairs(k, tt)) + case int: + _ = st.SetHeader(metadata.Pairs(k, strconv.Itoa(tt))) + default: + p.log.Warn("skipping header with unsupported type", zap.String("key", k), zap.Any("value", v)) + } + } + } + + // New API trailers + if len(md.Get(trailers)) > 0 { + mdh := make(map[string]any) + err = json.Unmarshal([]byte(md.Get(trailers)[0]), &mdh) + if err != nil { + // we don't need to return this error, log it + p.log.Error("error unmarshalling trailers", zap.Error(err)) + } + + for k, v := range mdh { + switch tt := v.(type) { + case string: + _ = st.SetTrailer(metadata.Pairs(k, tt)) + case int: + _ = st.SetTrailer(metadata.Pairs(k, strconv.Itoa(tt))) + default: + p.log.Warn("skipping header with unsupported type", zap.String("key", k), zap.Any("value", v)) + } + } + } /* we have an error - actually, if code is OK, status.ErrorProto will be nil + actually if the code is OK, status.ErrorProto will be nil but, we use this only in case of PHP exception happened */ + parseErr: if len(md.Get(apiErr)) > 0 { st := &spb.Status{} // get an error data, err := base64.StdEncoding.DecodeString(md.Get(apiErr)[0]) if err != nil { - return nil, err + return err } err = proto.Unmarshal(data, st) if err != nil { - return nil, err + return err } - return md, status.ErrorProto(st) + return status.ErrorProto(st) } } - return md, nil + return nil } // makePayload generates RoadRunner compatible payload based on GRPC message. diff --git a/server.go b/server.go index baa71ad..d7a8424 100644 --- a/server.go +++ b/server.go @@ -62,7 +62,7 @@ func (p *Plugin) createGRPCserver(interceptors map[string]common.Interceptor) (* } for _, service := range services { - px := proxy.NewProxy(fmt.Sprintf("%s.%s", service.Package, service.Name), p.config.Proto[i], p.gPool, p.mu, p.prop) + px := proxy.NewProxy(fmt.Sprintf("%s.%s", service.Package, service.Name), p.config.Proto[i], p.log.Named(service.Name), p.gPool, p.mu, p.prop) for _, m := range service.Methods { px.RegisterMethod(m.Name) } diff --git a/tests/go.mod b/tests/go.mod index defc885..7cc5d58 100644 --- a/tests/go.mod +++ b/tests/go.mod @@ -5,20 +5,20 @@ go 1.23 toolchain go1.23.1 require ( - github.com/roadrunner-server/config/v5 v5.0.3 + github.com/roadrunner-server/config/v5 v5.0.4 github.com/roadrunner-server/endure/v2 v2.6.1 github.com/roadrunner-server/goridge/v3 v3.8.3 github.com/roadrunner-server/grpc/v5 v5.0.0 - github.com/roadrunner-server/logger/v5 v5.0.3 - github.com/roadrunner-server/metrics/v5 v5.0.3 - github.com/roadrunner-server/otel/v5 v5.0.2 - github.com/roadrunner-server/resetter/v5 v5.0.4 - github.com/roadrunner-server/rpc/v5 v5.0.3 - github.com/roadrunner-server/server/v5 v5.1.1 - github.com/roadrunner-server/status/v5 v5.0.3 + github.com/roadrunner-server/logger/v5 v5.0.4 + github.com/roadrunner-server/metrics/v5 v5.0.4 + github.com/roadrunner-server/otel/v5 v5.0.3 + github.com/roadrunner-server/resetter/v5 v5.0.5 + github.com/roadrunner-server/rpc/v5 v5.0.4 + github.com/roadrunner-server/server/v5 v5.1.2 + github.com/roadrunner-server/status/v5 v5.0.4 github.com/stretchr/testify v1.9.0 go.uber.org/zap v1.27.0 - google.golang.org/grpc v1.66.2 + google.golang.org/grpc v1.67.0 google.golang.org/protobuf v1.34.2 ) @@ -48,7 +48,7 @@ require ( github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/joho/godotenv v1.5.1 // indirect - github.com/klauspost/compress v1.17.9 // indirect + github.com/klauspost/compress v1.17.10 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect @@ -59,7 +59,7 @@ require ( github.com/pborman/uuid v1.2.1 // indirect github.com/pelletier/go-toml/v2 v2.2.3 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_golang v1.20.3 // indirect + github.com/prometheus/client_golang v1.20.4 // indirect github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.59.1 // indirect github.com/prometheus/procfs v0.15.1 // indirect diff --git a/tests/go.sum b/tests/go.sum index 62e328c..657e9a7 100644 --- a/tests/go.sum +++ b/tests/go.sum @@ -70,8 +70,8 @@ github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= -github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/compress v1.17.10 h1:oXAz+Vh0PMUvJczoi+flxpnBEPxoER1IaAnU/NMPtT0= +github.com/klauspost/compress v1.17.10/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= @@ -106,8 +106,8 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE 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= -github.com/prometheus/client_golang v1.20.3 h1:oPksm4K8B+Vt35tUhw6GbSNSgVlVSBH0qELP/7u83l4= -github.com/prometheus/client_golang v1.20.3/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= +github.com/prometheus/client_golang v1.20.4 h1:Tgh3Yr67PaOv/uTqloMsCEdeuFTatm5zIq5+qNN23vI= +github.com/prometheus/client_golang v1.20.4/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= @@ -117,8 +117,8 @@ github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0leargg github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/roadrunner-server/api/v4 v4.16.0 h1:UaaKWHelc7bZC4cRdTD802gyIrJFRFTPEk7Bt3U01qI= github.com/roadrunner-server/api/v4 v4.16.0/go.mod h1:qTC9Fy+zF4jtoPdZEceGqtrj+8eUB2IsLm51JxKxbV4= -github.com/roadrunner-server/config/v5 v5.0.3 h1:irX12j0kPEU2PoYP2S3mxS59ZZTHjJOAWQxPCT/3x90= -github.com/roadrunner-server/config/v5 v5.0.3/go.mod h1:4pnX0M6hDg/8AiBztaBqLJc51nYp5pxyui4vRhojf2c= +github.com/roadrunner-server/config/v5 v5.0.4 h1:N1fLPvtDSzaFoJojWaSqtXQs/XsOaxyEEgZuM1ru10Q= +github.com/roadrunner-server/config/v5 v5.0.4/go.mod h1:F8vAsLt/yjY/gkBaxImwgQqjMyk3WcKtPwLL33hitQ0= github.com/roadrunner-server/context v1.0.1 h1:6onQ5L1ZsjZFNkPyY7Kd0Lx3+aRTfbbh4OryfrRuknU= github.com/roadrunner-server/context v1.0.1/go.mod h1:rgQ4mT7HrDZG+KhU6trFBGPHHpjTOxHGRk/sPKLVwrg= github.com/roadrunner-server/endure/v2 v2.6.1 h1:vx+3ayn8HXnyeCcjKWwe+DfPrwL5sOQobugzCId4F7k= @@ -129,22 +129,22 @@ github.com/roadrunner-server/events v1.0.1 h1:waCkKhxhzdK3VcI1xG22l+h+0J+Nfdpxjh github.com/roadrunner-server/events v1.0.1/go.mod h1:WZRqoEVaFm209t52EuoT7ISUtvX6BrCi6bI/7pjkVC0= github.com/roadrunner-server/goridge/v3 v3.8.3 h1:XmjrOFnI6ZbQTPaP39DEk8KwLUNTgjluK3pcZaW6ixQ= github.com/roadrunner-server/goridge/v3 v3.8.3/go.mod h1:4TZU8zgkKIZCsH51qwGMpvyXCT59u/8z6q8sCe4ZGAQ= -github.com/roadrunner-server/logger/v5 v5.0.3 h1:uJF9/3KEYAvf+AAavbTMfW1kpOdnTybOlTLmOL7vgwo= -github.com/roadrunner-server/logger/v5 v5.0.3/go.mod h1:w079LabG2e17ba9bjdRGVziS7/kww0/5tjvplfMIUs0= -github.com/roadrunner-server/metrics/v5 v5.0.3 h1:JUUJxh6i+bE8phP0fKl4cskW0LAoIxMwORlefZwbeYY= -github.com/roadrunner-server/metrics/v5 v5.0.3/go.mod h1:bORftcilkV7H2Na/xVsTL12E7OA9cWLZqvsjJ9NvZPQ= -github.com/roadrunner-server/otel/v5 v5.0.2 h1:tZI+P35oi1qJBCe6ZhsSylWnwk80x5bUQRUoH5WIQOo= -github.com/roadrunner-server/otel/v5 v5.0.2/go.mod h1:jl/2LJmy5y2xGjXFrUXjZoA4D5xiXTrpScU++QvcDs0= +github.com/roadrunner-server/logger/v5 v5.0.4 h1:DiydGsyhiqLRR8HYaT8jarzdw1LS+WiJb0W684zeaz8= +github.com/roadrunner-server/logger/v5 v5.0.4/go.mod h1:ygRLH1siEFgSWg/8u+8WXCHiReSA9hJDZFHyWurt/hY= +github.com/roadrunner-server/metrics/v5 v5.0.4 h1:1Xo/bhKwTfrAd9fy9v3mXrVvrZhO2YDTS8RfEIdaBcw= +github.com/roadrunner-server/metrics/v5 v5.0.4/go.mod h1:LKPzS9fbcToQ2Xe3qA7+5KVPwALdwHRBqxaJaFdhYy4= +github.com/roadrunner-server/otel/v5 v5.0.3 h1:ECyCcy69klGYLuka9EFBJRVmihwbtkiN65K3r8mAaBY= +github.com/roadrunner-server/otel/v5 v5.0.3/go.mod h1:MOFhnGDvjdErU9yN7wbfHwlnpNvILFwi10ABicP1El8= github.com/roadrunner-server/pool v1.0.2 h1:wMg6w7msbzB3icUz4uviOSLPaCE+qK02sMz/0pVkeo0= github.com/roadrunner-server/pool v1.0.2/go.mod h1:cBFTlC5HfNs5v6Zo3jO6bUoByK8eJVnrxMP+qf9cfMQ= -github.com/roadrunner-server/resetter/v5 v5.0.4 h1:Qm/fGUti3mTpwTZNIJ8o+f5w64hDcb0r98r3tZ4bUQI= -github.com/roadrunner-server/resetter/v5 v5.0.4/go.mod h1:RyCxrSwAn8a7jy33az0/ZSokUdKJgRUZnsrjVRoN1Aw= -github.com/roadrunner-server/rpc/v5 v5.0.3 h1:v2PVyVUy97lHLhBCeXDtA1h2aGYCIjC3+pQTGm/A96o= -github.com/roadrunner-server/rpc/v5 v5.0.3/go.mod h1:keTMwv4YMdyuLOdxGgdAYjbeCyloHxmpTuXN9aoftLg= -github.com/roadrunner-server/server/v5 v5.1.1 h1:U+LJfOtutteITDC57nZNspWcj3tOYHNwkBi/VvQbcuw= -github.com/roadrunner-server/server/v5 v5.1.1/go.mod h1:eQpY7QY4zD7SNrrMU1mbPyxO+mwJLr0OqEslCvJAU6U= -github.com/roadrunner-server/status/v5 v5.0.3 h1:MLjvyEDG0QV85K9m97sNfGDcVYItC2/AQCd4S4/Q7c4= -github.com/roadrunner-server/status/v5 v5.0.3/go.mod h1:tDmpwWCFa0ylRza8OFztUasGzQOwaksDu6TxdPjVGAg= +github.com/roadrunner-server/resetter/v5 v5.0.5 h1:Wn3gMQ7xUqMUfWo2ChYnzy3R7RbHhUyCwE3pBfeWPQI= +github.com/roadrunner-server/resetter/v5 v5.0.5/go.mod h1:qg10whKx9shnbFC4fLzzs7axFJ4urMCQMKdxT1lP3w8= +github.com/roadrunner-server/rpc/v5 v5.0.4 h1:QZW42Lunhjx5sDDf7BhyAdPQFyR9OCeBKdZp/2gMiQQ= +github.com/roadrunner-server/rpc/v5 v5.0.4/go.mod h1:kLatMg8eGwLMlXFL+P3CWm3+r/4KsK9qcJokE1ACamE= +github.com/roadrunner-server/server/v5 v5.1.2 h1:Y5ufczlyRM5FxcAatSpuE+TN432Vxxa3P4BZwfd7W38= +github.com/roadrunner-server/server/v5 v5.1.2/go.mod h1:5Gfj2G3xKmhBg0Wi7N75LBzvq7ubI//e/4vqbJl86kc= +github.com/roadrunner-server/status/v5 v5.0.4 h1:kobIkbCMQUJKcvS4AWlXnIvWEROEUlC9m3U9qkQRixI= +github.com/roadrunner-server/status/v5 v5.0.4/go.mod h1:CLbR7vkRrIWQjxckMiVUC7nAlw94QJOCiJoZrn/A2lw= github.com/roadrunner-server/tcplisten v1.5.1 h1:CESLjVtnL0LEVaazzwEKUyQx84IcAgOQkdomA2+YHnY= github.com/roadrunner-server/tcplisten v1.5.1/go.mod h1:OrIW/gDTitYAQaDOtmyweYfXQGJ23J+wji0SIjk16Q0= github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ= @@ -320,8 +320,8 @@ google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.66.2 h1:3QdXkuq3Bkh7w+ywLdLvM56cmGvQHUMZpiCzt6Rqaoo= -google.golang.org/grpc v1.66.2/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= +google.golang.org/grpc v1.67.0 h1:IdH9y6PF5MPSdAntIcpjQ+tXO41pcQsfZV2RxtQgVcw= +google.golang.org/grpc v1.67.0/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=