From a4b432401a8037aef0c1817a9528747d2491e273 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Sat, 18 Mar 2023 22:44:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=8A=82=E7=82=B9=E5=8E=8B?= =?UTF-8?q?=E7=BC=A9=E7=A8=8B=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/rpc/services/service_node.go | 40 +++++++++++++++++---------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/internal/rpc/services/service_node.go b/internal/rpc/services/service_node.go index 84bb8d36..6e4925af 100644 --- a/internal/rpc/services/service_node.go +++ b/internal/rpc/services/service_node.go @@ -753,29 +753,41 @@ func (this *NodeService) FindCurrentNodeConfig(ctx context.Context, req *pb.Find return nil, err } - data, err := json.Marshal(nodeConfig) + // 压缩 + var data []byte + var isCompressed = false + var buffer = &bytes.Buffer{} + var writer io.Writer = buffer + var brotliWriter *brotli.Writer + if req.Compress { + brotliWriter = brotli.NewWriterLevel(writer, 5) + writer = brotliWriter + } + + var encoder = json.NewEncoder(writer) + err = encoder.Encode(nodeConfig) if err != nil { return nil, err } - // 压缩 - var isCompressed = false - if req.Compress { - var buf = &bytes.Buffer{} - writer := brotli.NewWriterLevel(buf, 5) - _, err = writer.Write(data) - if err != nil { - _ = writer.Close() + if brotliWriter != nil { + err = brotliWriter.Close() + if err == nil { + data = buffer.Bytes() + isCompressed = true } else { - err = writer.Close() - if err == nil { - isCompressed = true - data = buf.Bytes() - buf.Reset() + // 如果失败,则使用最直接方法重新编码 + data, err = json.Marshal(nodeConfig) + if err != nil { + return nil, err } } + } else { + data = buffer.Bytes() } + buffer.Reset() + return &pb.FindCurrentNodeConfigResponse{ IsChanged: true, NodeJSON: data,