diff --git a/internal/server/redis/processor.go b/internal/server/redis/processor.go index bf1ac1897..199535161 100644 --- a/internal/server/redis/processor.go +++ b/internal/server/redis/processor.go @@ -16,8 +16,10 @@ package redis import ( "context" + "fmt" "log/slog" + pb "github.com/datacommonsorg/mixer/internal/proto" pbv2 "github.com/datacommonsorg/mixer/internal/proto/v2" "github.com/datacommonsorg/mixer/internal/server/dispatcher" "github.com/datacommonsorg/mixer/internal/util" @@ -39,7 +41,11 @@ func (processor *CacheProcessor) PreProcess(rc *dispatcher.RequestContext) (disp return dispatcher.Continue, nil } - cachedResponse := newEmptyResponse(rc.Type) + cachedResponse, err := newEmptyResponse(rc.Type) + if err != nil { + slog.Error("Skipping cache", "error", err) + return dispatcher.Continue, err + } if found, err := processor.client.GetCachedResponse(rc.Context, rc.OriginalRequest, cachedResponse); found { slog.Info("Cache hit", "originalRequest", rc.OriginalRequest) @@ -67,18 +73,20 @@ func (processor *CacheProcessor) PostProcess(rc *dispatcher.RequestContext) (dis } // newEmptyResponse returns a new empty response for the given request type. -func newEmptyResponse(requestType dispatcher.RequestType) proto.Message { +func newEmptyResponse(requestType dispatcher.RequestType) (proto.Message, error) { switch requestType { case dispatcher.TypeNode: - return &pbv2.NodeResponse{} + return &pbv2.NodeResponse{}, nil case dispatcher.TypeNodeSearch: - return &pbv2.NodeSearchResponse{} + return &pbv2.NodeSearchResponse{}, nil case dispatcher.TypeObservation: - return &pbv2.ObservationResponse{} + return &pbv2.ObservationResponse{}, nil case dispatcher.TypeResolve: - return &pbv2.ResolveResponse{} + return &pbv2.ResolveResponse{}, nil + case dispatcher.TypeSparql: + return &pb.QueryResponse{}, nil default: - return nil + return nil, fmt.Errorf("unknown request type for caching: %v", requestType) } } diff --git a/internal/server/redis/processor_test.go b/internal/server/redis/processor_test.go index 73cb694f6..0e1f6b6be 100644 --- a/internal/server/redis/processor_test.go +++ b/internal/server/redis/processor_test.go @@ -20,6 +20,7 @@ import ( "testing" "time" + pb "github.com/datacommonsorg/mixer/internal/proto" pbv2 "github.com/datacommonsorg/mixer/internal/proto/v2" "github.com/datacommonsorg/mixer/internal/server/dispatcher" "github.com/datacommonsorg/mixer/internal/util" @@ -255,11 +256,17 @@ func TestNewEmptyResponse(t *testing.T) { requestType: dispatcher.TypeResolve, want: &pbv2.ResolveResponse{}, }, + { + name: "Sparql", + requestType: dispatcher.TypeSparql, + want: &pb.QueryResponse{}, + }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { - got := newEmptyResponse(test.requestType) + got, err := newEmptyResponse(test.requestType) + assert.NoError(t, err) assert.True(t, proto.Equal(test.want, got)) }) }