diff --git a/pkg/storage/unified/resource/resource.pb.go b/pkg/storage/unified/resource/resource.pb.go index 61a80b61b2e..9f38ba6f98a 100644 --- a/pkg/storage/unified/resource/resource.pb.go +++ b/pkg/storage/unified/resource/resource.pb.go @@ -2710,7 +2710,7 @@ var file_resource_proto_rawDesc = []byte{ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x33, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x6f, 0x74, 0x4f, 0x6c, 0x64, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x10, 0x00, 0x12, - 0x09, 0x0a, 0x05, 0x45, 0x78, 0x61, 0x63, 0x74, 0x10, 0x01, 0x32, 0xed, 0x03, 0x0a, 0x0d, 0x52, + 0x09, 0x0a, 0x05, 0x45, 0x78, 0x61, 0x63, 0x74, 0x10, 0x01, 0x32, 0xed, 0x02, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x35, 0x0a, 0x04, 0x52, 0x65, 0x61, 0x64, 0x12, 0x15, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x72, 0x65, @@ -2733,15 +2733,7 @@ var file_resource_proto_rawDesc = []byte{ 0x65, 0x12, 0x37, 0x0a, 0x05, 0x57, 0x61, 0x74, 0x63, 0x68, 0x12, 0x16, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x57, 0x61, - 0x74, 0x63, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x12, 0x3e, 0x0a, 0x07, 0x50, 0x75, - 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x18, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x2e, 0x50, 0x75, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x19, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x50, 0x75, 0x74, 0x42, 0x6c, - 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x07, 0x47, 0x65, - 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x18, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x19, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, - 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xc3, 0x01, 0x0a, 0x0d, 0x52, + 0x74, 0x63, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x32, 0xc3, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x35, 0x0a, 0x04, 0x52, 0x65, 0x61, 0x64, 0x12, 0x15, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x72, 0x65, @@ -2754,16 +2746,25 @@ var file_resource_proto_rawDesc = []byte{ 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x32, 0x57, 0x0a, 0x0b, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, - 0x48, 0x0a, 0x09, 0x49, 0x73, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x12, 0x1c, 0x2e, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x72, 0x65, 0x73, + 0x32, 0x8b, 0x01, 0x0a, 0x09, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x3e, + 0x0a, 0x07, 0x50, 0x75, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x18, 0x2e, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x2e, 0x50, 0x75, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x50, + 0x75, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, + 0x0a, 0x07, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x18, 0x2e, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x47, + 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x57, + 0x0a, 0x0b, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x48, 0x0a, + 0x09, 0x49, 0x73, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x12, 0x1c, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x39, 0x5a, 0x37, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x66, 0x61, 0x6e, 0x61, 0x2f, - 0x67, 0x72, 0x61, 0x66, 0x61, 0x6e, 0x61, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x2f, 0x75, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2f, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x39, 0x5a, 0x37, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x66, 0x61, 0x6e, 0x61, 0x2f, 0x67, 0x72, + 0x61, 0x66, 0x61, 0x6e, 0x61, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2f, 0x75, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2854,11 +2855,11 @@ var file_resource_proto_depIdxs = []int32{ 13, // 32: resource.ResourceStore.Delete:input_type -> resource.DeleteRequest 20, // 33: resource.ResourceStore.List:input_type -> resource.ListRequest 22, // 34: resource.ResourceStore.Watch:input_type -> resource.WatchRequest - 31, // 35: resource.ResourceStore.PutBlob:input_type -> resource.PutBlobRequest - 33, // 36: resource.ResourceStore.GetBlob:input_type -> resource.GetBlobRequest - 15, // 37: resource.ResourceIndex.Read:input_type -> resource.ReadRequest - 24, // 38: resource.ResourceIndex.History:input_type -> resource.HistoryRequest - 26, // 39: resource.ResourceIndex.Origin:input_type -> resource.OriginRequest + 15, // 35: resource.ResourceIndex.Read:input_type -> resource.ReadRequest + 24, // 36: resource.ResourceIndex.History:input_type -> resource.HistoryRequest + 26, // 37: resource.ResourceIndex.Origin:input_type -> resource.OriginRequest + 31, // 38: resource.BlobStore.PutBlob:input_type -> resource.PutBlobRequest + 33, // 39: resource.BlobStore.GetBlob:input_type -> resource.GetBlobRequest 29, // 40: resource.Diagnostics.IsHealthy:input_type -> resource.HealthCheckRequest 16, // 41: resource.ResourceStore.Read:output_type -> resource.ReadResponse 10, // 42: resource.ResourceStore.Create:output_type -> resource.CreateResponse @@ -2866,11 +2867,11 @@ var file_resource_proto_depIdxs = []int32{ 14, // 44: resource.ResourceStore.Delete:output_type -> resource.DeleteResponse 21, // 45: resource.ResourceStore.List:output_type -> resource.ListResponse 23, // 46: resource.ResourceStore.Watch:output_type -> resource.WatchEvent - 32, // 47: resource.ResourceStore.PutBlob:output_type -> resource.PutBlobResponse - 34, // 48: resource.ResourceStore.GetBlob:output_type -> resource.GetBlobResponse - 16, // 49: resource.ResourceIndex.Read:output_type -> resource.ReadResponse - 25, // 50: resource.ResourceIndex.History:output_type -> resource.HistoryResponse - 28, // 51: resource.ResourceIndex.Origin:output_type -> resource.OriginResponse + 16, // 47: resource.ResourceIndex.Read:output_type -> resource.ReadResponse + 25, // 48: resource.ResourceIndex.History:output_type -> resource.HistoryResponse + 28, // 49: resource.ResourceIndex.Origin:output_type -> resource.OriginResponse + 32, // 50: resource.BlobStore.PutBlob:output_type -> resource.PutBlobResponse + 34, // 51: resource.BlobStore.GetBlob:output_type -> resource.GetBlobResponse 30, // 52: resource.Diagnostics.IsHealthy:output_type -> resource.HealthCheckResponse 41, // [41:53] is the sub-list for method output_type 29, // [29:41] is the sub-list for method input_type @@ -3266,7 +3267,7 @@ func file_resource_proto_init() { NumEnums: 5, NumMessages: 31, NumExtensions: 0, - NumServices: 3, + NumServices: 4, }, GoTypes: file_resource_proto_goTypes, DependencyIndexes: file_resource_proto_depIdxs, diff --git a/pkg/storage/unified/resource/resource.proto b/pkg/storage/unified/resource/resource.proto index f7f81cfb4a4..b8bfe391813 100644 --- a/pkg/storage/unified/resource/resource.proto +++ b/pkg/storage/unified/resource/resource.proto @@ -446,16 +446,6 @@ service ResourceStore { rpc Delete(DeleteRequest) returns (DeleteResponse); rpc List(ListRequest) returns (ListResponse); rpc Watch(WatchRequest) returns (stream WatchEvent); - - // Upload a blob that will be saved in a resource - rpc PutBlob(PutBlobRequest) returns (PutBlobResponse); - - // Get blob contents. When possible, this will return a signed URL - // For large payloads, signed URLs are required to avoid protobuf message size limits - rpc GetBlob(GetBlobRequest) returns (GetBlobResponse); - - // NOTE: there is no direct access to delete blobs - // >> cleanup will be managed via garbage collection or direct access to the underlying storage } // Unlike the ResourceStore, this service can be exposed to clients directly @@ -472,6 +462,18 @@ service ResourceIndex { rpc Origin(OriginRequest) returns (OriginResponse); } +service BlobStore { + // Upload a blob that will be saved in a resource + rpc PutBlob(PutBlobRequest) returns (PutBlobResponse); + + // Get blob contents. When possible, this will return a signed URL + // For large payloads, signed URLs are required to avoid protobuf message size limits + rpc GetBlob(GetBlobRequest) returns (GetBlobResponse); + + // NOTE: there is no direct access to delete blobs + // >> cleanup will be managed via garbage collection or direct access to the underlying storage +} + // Clients can use this service directly // NOTE: This is read only, and no read afer write guarantees service Diagnostics { diff --git a/pkg/storage/unified/resource/resource_grpc.pb.go b/pkg/storage/unified/resource/resource_grpc.pb.go index a8dba906d9a..5428c73847b 100644 --- a/pkg/storage/unified/resource/resource_grpc.pb.go +++ b/pkg/storage/unified/resource/resource_grpc.pb.go @@ -19,14 +19,12 @@ import ( const _ = grpc.SupportPackageIsVersion8 const ( - ResourceStore_Read_FullMethodName = "/resource.ResourceStore/Read" - ResourceStore_Create_FullMethodName = "/resource.ResourceStore/Create" - ResourceStore_Update_FullMethodName = "/resource.ResourceStore/Update" - ResourceStore_Delete_FullMethodName = "/resource.ResourceStore/Delete" - ResourceStore_List_FullMethodName = "/resource.ResourceStore/List" - ResourceStore_Watch_FullMethodName = "/resource.ResourceStore/Watch" - ResourceStore_PutBlob_FullMethodName = "/resource.ResourceStore/PutBlob" - ResourceStore_GetBlob_FullMethodName = "/resource.ResourceStore/GetBlob" + ResourceStore_Read_FullMethodName = "/resource.ResourceStore/Read" + ResourceStore_Create_FullMethodName = "/resource.ResourceStore/Create" + ResourceStore_Update_FullMethodName = "/resource.ResourceStore/Update" + ResourceStore_Delete_FullMethodName = "/resource.ResourceStore/Delete" + ResourceStore_List_FullMethodName = "/resource.ResourceStore/List" + ResourceStore_Watch_FullMethodName = "/resource.ResourceStore/Watch" ) // ResourceStoreClient is the client API for ResourceStore service. @@ -44,11 +42,6 @@ type ResourceStoreClient interface { Delete(ctx context.Context, in *DeleteRequest, opts ...grpc.CallOption) (*DeleteResponse, error) List(ctx context.Context, in *ListRequest, opts ...grpc.CallOption) (*ListResponse, error) Watch(ctx context.Context, in *WatchRequest, opts ...grpc.CallOption) (ResourceStore_WatchClient, error) - // Upload a blob that will be saved in a resource - PutBlob(ctx context.Context, in *PutBlobRequest, opts ...grpc.CallOption) (*PutBlobResponse, error) - // Get blob contents. When possible, this will return a signed URL - // For large payloads, signed URLs are required to avoid protobuf message size limits - GetBlob(ctx context.Context, in *GetBlobRequest, opts ...grpc.CallOption) (*GetBlobResponse, error) } type resourceStoreClient struct { @@ -142,26 +135,6 @@ func (x *resourceStoreWatchClient) Recv() (*WatchEvent, error) { return m, nil } -func (c *resourceStoreClient) PutBlob(ctx context.Context, in *PutBlobRequest, opts ...grpc.CallOption) (*PutBlobResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(PutBlobResponse) - err := c.cc.Invoke(ctx, ResourceStore_PutBlob_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *resourceStoreClient) GetBlob(ctx context.Context, in *GetBlobRequest, opts ...grpc.CallOption) (*GetBlobResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(GetBlobResponse) - err := c.cc.Invoke(ctx, ResourceStore_GetBlob_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - // ResourceStoreServer is the server API for ResourceStore service. // All implementations should embed UnimplementedResourceStoreServer // for forward compatibility @@ -177,11 +150,6 @@ type ResourceStoreServer interface { Delete(context.Context, *DeleteRequest) (*DeleteResponse, error) List(context.Context, *ListRequest) (*ListResponse, error) Watch(*WatchRequest, ResourceStore_WatchServer) error - // Upload a blob that will be saved in a resource - PutBlob(context.Context, *PutBlobRequest) (*PutBlobResponse, error) - // Get blob contents. When possible, this will return a signed URL - // For large payloads, signed URLs are required to avoid protobuf message size limits - GetBlob(context.Context, *GetBlobRequest) (*GetBlobResponse, error) } // UnimplementedResourceStoreServer should be embedded to have forward compatible implementations. @@ -206,12 +174,6 @@ func (UnimplementedResourceStoreServer) List(context.Context, *ListRequest) (*Li func (UnimplementedResourceStoreServer) Watch(*WatchRequest, ResourceStore_WatchServer) error { return status.Errorf(codes.Unimplemented, "method Watch not implemented") } -func (UnimplementedResourceStoreServer) PutBlob(context.Context, *PutBlobRequest) (*PutBlobResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PutBlob not implemented") -} -func (UnimplementedResourceStoreServer) GetBlob(context.Context, *GetBlobRequest) (*GetBlobResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetBlob not implemented") -} // UnsafeResourceStoreServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to ResourceStoreServer will @@ -335,42 +297,6 @@ func (x *resourceStoreWatchServer) Send(m *WatchEvent) error { return x.ServerStream.SendMsg(m) } -func _ResourceStore_PutBlob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PutBlobRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ResourceStoreServer).PutBlob(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: ResourceStore_PutBlob_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ResourceStoreServer).PutBlob(ctx, req.(*PutBlobRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ResourceStore_GetBlob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetBlobRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ResourceStoreServer).GetBlob(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: ResourceStore_GetBlob_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ResourceStoreServer).GetBlob(ctx, req.(*GetBlobRequest)) - } - return interceptor(ctx, in, info, handler) -} - // ResourceStore_ServiceDesc is the grpc.ServiceDesc for ResourceStore service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -398,14 +324,6 @@ var ResourceStore_ServiceDesc = grpc.ServiceDesc{ MethodName: "List", Handler: _ResourceStore_List_Handler, }, - { - MethodName: "PutBlob", - Handler: _ResourceStore_PutBlob_Handler, - }, - { - MethodName: "GetBlob", - Handler: _ResourceStore_GetBlob_Handler, - }, }, Streams: []grpc.StreamDesc{ { @@ -592,6 +510,139 @@ var ResourceIndex_ServiceDesc = grpc.ServiceDesc{ Metadata: "resource.proto", } +const ( + BlobStore_PutBlob_FullMethodName = "/resource.BlobStore/PutBlob" + BlobStore_GetBlob_FullMethodName = "/resource.BlobStore/GetBlob" +) + +// BlobStoreClient is the client API for BlobStore service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type BlobStoreClient interface { + // Upload a blob that will be saved in a resource + PutBlob(ctx context.Context, in *PutBlobRequest, opts ...grpc.CallOption) (*PutBlobResponse, error) + // Get blob contents. When possible, this will return a signed URL + // For large payloads, signed URLs are required to avoid protobuf message size limits + GetBlob(ctx context.Context, in *GetBlobRequest, opts ...grpc.CallOption) (*GetBlobResponse, error) +} + +type blobStoreClient struct { + cc grpc.ClientConnInterface +} + +func NewBlobStoreClient(cc grpc.ClientConnInterface) BlobStoreClient { + return &blobStoreClient{cc} +} + +func (c *blobStoreClient) PutBlob(ctx context.Context, in *PutBlobRequest, opts ...grpc.CallOption) (*PutBlobResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(PutBlobResponse) + err := c.cc.Invoke(ctx, BlobStore_PutBlob_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *blobStoreClient) GetBlob(ctx context.Context, in *GetBlobRequest, opts ...grpc.CallOption) (*GetBlobResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetBlobResponse) + err := c.cc.Invoke(ctx, BlobStore_GetBlob_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +// BlobStoreServer is the server API for BlobStore service. +// All implementations should embed UnimplementedBlobStoreServer +// for forward compatibility +type BlobStoreServer interface { + // Upload a blob that will be saved in a resource + PutBlob(context.Context, *PutBlobRequest) (*PutBlobResponse, error) + // Get blob contents. When possible, this will return a signed URL + // For large payloads, signed URLs are required to avoid protobuf message size limits + GetBlob(context.Context, *GetBlobRequest) (*GetBlobResponse, error) +} + +// UnimplementedBlobStoreServer should be embedded to have forward compatible implementations. +type UnimplementedBlobStoreServer struct { +} + +func (UnimplementedBlobStoreServer) PutBlob(context.Context, *PutBlobRequest) (*PutBlobResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PutBlob not implemented") +} +func (UnimplementedBlobStoreServer) GetBlob(context.Context, *GetBlobRequest) (*GetBlobResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetBlob not implemented") +} + +// UnsafeBlobStoreServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to BlobStoreServer will +// result in compilation errors. +type UnsafeBlobStoreServer interface { + mustEmbedUnimplementedBlobStoreServer() +} + +func RegisterBlobStoreServer(s grpc.ServiceRegistrar, srv BlobStoreServer) { + s.RegisterService(&BlobStore_ServiceDesc, srv) +} + +func _BlobStore_PutBlob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PutBlobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BlobStoreServer).PutBlob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: BlobStore_PutBlob_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BlobStoreServer).PutBlob(ctx, req.(*PutBlobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BlobStore_GetBlob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetBlobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BlobStoreServer).GetBlob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: BlobStore_GetBlob_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BlobStoreServer).GetBlob(ctx, req.(*GetBlobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// BlobStore_ServiceDesc is the grpc.ServiceDesc for BlobStore service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var BlobStore_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "resource.BlobStore", + HandlerType: (*BlobStoreServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "PutBlob", + Handler: _BlobStore_PutBlob_Handler, + }, + { + MethodName: "GetBlob", + Handler: _BlobStore_GetBlob_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "resource.proto", +} + const ( Diagnostics_IsHealthy_FullMethodName = "/resource.Diagnostics/IsHealthy" ) diff --git a/pkg/storage/unified/resource/server.go b/pkg/storage/unified/resource/server.go index 01ff6dbfa2a..9a1e40b543c 100644 --- a/pkg/storage/unified/resource/server.go +++ b/pkg/storage/unified/resource/server.go @@ -37,6 +37,7 @@ var ( type ResourceServer interface { ResourceStoreServer ResourceIndexServer + BlobStoreServer DiagnosticsServer LifecycleHooks }