From 312d16e06eb13bcd74f5cc0b53e19660f1597166 Mon Sep 17 00:00:00 2001 From: Vigith Maurice Date: Sat, 22 Feb 2025 14:21:34 -0800 Subject: [PATCH] feat: implement Get interface Signed-off-by: Vigith Maurice --- pkg/servingstore/interface.go | 18 +++++++++++++++++- pkg/servingstore/service.go | 26 ++++++++++++++++++++++++-- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/pkg/servingstore/interface.go b/pkg/servingstore/interface.go index 9f8e8302..f8979dbb 100644 --- a/pkg/servingstore/interface.go +++ b/pkg/servingstore/interface.go @@ -10,7 +10,7 @@ type ServingStorer interface { Put(ctx context.Context, put PutRequester) // Get is to retrieve data from the Serving Store. - Get(ctx context.Context) StoredResults + Get(ctx context.Context, get GetRequester) StoredResults } // PutRequester interface exposes methods to retrieve data from the Put rpc. @@ -19,6 +19,7 @@ type PutRequester interface { Payload() [][]byte } +// PutRequest contains the details to store the payload to the Store. type PutRequest struct { origin string payloads [][]byte @@ -33,3 +34,18 @@ func (p *PutRequest) Origin() string { func (p *PutRequest) Payload() [][]byte { return p.payloads } + +// GetRequester is the interface to expose methods to retrieve from the Get rpc. +type GetRequester interface { + Id() string +} + +// GetRequest has details on the Get rpc. +type GetRequest struct { + id string +} + +// Id is the unique ID original request which is used get the data stored in the Store. +func (g *GetRequest) Id() string { + return g.id +} diff --git a/pkg/servingstore/service.go b/pkg/servingstore/service.go index 9b1234f7..e18ec30b 100644 --- a/pkg/servingstore/service.go +++ b/pkg/servingstore/service.go @@ -42,6 +42,7 @@ func handlePanic() (err error) { return err } +// Put puts tine payload into the Store. func (s *Service) Put(ctx context.Context, request *servingpb.PutRequest) (*servingpb.PutResponse, error) { var err error // handle panic @@ -57,11 +58,32 @@ func (s *Service) Put(ctx context.Context, request *servingpb.PutRequest) (*serv return &servingpb.PutResponse{Success: true}, err } +// Get gets the data stored in the Store. func (s *Service) Get(ctx context.Context, request *servingpb.GetRequest) (*servingpb.GetResponse, error) { - //TODO implement me - panic("implement me") + var err error + // handle panic + defer func() { err = handlePanic() }() + + storedResults := s.ServingStore.Get(ctx, &GetRequest{id: request.Id}) + + items := storedResults.Items() + var payloads = make([]*servingpb.OriginalPayload, 0, len(items)) + + for _, storedResult := range items { + var p = make([]*servingpb.Payload, 0) + for _, payload := range storedResult.payloads { + p = append(p, &servingpb.Payload{Id: request.GetId(), Value: payload.value}) + } + payloads = append(payloads, &servingpb.OriginalPayload{ + Origin: storedResult.origin, + Payloads: p, + }) + } + + return &servingpb.GetResponse{Payloads: payloads}, err } +// IsReady is used to indicate that the server is ready. func (s *Service) IsReady(_ context.Context, _ *emptypb.Empty) (*servingpb.ReadyResponse, error) { return &servingpb.ReadyResponse{Ready: true}, nil }