This is an automated email from the ASF dual-hosted git repository. hanahmily pushed a commit to branch demo in repository https://gitbox.apache.org/repos/asf/skywalking-banyandb.git
commit ab6f69f0566fbba54c03a5d8591074a05ba9e740 Author: Gao Hongtao <[email protected]> AuthorDate: Wed Nov 16 13:35:09 2022 +0000 Tweak log default settings Add default value to absent field Signed-off-by: Gao Hongtao <[email protected]> --- banyand/internal/cmd/standalone.go | 2 +- banyand/kv/kv.go | 2 - banyand/liaison/grpc/discovery.go | 4 +- banyand/liaison/grpc/measure.go | 8 +- banyand/liaison/grpc/stream.go | 8 +- banyand/measure/measure_query.go | 7 +- banyand/query/processor.go | 2 +- banyand/query/processor_topn.go | 7 +- banyand/stream/stream_query.go | 2 +- go.mod | 4 +- go.sum | 21 ++--- pkg/encoding/int.go | 13 +-- pkg/encoding/int_test.go | 99 ++++++++++++++++++++-- pkg/encoding/plain.go | 2 +- pkg/grpchelper/client.go | 8 +- pkg/logger/setting.go | 4 +- pkg/pb/v1/write.go | 25 ++++-- pkg/query/logical/common.go | 2 +- .../measure/measure_plan_indexscan_local.go | 6 +- pkg/schema/metadata.go | 2 +- pkg/test/helpers/grpc_health.go | 8 +- pkg/test/helpers/http_health.go | 5 +- test/cases/measure/data/input/linked_or.yaml | 56 ++++++++++++ test/cases/measure/data/want/linked_or.yaml | 60 +++++++++++++ test/cases/measure/measure.go | 1 + test/stress/env | 14 +-- test/stress/env.dev | 13 ++- 27 files changed, 298 insertions(+), 87 deletions(-) diff --git a/banyand/internal/cmd/standalone.go b/banyand/internal/cmd/standalone.go index 02f625c..440c8c9 100644 --- a/banyand/internal/cmd/standalone.go +++ b/banyand/internal/cmd/standalone.go @@ -114,7 +114,7 @@ func newStandaloneCmd() *cobra.Command { }, } - standaloneCmd.Flags().StringVarP(&logging.Env, "logging.env", "", "dev", "the logging") + standaloneCmd.Flags().StringVarP(&logging.Env, "logging.env", "", "prod", "the logging") standaloneCmd.Flags().StringVarP(&logging.Level, "logging.level", "", "info", "the level of logging") standaloneCmd.Flags().AddFlagSet(g.RegisterFlags().FlagSet) return standaloneCmd diff --git a/banyand/kv/kv.go b/banyand/kv/kv.go index 1f3cbef..90944a2 100644 --- a/banyand/kv/kv.go +++ b/banyand/kv/kv.go @@ -80,8 +80,6 @@ type TimeSeriesWriter interface { type TimeSeriesReader interface { // Get a value by its key and timestamp/version Get(key []byte, ts uint64) ([]byte, error) - // GetAll values with an identical key - GetAll(key []byte) ([][]byte, error) } // TimeSeriesStore is time series storage diff --git a/banyand/liaison/grpc/discovery.go b/banyand/liaison/grpc/discovery.go index b78cdd5..98cba84 100644 --- a/banyand/liaison/grpc/discovery.go +++ b/banyand/liaison/grpc/discovery.go @@ -88,7 +88,7 @@ func (s *shardRepo) Rev(message bus.Message) (resp bus.Message) { return } s.setShardNum(e) - s.log.Info(). + s.log.Debug(). Str("action", databasev1.Action_name[int32(e.Action)]). Uint64("shardID", e.Shard.Id). Msg("received a shard e") @@ -136,7 +136,7 @@ func (s *entityRepo) Rev(message bus.Message) (resp bus.Message) { return } id := getID(e.GetSubject()) - s.log.Info(). + s.log.Debug(). Str("action", databasev1.Action_name[int32(e.Action)]). Interface("subject", id). Msg("received an entity event") diff --git a/banyand/liaison/grpc/measure.go b/banyand/liaison/grpc/measure.go index ac6a476..7d82cfe 100644 --- a/banyand/liaison/grpc/measure.go +++ b/banyand/liaison/grpc/measure.go @@ -23,6 +23,7 @@ import ( "time" "github.com/pkg/errors" + "github.com/rs/zerolog" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -46,6 +47,7 @@ func (ms *measureService) Write(measure measurev1.MeasureService_WriteServer) er } return nil } + sampled := ms.log.Sample(&zerolog.BasicSampler{N: 10}) for { writeRequest, err := measure.Recv() if err == io.EOF { @@ -55,7 +57,7 @@ func (ms *measureService) Write(measure measurev1.MeasureService_WriteServer) er return err } if errTime := timestamp.CheckPb(writeRequest.DataPoint.Timestamp); errTime != nil { - ms.log.Error().Err(errTime).Msg("the data point time is invalid") + sampled.Error().Err(errTime).Stringer("written", writeRequest).Msg("the data point time is invalid") if errResp := reply(); errResp != nil { return errResp } @@ -63,7 +65,7 @@ func (ms *measureService) Write(measure measurev1.MeasureService_WriteServer) er } entity, shardID, err := ms.navigate(writeRequest.GetMetadata(), writeRequest.GetDataPoint().GetTagFamilies()) if err != nil { - ms.log.Error().Err(err).Msg("failed to navigate to the write target") + sampled.Error().Err(err).Msg("failed to navigate to the write target") if errResp := reply(); errResp != nil { return errResp } @@ -76,7 +78,7 @@ func (ms *measureService) Write(measure measurev1.MeasureService_WriteServer) er }) _, errWritePub := ms.pipeline.Publish(data.TopicMeasureWrite, message) if errWritePub != nil { - ms.log.Error().Err(errWritePub).Msg("failed to send a message") + sampled.Error().Err(errWritePub).Msg("failed to send a message") if errResp := reply(); errResp != nil { return errResp } diff --git a/banyand/liaison/grpc/stream.go b/banyand/liaison/grpc/stream.go index 8cf6e1b..5a3ab2d 100644 --- a/banyand/liaison/grpc/stream.go +++ b/banyand/liaison/grpc/stream.go @@ -23,6 +23,7 @@ import ( "time" "github.com/pkg/errors" + "github.com/rs/zerolog" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -46,6 +47,7 @@ func (s *streamService) Write(stream streamv1.StreamService_WriteServer) error { } return nil } + sampled := s.log.Sample(&zerolog.BasicSampler{N: 10}) for { writeEntity, err := stream.Recv() if err == io.EOF { @@ -55,7 +57,7 @@ func (s *streamService) Write(stream streamv1.StreamService_WriteServer) error { return err } if errTime := timestamp.CheckPb(writeEntity.GetElement().Timestamp); errTime != nil { - s.log.Error().Err(errTime).Msg("the element time is invalid") + sampled.Error().Stringer("written", writeEntity).Err(errTime).Msg("the element time is invalid") if errResp := reply(); errResp != nil { return errResp } @@ -63,7 +65,7 @@ func (s *streamService) Write(stream streamv1.StreamService_WriteServer) error { } entity, shardID, err := s.navigate(writeEntity.GetMetadata(), writeEntity.GetElement().GetTagFamilies()) if err != nil { - s.log.Error().Err(err).Msg("failed to navigate to the write target") + sampled.Error().Err(err).Msg("failed to navigate to the write target") if errResp := reply(); errResp != nil { return errResp } @@ -76,7 +78,7 @@ func (s *streamService) Write(stream streamv1.StreamService_WriteServer) error { }) _, errWritePub := s.pipeline.Publish(data.TopicStreamWrite, message) if errWritePub != nil { - s.log.Error().Err(errWritePub).Msg("failed to send a message") + sampled.Error().Err(errWritePub).Msg("failed to send a message") if errResp := reply(); errResp != nil { return errResp } diff --git a/banyand/measure/measure_query.go b/banyand/measure/measure_query.go index ceefa42..89f1b13 100644 --- a/banyand/measure/measure_query.go +++ b/banyand/measure/measure_query.go @@ -116,7 +116,7 @@ func (s *measure) Shard(id common.ShardID) (tsdb.Shard, error) { func (s *measure) ParseTagFamily(family string, item tsdb.Item) (*modelv1.TagFamily, error) { familyRawBytes, err := item.Family(familyIdentity(family, pbv1.TagFlag)) if err != nil { - return nil, err + return nil, errors.Wrapf(err, "measure %s.%s parse family %s", s.name, s.group, family) } tagFamily := &modelv1.TagFamilyForWrite{} err = proto.Unmarshal(familyRawBytes, tagFamily) @@ -159,7 +159,10 @@ func (s *measure) ParseField(name string, item tsdb.Item) (*measurev1.DataPoint_ if err != nil { return nil, err } - fieldValue := pbv1.DecodeFieldValue(bytes, fieldSpec) + fieldValue, err := pbv1.DecodeFieldValue(bytes, fieldSpec) + if err != nil { + return nil, err + } return &measurev1.DataPoint_Field{ Name: name, Value: fieldValue, diff --git a/banyand/query/processor.go b/banyand/query/processor.go index cf9ac2e..5c92949 100644 --- a/banyand/query/processor.go +++ b/banyand/query/processor.go @@ -160,7 +160,7 @@ func (p *measureQueryProcessor) Rev(message bus.Message) (resp bus.Message) { } defer func() { if err = mIterator.Close(); err != nil { - p.queryService.log.Error().Err(err).Msg("fail to close the query plan") + p.queryService.log.Error().Err(err).Stringer("req", queryCriteria).Msg("fail to close the query plan") } }() result := make([]*measurev1.DataPoint, 0) diff --git a/banyand/query/processor_topn.go b/banyand/query/processor_topn.go index 021c7eb..805937e 100644 --- a/banyand/query/processor_topn.go +++ b/banyand/query/processor_topn.go @@ -57,7 +57,7 @@ func (t *topNQueryProcessor) Rev(message bus.Message) (resp bus.Message) { t.log.Warn().Msg("invalid requested sort direction") return } - t.log.Info().Msg("received a topN query event") + t.log.Debug().Msg("received a topN query event") topNMetadata := request.GetMetadata() topNSchema, err := t.metaService.TopNAggregationRegistry().GetTopNAggregation(context.TODO(), topNMetadata) if err != nil { @@ -182,7 +182,10 @@ func parseTopNFamily(item tsdb.Item, interval time.Duration) (*streaming.Tuple2, if err != nil { return nil, err } - fieldValue := pbv1.DecodeFieldValue(fieldBytes, measure.TopNValueFieldSpec) + fieldValue, err := pbv1.DecodeFieldValue(fieldBytes, measure.TopNValueFieldSpec) + if err != nil { + return nil, err + } return &streaming.Tuple2{ // GroupValues V1: tagFamily.GetTags()[1].GetStr().GetValue(), diff --git a/banyand/stream/stream_query.go b/banyand/stream/stream_query.go index 0463c2f..218fc6c 100644 --- a/banyand/stream/stream_query.go +++ b/banyand/stream/stream_query.go @@ -88,7 +88,7 @@ func (s *stream) Shard(id common.ShardID) (tsdb.Shard, error) { func (s *stream) ParseTagFamily(family string, item tsdb.Item) (*modelv1.TagFamily, error) { familyRawBytes, err := item.Family(tsdb.Hash([]byte(family))) if err != nil { - return nil, errors.Wrapf(err, "parse family %s", family) + return nil, errors.Wrapf(err, "stream %s.%s parse family %s", s.name, s.group, family) } tagFamily := &modelv1.TagFamilyForWrite{} err = proto.Unmarshal(familyRawBytes, tagFamily) diff --git a/go.mod b/go.mod index f86f035..a690871 100644 --- a/go.mod +++ b/go.mod @@ -54,7 +54,6 @@ require ( github.com/blevesearch/vellum v1.0.7 // indirect github.com/blugelabs/bluge_segment_api v0.2.0 // indirect github.com/blugelabs/ice v1.0.0 // indirect - github.com/blugelabs/ice/v2 v2.0.1 // indirect github.com/caio/go-tdigest v3.1.0+incompatible // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/coreos/go-semver v0.3.0 // indirect @@ -132,5 +131,8 @@ require ( replace ( github.com/benbjohnson/clock v1.3.0 => github.com/SkyAPM/clock v1.3.1-0.20220809233656-dc7607c94a97 + github.com/blugelabs/bluge => github.com/zinclabs/bluge v1.1.5 + github.com/blugelabs/bluge_segment_api => github.com/zinclabs/bluge_segment_api v1.0.0 + github.com/blugelabs/ice => github.com/zinclabs/ice v1.1.3 github.com/dgraph-io/badger/v3 v3.2011.1 => github.com/SkyAPM/badger/v3 v3.0.0-20220817114744-b3711444d876 ) diff --git a/go.sum b/go.sum index 459669d..41f517d 100644 --- a/go.sum +++ b/go.sum @@ -44,9 +44,6 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/RoaringBitmap/gocroaring v0.4.0/go.mod h1:NieMwz7ZqwU2DD73/vvYwv7r4eWBKuPVSXZIpsaMwCI= -github.com/RoaringBitmap/real-roaring-datasets v0.0.0-20190726190000-eb7c87156f76/go.mod h1:oM0MHmQ3nDsq609SS36p+oYbRi16+oVvU2Bw4Ipv0SE= -github.com/RoaringBitmap/roaring v0.9.1/go.mod h1:h1B7iIUOmnAeb5ytYMvnHJwxMc6LUrwBnzXWRuqTQUc= github.com/RoaringBitmap/roaring v0.9.4 h1:ckvZSX5gwCRaJYBNe7syNawCU5oruY9gQmjXlp4riwo= github.com/RoaringBitmap/roaring v0.9.4/go.mod h1:icnadbWcNyfEHlYdr+tDlOTih1Bf/h+rzPpv4sbomAA= github.com/SkyAPM/badger/v3 v3.0.0-20220817114744-b3711444d876 h1:zH//2cmDpBla7rL9NzWr+vZ2UskMrvdnUvslz3KYTN0= @@ -77,7 +74,6 @@ github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edY github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/blevesearch/go-porterstemmer v1.0.3 h1:GtmsqID0aZdCSNiY8SkuPJ12pD4jI+DdXTAn4YRcHCo= github.com/blevesearch/go-porterstemmer v1.0.3/go.mod h1:angGc5Ht+k2xhJdZi511LtmxuEf0OVpvUUNrwmM1P7M= -github.com/blevesearch/mmap-go v1.0.2/go.mod h1:ol2qBqYaOUsGdm7aRMRrYGgPvnwLe6Y+7LMvAB5IbSA= github.com/blevesearch/mmap-go v1.0.3/go.mod h1:pYvKl/grLQrBxuaRYgoTssa4rVujYYeenDp++2E+yvs= github.com/blevesearch/mmap-go v1.0.4 h1:OVhDhT5B/M1HNPpYPBKIEJaD0F3Si+CrEKULGCDPWmc= github.com/blevesearch/mmap-go v1.0.4/go.mod h1:EWmEAOmdAS9z/pi/+Toxu99DnsbhG1TIxUoRmJw/pSs= @@ -85,17 +81,8 @@ github.com/blevesearch/segment v0.9.0 h1:5lG7yBCx98or7gK2cHMKPukPZ/31Kag7nONpoBt github.com/blevesearch/segment v0.9.0/go.mod h1:9PfHYUdQCgHktBgvtUOF4x+pc4/l8rdH0u5spnW85UQ= github.com/blevesearch/snowballstem v0.9.0 h1:lMQ189YspGP6sXvZQ4WZ+MLawfV8wOmPoD/iWeNXm8s= github.com/blevesearch/snowballstem v0.9.0/go.mod h1:PivSj3JMc8WuaFkTSRDW2SlrulNWPl4ABg1tC/hlgLs= -github.com/blevesearch/vellum v1.0.5/go.mod h1:atE0EH3fvk43zzS7t1YNdNC7DbmcC3uz+eMD5xZ2OyQ= github.com/blevesearch/vellum v1.0.7 h1:+vn8rfyCRHxKVRgDLeR0FAXej2+6mEb5Q15aQE/XESQ= github.com/blevesearch/vellum v1.0.7/go.mod h1:doBZpmRhwTsASB4QdUZANlJvqVAUdUyX0ZK7QJCTeBE= -github.com/blugelabs/bluge v0.2.2 h1:gat8CqE6P6tOgeX30XGLOVNTC26cpM2RWVcreXWtYcM= -github.com/blugelabs/bluge v0.2.2/go.mod h1:am1LU9jS8dZgWkRzkGLQN3757EgMs3upWrU2fdN9foE= -github.com/blugelabs/bluge_segment_api v0.2.0 h1:cCX1Y2y8v0LZ7+EEJ6gH7dW6TtVTW4RhG0vp3R+N2Lo= -github.com/blugelabs/bluge_segment_api v0.2.0/go.mod h1:95XA+ZXfRj/IXADm7gZ+iTcWOJPg5jQTY1EReIzl3LA= -github.com/blugelabs/ice v1.0.0 h1:um7wf9e6jbkTVCrOyQq3tKK43fBMOvLUYxbj3Qtc4eo= -github.com/blugelabs/ice v1.0.0/go.mod h1:gNfFPk5zM+yxJROhthxhVQYjpBO9amuxWXJQ2Lo+IbQ= -github.com/blugelabs/ice/v2 v2.0.1 h1:mzHbntLjk2v7eDRgoXCgzOsPKN1Tenu9Svo6l9cTLS4= -github.com/blugelabs/ice/v2 v2.0.1/go.mod h1:QxAWSPNwZwsIqS25c3lbIPFQrVvT1sphf5x5DfMLH5M= github.com/caio/go-tdigest v3.1.0+incompatible h1:uoVMJ3Q5lXmVLCCqaMGHLBWnbGoN6Lpu7OAUPR60cds= github.com/caio/go-tdigest v3.1.0+incompatible/go.mod h1:sHQM/ubZStBUmF1WbB8FAm8q9GjDajLC5T7ydxE3JHI= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -232,7 +219,6 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -510,6 +496,12 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/zenizh/go-capturer v0.0.0-20211219060012-52ea6c8fed04 h1:qXafrlZL1WsJW5OokjraLLRURHiw0OzKHD/RNdspp4w= github.com/zenizh/go-capturer v0.0.0-20211219060012-52ea6c8fed04/go.mod h1:FiwNQxz6hGoNFBC4nIx+CxZhI3nne5RmIOlT/MXcSD4= +github.com/zinclabs/bluge v1.1.5 h1:QJhkweeBVRaaEPdaRptkYOJDLCeyo+JBgc2hNyFehAM= +github.com/zinclabs/bluge v1.1.5/go.mod h1:IG9JlDUzUGRIxylWmLyF7e1QwMdRWu9FkNSivJ4VB+E= +github.com/zinclabs/bluge_segment_api v1.0.0 h1:GJvPxdzR7KjwdxmcKleQLvtIYi/J7Q7ehRlZqgGayzg= +github.com/zinclabs/bluge_segment_api v1.0.0/go.mod h1:mYfPVUdXLZ4iXsicXMER+RcI/avwphjMOi8nhN9HDLA= +github.com/zinclabs/ice v1.1.3 h1:LNfncdxQw2ix6P1T2ISmhO+6BFRa27qyTTfK0PitF2c= +github.com/zinclabs/ice v1.1.3/go.mod h1:wTwGEe30mQnSLaR1ezxu4E80GcwO6EyOww67KpJtIiw= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= @@ -702,7 +694,6 @@ golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181221143128-b4a75ba826a6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/pkg/encoding/int.go b/pkg/encoding/int.go index df6ce8e..c9e1991 100644 --- a/pkg/encoding/int.go +++ b/pkg/encoding/int.go @@ -74,10 +74,10 @@ func (b *intEncoderPoolDelegator) Put(encoder SeriesEncoder) { } type intDecoderPoolDelegator struct { - name string pool *sync.Pool - size int fn ParseInterval + name string + size int } func NewIntDecoderPool(name string, size int, fn ParseInterval) SeriesDecoderPool { @@ -216,7 +216,7 @@ func (i intDecoder) Get(ts uint64) ([]byte, error) { return iter.Val(), nil } } - return nil, nil + return zeroBytes, nil } func (i intDecoder) Iterator() SeriesIterator { @@ -231,8 +231,9 @@ func (i intDecoder) Iterator() SeriesIterator { } var ( - _ SeriesIterator = (*intIterator)(nil) - zero = convert.BytesToUint64(convert.Int64ToBytes(0)) + _ SeriesIterator = (*intIterator)(nil) + zeroBytes = convert.Int64ToBytes(0) + Zero = convert.BytesToUint64(zeroBytes) ) type intIterator struct { @@ -265,7 +266,7 @@ func (i *intIterator) Next() bool { i.currVal = i.values.Value() } } else { - i.currVal = zero + i.currVal = Zero } i.currTime = i.startTime + uint64(i.interval*i.index) i.index++ diff --git a/pkg/encoding/int_test.go b/pkg/encoding/int_test.go index e5ffd4e..657bbe5 100644 --- a/pkg/encoding/int_test.go +++ b/pkg/encoding/int_test.go @@ -86,8 +86,8 @@ func TestNewIntEncoderAndDecoder(t *testing.T) { assert.Equal(t, key, k) return 1 * time.Minute } - encoderPool := NewIntEncoderPool("minute", 3, fn) - decoderPool := NewIntDecoderPool("minute", 3, fn) + encoderPool := NewIntEncoderPool("minute", 4, fn) + decoderPool := NewIntDecoderPool("minute", 4, fn) for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { @@ -106,17 +106,102 @@ func TestNewIntEncoderAndDecoder(t *testing.T) { at.NoError(decoder.Decode(key, bb)) at.True(decoder.IsFull()) iter := decoder.Iterator() - i := 0 - for ; iter.Next(); i++ { + for i, t := range tt.want.ts { + at.True(iter.Next()) at.NoError(iter.Error()) at.Equal(tt.want.ts[i], iter.Time()) at.Equal(tt.want.data[i], convert.BytesToInt64(iter.Val())) - v, err := decoder.Get(tt.want.ts[i]) + v, err := decoder.Get(t) at.NoError(err) at.Equal(tt.want.data[i], convert.BytesToInt64(v)) } - if i == 0 { - at.Fail("empty data") + }) + } +} + +func TestNewIntDecoderGet(t *testing.T) { + type tsData struct { + ts []uint64 + data []int64 + } + tests := []struct { + name string + args tsData + want tsData + }{ + { + name: "golden path", + args: tsData{ + ts: []uint64{uint64(time.Minute), uint64(2 * time.Minute), uint64(3 * time.Minute), uint64(4 * time.Minute)}, + data: []int64{7, 8, 7, 9}, + }, + want: tsData{ + ts: []uint64{uint64(time.Minute), uint64(2 * time.Minute), uint64(3 * time.Minute), uint64(4 * time.Minute)}, + data: []int64{7, 8, 7, 9}, + }, + }, + { + name: "more than the size", + args: tsData{ + ts: []uint64{uint64(time.Minute), uint64(2 * time.Minute), uint64(3 * time.Minute), uint64(4 * time.Minute), uint64(4 * time.Minute)}, + data: []int64{7, 8, 7, 9, 6}, + }, + want: tsData{ + ts: []uint64{uint64(time.Minute), uint64(2 * time.Minute), uint64(3 * time.Minute), uint64(4 * time.Minute), uint64(5 * time.Minute)}, + data: []int64{7, 8, 7, 9, 0}, + }, + }, + { + name: "less than the size", + args: tsData{ + ts: []uint64{uint64(time.Minute), uint64(2 * time.Minute), uint64(3 * time.Minute)}, + data: []int64{7, 8, 7}, + }, + want: tsData{ + ts: []uint64{uint64(time.Minute), uint64(2 * time.Minute), uint64(3 * time.Minute)}, + data: []int64{7, 8, 7}, + }, + }, + { + name: "empty slot in the middle", + args: tsData{ + ts: []uint64{uint64(time.Minute), uint64(4 * time.Minute)}, + data: []int64{7, 9}, + }, + want: tsData{ + ts: []uint64{uint64(time.Minute), uint64(2 * time.Minute), uint64(3 * time.Minute), uint64(4 * time.Minute)}, + data: []int64{7, 0, 0, 9}, + }, + }, + } + key := []byte("foo") + fn := func(k []byte) time.Duration { + assert.Equal(t, key, k) + return 1 * time.Minute + } + encoderPool := NewIntEncoderPool("minute", 4, fn) + decoderPool := NewIntDecoderPool("minute", 4, fn) + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + at := assert.New(t) + encoder := encoderPool.Get(key) + decoder := decoderPool.Get(key) + encoder.Reset(key) + for i, v := range tt.args.ts { + encoder.Append(v, convert.Int64ToBytes(tt.args.data[i])) + if encoder.IsFull() { + break + } + } + bb, err := encoder.Encode() + at.NoError(err) + at.NoError(decoder.Decode(key, bb)) + at.True(decoder.IsFull()) + for i, t := range tt.want.ts { + v, err := decoder.Get(t) + at.NoError(err) + at.Equal(tt.want.data[i], convert.BytesToInt64(v)) } }) } diff --git a/pkg/encoding/plain.go b/pkg/encoding/plain.go index 5c0d6f5..2284273 100644 --- a/pkg/encoding/plain.go +++ b/pkg/encoding/plain.go @@ -237,7 +237,7 @@ func (t *plainDecoder) Get(ts uint64) ([]byte, error) { } slot := getTSSlot(t.ts, i) if parseTS(slot) != ts { - return nil, fmt.Errorf("%d doesn't exist", ts) + return nil, fmt.Errorf("%d is wrong", ts) } return getVal(t.val, parseOffset(slot)) } diff --git a/pkg/grpchelper/client.go b/pkg/grpchelper/client.go index 3a9181e..e73e356 100644 --- a/pkg/grpchelper/client.go +++ b/pkg/grpchelper/client.go @@ -28,13 +28,12 @@ import ( "github.com/apache/skywalking-banyandb/pkg/logger" ) -var l = logger.GetLogger() - func Conn(addr string, connTimeout time.Duration, opts ...grpc.DialOption) (*grpc.ClientConn, error) { defaultOpts := []grpc.DialOption{ grpc.WithBlock(), } opts = append(opts, defaultOpts...) + l := logger.GetLogger("grpc-helper") connStart := time.Now() dialCtx, dialCancel := context.WithTimeout(context.Background(), connTimeout) @@ -49,7 +48,7 @@ func Conn(addr string, connTimeout time.Duration, opts ...grpc.DialOption) (*grp return nil, err } connDuration := time.Since(connStart) - l.Info().Dur("conn", connDuration).Msg("time elapsed") + l.Debug().Dur("conn", connDuration).Msg("time elapsed") return conn, nil } @@ -58,6 +57,7 @@ func Request(ctx context.Context, rpcTimeout time.Duration, fn func(rpcCtx conte rpcCtx, rpcCancel := context.WithTimeout(ctx, rpcTimeout) defer rpcCancel() rpcCtx = metadata.NewOutgoingContext(rpcCtx, make(metadata.MD)) + l := logger.GetLogger("grpc-helper") err := fn(rpcCtx) if err != nil { @@ -71,6 +71,6 @@ func Request(ctx context.Context, rpcTimeout time.Duration, fn func(rpcCtx conte return err } rpcDuration := time.Since(rpcStart) - l.Info().Dur("rpc", rpcDuration).Msg("time elapsed") + l.Debug().Dur("rpc", rpcDuration).Msg("time elapsed") return nil } diff --git a/pkg/logger/setting.go b/pkg/logger/setting.go index 9d65e5e..40739b3 100644 --- a/pkg/logger/setting.go +++ b/pkg/logger/setting.go @@ -50,7 +50,7 @@ func (rl *rootLogger) setDefault() { defer atomic.StoreUint32(&rl.done, 1) var err error rl.l, err = getLogger(Logging{ - Env: "dev", + Env: "prod", Level: "debug", }) if err != nil { @@ -114,7 +114,7 @@ func getLogger(cfg Logging) (*Logger, error) { } w = io.Writer(cw) default: - w = os.Stderr + w = os.Stdout } l := zerolog.New(w).Level(lvl).With().Timestamp().Logger() return &Logger{module: "root", Logger: &l}, nil diff --git a/pkg/pb/v1/write.go b/pkg/pb/v1/write.go index c8b6a9f..f56a68b 100644 --- a/pkg/pb/v1/write.go +++ b/pkg/pb/v1/write.go @@ -19,6 +19,7 @@ package v1 import ( "bytes" + "encoding/hex" "time" "github.com/pkg/errors" @@ -31,12 +32,15 @@ import ( modelv1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/model/v1" streamv1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/stream/v1" "github.com/apache/skywalking-banyandb/pkg/convert" + "github.com/apache/skywalking-banyandb/pkg/encoding" ) type ID string const fieldFlagLength = 9 +var zeroFieldValue = &modelv1.FieldValue{Value: &modelv1.FieldValue_Int{Int: &modelv1.Int{Value: int64(encoding.Zero)}}} + var ( strDelimiter = []byte("\n") NullTag = &modelv1.TagValue{Value: &modelv1.TagValue_Null{}} @@ -45,7 +49,7 @@ var ( ErrUnsupportedTagForIndexField = errors.New("the tag type(for example, null) can not be as the index field value") ErrNullValue = errors.New("the tag value is null") ErrMalformedElement = errors.New("element is malformed") - ErrMalformedFieldFlag = errors.New("field flag is malformed") + ErrMalformedField = errors.New("field is malformed") ) func MarshalIndexFieldValue(tagValue *modelv1.TagValue) ([]byte, error) { @@ -364,16 +368,23 @@ func EncodeFamily(familySpec *databasev1.TagFamilySpec, family *modelv1.TagFamil return proto.Marshal(data) } -func DecodeFieldValue(fieldValue []byte, fieldSpec *databasev1.FieldSpec) *modelv1.FieldValue { +func DecodeFieldValue(fieldValue []byte, fieldSpec *databasev1.FieldSpec) (*modelv1.FieldValue, error) { switch fieldSpec.GetFieldType() { case databasev1.FieldType_FIELD_TYPE_STRING: - return &modelv1.FieldValue{Value: &modelv1.FieldValue_Str{Str: &modelv1.Str{Value: string(fieldValue)}}} + return &modelv1.FieldValue{Value: &modelv1.FieldValue_Str{Str: &modelv1.Str{Value: string(fieldValue)}}}, nil case databasev1.FieldType_FIELD_TYPE_INT: - return &modelv1.FieldValue{Value: &modelv1.FieldValue_Int{Int: &modelv1.Int{Value: convert.BytesToInt64(fieldValue)}}} + if len(fieldValue) == 0 { + return zeroFieldValue, nil + } + if len(fieldValue) != 8 { + return nil, errors.WithMessagef(ErrMalformedField, "the length of encoded field value(int64) %s is %d, less than 8", + hex.EncodeToString(fieldValue), len(fieldValue)) + } + return &modelv1.FieldValue{Value: &modelv1.FieldValue_Int{Int: &modelv1.Int{Value: convert.BytesToInt64(fieldValue)}}}, nil case databasev1.FieldType_FIELD_TYPE_DATA_BINARY: - return &modelv1.FieldValue{Value: &modelv1.FieldValue_BinaryData{BinaryData: fieldValue}} + return &modelv1.FieldValue{Value: &modelv1.FieldValue_BinaryData{BinaryData: fieldValue}}, nil } - return &modelv1.FieldValue{Value: &modelv1.FieldValue_Null{}} + return &modelv1.FieldValue{Value: &modelv1.FieldValue_Null{}}, nil } func EncoderFieldFlag(fieldSpec *databasev1.FieldSpec, interval time.Duration) []byte { @@ -387,7 +398,7 @@ func EncoderFieldFlag(fieldSpec *databasev1.FieldSpec, interval time.Duration) [ func DecodeFieldFlag(key []byte) (*databasev1.FieldSpec, time.Duration, error) { if len(key) < fieldFlagLength { - return nil, 0, ErrMalformedFieldFlag + return nil, 0, errors.WithMessagef(ErrMalformedField, "flag %s is invalid", hex.EncodeToString(key)) } b := key[len(key)-9:] return &databasev1.FieldSpec{ diff --git a/pkg/query/logical/common.go b/pkg/query/logical/common.go index 716be97..2cd6850 100644 --- a/pkg/query/logical/common.go +++ b/pkg/query/logical/common.go @@ -74,7 +74,7 @@ func ProjectItem(ec executor.ExecutionContext, item tsdb.Item, projectionFieldRe familyName := refs[0].Tag.GetFamilyName() parsedTagFamily, err := ec.ParseTagFamily(familyName, item) if err != nil { - return nil, err + return nil, errors.WithMessage(err, "parse projection") } if len(refs) > len(parsedTagFamily.Tags) { return nil, errors.Wrapf(ErrInvalidData, diff --git a/pkg/query/logical/measure/measure_plan_indexscan_local.go b/pkg/query/logical/measure/measure_plan_indexscan_local.go index 69df5b3..d7722d4 100644 --- a/pkg/query/logical/measure/measure_plan_indexscan_local.go +++ b/pkg/query/logical/measure/measure_plan_indexscan_local.go @@ -217,10 +217,8 @@ func (ism *indexScanIterator) Next() bool { } nextItem := ism.inner.Next() var err error - ism.current, err = transform(nextItem, ism.context) - if err != nil { - ism.err = err - return false + if ism.current, err = transform(nextItem, ism.context); err != nil { + ism.err = multierr.Append(ism.err, err) } return true } diff --git a/pkg/schema/metadata.go b/pkg/schema/metadata.go index f95737b..ca5688e 100644 --- a/pkg/schema/metadata.go +++ b/pkg/schema/metadata.go @@ -158,7 +158,7 @@ func (sr *schemaRepo) Watcher() { if !more { return } - sr.l.Info().Interface("event", evt).Msg("received an event") + sr.l.Debug().Interface("event", evt).Msg("received an event") for i := 0; i < 10; i++ { var err error switch evt.Typ { diff --git a/pkg/test/helpers/grpc_health.go b/pkg/test/helpers/grpc_health.go index b78c0b1..694dfaf 100644 --- a/pkg/test/helpers/grpc_health.go +++ b/pkg/test/helpers/grpc_health.go @@ -28,10 +28,7 @@ import ( "github.com/apache/skywalking-banyandb/pkg/logger" ) -var ( - ErrServiceUnhealthy = errors.New("service is unhealthy") - l = logger.GetLogger() -) +var ErrServiceUnhealthy = errors.New("service is unhealthy") func HealthCheck(addr string, connTimeout time.Duration, rpcTimeout time.Duration, opts ...grpc.DialOption) func() error { return func() error { @@ -50,11 +47,12 @@ func HealthCheck(addr string, connTimeout time.Duration, rpcTimeout time.Duratio }); err != nil { return err } + l := logger.GetLogger() if resp.GetStatus() != grpc_health_v1.HealthCheckResponse_SERVING { l.Warn().Str("responded_status", resp.GetStatus().String()).Msg("service unhealthy") return ErrServiceUnhealthy } - l.Info().Stringer("status", resp.GetStatus()).Msg("connected") + l.Debug().Stringer("status", resp.GetStatus()).Msg("connected") return nil } } diff --git a/pkg/test/helpers/http_health.go b/pkg/test/helpers/http_health.go index abd33d6..cdd8115 100644 --- a/pkg/test/helpers/http_health.go +++ b/pkg/test/helpers/http_health.go @@ -20,6 +20,7 @@ import ( "fmt" "time" + "github.com/apache/skywalking-banyandb/pkg/logger" "github.com/go-resty/resty/v2" ) @@ -34,13 +35,13 @@ func HTTPHealthCheck(addr string) func() error { time.Sleep(1 * time.Second) return err } - + l := logger.GetLogger("http-health") if resp.StatusCode() != 200 { l.Warn().Str("responded_status", resp.Status()).Msg("service unhealthy") time.Sleep(1 * time.Second) return ErrServiceUnhealthy } - l.Info().Stringer("response", resp).Msg("connected") + l.Debug().Stringer("response", resp).Msg("connected") time.Sleep(500 * time.Millisecond) return nil } diff --git a/test/cases/measure/data/input/linked_or.yaml b/test/cases/measure/data/input/linked_or.yaml new file mode 100644 index 0000000..5481bcf --- /dev/null +++ b/test/cases/measure/data/input/linked_or.yaml @@ -0,0 +1,56 @@ +# Licensed to Apache Software Foundation (ASF) under one or more contributor +# license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright +# ownership. Apache Software Foundation (ASF) licenses this file to you under +# the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +metadata: + name: "service_cpm_minute" + group: "sw_metric" +tagProjection: + tagFamilies: + - name: "default" + tags: ["id", "entity_id"] +fieldProjection: + names: ["total", "value"] +criteria: + le: + op: "LOGICAL_OP_OR" + left: + condition: + name: "id" + op: "BINARY_OP_EQ" + value: + id: + value: "4" + right: + le: + op: "LOGICAL_OP_OR" + left: + condition: + name: "id" + op: "BINARY_OP_EQ" + value: + id: + value: "5" + right: + le: + op: "LOGICAL_OP_OR" + left: + condition: + name: "id" + op: "BINARY_OP_EQ" + value: + id: + value: "unknown" diff --git a/test/cases/measure/data/want/linked_or.yaml b/test/cases/measure/data/want/linked_or.yaml new file mode 100644 index 0000000..785dba9 --- /dev/null +++ b/test/cases/measure/data/want/linked_or.yaml @@ -0,0 +1,60 @@ +# Licensed to Apache Software Foundation (ASF) under one or more contributor +# license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright +# ownership. Apache Software Foundation (ASF) licenses this file to you under +# the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +dataPoints: +- fields: + - name: total + value: + int: + value: "100" + - name: value + value: + int: + value: "2" + tagFamilies: + - name: default + tags: + - key: id + value: + id: + value: "4" + - key: entity_id + value: + str: + value: entity_2 + timestamp: "2022-10-17T12:50:45.912Z" +- fields: + - name: total + value: + int: + value: "100" + - name: value + value: + int: + value: "3" + tagFamilies: + - name: default + tags: + - key: id + value: + id: + value: "5" + - key: entity_id + value: + str: + value: entity_2 + timestamp: "2022-10-17T12:51:45.912Z" diff --git a/test/cases/measure/measure.go b/test/cases/measure/measure.go index 0ada8fb..5f3bce7 100644 --- a/test/cases/measure/measure.go +++ b/test/cases/measure/measure.go @@ -56,4 +56,5 @@ var _ = g.DescribeTable("Scanning Measures", verify, g.Entry("filter by entity id and service id", helpers.Args{Input: "entity_service", Want: "entity", Duration: 25 * time.Minute, Offset: -20 * time.Minute}), g.Entry("without field", helpers.Args{Input: "no_field", Duration: 25 * time.Minute, Offset: -20 * time.Minute}), g.Entry("invalid logical expression", helpers.Args{Input: "err_invalid_le", Duration: 25 * time.Minute, Offset: -20 * time.Minute, WantErr: true}), + g.Entry("linked or expressions", helpers.Args{Input: "linked_or", Duration: 25 * time.Minute, Offset: -20 * time.Minute}), ) diff --git a/test/stress/env b/test/stress/env index 78577df..007f541 100644 --- a/test/stress/env +++ b/test/stress/env @@ -13,9 +13,9 @@ # See the License for the specific language governing permissions and # limitations under the License. -SW_AGENT_JAVA_COMMIT=5bc1d1d1f1d9ce6a4f7fce20e8ecc330bccf47ec -SW_AGENT_E2E_SERVICE_PROVIDER_COMMIT=34a4553e23530e8255efe6f5a0adff9e69555d64 -SW_AGENT_SATELLITE_COMMIT=1987e1d566ac90f6b58a45fd9bfa27bf8faad635 + +SW_AGENT_JAVA_COMMIT=3f88d735ba2bfd1196aff946502447d4b14450c8 +SW_AGENT_SATELLITE_COMMIT=ea27a3f4e126a24775fe12e2aa2695bcb23d99c3 SW_AGENT_NGINX_LUA_COMMIT=c3cee4841798a147d83b96a10914d4ac0e11d0aa SW_AGENT_NODEJS_COMMIT=2e7560518aff846befd4d6bc815fe5e38c704a11 SW_AGENT_GO_COMMIT=4af380c2db6243106b0fc650b6003ce3b3eb82a0 @@ -23,10 +23,10 @@ SW_AGENT_PYTHON_COMMIT=c76a6ec51a478ac91abb20ec8f22a99b8d4d6a58 SW_AGENT_CLIENT_JS_COMMIT=af0565a67d382b683c1dbd94c379b7080db61449 SW_AGENT_CLIENT_JS_TEST_COMMIT=4f1eb1dcdbde3ec4a38534bf01dded4ab5d2f016 SW_KUBERNETES_COMMIT_SHA=0f3ec68e5a7e1608cec8688716b848ed15e971e5 -SW_ROVER_COMMIT=90c93c706743aac1f5853b677730edae8cc32a2c -SW_CTL_COMMIT=219876daf985fd474955834ef0b65013f0890e96 - -SW_OAP_COMMIT=dc39ce9bb44ed33d9c2bb0d5a054b1dfd5bbd657 +SW_ROVER_COMMIT=d956eaede57b62108b78bca48045bd09ba88e653 +SW_CTL_COMMIT=e684fae0107045fc23799146d62f04cb68bd5a3b +SW_OAP_COMMIT=d5388683322ee6a4aed2a3bc29d439aadfca9a04 +SW_AGENT_E2E_SERVICE_PROVIDER_COMMIT=828e6e2f2b57a0f06bb0d507e3296d2377943d9a TARGET=test VUS=10 diff --git a/test/stress/env.dev b/test/stress/env.dev index 5234b7a..add472c 100644 --- a/test/stress/env.dev +++ b/test/stress/env.dev @@ -13,9 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -SW_AGENT_JAVA_COMMIT=5bc1d1d1f1d9ce6a4f7fce20e8ecc330bccf47ec -SW_AGENT_E2E_SERVICE_PROVIDER_COMMIT=34a4553e23530e8255efe6f5a0adff9e69555d64 -SW_AGENT_SATELLITE_COMMIT=1987e1d566ac90f6b58a45fd9bfa27bf8faad635 +SW_AGENT_JAVA_COMMIT=3f88d735ba2bfd1196aff946502447d4b14450c8 +SW_AGENT_SATELLITE_COMMIT=ea27a3f4e126a24775fe12e2aa2695bcb23d99c3 SW_AGENT_NGINX_LUA_COMMIT=c3cee4841798a147d83b96a10914d4ac0e11d0aa SW_AGENT_NODEJS_COMMIT=2e7560518aff846befd4d6bc815fe5e38c704a11 SW_AGENT_GO_COMMIT=4af380c2db6243106b0fc650b6003ce3b3eb82a0 @@ -23,10 +22,10 @@ SW_AGENT_PYTHON_COMMIT=c76a6ec51a478ac91abb20ec8f22a99b8d4d6a58 SW_AGENT_CLIENT_JS_COMMIT=af0565a67d382b683c1dbd94c379b7080db61449 SW_AGENT_CLIENT_JS_TEST_COMMIT=4f1eb1dcdbde3ec4a38534bf01dded4ab5d2f016 SW_KUBERNETES_COMMIT_SHA=0f3ec68e5a7e1608cec8688716b848ed15e971e5 -SW_ROVER_COMMIT=90c93c706743aac1f5853b677730edae8cc32a2c -SW_CTL_COMMIT=219876daf985fd474955834ef0b65013f0890e96 - -SW_OAP_COMMIT=dc39ce9bb44ed33d9c2bb0d5a054b1dfd5bbd657 +SW_ROVER_COMMIT=d956eaede57b62108b78bca48045bd09ba88e653 +SW_CTL_COMMIT=e684fae0107045fc23799146d62f04cb68bd5a3b +SW_OAP_COMMIT=d5388683322ee6a4aed2a3bc29d439aadfca9a04 +SW_AGENT_E2E_SERVICE_PROVIDER_COMMIT=828e6e2f2b57a0f06bb0d507e3296d2377943d9a TARGET=dev VUS=1
