You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ha...@apache.org on 2021/06/29 04:09:42 UTC

[skywalking-banyandb] 05/11: Serialize Fields

This is an automated email from the ASF dual-hosted git repository.

hanahmily pushed a commit to branch feat/liasion
in repository https://gitbox.apache.org/repos/asf/skywalking-banyandb.git

commit 14a7fcb5cedf21ce18aefcad44c164932c299810
Author: Qiuxia Fan <fi...@outlook.com>
AuthorDate: Sun Jun 20 18:15:46 2021 +0800

    Serialize Fields
---
 banyand/liaison/grpc/grpc.go | 80 +++++++++++++++++++++++++++++++++++---------
 1 file changed, 64 insertions(+), 16 deletions(-)

diff --git a/banyand/liaison/grpc/grpc.go b/banyand/liaison/grpc/grpc.go
index 58014cf..9f8b108 100644
--- a/banyand/liaison/grpc/grpc.go
+++ b/banyand/liaison/grpc/grpc.go
@@ -19,8 +19,8 @@ package grpc
 
 import (
 	"context"
-	"fmt"
 	"net"
+	"strconv"
 	"time"
 
 	flatbuffers "github.com/google/flatbuffers/go"
@@ -77,7 +77,7 @@ func (s *Server) GracefulStop() {
 }
 
 func (s *Server) WriteTraces(entityValue *v1.EntityValue, metaData *v1.Metadata) (*flatbuffers.Builder, error) {
-	s.log.Info("Write called...")
+	s.log.Info("WriteTraces called...")
 	builder := flatbuffers.NewBuilder(0)
 	// Serialize MetaData
 	group, name := builder.CreateString(string(metaData.Group())), builder.CreateString(string(metaData.Name()))
@@ -85,19 +85,65 @@ func (s *Server) WriteTraces(entityValue *v1.EntityValue, metaData *v1.Metadata)
 	v1.MetadataAddGroup(builder, group)
 	v1.MetadataAddName(builder, name)
 	v1.MetadataEnd(builder)
-	// Serialize Field
+	// Serialize Fields
 	v1.FieldStart(builder)
-	//for i := 0; i < entityValue.FieldsLength(); i++ {
-	//	v1.FieldAddValueType(builder, v1.ValueTypeString)
-	//	field := builder.CreateString("test")
-	//	v1.FieldAddValue(builder, field)
-	//}
-	v1.FieldAddValueType(builder, v1.ValueTypeString)
-	field := builder.CreateString("test")
-	fmt.Println(field)
-	v1.FieldAddValue(builder, field)
+	var fieldList []flatbuffers.UOffsetT
+	for i := 0; i < entityValue.FieldsLength(); i++ {
+		var f v1.Field
+		var s string
+		if ok := entityValue.Fields(&f, i); ok {
+			unionValueType := new(flatbuffers.Table)
+			if f.Value(unionValueType) {
+				valueType := f.ValueType()
+				if valueType == v1.ValueTypeString {
+					unionStr := new(v1.String)
+					unionStr.Init(unionValueType.Bytes, unionValueType.Pos)
+					v1.FieldAddValueType(builder, v1.ValueTypeString)
+					s = string(unionStr.Value())
+				} else if valueType == v1.ValueTypeInt {
+					unionInt := new(v1.Int)
+					unionInt.Init(unionValueType.Bytes, unionValueType.Pos)
+					v1.FieldAddValueType(builder, v1.ValueTypeInt)
+					field := flatbuffers.UOffsetT(unionInt.Value())
+					v1.FieldAddValue(builder, field)
+					fieldList = append(fieldList, field)
+				} else if valueType == v1.ValueTypeStringArray {
+					unionStrArray := new(v1.StringArray)
+					unionStrArray.Init(unionValueType.Bytes, unionValueType.Pos)
+					len := unionStrArray.ValueLength()
+					if len == 1 {
+						s += string(unionStrArray.Value(0))
+					} else {
+						s += "["
+						for i := 0; i < len; i++ {
+							s += string(unionStrArray.Value(i))
+						}
+						s += "]"
+					}
+				} else if valueType == v1.ValueTypeIntArray {
+					unionIntArray := new(v1.IntArray)
+					unionIntArray.Init(unionValueType.Bytes, unionValueType.Pos)
+					l := unionIntArray.ValueLength()
+					if l == 1 {
+						s += strconv.FormatInt(unionIntArray.Value(0), 10)
+					} else if l > 1{
+						s += "["
+						for i := 0; i < l; i++ {
+							s += strconv.FormatInt(unionIntArray.Value(i), 10)
+						}
+						s += "]"
+					}
+				}
+				if valueType == v1.ValueTypeIntArray || valueType == v1.ValueTypeStringArray || valueType == v1.ValueTypeString {
+					field := builder.CreateString(s)
+					v1.FieldAddValue(builder, field)
+					fieldList = append(fieldList, field)
+				}
+			}
+		}
+	}
 	v1.FieldEnd(builder)
-	// Serialize WriteEntity
+	// Serialize EntityValue
 	dataBinaryLength := entityValue.DataBinaryLength()
 	v1.EntityStartDataBinaryVector(builder, dataBinaryLength)
 	for i := dataBinaryLength; i >= 0; i-- {
@@ -110,9 +156,11 @@ func (s *Server) WriteTraces(entityValue *v1.EntityValue, metaData *v1.Metadata)
 	time := uint64(time.Now().UnixNano())
 	v1.EntityValueAddTimestampNanoseconds(builder, time)
 	v1.EntityValueAddDataBinary(builder, dataBinary)
-	v1.EntityValueStartFieldsVector(builder, 1)
-	builder.PrependUOffsetT(field)
-	fields := builder.EndVector(1)
+	v1.EntityValueStartFieldsVector(builder, len(fieldList))
+	for val := range fieldList {
+		builder.PrependUOffsetT(flatbuffers.UOffsetT(val))
+	}
+	fields := builder.EndVector(len(fieldList))
 	v1.EntityValueAddFields(builder, fields)
 	v1.EntityValueEnd(builder)
 	trace := v1.WriteEntityEnd(builder)