From 284186b080315e5328d3cf83d71f6a14ee23aa9a Mon Sep 17 00:00:00 2001 From: Hiroto Funakoshi Date: Tue, 20 Feb 2024 18:47:20 +0900 Subject: [PATCH 1/2] Delete unnecessary code for mirror (#2366) * fix: delete unnecessary code for mirror Signed-off-by: hlts2 * fix: make deps/install and format Signed-off-by: hlts2 * improve Backport Pull Request Title & Description Quality (#2373) Signed-off-by: kpango Co-authored-by: Kosuke Morimoto * fix: naming of variable Signed-off-by: hlts2 --------- Signed-off-by: hlts2 Signed-off-by: kpango Co-authored-by: Yusuke Kato Co-authored-by: Kosuke Morimoto --- apis/grpc/v1/mirror/mirror.go | 23 ++ apis/grpc/v1/vald/vald.go | 36 --- internal/client/v1/client/mirror/mirror.go | 3 +- .../test/mock/client/mirror_client_mock.go | 4 +- pkg/gateway/mirror/handler/grpc/handler.go | 75 +++-- .../mirror/handler/grpc/handler_test.go | 305 +++++++++--------- pkg/gateway/mirror/handler/grpc/mock_test.go | 9 +- pkg/gateway/mirror/handler/rest/handler.go | 4 +- pkg/gateway/mirror/handler/rest/option.go | 6 +- pkg/gateway/mirror/service/gateway.go | 19 +- .../mirror/service/gateway_mock_test.go | 13 +- pkg/gateway/mirror/service/mirror.go | 40 ++- pkg/gateway/mirror/usecase/vald.go | 28 +- 13 files changed, 293 insertions(+), 272 deletions(-) create mode 100644 apis/grpc/v1/mirror/mirror.go diff --git a/apis/grpc/v1/mirror/mirror.go b/apis/grpc/v1/mirror/mirror.go new file mode 100644 index 00000000000..70614d73ffa --- /dev/null +++ b/apis/grpc/v1/mirror/mirror.go @@ -0,0 +1,23 @@ +// +// Copyright (C) 2019-2024 vdaas.org vald team +// +// Licensed 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 +// +// https://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. +// + +// Package mirror provides vald server interface +package mirror + +const ( + RPCServiceName = "Mirror" + RegisterRPCName = "Register" +) diff --git a/apis/grpc/v1/vald/vald.go b/apis/grpc/v1/vald/vald.go index 14477c37b6f..e3d2a8c46d5 100644 --- a/apis/grpc/v1/vald/vald.go +++ b/apis/grpc/v1/vald/vald.go @@ -18,7 +18,6 @@ package vald import ( - "github.com/vdaas/vald/apis/grpc/v1/mirror" grpc "google.golang.org/grpc" ) @@ -36,11 +35,6 @@ type ServerWithFilter interface { FilterServer } -type ServerWithMirror interface { - Server - mirror.MirrorServer -} - type UnimplementedValdServer struct { UnimplementedInsertServer UnimplementedUpdateServer @@ -55,11 +49,6 @@ type UnimplementedValdServerWithFilter struct { UnimplementedFilterServer } -type UnimplementedValdServerWithMirror struct { - UnimplementedValdServer - mirror.UnimplementedMirrorServer -} - type Client interface { InsertClient UpdateClient @@ -74,11 +63,6 @@ type ClientWithFilter interface { FilterClient } -type ClientWithMirror interface { - Client - mirror.MirrorClient -} - const PackageName = "vald.v1" const ( @@ -89,7 +73,6 @@ const ( RemoveRPCServiceName = "Remove" ObjectRPCServiceName = "Object" FilterRPCServiceName = "Filter" - MirrorRPCServiceName = "Mirror" ) const ( @@ -143,8 +126,6 @@ const ( GetTimestampRPCName = "GetTimestamp" StreamGetObjectRPCName = "StreamGetObject" StreamListObjectRPCName = "StreamListObject" - - RegisterRPCName = "Register" ) type client struct { @@ -156,11 +137,6 @@ type client struct { ObjectClient } -type clientWithMirror struct { - Client - mirror.MirrorClient -} - func RegisterValdServer(s *grpc.Server, srv Server) { RegisterInsertServer(s, srv) RegisterUpdateServer(s, srv) @@ -175,11 +151,6 @@ func RegisterValdServerWithFilter(s *grpc.Server, srv ServerWithFilter) { RegisterFilterServer(s, srv) } -func RegisterValdServerWithMirror(s *grpc.Server, srv ServerWithMirror) { - RegisterValdServer(s, srv) - mirror.RegisterMirrorServer(s, srv) -} - func NewValdClient(conn *grpc.ClientConn) Client { return &client{ NewInsertClient(conn), @@ -190,10 +161,3 @@ func NewValdClient(conn *grpc.ClientConn) Client { NewObjectClient(conn), } } - -func NewValdClientWithMirror(conn *grpc.ClientConn) ClientWithMirror { - return &clientWithMirror{ - Client: NewValdClient(conn), - MirrorClient: mirror.NewMirrorClient(conn), - } -} diff --git a/internal/client/v1/client/mirror/mirror.go b/internal/client/v1/client/mirror/mirror.go index c90b3b9c2b0..616de1fabc3 100644 --- a/internal/client/v1/client/mirror/mirror.go +++ b/internal/client/v1/client/mirror/mirror.go @@ -18,7 +18,6 @@ import ( "github.com/vdaas/vald/apis/grpc/v1/mirror" "github.com/vdaas/vald/apis/grpc/v1/payload" - "github.com/vdaas/vald/apis/grpc/v1/vald" "github.com/vdaas/vald/internal/errors" "github.com/vdaas/vald/internal/net/grpc" "github.com/vdaas/vald/internal/observability/trace" @@ -69,7 +68,7 @@ func (c *client) GRPCClient() grpc.Client { } func (c *client) Register(ctx context.Context, in *payload.Mirror_Targets, opts ...grpc.CallOption) (res *payload.Mirror_Targets, err error) { - ctx, span := trace.StartSpan(grpc.WrapGRPCMethod(ctx, "internal/client/"+vald.RegisterRPCName), apiName+"/"+vald.RegisterRPCName) + ctx, span := trace.StartSpan(grpc.WrapGRPCMethod(ctx, "internal/client/"+mirror.RegisterRPCName), apiName+"/"+mirror.RegisterRPCName) defer func() { if span != nil { span.End() diff --git a/internal/test/mock/client/mirror_client_mock.go b/internal/test/mock/client/mirror_client_mock.go index 10cd4563ac1..96baff34bee 100644 --- a/internal/test/mock/client/mirror_client_mock.go +++ b/internal/test/mock/client/mirror_client_mock.go @@ -16,13 +16,15 @@ package client import ( "context" + "github.com/vdaas/vald/apis/grpc/v1/mirror" "github.com/vdaas/vald/apis/grpc/v1/payload" "github.com/vdaas/vald/apis/grpc/v1/vald" "github.com/vdaas/vald/internal/net/grpc" ) type MirrorClientMock struct { - vald.ClientWithMirror + vald.Client + mirror.MirrorClient InsertFunc func(ctx context.Context, in *payload.Insert_Request, opts ...grpc.CallOption) (*payload.Object_Location, error) UpdateFunc func(ctx context.Context, in *payload.Update_Request, opts ...grpc.CallOption) (*payload.Object_Location, error) diff --git a/pkg/gateway/mirror/handler/grpc/handler.go b/pkg/gateway/mirror/handler/grpc/handler.go index 9a04ccc00e3..c94d631dc99 100644 --- a/pkg/gateway/mirror/handler/grpc/handler.go +++ b/pkg/gateway/mirror/handler/grpc/handler.go @@ -20,6 +20,7 @@ import ( "reflect" "sync/atomic" + "github.com/vdaas/vald/apis/grpc/v1/mirror" "github.com/vdaas/vald/apis/grpc/v1/payload" "github.com/vdaas/vald/apis/grpc/v1/vald" "github.com/vdaas/vald/internal/errors" @@ -35,6 +36,11 @@ import ( "github.com/vdaas/vald/pkg/gateway/mirror/service" ) +type Server interface { + vald.Server + mirror.MirrorServer +} + type server struct { eg errgroup.Group gateway service.Gateway // Mirror gateway client service. @@ -43,13 +49,14 @@ type server struct { streamConcurrency int name string ip string - vald.UnimplementedValdServerWithMirror + vald.UnimplementedValdServer + mirror.UnimplementedMirrorServer } const apiName = "vald/gateway/mirror" // New returns a Vald server as gRPC handler with mirror using the provided options. -func New(opts ...Option) (vald.ServerWithMirror, error) { +func New(opts ...Option) (Server, error) { s := new(server) for _, opt := range append(defaultOptions, opts...) { if err := opt(s); err != nil { @@ -69,7 +76,7 @@ func New(opts ...Option) (vald.ServerWithMirror, error) { // The function connects to the mirror using the provided targets, and if successful, // returns the addresses of connected Mirror gateways. func (s *server) Register(ctx context.Context, req *payload.Mirror_Targets) (*payload.Mirror_Targets, error) { - ctx, span := trace.StartSpan(grpc.WithGRPCMethod(ctx, vald.PackageName+"."+vald.MirrorRPCServiceName+"/"+vald.RegisterRPCName), apiName+"/"+vald.RegisterRPCName) + ctx, span := trace.StartSpan(grpc.WithGRPCMethod(ctx, vald.PackageName+"."+mirror.RPCServiceName+"/"+mirror.RegisterRPCName), apiName+"/"+mirror.RegisterRPCName) defer func() { if span != nil { span.End() @@ -81,7 +88,7 @@ func (s *server) Register(ctx context.Context, req *payload.Mirror_Targets) (*pa ServingData: errdetails.Serialize(req), } resInfo := &errdetails.ResourceInfo{ - ResourceType: errdetails.ValdGRPCResourceTypePrefix + "/vald.v1." + vald.RegisterRPCName, + ResourceType: errdetails.ValdGRPCResourceTypePrefix + "/vald.v1." + mirror.RegisterRPCName, ResourceName: fmt.Sprintf("%s: %s(%s)", apiName, s.name, s.ip), } var attrs trace.Attributes @@ -89,22 +96,22 @@ func (s *server) Register(ctx context.Context, req *payload.Mirror_Targets) (*pa switch { case errors.Is(err, context.Canceled): err = status.WrapWithCanceled( - vald.RegisterRPCName+" API canceld", err, reqInfo, resInfo, + mirror.RegisterRPCName+" API canceld", err, reqInfo, resInfo, ) attrs = trace.StatusCodeCancelled(err.Error()) case errors.Is(err, context.DeadlineExceeded): err = status.WrapWithCanceled( - vald.RegisterRPCName+" API deadline exceeded", err, reqInfo, resInfo, + mirror.RegisterRPCName+" API deadline exceeded", err, reqInfo, resInfo, ) attrs = trace.StatusCodeDeadlineExceeded(err.Error()) case errors.Is(err, errors.ErrGRPCClientConnNotFound("*")): err = status.WrapWithInternal( - vald.RegisterRPCName+" API connection not found", err, reqInfo, resInfo, + mirror.RegisterRPCName+" API connection not found", err, reqInfo, resInfo, ) attrs = trace.StatusCodeInternal(err.Error()) case errors.Is(err, errors.ErrTargetNotFound): err = status.WrapWithInvalidArgument( - vald.RegisterRPCName+" API target not found", err, reqInfo, resInfo, + mirror.RegisterRPCName+" API target not found", err, reqInfo, resInfo, ) attrs = trace.StatusCodeInvalidArgument(err.Error()) default: @@ -113,7 +120,7 @@ func (s *server) Register(ctx context.Context, req *payload.Mirror_Targets) (*pa msg string ) st, msg, err = status.ParseError(err, codes.Internal, - "failed to parse "+vald.RegisterRPCName+" gRPC error response", reqInfo, resInfo, + "failed to parse "+mirror.RegisterRPCName+" gRPC error response", reqInfo, resInfo, ) attrs = trace.FromGRPCStatus(st.Code(), msg) } @@ -129,7 +136,7 @@ func (s *server) Register(ctx context.Context, req *payload.Mirror_Targets) (*pa // Get own address and the addresses of other mirror gateways to which this gateway is currently connected. tgts, err := s.mirror.MirrorTargets(ctx) if err != nil { - err = status.WrapWithInternal(vald.RegisterRPCName+" API failed to get connected vald gateway targets", err, + err = status.WrapWithInternal(mirror.RegisterRPCName+" API failed to get connected vald gateway targets", err, &errdetails.BadRequest{ FieldViolations: []*errdetails.BadRequestFieldViolation{ { @@ -139,7 +146,7 @@ func (s *server) Register(ctx context.Context, req *payload.Mirror_Targets) (*pa }, }, &errdetails.ResourceInfo{ - ResourceType: errdetails.ValdGRPCResourceTypePrefix + "/vald.v1." + vald.RegisterRPCName, + ResourceType: errdetails.ValdGRPCResourceTypePrefix + "/vald.v1." + mirror.RegisterRPCName, ResourceName: fmt.Sprintf("%s: %s(%s)", apiName, s.name, s.ip), }, ) @@ -165,7 +172,7 @@ func (s *server) Exists(ctx context.Context, meta *payload.Object_ID) (id *paylo } }() - _, err = s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc vald.ClientWithMirror, copts ...grpc.CallOption) (interface{}, error) { + _, err = s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc service.MirrorClient, copts ...grpc.CallOption) (interface{}, error) { id, err = vc.Exists(ctx, meta, copts...) return id, err }) @@ -230,7 +237,7 @@ func (s *server) Search(ctx context.Context, req *payload.Search_Request) (res * } }() - _, err = s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc vald.ClientWithMirror, copts ...grpc.CallOption) (interface{}, error) { + _, err = s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc service.MirrorClient, copts ...grpc.CallOption) (interface{}, error) { res, err = vc.Search(ctx, req, copts...) return res, err }) @@ -298,7 +305,7 @@ func (s *server) SearchByID(ctx context.Context, req *payload.Search_IDRequest) } }() - _, err = s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc vald.ClientWithMirror, copts ...grpc.CallOption) (interface{}, error) { + _, err = s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc service.MirrorClient, copts ...grpc.CallOption) (interface{}, error) { res, err = vc.SearchByID(ctx, req, copts...) return res, err }) @@ -464,7 +471,7 @@ func (s *server) MultiSearch(ctx context.Context, req *payload.Search_MultiReque } }() - _, err = s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc vald.ClientWithMirror, copts ...grpc.CallOption) (interface{}, error) { + _, err = s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc service.MirrorClient, copts ...grpc.CallOption) (interface{}, error) { res, err = vc.MultiSearch(ctx, req, copts...) return res, err }) @@ -529,7 +536,7 @@ func (s *server) MultiSearchByID(ctx context.Context, req *payload.Search_MultiI } }() - _, err = s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc vald.ClientWithMirror, copts ...grpc.CallOption) (interface{}, error) { + _, err = s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc service.MirrorClient, copts ...grpc.CallOption) (interface{}, error) { res, err = vc.MultiSearchByID(ctx, req, copts...) return res, err }) @@ -594,7 +601,7 @@ func (s *server) LinearSearch(ctx context.Context, req *payload.Search_Request) } }() - _, err = s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc vald.ClientWithMirror, copts ...grpc.CallOption) (interface{}, error) { + _, err = s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc service.MirrorClient, copts ...grpc.CallOption) (interface{}, error) { res, err = vc.LinearSearch(ctx, req, copts...) return res, err }) @@ -662,7 +669,7 @@ func (s *server) LinearSearchByID(ctx context.Context, req *payload.Search_IDReq } }() - _, err = s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc vald.ClientWithMirror, copts ...grpc.CallOption) (interface{}, error) { + _, err = s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc service.MirrorClient, copts ...grpc.CallOption) (interface{}, error) { res, err = vc.LinearSearchByID(ctx, req, copts...) return res, err }) @@ -831,7 +838,7 @@ func (s *server) MultiLinearSearch(ctx context.Context, req *payload.Search_Mult } }() - _, err = s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc vald.ClientWithMirror, copts ...grpc.CallOption) (interface{}, error) { + _, err = s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc service.MirrorClient, copts ...grpc.CallOption) (interface{}, error) { res, err = vc.MultiLinearSearch(ctx, req, copts...) return res, err }) @@ -896,7 +903,7 @@ func (s *server) MultiLinearSearchByID(ctx context.Context, req *payload.Search_ } }() - _, err = s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc vald.ClientWithMirror, copts ...grpc.CallOption) (interface{}, error) { + _, err = s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc service.MirrorClient, copts ...grpc.CallOption) (interface{}, error) { res, err = vc.MultiLinearSearchByID(ctx, req, copts...) return res, err }) @@ -968,7 +975,7 @@ func (s *server) Insert(ctx context.Context, req *payload.Insert_Request) (loc * // So this component sends requests only to the Vald gateway (LB gateway) of its own cluster. if s.isProxied(ctx) { loc, err = s.doInsert(ctx, req, func(ctx context.Context) (*payload.Object_Location, error) { - _, derr := s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc vald.ClientWithMirror, copts ...grpc.CallOption) (interface{}, error) { + _, derr := s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc service.MirrorClient, copts ...grpc.CallOption) (interface{}, error) { loc, err = vc.Insert(ctx, req, copts...) return loc, err }) @@ -1016,7 +1023,7 @@ func (s *server) handleInsert(ctx context.Context, req *payload.Insert_Request) Uuid: req.GetVector().GetId(), Ips: make([]string, 0), } - err = s.gateway.BroadCast(ctx, func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error { + err = s.gateway.BroadCast(ctx, func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error { ctx, span := trace.StartSpan(grpc.WrapGRPCMethod(ctx, "BroadCast/"+target), apiName+"/"+vald.InsertRPCName+"/"+target) defer func() { if span != nil { @@ -1180,7 +1187,7 @@ func (s *server) handleInsertResult( // skipcq: GO-R1005 Ips: make([]string, 0), } - err = s.gateway.DoMulti(ctx, alreadyExistsTgts, func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error { + err = s.gateway.DoMulti(ctx, alreadyExistsTgts, func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error { ctx, span := trace.StartSpan(grpc.WrapGRPCMethod(ctx, "DoMulti/"+target), apiName+"/"+vald.UpdateRPCName+"/"+target) defer func() { if span != nil { @@ -1512,7 +1519,7 @@ func (s *server) Update(ctx context.Context, req *payload.Update_Request) (loc * // So this component sends requests only to the Vald gateway (LB gateway) of its own cluster. if s.isProxied(ctx) { loc, err = s.doUpdate(ctx, req, func(ctx context.Context) (*payload.Object_Location, error) { - _, derr := s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc vald.ClientWithMirror, copts ...grpc.CallOption) (interface{}, error) { + _, derr := s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc service.MirrorClient, copts ...grpc.CallOption) (interface{}, error) { loc, err = vc.Update(ctx, req, copts...) return loc, err }) @@ -1560,7 +1567,7 @@ func (s *server) handleUpdate(ctx context.Context, req *payload.Update_Request) Uuid: req.GetVector().GetId(), Ips: make([]string, 0), } - err = s.gateway.BroadCast(ctx, func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error { + err = s.gateway.BroadCast(ctx, func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error { ctx, span := trace.StartSpan(grpc.WrapGRPCMethod(ctx, "BroadCast/"+target), apiName+"/"+vald.UpdateRPCName+"/"+target) defer func() { if span != nil { @@ -1739,7 +1746,7 @@ func (s *server) handleUpdateResult( // skipcq: GO-R1005 Ips: make([]string, 0), } - err = s.gateway.DoMulti(ctx, notFoundTgts, func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error { + err = s.gateway.DoMulti(ctx, notFoundTgts, func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error { ctx, span := trace.StartSpan(grpc.WrapGRPCMethod(ctx, "BroadCast/"+target), apiName+"/"+vald.InsertRPCName+"/"+target) defer func() { if span != nil { @@ -2086,7 +2093,7 @@ func (s *server) Upsert(ctx context.Context, req *payload.Upsert_Request) (loc * // So this component sends requests only to the Vald gateway (LB gateway) of its own cluster. if s.isProxied(ctx) { loc, err = s.doUpsert(ctx, req, func(ctx context.Context) (*payload.Object_Location, error) { - s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc vald.ClientWithMirror, copts ...grpc.CallOption) (interface{}, error) { + s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc service.MirrorClient, copts ...grpc.CallOption) (interface{}, error) { loc, err = vc.Upsert(ctx, req, copts...) return loc, err }) @@ -2135,7 +2142,7 @@ func (s *server) handleUpsert(ctx context.Context, req *payload.Upsert_Request) Uuid: req.GetVector().GetId(), Ips: make([]string, 0), } - err = s.gateway.BroadCast(ctx, func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error { + err = s.gateway.BroadCast(ctx, func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error { ctx, span := trace.StartSpan(grpc.WrapGRPCMethod(ctx, "BroadCast/"+target), apiName+"/"+vald.UpsertRPCName+"/"+target) defer func() { if span != nil { @@ -2466,7 +2473,7 @@ func (s *server) Remove(ctx context.Context, req *payload.Remove_Request) (loc * // So this component sends requests only to the Vald gateway (LB gateway) of its own cluster. if s.isProxied(ctx) { loc, err = s.doRemove(ctx, req, func(ctx context.Context) (*payload.Object_Location, error) { - s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc vald.ClientWithMirror, copts ...grpc.CallOption) (interface{}, error) { + s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc service.MirrorClient, copts ...grpc.CallOption) (interface{}, error) { loc, err = vc.Remove(ctx, req, copts...) return loc, err }) @@ -2514,7 +2521,7 @@ func (s *server) handleRemove(ctx context.Context, req *payload.Remove_Request) Uuid: req.GetId().GetId(), Ips: make([]string, 0), } - err = s.gateway.BroadCast(ctx, func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error { + err = s.gateway.BroadCast(ctx, func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error { ctx, span := trace.StartSpan(grpc.WrapGRPCMethod(ctx, "BroadCast/"+target), apiName+"/"+vald.RemoveRPCName+"/"+target) defer func() { if span != nil { @@ -2841,7 +2848,7 @@ func (s *server) RemoveByTimestamp(ctx context.Context, req *payload.Remove_Time // So this component sends requests only to the Vald gateway (LB gateway) of its own cluster. if s.isProxied(ctx) { locs, err = s.doRemoveByTimestamp(ctx, req, func(ctx context.Context) (*payload.Object_Locations, error) { - _, derr := s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc vald.ClientWithMirror, copts ...grpc.CallOption) (interface{}, error) { + _, derr := s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc service.MirrorClient, copts ...grpc.CallOption) (interface{}, error) { locs, err = vc.RemoveByTimestamp(ctx, req, copts...) return locs, err }) @@ -2887,7 +2894,7 @@ func (s *server) handleRemoveByTimestamp(ctx context.Context, req *payload.Remov var result sync.Map[string, *errorState] // map[target host: error state] locs = new(payload.Object_Locations) - err = s.gateway.BroadCast(ctx, func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error { + err = s.gateway.BroadCast(ctx, func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error { ctx, span := trace.StartSpan(grpc.WrapGRPCMethod(ctx, "BroadCast/"+target), apiName+"/"+vald.RemoveByTimestampRPCName+"/"+target) defer func() { if span != nil { @@ -3085,7 +3092,7 @@ func (s *server) GetObject(ctx context.Context, req *payload.Object_VectorReques } }() - _, err = s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc vald.ClientWithMirror, copts ...grpc.CallOption) (interface{}, error) { + _, err = s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, _ string, vc service.MirrorClient, copts ...grpc.CallOption) (interface{}, error) { vec, err = vc.GetObject(ctx, req, copts...) return vec, err }) @@ -3200,7 +3207,7 @@ func (s *server) StreamListObject(req *payload.Object_List_Request, stream vald. } }() - _, err := s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) (obj interface{}, err error) { + _, err := s.gateway.Do(ctx, s.vAddr, func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) (obj interface{}, err error) { ctx, span := trace.StartSpan(grpc.WrapGRPCMethod(ctx, "Do/"+target), apiName+"/"+vald.StreamListObjectRPCName+"/"+target) defer func() { if span != nil { diff --git a/pkg/gateway/mirror/handler/grpc/handler_test.go b/pkg/gateway/mirror/handler/grpc/handler_test.go index fb55eb1b53c..84a24a1dd3a 100644 --- a/pkg/gateway/mirror/handler/grpc/handler_test.go +++ b/pkg/gateway/mirror/handler/grpc/handler_test.go @@ -18,6 +18,7 @@ import ( "reflect" "testing" + "github.com/vdaas/vald/apis/grpc/v1/mirror" "github.com/vdaas/vald/apis/grpc/v1/payload" "github.com/vdaas/vald/apis/grpc/v1/vald" "github.com/vdaas/vald/internal/errors" @@ -42,14 +43,15 @@ func Test_server_Insert(t *testing.T) { // skipcq: GO-R1005 req *payload.Insert_Request } type fields struct { - eg errgroup.Group - gateway service.Gateway - mirror service.Mirror - vAddr string - streamConcurrency int - name string - ip string - UnimplementedValdServerWithMirror vald.UnimplementedValdServerWithMirror + eg errgroup.Group + gateway service.Gateway + mirror service.Mirror + vAddr string + streamConcurrency int + name string + ip string + UnimplementedValdServer vald.UnimplementedValdServer + UnimplementedMirrorServer mirror.UnimplementedMirrorServer } type want struct { wantCe *payload.Object_Location @@ -90,7 +92,7 @@ func Test_server_Insert(t *testing.T) { // skipcq: GO-R1005 targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ InsertFunc: func(_ context.Context, _ *payload.Insert_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return loc, nil @@ -120,7 +122,7 @@ func Test_server_Insert(t *testing.T) { // skipcq: GO-R1005 FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } @@ -152,7 +154,7 @@ func Test_server_Insert(t *testing.T) { // skipcq: GO-R1005 targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ InsertFunc: func(_ context.Context, _ *payload.Insert_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return &payload.Object_Location{ @@ -188,13 +190,13 @@ func Test_server_Insert(t *testing.T) { // skipcq: GO-R1005 FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } return nil }, - DoMultiFunc: func(ctx context.Context, targets []string, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + DoMultiFunc: func(ctx context.Context, targets []string, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, target := range targets { if c, ok := cmap[target]; !ok { return errors.ErrTargetNotFound @@ -226,7 +228,7 @@ func Test_server_Insert(t *testing.T) { // skipcq: GO-R1005 targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ InsertFunc: func(_ context.Context, _ *payload.Insert_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return &payload.Object_Location{ @@ -262,13 +264,13 @@ func Test_server_Insert(t *testing.T) { // skipcq: GO-R1005 FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } return nil }, - DoMultiFunc: func(ctx context.Context, targets []string, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + DoMultiFunc: func(ctx context.Context, targets []string, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, target := range targets { if c, ok := cmap[target]; !ok { return errors.New("target not found") @@ -300,7 +302,7 @@ func Test_server_Insert(t *testing.T) { // skipcq: GO-R1005 targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ InsertFunc: func(_ context.Context, _ *payload.Insert_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return nil, status.Error(codes.AlreadyExists, errors.ErrMetaDataAlreadyExists(uuid).Error()) @@ -330,7 +332,7 @@ func Test_server_Insert(t *testing.T) { // skipcq: GO-R1005 FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } @@ -359,7 +361,7 @@ func Test_server_Insert(t *testing.T) { // skipcq: GO-R1005 targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ InsertFunc: func(_ context.Context, _ *payload.Insert_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return loc, nil @@ -389,7 +391,7 @@ func Test_server_Insert(t *testing.T) { // skipcq: GO-R1005 FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } @@ -414,7 +416,7 @@ func Test_server_Insert(t *testing.T) { // skipcq: GO-R1005 targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ InsertFunc: func(_ context.Context, _ *payload.Insert_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return nil, status.Error(codes.Internal, errors.ErrCircuitBreakerHalfOpenFlowLimitation.Error()) @@ -444,7 +446,7 @@ func Test_server_Insert(t *testing.T) { // skipcq: GO-R1005 FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } @@ -472,7 +474,7 @@ func Test_server_Insert(t *testing.T) { // skipcq: GO-R1005 targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ InsertFunc: func(_ context.Context, _ *payload.Insert_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return &payload.Object_Location{ @@ -508,13 +510,13 @@ func Test_server_Insert(t *testing.T) { // skipcq: GO-R1005 FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } return nil }, - DoMultiFunc: func(ctx context.Context, targets []string, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + DoMultiFunc: func(ctx context.Context, targets []string, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, target := range targets { if c, ok := cmap[target]; !ok { return errors.New("target not found") @@ -553,14 +555,15 @@ func Test_server_Insert(t *testing.T) { // skipcq: GO-R1005 checkFunc = defaultCheckFunc } s := &server{ - eg: test.fields.eg, - gateway: test.fields.gateway, - mirror: test.fields.mirror, - vAddr: test.fields.vAddr, - streamConcurrency: test.fields.streamConcurrency, - name: test.fields.name, - ip: test.fields.ip, - UnimplementedValdServerWithMirror: test.fields.UnimplementedValdServerWithMirror, + eg: test.fields.eg, + gateway: test.fields.gateway, + mirror: test.fields.mirror, + vAddr: test.fields.vAddr, + streamConcurrency: test.fields.streamConcurrency, + name: test.fields.name, + ip: test.fields.ip, + UnimplementedValdServer: test.fields.UnimplementedValdServer, + UnimplementedMirrorServer: test.fields.UnimplementedMirrorServer, } gotCe, err := s.Insert(test.args.ctx, test.args.req) @@ -582,14 +585,15 @@ func Test_server_Update(t *testing.T) { // skipcq: GO-R1005 req *payload.Update_Request } type fields struct { - eg errgroup.Group - gateway service.Gateway - mirror service.Mirror - vAddr string - streamConcurrency int - name string - ip string - UnimplementedValdServerWithMirror vald.UnimplementedValdServerWithMirror + eg errgroup.Group + gateway service.Gateway + mirror service.Mirror + vAddr string + streamConcurrency int + name string + ip string + UnimplementedValdServer vald.UnimplementedValdServer + UnimplementedMirrorServer mirror.UnimplementedMirrorServer } type want struct { wantLoc *payload.Object_Location @@ -630,7 +634,7 @@ func Test_server_Update(t *testing.T) { // skipcq: GO-R1005 targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ UpdateFunc: func(_ context.Context, _ *payload.Update_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return loc, nil @@ -660,7 +664,7 @@ func Test_server_Update(t *testing.T) { // skipcq: GO-R1005 FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } @@ -692,7 +696,7 @@ func Test_server_Update(t *testing.T) { // skipcq: GO-R1005 targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ UpdateFunc: func(_ context.Context, _ *payload.Update_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return loc, nil @@ -722,7 +726,7 @@ func Test_server_Update(t *testing.T) { // skipcq: GO-R1005 FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } @@ -754,7 +758,7 @@ func Test_server_Update(t *testing.T) { // skipcq: GO-R1005 targets := []string{ "vald-01", "vald-02", "vald-03", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ UpdateFunc: func(_ context.Context, _ *payload.Update_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return loc, nil @@ -792,13 +796,13 @@ func Test_server_Update(t *testing.T) { // skipcq: GO-R1005 FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } return nil }, - DoMultiFunc: func(ctx context.Context, targets []string, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + DoMultiFunc: func(ctx context.Context, targets []string, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, target := range targets { if c, ok := cmap[target]; !ok { return errors.ErrTargetNotFound @@ -836,7 +840,7 @@ func Test_server_Update(t *testing.T) { // skipcq: GO-R1005 targets := []string{ "vald-01", "vald-02", "vald-03", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ UpdateFunc: func(_ context.Context, _ *payload.Update_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return loc, nil @@ -874,13 +878,13 @@ func Test_server_Update(t *testing.T) { // skipcq: GO-R1005 FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } return nil }, - DoMultiFunc: func(ctx context.Context, targets []string, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + DoMultiFunc: func(ctx context.Context, targets []string, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, target := range targets { if c, ok := cmap[target]; !ok { return errors.ErrTargetNotFound @@ -914,7 +918,7 @@ func Test_server_Update(t *testing.T) { // skipcq: GO-R1005 targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ UpdateFunc: func(_ context.Context, _ *payload.Update_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return nil, status.Error(codes.NotFound, errors.ErrObjectIDNotFound(uuid).Error()) @@ -944,7 +948,7 @@ func Test_server_Update(t *testing.T) { // skipcq: GO-R1005 FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } @@ -973,7 +977,7 @@ func Test_server_Update(t *testing.T) { // skipcq: GO-R1005 targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ UpdateFunc: func(_ context.Context, _ *payload.Update_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return loc, nil @@ -1003,7 +1007,7 @@ func Test_server_Update(t *testing.T) { // skipcq: GO-R1005 FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } @@ -1028,7 +1032,7 @@ func Test_server_Update(t *testing.T) { // skipcq: GO-R1005 targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ UpdateFunc: func(_ context.Context, _ *payload.Update_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return nil, status.Error(codes.Internal, errors.ErrCircuitBreakerHalfOpenFlowLimitation.Error()) @@ -1058,7 +1062,7 @@ func Test_server_Update(t *testing.T) { // skipcq: GO-R1005 FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } @@ -1086,7 +1090,7 @@ func Test_server_Update(t *testing.T) { // skipcq: GO-R1005 targets := []string{ "vald-01", "vald-02", "vald-03", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ UpdateFunc: func(_ context.Context, _ *payload.Update_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return nil, status.Error(codes.AlreadyExists, errors.ErrMetaDataAlreadyExists(uuid).Error()) @@ -1124,13 +1128,13 @@ func Test_server_Update(t *testing.T) { // skipcq: GO-R1005 FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } return nil }, - DoMultiFunc: func(ctx context.Context, targets []string, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + DoMultiFunc: func(ctx context.Context, targets []string, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, target := range targets { if c, ok := cmap[target]; !ok { return errors.ErrTargetNotFound @@ -1163,7 +1167,7 @@ func Test_server_Update(t *testing.T) { // skipcq: GO-R1005 targets := []string{ "vald-01", "vald-02", "vald-03", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ UpdateFunc: func(_ context.Context, _ *payload.Update_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return loc, nil @@ -1201,13 +1205,13 @@ func Test_server_Update(t *testing.T) { // skipcq: GO-R1005 FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } return nil }, - DoMultiFunc: func(ctx context.Context, targets []string, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + DoMultiFunc: func(ctx context.Context, targets []string, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, target := range targets { if c, ok := cmap[target]; !ok { return errors.New("target not found") @@ -1246,14 +1250,15 @@ func Test_server_Update(t *testing.T) { // skipcq: GO-R1005 checkFunc = defaultCheckFunc } s := &server{ - eg: test.fields.eg, - gateway: test.fields.gateway, - mirror: test.fields.mirror, - vAddr: test.fields.vAddr, - streamConcurrency: test.fields.streamConcurrency, - name: test.fields.name, - ip: test.fields.ip, - UnimplementedValdServerWithMirror: test.fields.UnimplementedValdServerWithMirror, + eg: test.fields.eg, + gateway: test.fields.gateway, + mirror: test.fields.mirror, + vAddr: test.fields.vAddr, + streamConcurrency: test.fields.streamConcurrency, + name: test.fields.name, + ip: test.fields.ip, + UnimplementedValdServer: test.fields.UnimplementedValdServer, + UnimplementedMirrorServer: test.fields.UnimplementedMirrorServer, } gotLoc, err := s.Update(test.args.ctx, test.args.req) @@ -1275,14 +1280,15 @@ func Test_server_Upsert(t *testing.T) { req *payload.Upsert_Request } type fields struct { - eg errgroup.Group - gateway service.Gateway - mirror service.Mirror - vAddr string - streamConcurrency int - name string - ip string - UnimplementedValdServerWithMirror vald.UnimplementedValdServerWithMirror + eg errgroup.Group + gateway service.Gateway + mirror service.Mirror + vAddr string + streamConcurrency int + name string + ip string + UnimplementedValdServer vald.UnimplementedValdServer + UnimplementedMirrorServer mirror.UnimplementedMirrorServer } type want struct { wantLoc *payload.Object_Location @@ -1323,7 +1329,7 @@ func Test_server_Upsert(t *testing.T) { targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ UpsertFunc: func(_ context.Context, _ *payload.Upsert_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return loc, nil @@ -1353,7 +1359,7 @@ func Test_server_Upsert(t *testing.T) { FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } @@ -1385,7 +1391,7 @@ func Test_server_Upsert(t *testing.T) { targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ UpsertFunc: func(_ context.Context, _ *payload.Upsert_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return loc, nil @@ -1415,7 +1421,7 @@ func Test_server_Upsert(t *testing.T) { FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(_ context.Context, _ string, _ vald.ClientWithMirror, _ ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(_ context.Context, _ string, _ service.MirrorClient, _ ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } @@ -1440,7 +1446,7 @@ func Test_server_Upsert(t *testing.T) { targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ UpsertFunc: func(_ context.Context, _ *payload.Upsert_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return nil, status.Error(codes.AlreadyExists, errors.ErrMetaDataAlreadyExists(uuid).Error()) @@ -1470,7 +1476,7 @@ func Test_server_Upsert(t *testing.T) { FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(_ context.Context, _ string, _ vald.ClientWithMirror, _ ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(_ context.Context, _ string, _ service.MirrorClient, _ ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } @@ -1499,7 +1505,7 @@ func Test_server_Upsert(t *testing.T) { targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ UpsertFunc: func(_ context.Context, _ *payload.Upsert_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return loc, nil @@ -1529,7 +1535,7 @@ func Test_server_Upsert(t *testing.T) { FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } @@ -1554,7 +1560,7 @@ func Test_server_Upsert(t *testing.T) { targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ UpsertFunc: func(_ context.Context, _ *payload.Upsert_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return nil, status.Error(codes.Internal, errors.ErrCircuitBreakerHalfOpenFlowLimitation.Error()) @@ -1584,7 +1590,7 @@ func Test_server_Upsert(t *testing.T) { FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } @@ -1622,14 +1628,15 @@ func Test_server_Upsert(t *testing.T) { checkFunc = defaultCheckFunc } s := &server{ - eg: test.fields.eg, - gateway: test.fields.gateway, - mirror: test.fields.mirror, - vAddr: test.fields.vAddr, - streamConcurrency: test.fields.streamConcurrency, - name: test.fields.name, - ip: test.fields.ip, - UnimplementedValdServerWithMirror: test.fields.UnimplementedValdServerWithMirror, + eg: test.fields.eg, + gateway: test.fields.gateway, + mirror: test.fields.mirror, + vAddr: test.fields.vAddr, + streamConcurrency: test.fields.streamConcurrency, + name: test.fields.name, + ip: test.fields.ip, + UnimplementedValdServer: test.fields.UnimplementedValdServer, + UnimplementedMirrorServer: test.fields.UnimplementedMirrorServer, } gotLoc, err := s.Upsert(test.args.ctx, test.args.req) @@ -1651,14 +1658,15 @@ func Test_server_Remove(t *testing.T) { req *payload.Remove_Request } type fields struct { - eg errgroup.Group - gateway service.Gateway - mirror service.Mirror - vAddr string - streamConcurrency int - name string - ip string - UnimplementedValdServerWithMirror vald.UnimplementedValdServerWithMirror + eg errgroup.Group + gateway service.Gateway + mirror service.Mirror + vAddr string + streamConcurrency int + name string + ip string + UnimplementedValdServer vald.UnimplementedValdServer + UnimplementedMirrorServer mirror.UnimplementedMirrorServer } type want struct { wantLoc *payload.Object_Location @@ -1699,7 +1707,7 @@ func Test_server_Remove(t *testing.T) { targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ RemoveFunc: func(_ context.Context, _ *payload.Remove_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return loc, nil @@ -1728,7 +1736,7 @@ func Test_server_Remove(t *testing.T) { FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } @@ -1760,7 +1768,7 @@ func Test_server_Remove(t *testing.T) { targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ RemoveFunc: func(_ context.Context, _ *payload.Remove_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return loc, nil @@ -1789,7 +1797,7 @@ func Test_server_Remove(t *testing.T) { FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } @@ -1818,7 +1826,7 @@ func Test_server_Remove(t *testing.T) { targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ RemoveFunc: func(_ context.Context, _ *payload.Remove_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return loc, nil @@ -1847,7 +1855,7 @@ func Test_server_Remove(t *testing.T) { FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } @@ -1872,7 +1880,7 @@ func Test_server_Remove(t *testing.T) { targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ RemoveFunc: func(_ context.Context, _ *payload.Remove_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return nil, status.Error(codes.Internal, errors.ErrCircuitBreakerHalfOpenFlowLimitation.Error()) @@ -1901,7 +1909,7 @@ func Test_server_Remove(t *testing.T) { FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } @@ -1929,7 +1937,7 @@ func Test_server_Remove(t *testing.T) { targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ RemoveFunc: func(_ context.Context, _ *payload.Remove_Request, _ ...grpc.CallOption) (*payload.Object_Location, error) { return nil, status.Error(codes.NotFound, errors.ErrIndexNotFound.Error()) @@ -1958,7 +1966,7 @@ func Test_server_Remove(t *testing.T) { FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } @@ -1993,14 +2001,15 @@ func Test_server_Remove(t *testing.T) { checkFunc = defaultCheckFunc } s := &server{ - eg: test.fields.eg, - gateway: test.fields.gateway, - mirror: test.fields.mirror, - vAddr: test.fields.vAddr, - streamConcurrency: test.fields.streamConcurrency, - name: test.fields.name, - ip: test.fields.ip, - UnimplementedValdServerWithMirror: test.fields.UnimplementedValdServerWithMirror, + eg: test.fields.eg, + gateway: test.fields.gateway, + mirror: test.fields.mirror, + vAddr: test.fields.vAddr, + streamConcurrency: test.fields.streamConcurrency, + name: test.fields.name, + ip: test.fields.ip, + UnimplementedValdServer: test.fields.UnimplementedValdServer, + UnimplementedMirrorServer: test.fields.UnimplementedMirrorServer, } gotLoc, err := s.Remove(test.args.ctx, test.args.req) @@ -2021,14 +2030,15 @@ func Test_server_RemoveByTimestamp(t *testing.T) { req *payload.Remove_TimestampRequest } type fields struct { - eg errgroup.Group - gateway service.Gateway - mirror service.Mirror - vAddr string - streamConcurrency int - name string - ip string - UnimplementedValdServerWithMirror vald.UnimplementedValdServerWithMirror + eg errgroup.Group + gateway service.Gateway + mirror service.Mirror + vAddr string + streamConcurrency int + name string + ip string + UnimplementedValdServer vald.UnimplementedValdServer + UnimplementedMirrorServer mirror.UnimplementedMirrorServer } type want struct { wantLocs *payload.Object_Locations @@ -2076,7 +2086,7 @@ func Test_server_RemoveByTimestamp(t *testing.T) { targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ RemoveByTimestampFunc: func(_ context.Context, _ *payload.Remove_TimestampRequest, _ ...grpc.CallOption) (*payload.Object_Locations, error) { return &payload.Object_Locations{ @@ -2108,7 +2118,7 @@ func Test_server_RemoveByTimestamp(t *testing.T) { FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } @@ -2142,7 +2152,7 @@ func Test_server_RemoveByTimestamp(t *testing.T) { targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ RemoveByTimestampFunc: func(_ context.Context, _ *payload.Remove_TimestampRequest, _ ...grpc.CallOption) (*payload.Object_Locations, error) { return &payload.Object_Locations{ @@ -2170,7 +2180,7 @@ func Test_server_RemoveByTimestamp(t *testing.T) { FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } @@ -2198,7 +2208,7 @@ func Test_server_RemoveByTimestamp(t *testing.T) { targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ RemoveByTimestampFunc: func(_ context.Context, _ *payload.Remove_TimestampRequest, _ ...grpc.CallOption) (*payload.Object_Locations, error) { return nil, status.Error(codes.Internal, errors.ErrCircuitBreakerHalfOpenFlowLimitation.Error()) @@ -2222,7 +2232,7 @@ func Test_server_RemoveByTimestamp(t *testing.T) { FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } @@ -2251,7 +2261,7 @@ func Test_server_RemoveByTimestamp(t *testing.T) { targets := []string{ "vald-01", "vald-02", } - cmap := map[string]vald.ClientWithMirror{ + cmap := map[string]service.MirrorClient{ targets[0]: &clientmock.MirrorClientMock{ RemoveByTimestampFunc: func(_ context.Context, _ *payload.Remove_TimestampRequest, _ ...grpc.CallOption) (*payload.Object_Locations, error) { return nil, status.Error(codes.NotFound, errors.ErrObjectIDNotFound(uuid1).Error()) @@ -2275,7 +2285,7 @@ func Test_server_RemoveByTimestamp(t *testing.T) { FromForwardedContextFunc: func(_ context.Context) string { return "" }, - BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error { + BroadCastFunc: func(ctx context.Context, f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error { for _, tgt := range targets { f(ctx, tgt, cmap[tgt]) } @@ -2310,14 +2320,15 @@ func Test_server_RemoveByTimestamp(t *testing.T) { checkFunc = defaultCheckFunc } s := &server{ - eg: test.fields.eg, - gateway: test.fields.gateway, - mirror: test.fields.mirror, - vAddr: test.fields.vAddr, - streamConcurrency: test.fields.streamConcurrency, - name: test.fields.name, - ip: test.fields.ip, - UnimplementedValdServerWithMirror: test.fields.UnimplementedValdServerWithMirror, + eg: test.fields.eg, + gateway: test.fields.gateway, + mirror: test.fields.mirror, + vAddr: test.fields.vAddr, + streamConcurrency: test.fields.streamConcurrency, + name: test.fields.name, + ip: test.fields.ip, + UnimplementedValdServer: test.fields.UnimplementedValdServer, + UnimplementedMirrorServer: test.fields.UnimplementedMirrorServer, } gotLocs, err := s.RemoveByTimestamp(test.args.ctx, test.args.req) diff --git a/pkg/gateway/mirror/handler/grpc/mock_test.go b/pkg/gateway/mirror/handler/grpc/mock_test.go index a09cbb567a8..59ab5564a4f 100644 --- a/pkg/gateway/mirror/handler/grpc/mock_test.go +++ b/pkg/gateway/mirror/handler/grpc/mock_test.go @@ -16,7 +16,6 @@ package grpc import ( "context" - "github.com/vdaas/vald/apis/grpc/v1/vald" "github.com/vdaas/vald/internal/net/grpc" "github.com/vdaas/vald/pkg/gateway/mirror/service" ) @@ -28,9 +27,9 @@ type gatewayMock struct { ForwardedContextFunc func(ctx context.Context, podName string) context.Context FromForwardedContextFunc func(ctx context.Context) string BroadCastFunc func(ctx context.Context, - f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error + f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error DoMultiFunc func(ctx context.Context, targets []string, - f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error + f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error) error } func (gm *gatewayMock) ForwardedContext(ctx context.Context, podName string) context.Context { @@ -42,13 +41,13 @@ func (gm *gatewayMock) FromForwardedContext(ctx context.Context) string { } func (gm *gatewayMock) BroadCast(ctx context.Context, - f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error, + f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error, ) error { return gm.BroadCastFunc(ctx, f) } func (gm *gatewayMock) DoMulti(ctx context.Context, targets []string, - f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error, + f func(ctx context.Context, target string, vc service.MirrorClient, copts ...grpc.CallOption) error, ) error { return gm.DoMultiFunc(ctx, targets, f) } diff --git a/pkg/gateway/mirror/handler/rest/handler.go b/pkg/gateway/mirror/handler/rest/handler.go index 70ed6dbff7a..105cd3ec6f5 100644 --- a/pkg/gateway/mirror/handler/rest/handler.go +++ b/pkg/gateway/mirror/handler/rest/handler.go @@ -17,9 +17,9 @@ import ( "net/http" "github.com/vdaas/vald/apis/grpc/v1/payload" - "github.com/vdaas/vald/apis/grpc/v1/vald" "github.com/vdaas/vald/internal/net/http/dump" "github.com/vdaas/vald/internal/net/http/json" + "github.com/vdaas/vald/pkg/gateway/mirror/handler/grpc" ) // Handler represents an interface for rest handler. @@ -48,7 +48,7 @@ type Handler interface { } type handler struct { - vald vald.ServerWithMirror + vald grpc.Server } // New returns a Vald server as rest handler with mirror using the provided options. diff --git a/pkg/gateway/mirror/handler/rest/option.go b/pkg/gateway/mirror/handler/rest/option.go index 56272ff02e5..f2287b16ebc 100644 --- a/pkg/gateway/mirror/handler/rest/option.go +++ b/pkg/gateway/mirror/handler/rest/option.go @@ -13,15 +13,13 @@ // limitations under the License. package rest -import ( - "github.com/vdaas/vald/apis/grpc/v1/vald" -) +import "github.com/vdaas/vald/pkg/gateway/mirror/handler/grpc" type Option func(*handler) var defaultOptions = []Option{} -func WithVald(v vald.ServerWithMirror) Option { +func WithVald(v grpc.Server) Option { return func(h *handler) { h.vald = v } diff --git a/pkg/gateway/mirror/service/gateway.go b/pkg/gateway/mirror/service/gateway.go index 632f9db8a67..d2a8b9dbd80 100644 --- a/pkg/gateway/mirror/service/gateway.go +++ b/pkg/gateway/mirror/service/gateway.go @@ -17,7 +17,6 @@ import ( "context" "reflect" - "github.com/vdaas/vald/apis/grpc/v1/vald" "github.com/vdaas/vald/internal/client/v1/client/mirror" "github.com/vdaas/vald/internal/errors" "github.com/vdaas/vald/internal/log" @@ -36,11 +35,11 @@ type Gateway interface { ForwardedContext(ctx context.Context, podName string) context.Context FromForwardedContext(ctx context.Context) string BroadCast(ctx context.Context, - f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error + f func(ctx context.Context, target string, vc MirrorClient, copts ...grpc.CallOption) error) error Do(ctx context.Context, target string, - f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) (interface{}, error)) (interface{}, error) + f func(ctx context.Context, target string, vc MirrorClient, copts ...grpc.CallOption) (interface{}, error)) (interface{}, error) DoMulti(ctx context.Context, targets []string, - f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error + f func(ctx context.Context, target string, vc MirrorClient, copts ...grpc.CallOption) error) error GRPCClient() grpc.Client } @@ -105,7 +104,7 @@ func (*gateway) FromForwardedContext(ctx context.Context) string { // to interact with gRPC clients for multiple targets. // The provided function should handle the communication logic for a target. func (g *gateway) BroadCast(ctx context.Context, - f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error, + f func(ctx context.Context, target string, vc MirrorClient, copts ...grpc.CallOption) error, ) (err error) { ctx, span := trace.StartSpan(ctx, "vald/gateway/mirror/service/Gateway.BroadCast") defer func() { @@ -120,7 +119,7 @@ func (g *gateway) BroadCast(ctx context.Context, case <-ictx.Done(): return nil default: - return f(ictx, addr, vald.NewValdClientWithMirror(conn), copts...) + return f(ictx, addr, NewMirrorClient(conn), copts...) } }) } @@ -129,7 +128,7 @@ func (g *gateway) BroadCast(ctx context.Context, // It returns the result of the operation and any associated error. // The provided function should handle the communication logic for a target. func (g *gateway) Do(ctx context.Context, target string, - f func(ctx context.Context, addr string, vc vald.ClientWithMirror, copts ...grpc.CallOption) (interface{}, error), + f func(ctx context.Context, addr string, vc MirrorClient, copts ...grpc.CallOption) (interface{}, error), ) (res interface{}, err error) { ctx, span := trace.StartSpan(ctx, "vald/gateway/mirror/service/Gateway.Do") defer func() { @@ -143,7 +142,7 @@ func (g *gateway) Do(ctx context.Context, target string, } return g.client.GRPCClient().Do(g.ForwardedContext(ctx, g.podName), target, func(ictx context.Context, conn *grpc.ClientConn, copts ...grpc.CallOption) (interface{}, error) { - return f(ictx, target, vald.NewValdClientWithMirror(conn), copts...) + return f(ictx, target, NewMirrorClient(conn), copts...) }, ) } @@ -152,7 +151,7 @@ func (g *gateway) Do(ctx context.Context, target string, // It returns an error if any of the operations fails. // The provided function should handle the communication logic for a target. func (g *gateway) DoMulti(ctx context.Context, targets []string, - f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error, + f func(ctx context.Context, target string, vc MirrorClient, copts ...grpc.CallOption) error, ) error { ctx, span := trace.StartSpan(ctx, "vald/gateway/mirror/service/Gateway.DoMulti") defer func() { @@ -170,7 +169,7 @@ func (g *gateway) DoMulti(ctx context.Context, targets []string, case <-ictx.Done(): return nil default: - return f(ictx, addr, vald.NewValdClientWithMirror(conn), copts...) + return f(ictx, addr, NewMirrorClient(conn), copts...) } }, ) diff --git a/pkg/gateway/mirror/service/gateway_mock_test.go b/pkg/gateway/mirror/service/gateway_mock_test.go index 9bd0641033d..baaed0ae4c0 100644 --- a/pkg/gateway/mirror/service/gateway_mock_test.go +++ b/pkg/gateway/mirror/service/gateway_mock_test.go @@ -16,7 +16,6 @@ package service import ( "context" - "github.com/vdaas/vald/apis/grpc/v1/vald" "github.com/vdaas/vald/internal/net/grpc" ) @@ -26,11 +25,11 @@ type GatewayMock struct { ForwardedContextFunc func(ctx context.Context, podName string) context.Context FromForwardedContextFunc func(ctx context.Context) string BroadCastFunc func(ctx context.Context, - f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error + f func(ctx context.Context, target string, vc MirrorClient, copts ...grpc.CallOption) error) error DoFunc func(ctx context.Context, target string, - f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) (interface{}, error)) (interface{}, error) + f func(ctx context.Context, target string, vc MirrorClient, copts ...grpc.CallOption) (interface{}, error)) (interface{}, error) DoMultiFunc func(ctx context.Context, targets []string, - f func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error) error + f func(ctx context.Context, target string, vc MirrorClient, copts ...grpc.CallOption) error) error GRPCClientFunc func() grpc.Client } @@ -46,21 +45,21 @@ func (gm *GatewayMock) FromForwardedContext(ctx context.Context) string { // BroadCast calls BroadCastFunc object. func (gm *GatewayMock) BroadCast(ctx context.Context, - f func(_ context.Context, _ string, _ vald.ClientWithMirror, _ ...grpc.CallOption) error, + f func(_ context.Context, _ string, _ MirrorClient, _ ...grpc.CallOption) error, ) error { return gm.BroadCastFunc(ctx, f) } // Do calls DoFunc object. func (gm *GatewayMock) Do(ctx context.Context, target string, - f func(_ context.Context, _ string, _ vald.ClientWithMirror, _ ...grpc.CallOption) (interface{}, error), + f func(_ context.Context, _ string, _ MirrorClient, _ ...grpc.CallOption) (interface{}, error), ) (interface{}, error) { return gm.DoFunc(ctx, target, f) } // DoMulti calls DoMultiFunc object. func (gm *GatewayMock) DoMulti(ctx context.Context, targets []string, - f func(_ context.Context, _ string, _ vald.ClientWithMirror, _ ...grpc.CallOption) error, + f func(_ context.Context, _ string, _ MirrorClient, _ ...grpc.CallOption) error, ) error { return gm.DoMultiFunc(ctx, targets, f) } diff --git a/pkg/gateway/mirror/service/mirror.go b/pkg/gateway/mirror/service/mirror.go index 892ef39f1a0..c23eb8d510a 100644 --- a/pkg/gateway/mirror/service/mirror.go +++ b/pkg/gateway/mirror/service/mirror.go @@ -18,6 +18,7 @@ import ( "reflect" "time" + "github.com/vdaas/vald/apis/grpc/v1/mirror" "github.com/vdaas/vald/apis/grpc/v1/payload" "github.com/vdaas/vald/apis/grpc/v1/vald" "github.com/vdaas/vald/internal/errors" @@ -45,6 +46,23 @@ type Mirror interface { RangeMirrorAddr(f func(addr string, _ any) bool) } +type MirrorClient interface { + vald.Client + mirror.MirrorClient +} + +type client struct { + vald.Client + mirror.MirrorClient +} + +func NewMirrorClient(conn *grpc.ClientConn) MirrorClient { + return &client{ + Client: vald.NewValdClient(conn), + MirrorClient: mirror.NewMirrorClient(conn), + } +} + type mirr struct { addrl sync.Map[string, any] // List of all connected addresses selfMirrTgts []*payload.Mirror_Target // Targets of self mirror gateway @@ -151,7 +169,7 @@ func (m *mirr) Start(ctx context.Context) <-chan error { // skipcq: GO-R1005 } func (m *mirr) registers(ctx context.Context, tgts *payload.Mirror_Targets) ([]*payload.Mirror_Target, error) { // skipcq: GO-R1005 - ctx, span := trace.StartSpan(grpc.WithGRPCMethod(ctx, vald.PackageName+"."+vald.MirrorRPCServiceName+"/"+vald.RegisterRPCName), "vald/gateway/mirror/service/Mirror.registers") + ctx, span := trace.StartSpan(grpc.WithGRPCMethod(ctx, vald.PackageName+"."+mirror.RPCServiceName+"/"+mirror.RegisterRPCName), "vald/gateway/mirror/service/Mirror.registers") defer func() { if span != nil { span.End() @@ -162,14 +180,14 @@ func (m *mirr) registers(ctx context.Context, tgts *payload.Mirror_Targets) ([]* ServingData: errdetails.Serialize(tgts), } resInfo := &errdetails.ResourceInfo{ - ResourceType: errdetails.ValdGRPCResourceTypePrefix + "/vald.v1." + vald.RegisterRPCName, + ResourceType: errdetails.ValdGRPCResourceTypePrefix + "/vald.v1." + mirror.RegisterRPCName, } resTgts := make([]*payload.Mirror_Target, 0, len(tgts.GetTargets())) exists := make(map[string]bool) var result sync.Map[string, error] // map[target host: error] var mu sync.Mutex - err := m.gateway.DoMulti(ctx, m.connectedOtherMirrorAddrs(ctx), func(ctx context.Context, target string, vc vald.ClientWithMirror, copts ...grpc.CallOption) error { + err := m.gateway.DoMulti(ctx, m.connectedOtherMirrorAddrs(ctx), func(ctx context.Context, target string, vc MirrorClient, copts ...grpc.CallOption) error { ctx, span := trace.StartSpan(ctx, "vald/gateway/mirror/service/Mirror.registers/"+target) defer func() { if span != nil { @@ -183,22 +201,22 @@ func (m *mirr) registers(ctx context.Context, tgts *payload.Mirror_Targets) ([]* switch { case errors.Is(err, context.Canceled): err = status.WrapWithCanceled( - vald.RegisterRPCName+" API canceld", err, reqInfo, resInfo, + mirror.RegisterRPCName+" API canceld", err, reqInfo, resInfo, ) attrs = trace.StatusCodeCancelled(err.Error()) case errors.Is(err, context.DeadlineExceeded): err = status.WrapWithCanceled( - vald.RegisterRPCName+" API deadline exceeded", err, reqInfo, resInfo, + mirror.RegisterRPCName+" API deadline exceeded", err, reqInfo, resInfo, ) attrs = trace.StatusCodeDeadlineExceeded(err.Error()) case errors.Is(err, errors.ErrGRPCClientConnNotFound("*")): err = status.WrapWithInternal( - vald.RegisterRPCName+" API connection not found", err, reqInfo, resInfo, + mirror.RegisterRPCName+" API connection not found", err, reqInfo, resInfo, ) attrs = trace.StatusCodeInternal(err.Error()) case errors.Is(err, errors.ErrTargetNotFound): err = status.WrapWithInvalidArgument( - vald.RegisterRPCName+" API target not found", err, reqInfo, resInfo, + mirror.RegisterRPCName+" API target not found", err, reqInfo, resInfo, ) attrs = trace.StatusCodeInvalidArgument(err.Error()) default: @@ -207,7 +225,7 @@ func (m *mirr) registers(ctx context.Context, tgts *payload.Mirror_Targets) ([]* msg string ) st, msg, err = status.ParseError(err, codes.Internal, - "failed to parse "+vald.RegisterRPCName+" gRPC error response", reqInfo, resInfo, + "failed to parse "+mirror.RegisterRPCName+" gRPC error response", reqInfo, resInfo, ) attrs = trace.FromGRPCStatus(st.Code(), msg) @@ -251,14 +269,14 @@ func (m *mirr) registers(ctx context.Context, tgts *payload.Mirror_Targets) ([]* }) result.Range(func(target string, rerr error) bool { if rerr != nil { - err = errors.Join(err, errors.Wrapf(rerr, "failed to "+vald.RegisterRPCName+" API to %s", target)) + err = errors.Join(err, errors.Wrapf(rerr, "failed to "+mirror.RegisterRPCName+" API to %s", target)) } return true }) if err != nil { if errors.Is(err, errors.ErrGRPCClientConnNotFound("*")) { err = status.WrapWithInternal( - vald.RegisterRPCName+" API connection not found", err, reqInfo, resInfo, + mirror.RegisterRPCName+" API connection not found", err, reqInfo, resInfo, ) log.Warn(err) if span != nil { @@ -270,7 +288,7 @@ func (m *mirr) registers(ctx context.Context, tgts *payload.Mirror_Targets) ([]* } st, msg, err := status.ParseError(err, codes.Internal, - "failed to parse "+vald.RegisterRPCName+" gRPC error response", reqInfo, resInfo, + "failed to parse "+mirror.RegisterRPCName+" gRPC error response", reqInfo, resInfo, ) log.Warn(err) if span != nil { diff --git a/pkg/gateway/mirror/usecase/vald.go b/pkg/gateway/mirror/usecase/vald.go index 7937ba47285..453c7344c4d 100644 --- a/pkg/gateway/mirror/usecase/vald.go +++ b/pkg/gateway/mirror/usecase/vald.go @@ -16,8 +16,9 @@ package usecase import ( "context" + "github.com/vdaas/vald/apis/grpc/v1/mirror" "github.com/vdaas/vald/apis/grpc/v1/vald" - "github.com/vdaas/vald/internal/client/v1/client/mirror" + client "github.com/vdaas/vald/internal/client/v1/client/mirror" "github.com/vdaas/vald/internal/errors" "github.com/vdaas/vald/internal/net" "github.com/vdaas/vald/internal/net/grpc" @@ -42,7 +43,7 @@ type run struct { dialer net.Dialer cfg *config.Data server starter.Server - client mirror.Client + client client.Client gateway service.Gateway mirror service.Mirror discover service.Discovery @@ -69,9 +70,9 @@ func New(cfg *config.Data) (r runner.Runner, err error) { // skipcq: CRT-D0001 cOpts = append(cOpts, grpc.WithErrGroup(eg)) - client, err := mirror.New( - mirror.WithAddrs(cfg.Mirror.Client.Addrs...), - mirror.WithClient(grpc.New(cOpts...)), + mClient, err := client.New( + client.WithAddrs(cfg.Mirror.Client.Addrs...), + client.WithClient(grpc.New(cOpts...)), ) if err != nil { return nil, err @@ -79,13 +80,13 @@ func New(cfg *config.Data) (r runner.Runner, err error) { gateway, err := service.NewGateway( service.WithErrGroup(eg), - service.WithMirrorClient(client), + service.WithMirrorClient(mClient), service.WithPodName(cfg.Mirror.PodName), ) if err != nil { return nil, err } - mirror, err := service.NewMirror( + m, err := service.NewMirror( service.WithErrorGroup(eg), service.WithRegisterDuration(cfg.Mirror.RegisterDuration), service.WithGatewayAddrs(cfg.Mirror.GatewayAddr), @@ -102,7 +103,7 @@ func New(cfg *config.Data) (r runner.Runner, err error) { service.WithDiscoverySelfMirrorAddrs(cfg.Mirror.SelfMirrorAddr), service.WithDiscoveryColocation(cfg.Mirror.Colocation), service.WithDiscoveryDialer(dialer), - service.WithDiscoveryMirror(mirror), + service.WithDiscoveryMirror(m), service.WithDiscoveryErrGroup(eg), ) if err != nil { @@ -113,7 +114,7 @@ func New(cfg *config.Data) (r runner.Runner, err error) { handler.WithValdAddr(cfg.Mirror.GatewayAddr), handler.WithErrGroup(eg), handler.WithGateway(gateway), - handler.WithMirror(mirror), + handler.WithMirror(m), handler.WithStreamConcurrency(cfg.Server.GetGRPCStreamConcurrency()), ) if err != nil { @@ -122,7 +123,8 @@ func New(cfg *config.Data) (r runner.Runner, err error) { grpcServerOptions := []server.Option{ server.WithGRPCRegistFunc(func(srv *grpc.Server) { - vald.RegisterValdServerWithMirror(srv, v) + vald.RegisterValdServer(srv, v) + mirror.RegisterMirrorServer(srv, v) }), server.WithPreStopFunction(func() error { return nil @@ -135,7 +137,7 @@ func New(cfg *config.Data) (r runner.Runner, err error) { cfg.Observability, bometrics.New(), cbmetrics.New(), - mirrmetrics.New(mirror), + mirrmetrics.New(m), ) if err != nil { return nil, err @@ -170,9 +172,9 @@ func New(cfg *config.Data) (r runner.Runner, err error) { dialer: dialer, cfg: cfg, server: srv, - client: client, + client: mClient, gateway: gateway, - mirror: mirror, + mirror: m, discover: discover, observability: obs, }, nil From d482c0f1963298e17dc80cc23bb5fcfc94e71abd Mon Sep 17 00:00:00 2001 From: taisho Date: Tue, 20 Feb 2024 18:55:34 +0900 Subject: [PATCH 2/2] change JP logo to EN logo (#2369) Signed-off-by: kpango Co-authored-by: taisuou --- README.md | 14 ++++++++++---- assets/image/vald-users/japansearch_color.png | Bin 0 -> 11854 bytes .../image/vald-users/japansearch_color.png.webp | Bin 2508 -> 0 bytes assets/image/vald-users/lycorp.png | Bin 0 -> 1327 bytes assets/image/vald-users/lycorp_black.png | Bin 0 -> 1327 bytes assets/image/vald-users/lycorp_white.png | Bin 0 -> 1351 bytes assets/image/vald-users/yahoojapan.svg | 1 - 7 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 assets/image/vald-users/japansearch_color.png delete mode 100644 assets/image/vald-users/japansearch_color.png.webp create mode 100644 assets/image/vald-users/lycorp.png create mode 100644 assets/image/vald-users/lycorp_black.png create mode 100644 assets/image/vald-users/lycorp_white.png delete mode 100644 assets/image/vald-users/yahoojapan.svg diff --git a/README.md b/README.md index bc4970e1dd8..ddf4a723894 100755 --- a/README.md +++ b/README.md @@ -237,10 +237,16 @@ Docker images tagging policy: ## Vald Users

- yahoojapan -        - jpsearch - + + + + + LY + + + + jpsearch +

## Contribution diff --git a/assets/image/vald-users/japansearch_color.png b/assets/image/vald-users/japansearch_color.png new file mode 100644 index 0000000000000000000000000000000000000000..d1aa3924047b27ab8e15c73ac089e26c03f196b0 GIT binary patch literal 11854 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 literal 0 HcmV?d00001 diff --git a/assets/image/vald-users/lycorp_black.png b/assets/image/vald-users/lycorp_black.png new file mode 100644 index 0000000000000000000000000000000000000000..1ee060ebbfc04346040ed080abfdfeca0d6f10a3 GIT binary patch literal 1327 zcmeAS@N?(olHy`uVBq!ia0y~yVAKJ!KX9-C$z9(frvfR?0*}aI1_o|n5N2eUHAey{ z$XFcY?!>U}oXkrghb7(7*O7r?V?XzwL{=d8h^LEVNCo5DyBBk%-9=b0bStp#Xwg+v z-M~^Vu(ZiSbjHgAD;-K$3)w^1-Lw>}3#3-v_(1wPFjpS6_Xj z#RxQ=mLThI)eQgko%Y3L?K6w!t<0GI`~3XRW}mC(wy!^2dvOovht^dM8K3o@M~c7u zWU=~8ve(~t^2{|0KS{qadp@)4d*{CuTD*1I z*Xpd$ZEI#Mh&bImNTK%a*}oQv#q=5UD~wl%J$W{kVEV;j;XH8<3Gz1^3)?Re}h=5rfZlv%?z zdwP}IsaY)JyMBkYV%tTgY_Gq{*7v#lZ$El1D?I5yc#l}bSu4%EyUzyqzwwb>x0SnK zk|1;TIrhc>b@ug@v8GEHZkSd2syXHF{OmPWG0D;oQWmpalhMr%|MN39Eb*g^%+jd$ z)BoIEa-R8IIisIh*5RzE10mZN_|LW5epaMyLE=T{_0#|4KK^RB!9&@6jl1ow31wfK zG9$ix@t&3|{Fcir#u?~`$h6H_-;XRa5aI2Hqy^#!5_UI~r4W+DPZ?JSlg9h%>44f4P_W-Aoj2 zQ{6D*vK9aG2l}qNrRE$+^0SrevAbq>>*@y1w7uoJ`;nxHj^4`eiI;r0XwNw6 zoe^=??3Sqer42i_#C_jn^Pr}cMQnQ6^k2&Czb#a%rm~262i)CsYv=0P9ac=;syCKj zi+`xasgoeV#4XWwfT>M!Lqj45CfB}g`hvX=i>IF6$z5>u-TI7sPi`-J^!jeg>L>0_ z&kR_(ICQFRKY!?7eefoW*xtSU;d=vI5-wi0yCn*=-FB<^=h#QmdKI;Vst0OzwAssI20 literal 0 HcmV?d00001 diff --git a/assets/image/vald-users/lycorp_white.png b/assets/image/vald-users/lycorp_white.png new file mode 100644 index 0000000000000000000000000000000000000000..c3438fad7dd0258a724530af05eabf80b3b1f1f3 GIT binary patch literal 1351 zcmcIk`BPH|5PnHRB-|w$qQi&~N(B=&SfL)}5F!LH1q(JDF;5_batKv?SVb_2h!6&( z9iNs4DN#gB`iKfal0qL<3KFG&h74zg5f3!QVj;wU_Syfzo!R~N+uhl3W`EeyXik{D z%^Dj30PNY}p?d)UN5}G4)#0)Ymb;Gk>yZa}8_Zyw<^z0x#nb|&9 z;Bq^Q_E!$GqRh|ae&G~4Rm9`*jI?)=BmTA8^$#bY;#m(vhh?X_)005yKK4=_NHbVA z#`^yBI54hR(E$45rI+%4kvl40!upc9ySOZ4Mh$_|@XT>S*s9EDF%(nO;S-y^MO_2% z;0+D%t8wi?4+CO(#}~6nbWY1Dcs^im*)@s-e*1lht~cP7Z0LrAaIJq;=JC(J>b--A z<7b*Ux7ra$jCm`mJjxAOa=iew|=> zrP(+WuNBi;lIl0mnn{&{mg?!0{gU`WRZleY#-S{o@1ufX0!4B}%c<3rJnhlD=`@xm zemYUMsRH%Tr97^DxzldRyscTWn#{etKI!qSg0^EsFL36jUZa*5rt{s(5o+!blEwk6 z(v;Ie2cc6A&A`!C2Z~r~CS2QiD=I{r0Ek%EW?=mcQI?OBHB7I00VnV$EJt*1p>LD^ z)wJ(XS+Aiyw{bCBsF-dwD!(%cECd`{b~3wa6P!e>`nDzs!ef-9@~DBiE%823qPLgo zs-Gcx@n;^R5|uxUN*wAKRd-HV)Bo7q3eR8WF@8YhV|9Z2)5u+-%q0qB!ey+teUm{J zF^RrArg`aJW3!@|%q@S;oLh0}%Q_xIh9-Z;k_>bYBKv|srn+oeSiv+Y{@x}=lViy( zN*7(XQi3Miq_isAWOb?QL|xCy;99dkQTBBx$SmC$`UY;PJl1E2oI#T#^xBLOeXlj$ z>p?L)5VaIH3<-|pkt?3|>Kv7Y#c6p8@GIu;dTUyG!c!7?8;XAfg&CWaUT@hF1 zNW31|L-oUv2o(LoKhOgbH42O|4)5KR`Y|_lqy%DlV8?8@&1hd&jLLgEY!%r-SY=hd z(!BukE5GX&Yi8YO$s-DZdm@8z#L&1#Nt)y9Tdy(UIG(>WxsIUm0`{YBu3T*eu)n;3cs(<}O Rb6EX*DK?7}itGZ#{{gS`9%=vp literal 0 HcmV?d00001 diff --git a/assets/image/vald-users/yahoojapan.svg b/assets/image/vald-users/yahoojapan.svg deleted file mode 100644 index 515341157ef..00000000000 --- a/assets/image/vald-users/yahoojapan.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file