diff --git a/caraml-store-protobuf/src/main/proto/feast_spark/api/JobService.proto b/caraml-store-protobuf/src/main/proto/feast_spark/api/JobService.proto index 451cc74..963a450 100644 --- a/caraml-store-protobuf/src/main/proto/feast_spark/api/JobService.proto +++ b/caraml-store-protobuf/src/main/proto/feast_spark/api/JobService.proto @@ -13,6 +13,9 @@ service JobService { // Start job to ingest data from offline store into online store rpc StartOfflineToOnlineIngestionJob (StartOfflineToOnlineIngestionJobRequest) returns (StartOfflineToOnlineIngestionJobResponse); + // Start job to ingest data from streaming source into online store + rpc StartStreamIngestionJob(StartStreamIngestionJobRequest) returns (StartStreamIngestionJobResponse); + // Start scheduled job to ingest data from offline store into online store rpc ScheduleOfflineToOnlineIngestionJob (ScheduleOfflineToOnlineIngestionJobRequest) returns (ScheduleOfflineToOnlineIngestionJobResponse); @@ -26,7 +29,7 @@ service JobService { rpc ListJobs (ListJobsRequest) returns (ListJobsResponse); // List all scheduled jobs - rpc ListScheduledJob (ListScheduledJobRequest) returns (ListScheduledJobResponse); + rpc ListScheduledJobs (ListScheduledJobsRequest) returns (ListScheduledJobsResponse); // Cancel a single job rpc CancelJob (CancelJobRequest) returns (CancelJobResponse); @@ -137,6 +140,18 @@ message StartOfflineToOnlineIngestionJobResponse { string log_uri = 4; } +// Ingest data from streaming source into online store +message StartStreamIngestionJobRequest { + // Feature table to ingest + string project = 1; + string table_name = 2; +} + +message StartStreamIngestionJobResponse { + // Job ID assigned by Feast + string id = 1; +} + message ScheduleOfflineToOnlineIngestionJobRequest { // Feature table to ingest string project = 1; @@ -205,7 +220,7 @@ message ListJobsRequest { string project = 3; } -message ListScheduledJobRequest { +message ListScheduledJobsRequest { string project = 1; string table_name = 2; } @@ -214,7 +229,7 @@ message ListJobsResponse { repeated Job jobs = 1; } -message ListScheduledJobResponse { +message ListScheduledJobsResponse { repeated ScheduledJob jobs = 1; } diff --git a/caraml-store-registry/src/main/java/dev/caraml/store/api/JobGrpcServiceImpl.java b/caraml-store-registry/src/main/java/dev/caraml/store/api/JobGrpcServiceImpl.java index a895dde..276cadc 100644 --- a/caraml-store-registry/src/main/java/dev/caraml/store/api/JobGrpcServiceImpl.java +++ b/caraml-store-registry/src/main/java/dev/caraml/store/api/JobGrpcServiceImpl.java @@ -14,6 +14,8 @@ import dev.caraml.store.protobuf.jobservice.JobServiceProto.ScheduledJob; import dev.caraml.store.protobuf.jobservice.JobServiceProto.StartOfflineToOnlineIngestionJobRequest; import dev.caraml.store.protobuf.jobservice.JobServiceProto.StartOfflineToOnlineIngestionJobResponse; +import dev.caraml.store.protobuf.jobservice.JobServiceProto.StartStreamIngestionJobRequest; +import dev.caraml.store.protobuf.jobservice.JobServiceProto.StartStreamIngestionJobResponse; import dev.caraml.store.sparkjob.JobNotFoundException; import dev.caraml.store.sparkjob.JobService; import io.grpc.stub.StreamObserver; @@ -53,6 +55,19 @@ public void startOfflineToOnlineIngestionJob( responseObserver.onCompleted(); } + @Override + public void startStreamIngestionJob( + StartStreamIngestionJobRequest request, + StreamObserver responseObserver) { + Job job = + jobService.createOrUpdateStreamingIngestionJob( + request.getProject(), request.getTableName()); + StartStreamIngestionJobResponse response = + StartStreamIngestionJobResponse.newBuilder().setId(job.getId()).build(); + responseObserver.onNext(response); + responseObserver.onCompleted(); + } + @Override public void scheduleOfflineToOnlineIngestionJob( ScheduleOfflineToOnlineIngestionJobRequest request, @@ -99,13 +114,14 @@ public void listJobs(ListJobsRequest request, StreamObserver r responseObserver.onCompleted(); } + @Override public void listScheduledJobs( - JobServiceProto.ListScheduledJobRequest request, - StreamObserver responseObserver) { + JobServiceProto.ListScheduledJobsRequest request, + StreamObserver responseObserver) { List jobs = jobService.listScheduledJobs(request.getProject(), request.getTableName()); - JobServiceProto.ListScheduledJobResponse response = - JobServiceProto.ListScheduledJobResponse.newBuilder().addAllJobs(jobs).build(); + JobServiceProto.ListScheduledJobsResponse response = + JobServiceProto.ListScheduledJobsResponse.newBuilder().addAllJobs(jobs).build(); responseObserver.onNext(response); responseObserver.onCompleted(); } diff --git a/caraml-store-sdk/go/protos/feast_spark/api/JobService.pb.go b/caraml-store-sdk/go/protos/feast_spark/api/JobService.pb.go index 31ece5a..f56a864 100644 --- a/caraml-store-sdk/go/protos/feast_spark/api/JobService.pb.go +++ b/caraml-store-sdk/go/protos/feast_spark/api/JobService.pb.go @@ -534,6 +534,111 @@ func (x *StartOfflineToOnlineIngestionJobResponse) GetLogUri() string { return "" } +// Ingest data from streaming source into online store +type StartStreamIngestionJobRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Feature table to ingest + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + TableName string `protobuf:"bytes,2,opt,name=table_name,json=tableName,proto3" json:"table_name,omitempty"` +} + +func (x *StartStreamIngestionJobRequest) Reset() { + *x = StartStreamIngestionJobRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_spark_api_JobService_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StartStreamIngestionJobRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartStreamIngestionJobRequest) ProtoMessage() {} + +func (x *StartStreamIngestionJobRequest) ProtoReflect() protoreflect.Message { + mi := &file_feast_spark_api_JobService_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StartStreamIngestionJobRequest.ProtoReflect.Descriptor instead. +func (*StartStreamIngestionJobRequest) Descriptor() ([]byte, []int) { + return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{4} +} + +func (x *StartStreamIngestionJobRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *StartStreamIngestionJobRequest) GetTableName() string { + if x != nil { + return x.TableName + } + return "" +} + +type StartStreamIngestionJobResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Job ID assigned by Feast + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *StartStreamIngestionJobResponse) Reset() { + *x = StartStreamIngestionJobResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_spark_api_JobService_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StartStreamIngestionJobResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartStreamIngestionJobResponse) ProtoMessage() {} + +func (x *StartStreamIngestionJobResponse) ProtoReflect() protoreflect.Message { + mi := &file_feast_spark_api_JobService_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StartStreamIngestionJobResponse.ProtoReflect.Descriptor instead. +func (*StartStreamIngestionJobResponse) Descriptor() ([]byte, []int) { + return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{5} +} + +func (x *StartStreamIngestionJobResponse) GetId() string { + if x != nil { + return x.Id + } + return "" +} + type ScheduleOfflineToOnlineIngestionJobRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -551,7 +656,7 @@ type ScheduleOfflineToOnlineIngestionJobRequest struct { func (x *ScheduleOfflineToOnlineIngestionJobRequest) Reset() { *x = ScheduleOfflineToOnlineIngestionJobRequest{} if protoimpl.UnsafeEnabled { - mi := &file_feast_spark_api_JobService_proto_msgTypes[4] + mi := &file_feast_spark_api_JobService_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -564,7 +669,7 @@ func (x *ScheduleOfflineToOnlineIngestionJobRequest) String() string { func (*ScheduleOfflineToOnlineIngestionJobRequest) ProtoMessage() {} func (x *ScheduleOfflineToOnlineIngestionJobRequest) ProtoReflect() protoreflect.Message { - mi := &file_feast_spark_api_JobService_proto_msgTypes[4] + mi := &file_feast_spark_api_JobService_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -577,7 +682,7 @@ func (x *ScheduleOfflineToOnlineIngestionJobRequest) ProtoReflect() protoreflect // Deprecated: Use ScheduleOfflineToOnlineIngestionJobRequest.ProtoReflect.Descriptor instead. func (*ScheduleOfflineToOnlineIngestionJobRequest) Descriptor() ([]byte, []int) { - return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{4} + return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{6} } func (x *ScheduleOfflineToOnlineIngestionJobRequest) GetProject() string { @@ -617,7 +722,7 @@ type ScheduleOfflineToOnlineIngestionJobResponse struct { func (x *ScheduleOfflineToOnlineIngestionJobResponse) Reset() { *x = ScheduleOfflineToOnlineIngestionJobResponse{} if protoimpl.UnsafeEnabled { - mi := &file_feast_spark_api_JobService_proto_msgTypes[5] + mi := &file_feast_spark_api_JobService_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -630,7 +735,7 @@ func (x *ScheduleOfflineToOnlineIngestionJobResponse) String() string { func (*ScheduleOfflineToOnlineIngestionJobResponse) ProtoMessage() {} func (x *ScheduleOfflineToOnlineIngestionJobResponse) ProtoReflect() protoreflect.Message { - mi := &file_feast_spark_api_JobService_proto_msgTypes[5] + mi := &file_feast_spark_api_JobService_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -643,7 +748,7 @@ func (x *ScheduleOfflineToOnlineIngestionJobResponse) ProtoReflect() protoreflec // Deprecated: Use ScheduleOfflineToOnlineIngestionJobResponse.ProtoReflect.Descriptor instead. func (*ScheduleOfflineToOnlineIngestionJobResponse) Descriptor() ([]byte, []int) { - return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{5} + return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{7} } type UnscheduleOfflineToOnlineIngestionJobRequest struct { @@ -658,7 +763,7 @@ type UnscheduleOfflineToOnlineIngestionJobRequest struct { func (x *UnscheduleOfflineToOnlineIngestionJobRequest) Reset() { *x = UnscheduleOfflineToOnlineIngestionJobRequest{} if protoimpl.UnsafeEnabled { - mi := &file_feast_spark_api_JobService_proto_msgTypes[6] + mi := &file_feast_spark_api_JobService_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -671,7 +776,7 @@ func (x *UnscheduleOfflineToOnlineIngestionJobRequest) String() string { func (*UnscheduleOfflineToOnlineIngestionJobRequest) ProtoMessage() {} func (x *UnscheduleOfflineToOnlineIngestionJobRequest) ProtoReflect() protoreflect.Message { - mi := &file_feast_spark_api_JobService_proto_msgTypes[6] + mi := &file_feast_spark_api_JobService_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -684,7 +789,7 @@ func (x *UnscheduleOfflineToOnlineIngestionJobRequest) ProtoReflect() protorefle // Deprecated: Use UnscheduleOfflineToOnlineIngestionJobRequest.ProtoReflect.Descriptor instead. func (*UnscheduleOfflineToOnlineIngestionJobRequest) Descriptor() ([]byte, []int) { - return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{6} + return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{8} } func (x *UnscheduleOfflineToOnlineIngestionJobRequest) GetProject() string { @@ -710,7 +815,7 @@ type UnscheduleOfflineToOnlineIngestionJobResponse struct { func (x *UnscheduleOfflineToOnlineIngestionJobResponse) Reset() { *x = UnscheduleOfflineToOnlineIngestionJobResponse{} if protoimpl.UnsafeEnabled { - mi := &file_feast_spark_api_JobService_proto_msgTypes[7] + mi := &file_feast_spark_api_JobService_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -723,7 +828,7 @@ func (x *UnscheduleOfflineToOnlineIngestionJobResponse) String() string { func (*UnscheduleOfflineToOnlineIngestionJobResponse) ProtoMessage() {} func (x *UnscheduleOfflineToOnlineIngestionJobResponse) ProtoReflect() protoreflect.Message { - mi := &file_feast_spark_api_JobService_proto_msgTypes[7] + mi := &file_feast_spark_api_JobService_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -736,7 +841,7 @@ func (x *UnscheduleOfflineToOnlineIngestionJobResponse) ProtoReflect() protorefl // Deprecated: Use UnscheduleOfflineToOnlineIngestionJobResponse.ProtoReflect.Descriptor instead. func (*UnscheduleOfflineToOnlineIngestionJobResponse) Descriptor() ([]byte, []int) { - return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{7} + return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{9} } type GetHistoricalFeaturesRequest struct { @@ -766,7 +871,7 @@ type GetHistoricalFeaturesRequest struct { func (x *GetHistoricalFeaturesRequest) Reset() { *x = GetHistoricalFeaturesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_feast_spark_api_JobService_proto_msgTypes[8] + mi := &file_feast_spark_api_JobService_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -779,7 +884,7 @@ func (x *GetHistoricalFeaturesRequest) String() string { func (*GetHistoricalFeaturesRequest) ProtoMessage() {} func (x *GetHistoricalFeaturesRequest) ProtoReflect() protoreflect.Message { - mi := &file_feast_spark_api_JobService_proto_msgTypes[8] + mi := &file_feast_spark_api_JobService_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -792,7 +897,7 @@ func (x *GetHistoricalFeaturesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetHistoricalFeaturesRequest.ProtoReflect.Descriptor instead. func (*GetHistoricalFeaturesRequest) Descriptor() ([]byte, []int) { - return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{8} + return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{10} } func (x *GetHistoricalFeaturesRequest) GetFeatureRefs() []string { @@ -848,7 +953,7 @@ type GetHistoricalFeaturesResponse struct { func (x *GetHistoricalFeaturesResponse) Reset() { *x = GetHistoricalFeaturesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_feast_spark_api_JobService_proto_msgTypes[9] + mi := &file_feast_spark_api_JobService_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -861,7 +966,7 @@ func (x *GetHistoricalFeaturesResponse) String() string { func (*GetHistoricalFeaturesResponse) ProtoMessage() {} func (x *GetHistoricalFeaturesResponse) ProtoReflect() protoreflect.Message { - mi := &file_feast_spark_api_JobService_proto_msgTypes[9] + mi := &file_feast_spark_api_JobService_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -874,7 +979,7 @@ func (x *GetHistoricalFeaturesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetHistoricalFeaturesResponse.ProtoReflect.Descriptor instead. func (*GetHistoricalFeaturesResponse) Descriptor() ([]byte, []int) { - return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{9} + return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{11} } func (x *GetHistoricalFeaturesResponse) GetId() string { @@ -918,7 +1023,7 @@ type ListJobsRequest struct { func (x *ListJobsRequest) Reset() { *x = ListJobsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_feast_spark_api_JobService_proto_msgTypes[10] + mi := &file_feast_spark_api_JobService_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -931,7 +1036,7 @@ func (x *ListJobsRequest) String() string { func (*ListJobsRequest) ProtoMessage() {} func (x *ListJobsRequest) ProtoReflect() protoreflect.Message { - mi := &file_feast_spark_api_JobService_proto_msgTypes[10] + mi := &file_feast_spark_api_JobService_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -944,7 +1049,7 @@ func (x *ListJobsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListJobsRequest.ProtoReflect.Descriptor instead. func (*ListJobsRequest) Descriptor() ([]byte, []int) { - return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{10} + return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{12} } func (x *ListJobsRequest) GetIncludeTerminated() bool { @@ -968,7 +1073,7 @@ func (x *ListJobsRequest) GetProject() string { return "" } -type ListScheduledJobRequest struct { +type ListScheduledJobsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -977,23 +1082,23 @@ type ListScheduledJobRequest struct { TableName string `protobuf:"bytes,2,opt,name=table_name,json=tableName,proto3" json:"table_name,omitempty"` } -func (x *ListScheduledJobRequest) Reset() { - *x = ListScheduledJobRequest{} +func (x *ListScheduledJobsRequest) Reset() { + *x = ListScheduledJobsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_feast_spark_api_JobService_proto_msgTypes[11] + mi := &file_feast_spark_api_JobService_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ListScheduledJobRequest) String() string { +func (x *ListScheduledJobsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListScheduledJobRequest) ProtoMessage() {} +func (*ListScheduledJobsRequest) ProtoMessage() {} -func (x *ListScheduledJobRequest) ProtoReflect() protoreflect.Message { - mi := &file_feast_spark_api_JobService_proto_msgTypes[11] +func (x *ListScheduledJobsRequest) ProtoReflect() protoreflect.Message { + mi := &file_feast_spark_api_JobService_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1004,19 +1109,19 @@ func (x *ListScheduledJobRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListScheduledJobRequest.ProtoReflect.Descriptor instead. -func (*ListScheduledJobRequest) Descriptor() ([]byte, []int) { - return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{11} +// Deprecated: Use ListScheduledJobsRequest.ProtoReflect.Descriptor instead. +func (*ListScheduledJobsRequest) Descriptor() ([]byte, []int) { + return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{13} } -func (x *ListScheduledJobRequest) GetProject() string { +func (x *ListScheduledJobsRequest) GetProject() string { if x != nil { return x.Project } return "" } -func (x *ListScheduledJobRequest) GetTableName() string { +func (x *ListScheduledJobsRequest) GetTableName() string { if x != nil { return x.TableName } @@ -1034,7 +1139,7 @@ type ListJobsResponse struct { func (x *ListJobsResponse) Reset() { *x = ListJobsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_feast_spark_api_JobService_proto_msgTypes[12] + mi := &file_feast_spark_api_JobService_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1047,7 +1152,7 @@ func (x *ListJobsResponse) String() string { func (*ListJobsResponse) ProtoMessage() {} func (x *ListJobsResponse) ProtoReflect() protoreflect.Message { - mi := &file_feast_spark_api_JobService_proto_msgTypes[12] + mi := &file_feast_spark_api_JobService_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1060,7 +1165,7 @@ func (x *ListJobsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListJobsResponse.ProtoReflect.Descriptor instead. func (*ListJobsResponse) Descriptor() ([]byte, []int) { - return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{12} + return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{14} } func (x *ListJobsResponse) GetJobs() []*Job { @@ -1070,7 +1175,7 @@ func (x *ListJobsResponse) GetJobs() []*Job { return nil } -type ListScheduledJobResponse struct { +type ListScheduledJobsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -1078,23 +1183,23 @@ type ListScheduledJobResponse struct { Jobs []*ScheduledJob `protobuf:"bytes,1,rep,name=jobs,proto3" json:"jobs,omitempty"` } -func (x *ListScheduledJobResponse) Reset() { - *x = ListScheduledJobResponse{} +func (x *ListScheduledJobsResponse) Reset() { + *x = ListScheduledJobsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_feast_spark_api_JobService_proto_msgTypes[13] + mi := &file_feast_spark_api_JobService_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ListScheduledJobResponse) String() string { +func (x *ListScheduledJobsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListScheduledJobResponse) ProtoMessage() {} +func (*ListScheduledJobsResponse) ProtoMessage() {} -func (x *ListScheduledJobResponse) ProtoReflect() protoreflect.Message { - mi := &file_feast_spark_api_JobService_proto_msgTypes[13] +func (x *ListScheduledJobsResponse) ProtoReflect() protoreflect.Message { + mi := &file_feast_spark_api_JobService_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1105,12 +1210,12 @@ func (x *ListScheduledJobResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListScheduledJobResponse.ProtoReflect.Descriptor instead. -func (*ListScheduledJobResponse) Descriptor() ([]byte, []int) { - return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{13} +// Deprecated: Use ListScheduledJobsResponse.ProtoReflect.Descriptor instead. +func (*ListScheduledJobsResponse) Descriptor() ([]byte, []int) { + return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{15} } -func (x *ListScheduledJobResponse) GetJobs() []*ScheduledJob { +func (x *ListScheduledJobsResponse) GetJobs() []*ScheduledJob { if x != nil { return x.Jobs } @@ -1128,7 +1233,7 @@ type GetJobRequest struct { func (x *GetJobRequest) Reset() { *x = GetJobRequest{} if protoimpl.UnsafeEnabled { - mi := &file_feast_spark_api_JobService_proto_msgTypes[14] + mi := &file_feast_spark_api_JobService_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1141,7 +1246,7 @@ func (x *GetJobRequest) String() string { func (*GetJobRequest) ProtoMessage() {} func (x *GetJobRequest) ProtoReflect() protoreflect.Message { - mi := &file_feast_spark_api_JobService_proto_msgTypes[14] + mi := &file_feast_spark_api_JobService_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1154,7 +1259,7 @@ func (x *GetJobRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetJobRequest.ProtoReflect.Descriptor instead. func (*GetJobRequest) Descriptor() ([]byte, []int) { - return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{14} + return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{16} } func (x *GetJobRequest) GetJobId() string { @@ -1175,7 +1280,7 @@ type GetJobResponse struct { func (x *GetJobResponse) Reset() { *x = GetJobResponse{} if protoimpl.UnsafeEnabled { - mi := &file_feast_spark_api_JobService_proto_msgTypes[15] + mi := &file_feast_spark_api_JobService_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1188,7 +1293,7 @@ func (x *GetJobResponse) String() string { func (*GetJobResponse) ProtoMessage() {} func (x *GetJobResponse) ProtoReflect() protoreflect.Message { - mi := &file_feast_spark_api_JobService_proto_msgTypes[15] + mi := &file_feast_spark_api_JobService_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1201,7 +1306,7 @@ func (x *GetJobResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetJobResponse.ProtoReflect.Descriptor instead. func (*GetJobResponse) Descriptor() ([]byte, []int) { - return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{15} + return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{17} } func (x *GetJobResponse) GetJob() *Job { @@ -1222,7 +1327,7 @@ type CancelJobRequest struct { func (x *CancelJobRequest) Reset() { *x = CancelJobRequest{} if protoimpl.UnsafeEnabled { - mi := &file_feast_spark_api_JobService_proto_msgTypes[16] + mi := &file_feast_spark_api_JobService_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1235,7 +1340,7 @@ func (x *CancelJobRequest) String() string { func (*CancelJobRequest) ProtoMessage() {} func (x *CancelJobRequest) ProtoReflect() protoreflect.Message { - mi := &file_feast_spark_api_JobService_proto_msgTypes[16] + mi := &file_feast_spark_api_JobService_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1248,7 +1353,7 @@ func (x *CancelJobRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CancelJobRequest.ProtoReflect.Descriptor instead. func (*CancelJobRequest) Descriptor() ([]byte, []int) { - return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{16} + return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{18} } func (x *CancelJobRequest) GetJobId() string { @@ -1267,7 +1372,7 @@ type CancelJobResponse struct { func (x *CancelJobResponse) Reset() { *x = CancelJobResponse{} if protoimpl.UnsafeEnabled { - mi := &file_feast_spark_api_JobService_proto_msgTypes[17] + mi := &file_feast_spark_api_JobService_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1280,7 +1385,7 @@ func (x *CancelJobResponse) String() string { func (*CancelJobResponse) ProtoMessage() {} func (x *CancelJobResponse) ProtoReflect() protoreflect.Message { - mi := &file_feast_spark_api_JobService_proto_msgTypes[17] + mi := &file_feast_spark_api_JobService_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1293,7 +1398,7 @@ func (x *CancelJobResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CancelJobResponse.ProtoReflect.Descriptor instead. func (*CancelJobResponse) Descriptor() ([]byte, []int) { - return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{17} + return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{19} } type GetHealthMetricsRequest struct { @@ -1308,7 +1413,7 @@ type GetHealthMetricsRequest struct { func (x *GetHealthMetricsRequest) Reset() { *x = GetHealthMetricsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_feast_spark_api_JobService_proto_msgTypes[18] + mi := &file_feast_spark_api_JobService_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1321,7 +1426,7 @@ func (x *GetHealthMetricsRequest) String() string { func (*GetHealthMetricsRequest) ProtoMessage() {} func (x *GetHealthMetricsRequest) ProtoReflect() protoreflect.Message { - mi := &file_feast_spark_api_JobService_proto_msgTypes[18] + mi := &file_feast_spark_api_JobService_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1334,7 +1439,7 @@ func (x *GetHealthMetricsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetHealthMetricsRequest.ProtoReflect.Descriptor instead. func (*GetHealthMetricsRequest) Descriptor() ([]byte, []int) { - return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{18} + return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{20} } func (x *GetHealthMetricsRequest) GetProject() string { @@ -1363,7 +1468,7 @@ type GetHealthMetricsResponse struct { func (x *GetHealthMetricsResponse) Reset() { *x = GetHealthMetricsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_feast_spark_api_JobService_proto_msgTypes[19] + mi := &file_feast_spark_api_JobService_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1376,7 +1481,7 @@ func (x *GetHealthMetricsResponse) String() string { func (*GetHealthMetricsResponse) ProtoMessage() {} func (x *GetHealthMetricsResponse) ProtoReflect() protoreflect.Message { - mi := &file_feast_spark_api_JobService_proto_msgTypes[19] + mi := &file_feast_spark_api_JobService_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1389,7 +1494,7 @@ func (x *GetHealthMetricsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetHealthMetricsResponse.ProtoReflect.Descriptor instead. func (*GetHealthMetricsResponse) Descriptor() ([]byte, []int) { - return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{19} + return file_feast_spark_api_JobService_proto_rawDescGZIP(), []int{21} } func (x *GetHealthMetricsResponse) GetPassed() []string { @@ -1417,7 +1522,7 @@ type Job_RetrievalJobMeta struct { func (x *Job_RetrievalJobMeta) Reset() { *x = Job_RetrievalJobMeta{} if protoimpl.UnsafeEnabled { - mi := &file_feast_spark_api_JobService_proto_msgTypes[20] + mi := &file_feast_spark_api_JobService_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1430,7 +1535,7 @@ func (x *Job_RetrievalJobMeta) String() string { func (*Job_RetrievalJobMeta) ProtoMessage() {} func (x *Job_RetrievalJobMeta) ProtoReflect() protoreflect.Message { - mi := &file_feast_spark_api_JobService_proto_msgTypes[20] + mi := &file_feast_spark_api_JobService_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1464,7 +1569,7 @@ type Job_OfflineToOnlineMeta struct { func (x *Job_OfflineToOnlineMeta) Reset() { *x = Job_OfflineToOnlineMeta{} if protoimpl.UnsafeEnabled { - mi := &file_feast_spark_api_JobService_proto_msgTypes[21] + mi := &file_feast_spark_api_JobService_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1477,7 +1582,7 @@ func (x *Job_OfflineToOnlineMeta) String() string { func (*Job_OfflineToOnlineMeta) ProtoMessage() {} func (x *Job_OfflineToOnlineMeta) ProtoReflect() protoreflect.Message { - mi := &file_feast_spark_api_JobService_proto_msgTypes[21] + mi := &file_feast_spark_api_JobService_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1511,7 +1616,7 @@ type Job_StreamToOnlineMeta struct { func (x *Job_StreamToOnlineMeta) Reset() { *x = Job_StreamToOnlineMeta{} if protoimpl.UnsafeEnabled { - mi := &file_feast_spark_api_JobService_proto_msgTypes[22] + mi := &file_feast_spark_api_JobService_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1524,7 +1629,7 @@ func (x *Job_StreamToOnlineMeta) String() string { func (*Job_StreamToOnlineMeta) ProtoMessage() {} func (x *Job_StreamToOnlineMeta) ProtoReflect() protoreflect.Message { - mi := &file_feast_spark_api_JobService_proto_msgTypes[22] + mi := &file_feast_spark_api_JobService_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1638,75 +1743,84 @@ var file_feast_spark_api_JobService_proto_rawDesc = []byte{ 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6c, 0x6f, 0x67, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x6f, 0x67, 0x55, 0x72, 0x69, 0x22, - 0xb9, 0x01, 0x0a, 0x2a, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x66, 0x66, 0x6c, - 0x69, 0x6e, 0x65, 0x54, 0x6f, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x67, 0x65, 0x73, - 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, - 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x69, 0x6e, 0x67, 0x65, 0x73, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x11, 0x69, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x6f, 0x6e, 0x5f, 0x73, - 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, - 0x72, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x22, 0x2d, 0x0a, 0x2b, 0x53, - 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x6f, - 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x4a, - 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x67, 0x0a, 0x2c, 0x55, 0x6e, - 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x54, - 0x6f, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, - 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x22, 0x2f, 0x0a, 0x2d, 0x55, 0x6e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, - 0x65, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x6f, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, - 0x49, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xe6, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, - 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x5f, 0x72, 0x65, 0x66, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x66, 0x73, 0x12, 0x3b, 0x0a, 0x0d, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x44, 0x61, 0x74, - 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, - 0x27, 0x0a, 0x0f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0xb2, 0x01, - 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x46, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x26, 0x0a, 0x0f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x75, - 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x46, 0x69, 0x6c, 0x65, 0x55, 0x72, 0x69, 0x12, 0x40, 0x0a, 0x0e, 0x6a, 0x6f, 0x62, 0x5f, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x6a, 0x6f, 0x62, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6c, 0x6f, 0x67, - 0x5f, 0x75, 0x72, 0x69, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x6f, 0x67, 0x55, - 0x72, 0x69, 0x22, 0x79, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x5f, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x61, 0x74, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x52, 0x0a, - 0x17, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x4a, 0x6f, + 0x59, 0x0a, 0x1e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x6e, + 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x31, 0x0a, 0x1f, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, + 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xb9, 0x01, + 0x0a, 0x2a, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, + 0x65, 0x54, 0x6f, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, + 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x69, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x11, 0x69, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x6f, 0x6e, 0x5f, 0x73, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x6f, + 0x6e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x22, 0x2d, 0x0a, 0x2b, 0x53, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x6f, 0x4f, 0x6e, + 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x67, 0x0a, 0x2c, 0x55, 0x6e, 0x73, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x6f, 0x4f, + 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x22, 0x3c, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, - 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x22, - 0x4d, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, - 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x6a, + 0x65, 0x22, 0x2f, 0x0a, 0x2d, 0x55, 0x6e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4f, + 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x6f, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, + 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0xe6, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x69, 0x63, 0x61, 0x6c, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x72, + 0x65, 0x66, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x52, 0x65, 0x66, 0x73, 0x12, 0x3b, 0x0a, 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x53, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x27, 0x0a, + 0x0f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0xb2, 0x01, 0x0a, 0x1d, + 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x46, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x26, 0x0a, + 0x0f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x75, 0x72, 0x69, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x69, + 0x6c, 0x65, 0x55, 0x72, 0x69, 0x12, 0x40, 0x0a, 0x0e, 0x6a, 0x6f, 0x62, 0x5f, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x6a, 0x6f, 0x62, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6c, 0x6f, 0x67, 0x5f, 0x75, + 0x72, 0x69, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x6f, 0x67, 0x55, 0x72, 0x69, + 0x22, 0x79, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, + 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x53, 0x0a, 0x18, 0x4c, + 0x69, 0x73, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x4a, 0x6f, 0x62, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x22, 0x3c, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x22, 0x4e, + 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x4a, + 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x4a, 0x6f, 0x62, 0x52, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x22, 0x26, @@ -1744,7 +1858,7 @@ var file_feast_spark_api_JobService_proto_rawDesc = []byte{ 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x4e, 0x45, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, - 0x4f, 0x52, 0x10, 0x04, 0x32, 0xac, 0x08, 0x0a, 0x0a, 0x4a, 0x6f, 0x62, 0x53, 0x65, 0x72, 0x76, + 0x4f, 0x52, 0x10, 0x04, 0x32, 0xad, 0x09, 0x0a, 0x0a, 0x4a, 0x6f, 0x62, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x97, 0x01, 0x0a, 0x20, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x6f, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x12, 0x38, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, @@ -1754,73 +1868,81 @@ var file_feast_spark_api_JobService_proto_rawDesc = []byte{ 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x6f, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, - 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa0, 0x01, - 0x0a, 0x23, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, - 0x65, 0x54, 0x6f, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, - 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x12, 0x3b, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x70, - 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, - 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x6f, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x49, - 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x66, 0x66, + 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7c, 0x0a, + 0x17, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x6e, 0x67, 0x65, + 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x12, 0x2f, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, + 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x4a, + 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x66, 0x65, 0x61, 0x73, + 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, + 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa0, 0x01, 0x0a, 0x23, + 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x54, + 0x6f, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, + 0x4a, 0x6f, 0x62, 0x12, 0x3b, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, + 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x66, + 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x6f, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x67, + 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x3c, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x66, 0x66, 0x6c, 0x69, + 0x6e, 0x65, 0x54, 0x6f, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x67, 0x65, 0x73, 0x74, + 0x69, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa6, + 0x01, 0x0a, 0x25, 0x55, 0x6e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x6f, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x67, 0x65, - 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0xa6, 0x01, 0x0a, 0x25, 0x55, 0x6e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4f, - 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x6f, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, - 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x12, 0x3d, 0x2e, 0x66, 0x65, 0x61, - 0x73, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x6e, 0x73, - 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x6f, - 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x4a, - 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, 0x66, 0x65, 0x61, 0x73, - 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x6e, 0x73, 0x63, - 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x6f, 0x4f, - 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x6f, - 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x15, 0x47, 0x65, 0x74, - 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, - 0x61, 0x6c, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2e, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, - 0x6c, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x4f, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x20, 0x2e, + 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x12, 0x3d, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, + 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x6e, 0x73, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x6f, 0x4f, 0x6e, + 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x5f, + 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x6e, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x54, 0x6f, 0x4f, 0x6e, 0x6c, + 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x48, 0x69, + 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, + 0x12, 0x2d, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, + 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2e, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x46, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x4f, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x20, 0x2e, 0x66, 0x65, + 0x61, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x21, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x67, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, - 0x6c, 0x65, 0x64, 0x4a, 0x6f, 0x62, 0x12, 0x28, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x73, - 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x63, 0x68, - 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x29, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, + 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x6a, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x64, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x29, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x70, + 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x64, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2a, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, - 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x09, 0x43, - 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4a, 0x6f, 0x62, 0x12, 0x21, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, - 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, - 0x6c, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x66, 0x65, - 0x61, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x61, - 0x6e, 0x63, 0x65, 0x6c, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x49, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x12, 0x1e, 0x2e, 0x66, 0x65, 0x61, 0x73, - 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4a, - 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x66, 0x65, 0x61, 0x73, - 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4a, - 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x10, 0x47, 0x65, - 0x74, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x28, - 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, - 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x65, - 0x61, 0x6c, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x42, 0x86, 0x01, 0x0a, 0x24, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x61, 0x72, 0x61, - 0x6d, 0x6c, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x6a, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x0f, 0x4a, 0x6f, - 0x62, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x4d, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x61, 0x72, 0x61, 0x6d, 0x6c, - 0x2d, 0x64, 0x65, 0x76, 0x2f, 0x63, 0x61, 0x72, 0x61, 0x6d, 0x6c, 0x2d, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x2f, 0x63, 0x61, 0x72, 0x61, 0x6d, 0x6c, 0x2d, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2d, 0x73, - 0x64, 0x6b, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x66, 0x65, 0x61, - 0x73, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x09, + 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4a, 0x6f, 0x62, 0x12, 0x21, 0x2e, 0x66, 0x65, 0x61, 0x73, + 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x61, 0x6e, 0x63, + 0x65, 0x6c, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x66, + 0x65, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, + 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x49, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x12, 0x1e, 0x2e, 0x66, 0x65, 0x61, + 0x73, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, + 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x66, 0x65, 0x61, + 0x73, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, + 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x10, 0x47, + 0x65, 0x74, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, + 0x28, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x66, 0x65, 0x61, 0x73, + 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x48, + 0x65, 0x61, 0x6c, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x86, 0x01, 0x0a, 0x24, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x61, 0x72, + 0x61, 0x6d, 0x6c, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x6a, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x0f, 0x4a, + 0x6f, 0x62, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x4d, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x61, 0x72, 0x61, 0x6d, + 0x6c, 0x2d, 0x64, 0x65, 0x76, 0x2f, 0x63, 0x61, 0x72, 0x61, 0x6d, 0x6c, 0x2d, 0x73, 0x74, 0x6f, + 0x72, 0x65, 0x2f, 0x63, 0x61, 0x72, 0x61, 0x6d, 0x6c, 0x2d, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2d, + 0x73, 0x64, 0x6b, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x66, 0x65, + 0x61, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1836,7 +1958,7 @@ func file_feast_spark_api_JobService_proto_rawDescGZIP() []byte { } var file_feast_spark_api_JobService_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_feast_spark_api_JobService_proto_msgTypes = make([]protoimpl.MessageInfo, 23) +var file_feast_spark_api_JobService_proto_msgTypes = make([]protoimpl.MessageInfo, 25) var file_feast_spark_api_JobService_proto_goTypes = []interface{}{ (JobType)(0), // 0: feast_spark.api.JobType (JobStatus)(0), // 1: feast_spark.api.JobStatus @@ -1844,63 +1966,67 @@ var file_feast_spark_api_JobService_proto_goTypes = []interface{}{ (*Job)(nil), // 3: feast_spark.api.Job (*StartOfflineToOnlineIngestionJobRequest)(nil), // 4: feast_spark.api.StartOfflineToOnlineIngestionJobRequest (*StartOfflineToOnlineIngestionJobResponse)(nil), // 5: feast_spark.api.StartOfflineToOnlineIngestionJobResponse - (*ScheduleOfflineToOnlineIngestionJobRequest)(nil), // 6: feast_spark.api.ScheduleOfflineToOnlineIngestionJobRequest - (*ScheduleOfflineToOnlineIngestionJobResponse)(nil), // 7: feast_spark.api.ScheduleOfflineToOnlineIngestionJobResponse - (*UnscheduleOfflineToOnlineIngestionJobRequest)(nil), // 8: feast_spark.api.UnscheduleOfflineToOnlineIngestionJobRequest - (*UnscheduleOfflineToOnlineIngestionJobResponse)(nil), // 9: feast_spark.api.UnscheduleOfflineToOnlineIngestionJobResponse - (*GetHistoricalFeaturesRequest)(nil), // 10: feast_spark.api.GetHistoricalFeaturesRequest - (*GetHistoricalFeaturesResponse)(nil), // 11: feast_spark.api.GetHistoricalFeaturesResponse - (*ListJobsRequest)(nil), // 12: feast_spark.api.ListJobsRequest - (*ListScheduledJobRequest)(nil), // 13: feast_spark.api.ListScheduledJobRequest - (*ListJobsResponse)(nil), // 14: feast_spark.api.ListJobsResponse - (*ListScheduledJobResponse)(nil), // 15: feast_spark.api.ListScheduledJobResponse - (*GetJobRequest)(nil), // 16: feast_spark.api.GetJobRequest - (*GetJobResponse)(nil), // 17: feast_spark.api.GetJobResponse - (*CancelJobRequest)(nil), // 18: feast_spark.api.CancelJobRequest - (*CancelJobResponse)(nil), // 19: feast_spark.api.CancelJobResponse - (*GetHealthMetricsRequest)(nil), // 20: feast_spark.api.GetHealthMetricsRequest - (*GetHealthMetricsResponse)(nil), // 21: feast_spark.api.GetHealthMetricsResponse - (*Job_RetrievalJobMeta)(nil), // 22: feast_spark.api.Job.RetrievalJobMeta - (*Job_OfflineToOnlineMeta)(nil), // 23: feast_spark.api.Job.OfflineToOnlineMeta - (*Job_StreamToOnlineMeta)(nil), // 24: feast_spark.api.Job.StreamToOnlineMeta - (*timestamppb.Timestamp)(nil), // 25: google.protobuf.Timestamp - (*core.DataSource)(nil), // 26: feast.core.DataSource + (*StartStreamIngestionJobRequest)(nil), // 6: feast_spark.api.StartStreamIngestionJobRequest + (*StartStreamIngestionJobResponse)(nil), // 7: feast_spark.api.StartStreamIngestionJobResponse + (*ScheduleOfflineToOnlineIngestionJobRequest)(nil), // 8: feast_spark.api.ScheduleOfflineToOnlineIngestionJobRequest + (*ScheduleOfflineToOnlineIngestionJobResponse)(nil), // 9: feast_spark.api.ScheduleOfflineToOnlineIngestionJobResponse + (*UnscheduleOfflineToOnlineIngestionJobRequest)(nil), // 10: feast_spark.api.UnscheduleOfflineToOnlineIngestionJobRequest + (*UnscheduleOfflineToOnlineIngestionJobResponse)(nil), // 11: feast_spark.api.UnscheduleOfflineToOnlineIngestionJobResponse + (*GetHistoricalFeaturesRequest)(nil), // 12: feast_spark.api.GetHistoricalFeaturesRequest + (*GetHistoricalFeaturesResponse)(nil), // 13: feast_spark.api.GetHistoricalFeaturesResponse + (*ListJobsRequest)(nil), // 14: feast_spark.api.ListJobsRequest + (*ListScheduledJobsRequest)(nil), // 15: feast_spark.api.ListScheduledJobsRequest + (*ListJobsResponse)(nil), // 16: feast_spark.api.ListJobsResponse + (*ListScheduledJobsResponse)(nil), // 17: feast_spark.api.ListScheduledJobsResponse + (*GetJobRequest)(nil), // 18: feast_spark.api.GetJobRequest + (*GetJobResponse)(nil), // 19: feast_spark.api.GetJobResponse + (*CancelJobRequest)(nil), // 20: feast_spark.api.CancelJobRequest + (*CancelJobResponse)(nil), // 21: feast_spark.api.CancelJobResponse + (*GetHealthMetricsRequest)(nil), // 22: feast_spark.api.GetHealthMetricsRequest + (*GetHealthMetricsResponse)(nil), // 23: feast_spark.api.GetHealthMetricsResponse + (*Job_RetrievalJobMeta)(nil), // 24: feast_spark.api.Job.RetrievalJobMeta + (*Job_OfflineToOnlineMeta)(nil), // 25: feast_spark.api.Job.OfflineToOnlineMeta + (*Job_StreamToOnlineMeta)(nil), // 26: feast_spark.api.Job.StreamToOnlineMeta + (*timestamppb.Timestamp)(nil), // 27: google.protobuf.Timestamp + (*core.DataSource)(nil), // 28: feast.core.DataSource } var file_feast_spark_api_JobService_proto_depIdxs = []int32{ 0, // 0: feast_spark.api.Job.type:type_name -> feast_spark.api.JobType 1, // 1: feast_spark.api.Job.status:type_name -> feast_spark.api.JobStatus - 25, // 2: feast_spark.api.Job.start_time:type_name -> google.protobuf.Timestamp - 22, // 3: feast_spark.api.Job.retrieval:type_name -> feast_spark.api.Job.RetrievalJobMeta - 23, // 4: feast_spark.api.Job.batch_ingestion:type_name -> feast_spark.api.Job.OfflineToOnlineMeta - 24, // 5: feast_spark.api.Job.stream_ingestion:type_name -> feast_spark.api.Job.StreamToOnlineMeta - 25, // 6: feast_spark.api.StartOfflineToOnlineIngestionJobRequest.start_date:type_name -> google.protobuf.Timestamp - 25, // 7: feast_spark.api.StartOfflineToOnlineIngestionJobRequest.end_date:type_name -> google.protobuf.Timestamp - 25, // 8: feast_spark.api.StartOfflineToOnlineIngestionJobResponse.job_start_time:type_name -> google.protobuf.Timestamp - 26, // 9: feast_spark.api.GetHistoricalFeaturesRequest.entity_source:type_name -> feast.core.DataSource - 25, // 10: feast_spark.api.GetHistoricalFeaturesResponse.job_start_time:type_name -> google.protobuf.Timestamp + 27, // 2: feast_spark.api.Job.start_time:type_name -> google.protobuf.Timestamp + 24, // 3: feast_spark.api.Job.retrieval:type_name -> feast_spark.api.Job.RetrievalJobMeta + 25, // 4: feast_spark.api.Job.batch_ingestion:type_name -> feast_spark.api.Job.OfflineToOnlineMeta + 26, // 5: feast_spark.api.Job.stream_ingestion:type_name -> feast_spark.api.Job.StreamToOnlineMeta + 27, // 6: feast_spark.api.StartOfflineToOnlineIngestionJobRequest.start_date:type_name -> google.protobuf.Timestamp + 27, // 7: feast_spark.api.StartOfflineToOnlineIngestionJobRequest.end_date:type_name -> google.protobuf.Timestamp + 27, // 8: feast_spark.api.StartOfflineToOnlineIngestionJobResponse.job_start_time:type_name -> google.protobuf.Timestamp + 28, // 9: feast_spark.api.GetHistoricalFeaturesRequest.entity_source:type_name -> feast.core.DataSource + 27, // 10: feast_spark.api.GetHistoricalFeaturesResponse.job_start_time:type_name -> google.protobuf.Timestamp 3, // 11: feast_spark.api.ListJobsResponse.jobs:type_name -> feast_spark.api.Job - 2, // 12: feast_spark.api.ListScheduledJobResponse.jobs:type_name -> feast_spark.api.ScheduledJob + 2, // 12: feast_spark.api.ListScheduledJobsResponse.jobs:type_name -> feast_spark.api.ScheduledJob 3, // 13: feast_spark.api.GetJobResponse.job:type_name -> feast_spark.api.Job 4, // 14: feast_spark.api.JobService.StartOfflineToOnlineIngestionJob:input_type -> feast_spark.api.StartOfflineToOnlineIngestionJobRequest - 6, // 15: feast_spark.api.JobService.ScheduleOfflineToOnlineIngestionJob:input_type -> feast_spark.api.ScheduleOfflineToOnlineIngestionJobRequest - 8, // 16: feast_spark.api.JobService.UnscheduleOfflineToOnlineIngestionJob:input_type -> feast_spark.api.UnscheduleOfflineToOnlineIngestionJobRequest - 10, // 17: feast_spark.api.JobService.GetHistoricalFeatures:input_type -> feast_spark.api.GetHistoricalFeaturesRequest - 12, // 18: feast_spark.api.JobService.ListJobs:input_type -> feast_spark.api.ListJobsRequest - 13, // 19: feast_spark.api.JobService.ListScheduledJob:input_type -> feast_spark.api.ListScheduledJobRequest - 18, // 20: feast_spark.api.JobService.CancelJob:input_type -> feast_spark.api.CancelJobRequest - 16, // 21: feast_spark.api.JobService.GetJob:input_type -> feast_spark.api.GetJobRequest - 20, // 22: feast_spark.api.JobService.GetHealthMetrics:input_type -> feast_spark.api.GetHealthMetricsRequest - 5, // 23: feast_spark.api.JobService.StartOfflineToOnlineIngestionJob:output_type -> feast_spark.api.StartOfflineToOnlineIngestionJobResponse - 7, // 24: feast_spark.api.JobService.ScheduleOfflineToOnlineIngestionJob:output_type -> feast_spark.api.ScheduleOfflineToOnlineIngestionJobResponse - 9, // 25: feast_spark.api.JobService.UnscheduleOfflineToOnlineIngestionJob:output_type -> feast_spark.api.UnscheduleOfflineToOnlineIngestionJobResponse - 11, // 26: feast_spark.api.JobService.GetHistoricalFeatures:output_type -> feast_spark.api.GetHistoricalFeaturesResponse - 14, // 27: feast_spark.api.JobService.ListJobs:output_type -> feast_spark.api.ListJobsResponse - 15, // 28: feast_spark.api.JobService.ListScheduledJob:output_type -> feast_spark.api.ListScheduledJobResponse - 19, // 29: feast_spark.api.JobService.CancelJob:output_type -> feast_spark.api.CancelJobResponse - 17, // 30: feast_spark.api.JobService.GetJob:output_type -> feast_spark.api.GetJobResponse - 21, // 31: feast_spark.api.JobService.GetHealthMetrics:output_type -> feast_spark.api.GetHealthMetricsResponse - 23, // [23:32] is the sub-list for method output_type - 14, // [14:23] is the sub-list for method input_type + 6, // 15: feast_spark.api.JobService.StartStreamIngestionJob:input_type -> feast_spark.api.StartStreamIngestionJobRequest + 8, // 16: feast_spark.api.JobService.ScheduleOfflineToOnlineIngestionJob:input_type -> feast_spark.api.ScheduleOfflineToOnlineIngestionJobRequest + 10, // 17: feast_spark.api.JobService.UnscheduleOfflineToOnlineIngestionJob:input_type -> feast_spark.api.UnscheduleOfflineToOnlineIngestionJobRequest + 12, // 18: feast_spark.api.JobService.GetHistoricalFeatures:input_type -> feast_spark.api.GetHistoricalFeaturesRequest + 14, // 19: feast_spark.api.JobService.ListJobs:input_type -> feast_spark.api.ListJobsRequest + 15, // 20: feast_spark.api.JobService.ListScheduledJobs:input_type -> feast_spark.api.ListScheduledJobsRequest + 20, // 21: feast_spark.api.JobService.CancelJob:input_type -> feast_spark.api.CancelJobRequest + 18, // 22: feast_spark.api.JobService.GetJob:input_type -> feast_spark.api.GetJobRequest + 22, // 23: feast_spark.api.JobService.GetHealthMetrics:input_type -> feast_spark.api.GetHealthMetricsRequest + 5, // 24: feast_spark.api.JobService.StartOfflineToOnlineIngestionJob:output_type -> feast_spark.api.StartOfflineToOnlineIngestionJobResponse + 7, // 25: feast_spark.api.JobService.StartStreamIngestionJob:output_type -> feast_spark.api.StartStreamIngestionJobResponse + 9, // 26: feast_spark.api.JobService.ScheduleOfflineToOnlineIngestionJob:output_type -> feast_spark.api.ScheduleOfflineToOnlineIngestionJobResponse + 11, // 27: feast_spark.api.JobService.UnscheduleOfflineToOnlineIngestionJob:output_type -> feast_spark.api.UnscheduleOfflineToOnlineIngestionJobResponse + 13, // 28: feast_spark.api.JobService.GetHistoricalFeatures:output_type -> feast_spark.api.GetHistoricalFeaturesResponse + 16, // 29: feast_spark.api.JobService.ListJobs:output_type -> feast_spark.api.ListJobsResponse + 17, // 30: feast_spark.api.JobService.ListScheduledJobs:output_type -> feast_spark.api.ListScheduledJobsResponse + 21, // 31: feast_spark.api.JobService.CancelJob:output_type -> feast_spark.api.CancelJobResponse + 19, // 32: feast_spark.api.JobService.GetJob:output_type -> feast_spark.api.GetJobResponse + 23, // 33: feast_spark.api.JobService.GetHealthMetrics:output_type -> feast_spark.api.GetHealthMetricsResponse + 24, // [24:34] is the sub-list for method output_type + 14, // [14:24] is the sub-list for method input_type 14, // [14:14] is the sub-list for extension type_name 14, // [14:14] is the sub-list for extension extendee 0, // [0:14] is the sub-list for field type_name @@ -1961,7 +2087,7 @@ func file_feast_spark_api_JobService_proto_init() { } } file_feast_spark_api_JobService_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ScheduleOfflineToOnlineIngestionJobRequest); i { + switch v := v.(*StartStreamIngestionJobRequest); i { case 0: return &v.state case 1: @@ -1973,7 +2099,7 @@ func file_feast_spark_api_JobService_proto_init() { } } file_feast_spark_api_JobService_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ScheduleOfflineToOnlineIngestionJobResponse); i { + switch v := v.(*StartStreamIngestionJobResponse); i { case 0: return &v.state case 1: @@ -1985,7 +2111,7 @@ func file_feast_spark_api_JobService_proto_init() { } } file_feast_spark_api_JobService_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnscheduleOfflineToOnlineIngestionJobRequest); i { + switch v := v.(*ScheduleOfflineToOnlineIngestionJobRequest); i { case 0: return &v.state case 1: @@ -1997,7 +2123,7 @@ func file_feast_spark_api_JobService_proto_init() { } } file_feast_spark_api_JobService_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnscheduleOfflineToOnlineIngestionJobResponse); i { + switch v := v.(*ScheduleOfflineToOnlineIngestionJobResponse); i { case 0: return &v.state case 1: @@ -2009,7 +2135,7 @@ func file_feast_spark_api_JobService_proto_init() { } } file_feast_spark_api_JobService_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetHistoricalFeaturesRequest); i { + switch v := v.(*UnscheduleOfflineToOnlineIngestionJobRequest); i { case 0: return &v.state case 1: @@ -2021,7 +2147,7 @@ func file_feast_spark_api_JobService_proto_init() { } } file_feast_spark_api_JobService_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetHistoricalFeaturesResponse); i { + switch v := v.(*UnscheduleOfflineToOnlineIngestionJobResponse); i { case 0: return &v.state case 1: @@ -2033,7 +2159,7 @@ func file_feast_spark_api_JobService_proto_init() { } } file_feast_spark_api_JobService_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListJobsRequest); i { + switch v := v.(*GetHistoricalFeaturesRequest); i { case 0: return &v.state case 1: @@ -2045,7 +2171,7 @@ func file_feast_spark_api_JobService_proto_init() { } } file_feast_spark_api_JobService_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListScheduledJobRequest); i { + switch v := v.(*GetHistoricalFeaturesResponse); i { case 0: return &v.state case 1: @@ -2057,7 +2183,7 @@ func file_feast_spark_api_JobService_proto_init() { } } file_feast_spark_api_JobService_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListJobsResponse); i { + switch v := v.(*ListJobsRequest); i { case 0: return &v.state case 1: @@ -2069,7 +2195,7 @@ func file_feast_spark_api_JobService_proto_init() { } } file_feast_spark_api_JobService_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListScheduledJobResponse); i { + switch v := v.(*ListScheduledJobsRequest); i { case 0: return &v.state case 1: @@ -2081,7 +2207,7 @@ func file_feast_spark_api_JobService_proto_init() { } } file_feast_spark_api_JobService_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetJobRequest); i { + switch v := v.(*ListJobsResponse); i { case 0: return &v.state case 1: @@ -2093,7 +2219,7 @@ func file_feast_spark_api_JobService_proto_init() { } } file_feast_spark_api_JobService_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetJobResponse); i { + switch v := v.(*ListScheduledJobsResponse); i { case 0: return &v.state case 1: @@ -2105,7 +2231,7 @@ func file_feast_spark_api_JobService_proto_init() { } } file_feast_spark_api_JobService_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CancelJobRequest); i { + switch v := v.(*GetJobRequest); i { case 0: return &v.state case 1: @@ -2117,7 +2243,7 @@ func file_feast_spark_api_JobService_proto_init() { } } file_feast_spark_api_JobService_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CancelJobResponse); i { + switch v := v.(*GetJobResponse); i { case 0: return &v.state case 1: @@ -2129,7 +2255,7 @@ func file_feast_spark_api_JobService_proto_init() { } } file_feast_spark_api_JobService_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetHealthMetricsRequest); i { + switch v := v.(*CancelJobRequest); i { case 0: return &v.state case 1: @@ -2141,7 +2267,7 @@ func file_feast_spark_api_JobService_proto_init() { } } file_feast_spark_api_JobService_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetHealthMetricsResponse); i { + switch v := v.(*CancelJobResponse); i { case 0: return &v.state case 1: @@ -2153,7 +2279,7 @@ func file_feast_spark_api_JobService_proto_init() { } } file_feast_spark_api_JobService_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Job_RetrievalJobMeta); i { + switch v := v.(*GetHealthMetricsRequest); i { case 0: return &v.state case 1: @@ -2165,7 +2291,7 @@ func file_feast_spark_api_JobService_proto_init() { } } file_feast_spark_api_JobService_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Job_OfflineToOnlineMeta); i { + switch v := v.(*GetHealthMetricsResponse); i { case 0: return &v.state case 1: @@ -2177,6 +2303,30 @@ func file_feast_spark_api_JobService_proto_init() { } } file_feast_spark_api_JobService_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Job_RetrievalJobMeta); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_spark_api_JobService_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Job_OfflineToOnlineMeta); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_spark_api_JobService_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Job_StreamToOnlineMeta); i { case 0: return &v.state @@ -2200,7 +2350,7 @@ func file_feast_spark_api_JobService_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_feast_spark_api_JobService_proto_rawDesc, NumEnums: 2, - NumMessages: 23, + NumMessages: 25, NumExtensions: 0, NumServices: 1, }, diff --git a/caraml-store-sdk/go/protos/feast_spark/api/JobService_grpc.pb.go b/caraml-store-sdk/go/protos/feast_spark/api/JobService_grpc.pb.go index c7ba8ce..8393eb9 100644 --- a/caraml-store-sdk/go/protos/feast_spark/api/JobService_grpc.pb.go +++ b/caraml-store-sdk/go/protos/feast_spark/api/JobService_grpc.pb.go @@ -20,11 +20,12 @@ const _ = grpc.SupportPackageIsVersion7 const ( JobService_StartOfflineToOnlineIngestionJob_FullMethodName = "/feast_spark.api.JobService/StartOfflineToOnlineIngestionJob" + JobService_StartStreamIngestionJob_FullMethodName = "/feast_spark.api.JobService/StartStreamIngestionJob" JobService_ScheduleOfflineToOnlineIngestionJob_FullMethodName = "/feast_spark.api.JobService/ScheduleOfflineToOnlineIngestionJob" JobService_UnscheduleOfflineToOnlineIngestionJob_FullMethodName = "/feast_spark.api.JobService/UnscheduleOfflineToOnlineIngestionJob" JobService_GetHistoricalFeatures_FullMethodName = "/feast_spark.api.JobService/GetHistoricalFeatures" JobService_ListJobs_FullMethodName = "/feast_spark.api.JobService/ListJobs" - JobService_ListScheduledJob_FullMethodName = "/feast_spark.api.JobService/ListScheduledJob" + JobService_ListScheduledJobs_FullMethodName = "/feast_spark.api.JobService/ListScheduledJobs" JobService_CancelJob_FullMethodName = "/feast_spark.api.JobService/CancelJob" JobService_GetJob_FullMethodName = "/feast_spark.api.JobService/GetJob" JobService_GetHealthMetrics_FullMethodName = "/feast_spark.api.JobService/GetHealthMetrics" @@ -36,6 +37,8 @@ const ( type JobServiceClient interface { // Start job to ingest data from offline store into online store StartOfflineToOnlineIngestionJob(ctx context.Context, in *StartOfflineToOnlineIngestionJobRequest, opts ...grpc.CallOption) (*StartOfflineToOnlineIngestionJobResponse, error) + // Start job to ingest data from streaming source into online store + StartStreamIngestionJob(ctx context.Context, in *StartStreamIngestionJobRequest, opts ...grpc.CallOption) (*StartStreamIngestionJobResponse, error) // Start scheduled job to ingest data from offline store into online store ScheduleOfflineToOnlineIngestionJob(ctx context.Context, in *ScheduleOfflineToOnlineIngestionJobRequest, opts ...grpc.CallOption) (*ScheduleOfflineToOnlineIngestionJobResponse, error) // Unschedule job to ingest data from offline store into online store @@ -45,7 +48,7 @@ type JobServiceClient interface { // List all types of jobs ListJobs(ctx context.Context, in *ListJobsRequest, opts ...grpc.CallOption) (*ListJobsResponse, error) // List all scheduled jobs - ListScheduledJob(ctx context.Context, in *ListScheduledJobRequest, opts ...grpc.CallOption) (*ListScheduledJobResponse, error) + ListScheduledJobs(ctx context.Context, in *ListScheduledJobsRequest, opts ...grpc.CallOption) (*ListScheduledJobsResponse, error) // Cancel a single job CancelJob(ctx context.Context, in *CancelJobRequest, opts ...grpc.CallOption) (*CancelJobResponse, error) // Get details of a single job @@ -71,6 +74,15 @@ func (c *jobServiceClient) StartOfflineToOnlineIngestionJob(ctx context.Context, return out, nil } +func (c *jobServiceClient) StartStreamIngestionJob(ctx context.Context, in *StartStreamIngestionJobRequest, opts ...grpc.CallOption) (*StartStreamIngestionJobResponse, error) { + out := new(StartStreamIngestionJobResponse) + err := c.cc.Invoke(ctx, JobService_StartStreamIngestionJob_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *jobServiceClient) ScheduleOfflineToOnlineIngestionJob(ctx context.Context, in *ScheduleOfflineToOnlineIngestionJobRequest, opts ...grpc.CallOption) (*ScheduleOfflineToOnlineIngestionJobResponse, error) { out := new(ScheduleOfflineToOnlineIngestionJobResponse) err := c.cc.Invoke(ctx, JobService_ScheduleOfflineToOnlineIngestionJob_FullMethodName, in, out, opts...) @@ -107,9 +119,9 @@ func (c *jobServiceClient) ListJobs(ctx context.Context, in *ListJobsRequest, op return out, nil } -func (c *jobServiceClient) ListScheduledJob(ctx context.Context, in *ListScheduledJobRequest, opts ...grpc.CallOption) (*ListScheduledJobResponse, error) { - out := new(ListScheduledJobResponse) - err := c.cc.Invoke(ctx, JobService_ListScheduledJob_FullMethodName, in, out, opts...) +func (c *jobServiceClient) ListScheduledJobs(ctx context.Context, in *ListScheduledJobsRequest, opts ...grpc.CallOption) (*ListScheduledJobsResponse, error) { + out := new(ListScheduledJobsResponse) + err := c.cc.Invoke(ctx, JobService_ListScheduledJobs_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -149,6 +161,8 @@ func (c *jobServiceClient) GetHealthMetrics(ctx context.Context, in *GetHealthMe type JobServiceServer interface { // Start job to ingest data from offline store into online store StartOfflineToOnlineIngestionJob(context.Context, *StartOfflineToOnlineIngestionJobRequest) (*StartOfflineToOnlineIngestionJobResponse, error) + // Start job to ingest data from streaming source into online store + StartStreamIngestionJob(context.Context, *StartStreamIngestionJobRequest) (*StartStreamIngestionJobResponse, error) // Start scheduled job to ingest data from offline store into online store ScheduleOfflineToOnlineIngestionJob(context.Context, *ScheduleOfflineToOnlineIngestionJobRequest) (*ScheduleOfflineToOnlineIngestionJobResponse, error) // Unschedule job to ingest data from offline store into online store @@ -158,7 +172,7 @@ type JobServiceServer interface { // List all types of jobs ListJobs(context.Context, *ListJobsRequest) (*ListJobsResponse, error) // List all scheduled jobs - ListScheduledJob(context.Context, *ListScheduledJobRequest) (*ListScheduledJobResponse, error) + ListScheduledJobs(context.Context, *ListScheduledJobsRequest) (*ListScheduledJobsResponse, error) // Cancel a single job CancelJob(context.Context, *CancelJobRequest) (*CancelJobResponse, error) // Get details of a single job @@ -174,6 +188,9 @@ type UnimplementedJobServiceServer struct { func (UnimplementedJobServiceServer) StartOfflineToOnlineIngestionJob(context.Context, *StartOfflineToOnlineIngestionJobRequest) (*StartOfflineToOnlineIngestionJobResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method StartOfflineToOnlineIngestionJob not implemented") } +func (UnimplementedJobServiceServer) StartStreamIngestionJob(context.Context, *StartStreamIngestionJobRequest) (*StartStreamIngestionJobResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method StartStreamIngestionJob not implemented") +} func (UnimplementedJobServiceServer) ScheduleOfflineToOnlineIngestionJob(context.Context, *ScheduleOfflineToOnlineIngestionJobRequest) (*ScheduleOfflineToOnlineIngestionJobResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ScheduleOfflineToOnlineIngestionJob not implemented") } @@ -186,8 +203,8 @@ func (UnimplementedJobServiceServer) GetHistoricalFeatures(context.Context, *Get func (UnimplementedJobServiceServer) ListJobs(context.Context, *ListJobsRequest) (*ListJobsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListJobs not implemented") } -func (UnimplementedJobServiceServer) ListScheduledJob(context.Context, *ListScheduledJobRequest) (*ListScheduledJobResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListScheduledJob not implemented") +func (UnimplementedJobServiceServer) ListScheduledJobs(context.Context, *ListScheduledJobsRequest) (*ListScheduledJobsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListScheduledJobs not implemented") } func (UnimplementedJobServiceServer) CancelJob(context.Context, *CancelJobRequest) (*CancelJobResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CancelJob not implemented") @@ -228,6 +245,24 @@ func _JobService_StartOfflineToOnlineIngestionJob_Handler(srv interface{}, ctx c return interceptor(ctx, in, info, handler) } +func _JobService_StartStreamIngestionJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StartStreamIngestionJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(JobServiceServer).StartStreamIngestionJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: JobService_StartStreamIngestionJob_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(JobServiceServer).StartStreamIngestionJob(ctx, req.(*StartStreamIngestionJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _JobService_ScheduleOfflineToOnlineIngestionJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ScheduleOfflineToOnlineIngestionJobRequest) if err := dec(in); err != nil { @@ -300,20 +335,20 @@ func _JobService_ListJobs_Handler(srv interface{}, ctx context.Context, dec func return interceptor(ctx, in, info, handler) } -func _JobService_ListScheduledJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListScheduledJobRequest) +func _JobService_ListScheduledJobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListScheduledJobsRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(JobServiceServer).ListScheduledJob(ctx, in) + return srv.(JobServiceServer).ListScheduledJobs(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: JobService_ListScheduledJob_FullMethodName, + FullMethod: JobService_ListScheduledJobs_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(JobServiceServer).ListScheduledJob(ctx, req.(*ListScheduledJobRequest)) + return srv.(JobServiceServer).ListScheduledJobs(ctx, req.(*ListScheduledJobsRequest)) } return interceptor(ctx, in, info, handler) } @@ -383,6 +418,10 @@ var JobService_ServiceDesc = grpc.ServiceDesc{ MethodName: "StartOfflineToOnlineIngestionJob", Handler: _JobService_StartOfflineToOnlineIngestionJob_Handler, }, + { + MethodName: "StartStreamIngestionJob", + Handler: _JobService_StartStreamIngestionJob_Handler, + }, { MethodName: "ScheduleOfflineToOnlineIngestionJob", Handler: _JobService_ScheduleOfflineToOnlineIngestionJob_Handler, @@ -400,8 +439,8 @@ var JobService_ServiceDesc = grpc.ServiceDesc{ Handler: _JobService_ListJobs_Handler, }, { - MethodName: "ListScheduledJob", - Handler: _JobService_ListScheduledJob_Handler, + MethodName: "ListScheduledJobs", + Handler: _JobService_ListScheduledJobs_Handler, }, { MethodName: "CancelJob", diff --git a/caraml-store-sdk/python/feast/client.py b/caraml-store-sdk/python/feast/client.py index 0bfeaf5..8d302b9 100644 --- a/caraml-store-sdk/python/feast/client.py +++ b/caraml-store-sdk/python/feast/client.py @@ -33,7 +33,8 @@ GetJobRequest, ListJobsRequest, Job, - ScheduleOfflineToOnlineIngestionJobRequest, ScheduledJob, ListScheduledJobRequest, + ScheduleOfflineToOnlineIngestionJobRequest, ScheduledJob, ListScheduledJobsRequest, StartStreamIngestionJobResponse, + StartStreamIngestionJobRequest, ) from feast_spark.api.JobService_pb2_grpc import JobServiceStub @@ -292,6 +293,24 @@ def start_offline_to_online_ingestion( request.end_date.FromDatetime(end) return self._job_service.StartOfflineToOnlineIngestionJob(request) + def start_stream_ingestion( + self, + feature_table: str, + project: str + ) -> StartStreamIngestionJobResponse: + """ + Starts or update a stream ingestion job for the given feature table + Args: + feature_table: feature table name + project: Feast project name + + Returns: StartStreamIngestionJobResponse + """ + request = StartStreamIngestionJobRequest( + project=project, table_name=feature_table + ) + return self._job_service.StartStreamIngestionJob(request) + def schedule_offline_to_online_ingestion( self, feature_table: str, @@ -394,7 +413,7 @@ def list_scheduled_job(self, project = "", table_name = "") -> List[ScheduledJob table_name: Filter by table name, if non empty Returns: List of Scheduled Job protobuf object """ - request = ListScheduledJobRequest(project=project, table_name=table_name) + request = ListScheduledJobsRequest(project=project, table_name=table_name) response = self._job_service.ListScheduledJob(request) return response.jobs diff --git a/caraml-store-sdk/python/feast_spark/api/JobService_pb2.py b/caraml-store-sdk/python/feast_spark/api/JobService_pb2.py index 913e867..c2f76d2 100644 --- a/caraml-store-sdk/python/feast_spark/api/JobService_pb2.py +++ b/caraml-store-sdk/python/feast_spark/api/JobService_pb2.py @@ -15,7 +15,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n feast_spark/api/JobService.proto\x12\x0f\x66\x65\x61st_spark.api\x1a\x1b\x66\x65\x61st/core/DataSource.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xab\x01\n\x0cScheduledJob\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1d\n\ntable_name\x18\x02 \x01(\tR\ttableName\x12\x18\n\x07project\x18\x03 \x01(\tR\x07project\x12-\n\x12ingestion_timespan\x18\x04 \x01(\x05R\x11ingestionTimespan\x12#\n\rcron_schedule\x18\x05 \x01(\tR\x0c\x63ronSchedule\"\xa6\x05\n\x03Job\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12,\n\x04type\x18\x02 \x01(\x0e\x32\x18.feast_spark.api.JobTypeR\x04type\x12\x32\n\x06status\x18\x03 \x01(\x0e\x32\x1a.feast_spark.api.JobStatusR\x06status\x12\x12\n\x04hash\x18\x04 \x01(\tR\x04hash\x12\x39\n\nstart_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartTime\x12\x45\n\tretrieval\x18\x06 \x01(\x0b\x32%.feast_spark.api.Job.RetrievalJobMetaH\x00R\tretrieval\x12S\n\x0f\x62\x61tch_ingestion\x18\x07 \x01(\x0b\x32(.feast_spark.api.Job.OfflineToOnlineMetaH\x00R\x0e\x62\x61tchIngestion\x12T\n\x10stream_ingestion\x18\x08 \x01(\x0b\x32\'.feast_spark.api.Job.StreamToOnlineMetaH\x00R\x0fstreamIngestion\x12\x17\n\x07log_uri\x18\t \x01(\tR\x06logUri\x12#\n\rerror_message\x18\n \x01(\tR\x0c\x65rrorMessage\x1a;\n\x10RetrievalJobMeta\x12\'\n\x0foutput_location\x18\x01 \x01(\tR\x0eoutputLocation\x1a\x34\n\x13OfflineToOnlineMeta\x12\x1d\n\ntable_name\x18\x01 \x01(\tR\ttableName\x1a\x33\n\x12StreamToOnlineMeta\x12\x1d\n\ntable_name\x18\x01 \x01(\tR\ttableNameB\x06\n\x04meta\"\xfd\x01\n\'StartOfflineToOnlineIngestionJobRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x1d\n\ntable_name\x18\x02 \x01(\tR\ttableName\x12\x39\n\nstart_date\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartDate\x12\x35\n\x08\x65nd_date\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x65ndDate\x12\'\n\x0f\x64\x65lta_ingestion\x18\x05 \x01(\x08R\x0e\x64\x65ltaIngestion\"\xb4\x01\n(StartOfflineToOnlineIngestionJobResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12@\n\x0ejob_start_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0cjobStartTime\x12\x1d\n\ntable_name\x18\x03 \x01(\tR\ttableName\x12\x17\n\x07log_uri\x18\x04 \x01(\tR\x06logUri\"\xb9\x01\n*ScheduleOfflineToOnlineIngestionJobRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x1d\n\ntable_name\x18\x02 \x01(\tR\ttableName\x12-\n\x12ingestion_timespan\x18\x03 \x01(\x05R\x11ingestionTimespan\x12#\n\rcron_schedule\x18\x04 \x01(\tR\x0c\x63ronSchedule\"-\n+ScheduleOfflineToOnlineIngestionJobResponse\"g\n,UnscheduleOfflineToOnlineIngestionJobRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x1d\n\ntable_name\x18\x02 \x01(\tR\ttableName\"/\n-UnscheduleOfflineToOnlineIngestionJobResponse\"\xe6\x01\n\x1cGetHistoricalFeaturesRequest\x12!\n\x0c\x66\x65\x61ture_refs\x18\x01 \x03(\tR\x0b\x66\x65\x61tureRefs\x12;\n\rentity_source\x18\x02 \x01(\x0b\x32\x16.feast.core.DataSourceR\x0c\x65ntitySource\x12\x18\n\x07project\x18\x03 \x01(\tR\x07project\x12\'\n\x0foutput_location\x18\x04 \x01(\tR\x0eoutputLocation\x12#\n\routput_format\x18\x05 \x01(\tR\x0coutputFormat\"\xb2\x01\n\x1dGetHistoricalFeaturesResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12&\n\x0foutput_file_uri\x18\x02 \x01(\tR\routputFileUri\x12@\n\x0ejob_start_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0cjobStartTime\x12\x17\n\x07log_uri\x18\x04 \x01(\tR\x06logUri\"y\n\x0fListJobsRequest\x12-\n\x12include_terminated\x18\x01 \x01(\x08R\x11includeTerminated\x12\x1d\n\ntable_name\x18\x02 \x01(\tR\ttableName\x12\x18\n\x07project\x18\x03 \x01(\tR\x07project\"R\n\x17ListScheduledJobRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x1d\n\ntable_name\x18\x02 \x01(\tR\ttableName\"<\n\x10ListJobsResponse\x12(\n\x04jobs\x18\x01 \x03(\x0b\x32\x14.feast_spark.api.JobR\x04jobs\"M\n\x18ListScheduledJobResponse\x12\x31\n\x04jobs\x18\x01 \x03(\x0b\x32\x1d.feast_spark.api.ScheduledJobR\x04jobs\"&\n\rGetJobRequest\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId\"8\n\x0eGetJobResponse\x12&\n\x03job\x18\x01 \x01(\x0b\x32\x14.feast_spark.api.JobR\x03job\")\n\x10\x43\x61ncelJobRequest\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId\"\x13\n\x11\x43\x61ncelJobResponse\"T\n\x17GetHealthMetricsRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x1f\n\x0btable_names\x18\x02 \x03(\tR\ntableNames\"J\n\x18GetHealthMetricsResponse\x12\x16\n\x06passed\x18\x01 \x03(\tR\x06passed\x12\x16\n\x06\x66\x61iled\x18\x02 \x03(\tR\x06\x66\x61iled*`\n\x07JobType\x12\x0f\n\x0bINVALID_JOB\x10\x00\x12\x17\n\x13\x42\x41TCH_INGESTION_JOB\x10\x01\x12\x18\n\x14STREAM_INGESTION_JOB\x10\x02\x12\x11\n\rRETRIEVAL_JOB\x10\x04*~\n\tJobStatus\x12\x16\n\x12JOB_STATUS_INVALID\x10\x00\x12\x16\n\x12JOB_STATUS_PENDING\x10\x01\x12\x16\n\x12JOB_STATUS_RUNNING\x10\x02\x12\x13\n\x0fJOB_STATUS_DONE\x10\x03\x12\x14\n\x10JOB_STATUS_ERROR\x10\x04\x32\xac\x08\n\nJobService\x12\x97\x01\n StartOfflineToOnlineIngestionJob\x12\x38.feast_spark.api.StartOfflineToOnlineIngestionJobRequest\x1a\x39.feast_spark.api.StartOfflineToOnlineIngestionJobResponse\x12\xa0\x01\n#ScheduleOfflineToOnlineIngestionJob\x12;.feast_spark.api.ScheduleOfflineToOnlineIngestionJobRequest\x1a<.feast_spark.api.ScheduleOfflineToOnlineIngestionJobResponse\x12\xa6\x01\n%UnscheduleOfflineToOnlineIngestionJob\x12=.feast_spark.api.UnscheduleOfflineToOnlineIngestionJobRequest\x1a>.feast_spark.api.UnscheduleOfflineToOnlineIngestionJobResponse\x12v\n\x15GetHistoricalFeatures\x12-.feast_spark.api.GetHistoricalFeaturesRequest\x1a..feast_spark.api.GetHistoricalFeaturesResponse\x12O\n\x08ListJobs\x12 .feast_spark.api.ListJobsRequest\x1a!.feast_spark.api.ListJobsResponse\x12g\n\x10ListScheduledJob\x12(.feast_spark.api.ListScheduledJobRequest\x1a).feast_spark.api.ListScheduledJobResponse\x12R\n\tCancelJob\x12!.feast_spark.api.CancelJobRequest\x1a\".feast_spark.api.CancelJobResponse\x12I\n\x06GetJob\x12\x1e.feast_spark.api.GetJobRequest\x1a\x1f.feast_spark.api.GetJobResponse\x12g\n\x10GetHealthMetrics\x12(.feast_spark.api.GetHealthMetricsRequest\x1a).feast_spark.api.GetHealthMetricsResponseB\x86\x01\n$dev.caraml.store.protobuf.jobserviceB\x0fJobServiceProtoZMgithub.com/caraml-dev/caraml-store/caraml-store-sdk/go/protos/feast_spark/apib\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n feast_spark/api/JobService.proto\x12\x0f\x66\x65\x61st_spark.api\x1a\x1b\x66\x65\x61st/core/DataSource.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xab\x01\n\x0cScheduledJob\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1d\n\ntable_name\x18\x02 \x01(\tR\ttableName\x12\x18\n\x07project\x18\x03 \x01(\tR\x07project\x12-\n\x12ingestion_timespan\x18\x04 \x01(\x05R\x11ingestionTimespan\x12#\n\rcron_schedule\x18\x05 \x01(\tR\x0c\x63ronSchedule\"\xa6\x05\n\x03Job\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12,\n\x04type\x18\x02 \x01(\x0e\x32\x18.feast_spark.api.JobTypeR\x04type\x12\x32\n\x06status\x18\x03 \x01(\x0e\x32\x1a.feast_spark.api.JobStatusR\x06status\x12\x12\n\x04hash\x18\x04 \x01(\tR\x04hash\x12\x39\n\nstart_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartTime\x12\x45\n\tretrieval\x18\x06 \x01(\x0b\x32%.feast_spark.api.Job.RetrievalJobMetaH\x00R\tretrieval\x12S\n\x0f\x62\x61tch_ingestion\x18\x07 \x01(\x0b\x32(.feast_spark.api.Job.OfflineToOnlineMetaH\x00R\x0e\x62\x61tchIngestion\x12T\n\x10stream_ingestion\x18\x08 \x01(\x0b\x32\'.feast_spark.api.Job.StreamToOnlineMetaH\x00R\x0fstreamIngestion\x12\x17\n\x07log_uri\x18\t \x01(\tR\x06logUri\x12#\n\rerror_message\x18\n \x01(\tR\x0c\x65rrorMessage\x1a;\n\x10RetrievalJobMeta\x12\'\n\x0foutput_location\x18\x01 \x01(\tR\x0eoutputLocation\x1a\x34\n\x13OfflineToOnlineMeta\x12\x1d\n\ntable_name\x18\x01 \x01(\tR\ttableName\x1a\x33\n\x12StreamToOnlineMeta\x12\x1d\n\ntable_name\x18\x01 \x01(\tR\ttableNameB\x06\n\x04meta\"\xfd\x01\n\'StartOfflineToOnlineIngestionJobRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x1d\n\ntable_name\x18\x02 \x01(\tR\ttableName\x12\x39\n\nstart_date\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartDate\x12\x35\n\x08\x65nd_date\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x65ndDate\x12\'\n\x0f\x64\x65lta_ingestion\x18\x05 \x01(\x08R\x0e\x64\x65ltaIngestion\"\xb4\x01\n(StartOfflineToOnlineIngestionJobResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12@\n\x0ejob_start_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0cjobStartTime\x12\x1d\n\ntable_name\x18\x03 \x01(\tR\ttableName\x12\x17\n\x07log_uri\x18\x04 \x01(\tR\x06logUri\"Y\n\x1eStartStreamIngestionJobRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x1d\n\ntable_name\x18\x02 \x01(\tR\ttableName\"1\n\x1fStartStreamIngestionJobResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\"\xb9\x01\n*ScheduleOfflineToOnlineIngestionJobRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x1d\n\ntable_name\x18\x02 \x01(\tR\ttableName\x12-\n\x12ingestion_timespan\x18\x03 \x01(\x05R\x11ingestionTimespan\x12#\n\rcron_schedule\x18\x04 \x01(\tR\x0c\x63ronSchedule\"-\n+ScheduleOfflineToOnlineIngestionJobResponse\"g\n,UnscheduleOfflineToOnlineIngestionJobRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x1d\n\ntable_name\x18\x02 \x01(\tR\ttableName\"/\n-UnscheduleOfflineToOnlineIngestionJobResponse\"\xe6\x01\n\x1cGetHistoricalFeaturesRequest\x12!\n\x0c\x66\x65\x61ture_refs\x18\x01 \x03(\tR\x0b\x66\x65\x61tureRefs\x12;\n\rentity_source\x18\x02 \x01(\x0b\x32\x16.feast.core.DataSourceR\x0c\x65ntitySource\x12\x18\n\x07project\x18\x03 \x01(\tR\x07project\x12\'\n\x0foutput_location\x18\x04 \x01(\tR\x0eoutputLocation\x12#\n\routput_format\x18\x05 \x01(\tR\x0coutputFormat\"\xb2\x01\n\x1dGetHistoricalFeaturesResponse\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12&\n\x0foutput_file_uri\x18\x02 \x01(\tR\routputFileUri\x12@\n\x0ejob_start_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0cjobStartTime\x12\x17\n\x07log_uri\x18\x04 \x01(\tR\x06logUri\"y\n\x0fListJobsRequest\x12-\n\x12include_terminated\x18\x01 \x01(\x08R\x11includeTerminated\x12\x1d\n\ntable_name\x18\x02 \x01(\tR\ttableName\x12\x18\n\x07project\x18\x03 \x01(\tR\x07project\"S\n\x18ListScheduledJobsRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x1d\n\ntable_name\x18\x02 \x01(\tR\ttableName\"<\n\x10ListJobsResponse\x12(\n\x04jobs\x18\x01 \x03(\x0b\x32\x14.feast_spark.api.JobR\x04jobs\"N\n\x19ListScheduledJobsResponse\x12\x31\n\x04jobs\x18\x01 \x03(\x0b\x32\x1d.feast_spark.api.ScheduledJobR\x04jobs\"&\n\rGetJobRequest\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId\"8\n\x0eGetJobResponse\x12&\n\x03job\x18\x01 \x01(\x0b\x32\x14.feast_spark.api.JobR\x03job\")\n\x10\x43\x61ncelJobRequest\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId\"\x13\n\x11\x43\x61ncelJobResponse\"T\n\x17GetHealthMetricsRequest\x12\x18\n\x07project\x18\x01 \x01(\tR\x07project\x12\x1f\n\x0btable_names\x18\x02 \x03(\tR\ntableNames\"J\n\x18GetHealthMetricsResponse\x12\x16\n\x06passed\x18\x01 \x03(\tR\x06passed\x12\x16\n\x06\x66\x61iled\x18\x02 \x03(\tR\x06\x66\x61iled*`\n\x07JobType\x12\x0f\n\x0bINVALID_JOB\x10\x00\x12\x17\n\x13\x42\x41TCH_INGESTION_JOB\x10\x01\x12\x18\n\x14STREAM_INGESTION_JOB\x10\x02\x12\x11\n\rRETRIEVAL_JOB\x10\x04*~\n\tJobStatus\x12\x16\n\x12JOB_STATUS_INVALID\x10\x00\x12\x16\n\x12JOB_STATUS_PENDING\x10\x01\x12\x16\n\x12JOB_STATUS_RUNNING\x10\x02\x12\x13\n\x0fJOB_STATUS_DONE\x10\x03\x12\x14\n\x10JOB_STATUS_ERROR\x10\x04\x32\xad\t\n\nJobService\x12\x97\x01\n StartOfflineToOnlineIngestionJob\x12\x38.feast_spark.api.StartOfflineToOnlineIngestionJobRequest\x1a\x39.feast_spark.api.StartOfflineToOnlineIngestionJobResponse\x12|\n\x17StartStreamIngestionJob\x12/.feast_spark.api.StartStreamIngestionJobRequest\x1a\x30.feast_spark.api.StartStreamIngestionJobResponse\x12\xa0\x01\n#ScheduleOfflineToOnlineIngestionJob\x12;.feast_spark.api.ScheduleOfflineToOnlineIngestionJobRequest\x1a<.feast_spark.api.ScheduleOfflineToOnlineIngestionJobResponse\x12\xa6\x01\n%UnscheduleOfflineToOnlineIngestionJob\x12=.feast_spark.api.UnscheduleOfflineToOnlineIngestionJobRequest\x1a>.feast_spark.api.UnscheduleOfflineToOnlineIngestionJobResponse\x12v\n\x15GetHistoricalFeatures\x12-.feast_spark.api.GetHistoricalFeaturesRequest\x1a..feast_spark.api.GetHistoricalFeaturesResponse\x12O\n\x08ListJobs\x12 .feast_spark.api.ListJobsRequest\x1a!.feast_spark.api.ListJobsResponse\x12j\n\x11ListScheduledJobs\x12).feast_spark.api.ListScheduledJobsRequest\x1a*.feast_spark.api.ListScheduledJobsResponse\x12R\n\tCancelJob\x12!.feast_spark.api.CancelJobRequest\x1a\".feast_spark.api.CancelJobResponse\x12I\n\x06GetJob\x12\x1e.feast_spark.api.GetJobRequest\x1a\x1f.feast_spark.api.GetJobResponse\x12g\n\x10GetHealthMetrics\x12(.feast_spark.api.GetHealthMetricsRequest\x1a).feast_spark.api.GetHealthMetricsResponseB\x86\x01\n$dev.caraml.store.protobuf.jobserviceB\x0fJobServiceProtoZMgithub.com/caraml-dev/caraml-store/caraml-store-sdk/go/protos/feast_spark/apib\x06proto3') _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'feast_spark.api.JobService_pb2', globals()) @@ -23,10 +23,10 @@ DESCRIPTOR._options = None DESCRIPTOR._serialized_options = b'\n$dev.caraml.store.protobuf.jobserviceB\017JobServiceProtoZMgithub.com/caraml-dev/caraml-store/caraml-store-sdk/go/protos/feast_spark/api' - _JOBTYPE._serialized_start=2884 - _JOBTYPE._serialized_end=2980 - _JOBSTATUS._serialized_start=2982 - _JOBSTATUS._serialized_end=3108 + _JOBTYPE._serialized_start=3028 + _JOBTYPE._serialized_end=3124 + _JOBSTATUS._serialized_start=3126 + _JOBSTATUS._serialized_end=3252 _SCHEDULEDJOB._serialized_start=116 _SCHEDULEDJOB._serialized_end=287 _JOB._serialized_start=290 @@ -41,38 +41,42 @@ _STARTOFFLINETOONLINEINGESTIONJOBREQUEST._serialized_end=1224 _STARTOFFLINETOONLINEINGESTIONJOBRESPONSE._serialized_start=1227 _STARTOFFLINETOONLINEINGESTIONJOBRESPONSE._serialized_end=1407 - _SCHEDULEOFFLINETOONLINEINGESTIONJOBREQUEST._serialized_start=1410 - _SCHEDULEOFFLINETOONLINEINGESTIONJOBREQUEST._serialized_end=1595 - _SCHEDULEOFFLINETOONLINEINGESTIONJOBRESPONSE._serialized_start=1597 - _SCHEDULEOFFLINETOONLINEINGESTIONJOBRESPONSE._serialized_end=1642 - _UNSCHEDULEOFFLINETOONLINEINGESTIONJOBREQUEST._serialized_start=1644 - _UNSCHEDULEOFFLINETOONLINEINGESTIONJOBREQUEST._serialized_end=1747 - _UNSCHEDULEOFFLINETOONLINEINGESTIONJOBRESPONSE._serialized_start=1749 - _UNSCHEDULEOFFLINETOONLINEINGESTIONJOBRESPONSE._serialized_end=1796 - _GETHISTORICALFEATURESREQUEST._serialized_start=1799 - _GETHISTORICALFEATURESREQUEST._serialized_end=2029 - _GETHISTORICALFEATURESRESPONSE._serialized_start=2032 - _GETHISTORICALFEATURESRESPONSE._serialized_end=2210 - _LISTJOBSREQUEST._serialized_start=2212 - _LISTJOBSREQUEST._serialized_end=2333 - _LISTSCHEDULEDJOBREQUEST._serialized_start=2335 - _LISTSCHEDULEDJOBREQUEST._serialized_end=2417 - _LISTJOBSRESPONSE._serialized_start=2419 - _LISTJOBSRESPONSE._serialized_end=2479 - _LISTSCHEDULEDJOBRESPONSE._serialized_start=2481 - _LISTSCHEDULEDJOBRESPONSE._serialized_end=2558 - _GETJOBREQUEST._serialized_start=2560 - _GETJOBREQUEST._serialized_end=2598 - _GETJOBRESPONSE._serialized_start=2600 - _GETJOBRESPONSE._serialized_end=2656 - _CANCELJOBREQUEST._serialized_start=2658 - _CANCELJOBREQUEST._serialized_end=2699 - _CANCELJOBRESPONSE._serialized_start=2701 - _CANCELJOBRESPONSE._serialized_end=2720 - _GETHEALTHMETRICSREQUEST._serialized_start=2722 - _GETHEALTHMETRICSREQUEST._serialized_end=2806 - _GETHEALTHMETRICSRESPONSE._serialized_start=2808 - _GETHEALTHMETRICSRESPONSE._serialized_end=2882 - _JOBSERVICE._serialized_start=3111 - _JOBSERVICE._serialized_end=4179 + _STARTSTREAMINGESTIONJOBREQUEST._serialized_start=1409 + _STARTSTREAMINGESTIONJOBREQUEST._serialized_end=1498 + _STARTSTREAMINGESTIONJOBRESPONSE._serialized_start=1500 + _STARTSTREAMINGESTIONJOBRESPONSE._serialized_end=1549 + _SCHEDULEOFFLINETOONLINEINGESTIONJOBREQUEST._serialized_start=1552 + _SCHEDULEOFFLINETOONLINEINGESTIONJOBREQUEST._serialized_end=1737 + _SCHEDULEOFFLINETOONLINEINGESTIONJOBRESPONSE._serialized_start=1739 + _SCHEDULEOFFLINETOONLINEINGESTIONJOBRESPONSE._serialized_end=1784 + _UNSCHEDULEOFFLINETOONLINEINGESTIONJOBREQUEST._serialized_start=1786 + _UNSCHEDULEOFFLINETOONLINEINGESTIONJOBREQUEST._serialized_end=1889 + _UNSCHEDULEOFFLINETOONLINEINGESTIONJOBRESPONSE._serialized_start=1891 + _UNSCHEDULEOFFLINETOONLINEINGESTIONJOBRESPONSE._serialized_end=1938 + _GETHISTORICALFEATURESREQUEST._serialized_start=1941 + _GETHISTORICALFEATURESREQUEST._serialized_end=2171 + _GETHISTORICALFEATURESRESPONSE._serialized_start=2174 + _GETHISTORICALFEATURESRESPONSE._serialized_end=2352 + _LISTJOBSREQUEST._serialized_start=2354 + _LISTJOBSREQUEST._serialized_end=2475 + _LISTSCHEDULEDJOBSREQUEST._serialized_start=2477 + _LISTSCHEDULEDJOBSREQUEST._serialized_end=2560 + _LISTJOBSRESPONSE._serialized_start=2562 + _LISTJOBSRESPONSE._serialized_end=2622 + _LISTSCHEDULEDJOBSRESPONSE._serialized_start=2624 + _LISTSCHEDULEDJOBSRESPONSE._serialized_end=2702 + _GETJOBREQUEST._serialized_start=2704 + _GETJOBREQUEST._serialized_end=2742 + _GETJOBRESPONSE._serialized_start=2744 + _GETJOBRESPONSE._serialized_end=2800 + _CANCELJOBREQUEST._serialized_start=2802 + _CANCELJOBREQUEST._serialized_end=2843 + _CANCELJOBRESPONSE._serialized_start=2845 + _CANCELJOBRESPONSE._serialized_end=2864 + _GETHEALTHMETRICSREQUEST._serialized_start=2866 + _GETHEALTHMETRICSREQUEST._serialized_end=2950 + _GETHEALTHMETRICSRESPONSE._serialized_start=2952 + _GETHEALTHMETRICSRESPONSE._serialized_end=3026 + _JOBSERVICE._serialized_start=3255 + _JOBSERVICE._serialized_end=4452 # @@protoc_insertion_point(module_scope) diff --git a/caraml-store-sdk/python/feast_spark/api/JobService_pb2.pyi b/caraml-store-sdk/python/feast_spark/api/JobService_pb2.pyi index 1930af3..8bef98a 100644 --- a/caraml-store-sdk/python/feast_spark/api/JobService_pb2.pyi +++ b/caraml-store-sdk/python/feast_spark/api/JobService_pb2.pyi @@ -136,7 +136,7 @@ class ListJobsResponse(_message.Message): jobs: _containers.RepeatedCompositeFieldContainer[Job] def __init__(self, jobs: _Optional[_Iterable[_Union[Job, _Mapping]]] = ...) -> None: ... -class ListScheduledJobRequest(_message.Message): +class ListScheduledJobsRequest(_message.Message): __slots__ = ["project", "table_name"] PROJECT_FIELD_NUMBER: _ClassVar[int] TABLE_NAME_FIELD_NUMBER: _ClassVar[int] @@ -144,7 +144,7 @@ class ListScheduledJobRequest(_message.Message): table_name: str def __init__(self, project: _Optional[str] = ..., table_name: _Optional[str] = ...) -> None: ... -class ListScheduledJobResponse(_message.Message): +class ListScheduledJobsResponse(_message.Message): __slots__ = ["jobs"] JOBS_FIELD_NUMBER: _ClassVar[int] jobs: _containers.RepeatedCompositeFieldContainer[ScheduledJob] @@ -206,6 +206,20 @@ class StartOfflineToOnlineIngestionJobResponse(_message.Message): table_name: str def __init__(self, id: _Optional[str] = ..., job_start_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., table_name: _Optional[str] = ..., log_uri: _Optional[str] = ...) -> None: ... +class StartStreamIngestionJobRequest(_message.Message): + __slots__ = ["project", "table_name"] + PROJECT_FIELD_NUMBER: _ClassVar[int] + TABLE_NAME_FIELD_NUMBER: _ClassVar[int] + project: str + table_name: str + def __init__(self, project: _Optional[str] = ..., table_name: _Optional[str] = ...) -> None: ... + +class StartStreamIngestionJobResponse(_message.Message): + __slots__ = ["id"] + ID_FIELD_NUMBER: _ClassVar[int] + id: str + def __init__(self, id: _Optional[str] = ...) -> None: ... + class UnscheduleOfflineToOnlineIngestionJobRequest(_message.Message): __slots__ = ["project", "table_name"] PROJECT_FIELD_NUMBER: _ClassVar[int] diff --git a/caraml-store-sdk/python/feast_spark/api/JobService_pb2_grpc.py b/caraml-store-sdk/python/feast_spark/api/JobService_pb2_grpc.py index b0073e0..7cb65dc 100644 --- a/caraml-store-sdk/python/feast_spark/api/JobService_pb2_grpc.py +++ b/caraml-store-sdk/python/feast_spark/api/JobService_pb2_grpc.py @@ -19,6 +19,11 @@ def __init__(self, channel): request_serializer=feast__spark_dot_api_dot_JobService__pb2.StartOfflineToOnlineIngestionJobRequest.SerializeToString, response_deserializer=feast__spark_dot_api_dot_JobService__pb2.StartOfflineToOnlineIngestionJobResponse.FromString, ) + self.StartStreamIngestionJob = channel.unary_unary( + '/feast_spark.api.JobService/StartStreamIngestionJob', + request_serializer=feast__spark_dot_api_dot_JobService__pb2.StartStreamIngestionJobRequest.SerializeToString, + response_deserializer=feast__spark_dot_api_dot_JobService__pb2.StartStreamIngestionJobResponse.FromString, + ) self.ScheduleOfflineToOnlineIngestionJob = channel.unary_unary( '/feast_spark.api.JobService/ScheduleOfflineToOnlineIngestionJob', request_serializer=feast__spark_dot_api_dot_JobService__pb2.ScheduleOfflineToOnlineIngestionJobRequest.SerializeToString, @@ -39,10 +44,10 @@ def __init__(self, channel): request_serializer=feast__spark_dot_api_dot_JobService__pb2.ListJobsRequest.SerializeToString, response_deserializer=feast__spark_dot_api_dot_JobService__pb2.ListJobsResponse.FromString, ) - self.ListScheduledJob = channel.unary_unary( - '/feast_spark.api.JobService/ListScheduledJob', - request_serializer=feast__spark_dot_api_dot_JobService__pb2.ListScheduledJobRequest.SerializeToString, - response_deserializer=feast__spark_dot_api_dot_JobService__pb2.ListScheduledJobResponse.FromString, + self.ListScheduledJobs = channel.unary_unary( + '/feast_spark.api.JobService/ListScheduledJobs', + request_serializer=feast__spark_dot_api_dot_JobService__pb2.ListScheduledJobsRequest.SerializeToString, + response_deserializer=feast__spark_dot_api_dot_JobService__pb2.ListScheduledJobsResponse.FromString, ) self.CancelJob = channel.unary_unary( '/feast_spark.api.JobService/CancelJob', @@ -71,6 +76,13 @@ def StartOfflineToOnlineIngestionJob(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def StartStreamIngestionJob(self, request, context): + """Start job to ingest data from streaming source into online store + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def ScheduleOfflineToOnlineIngestionJob(self, request, context): """Start scheduled job to ingest data from offline store into online store """ @@ -99,7 +111,7 @@ def ListJobs(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') - def ListScheduledJob(self, request, context): + def ListScheduledJobs(self, request, context): """List all scheduled jobs """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -135,6 +147,11 @@ def add_JobServiceServicer_to_server(servicer, server): request_deserializer=feast__spark_dot_api_dot_JobService__pb2.StartOfflineToOnlineIngestionJobRequest.FromString, response_serializer=feast__spark_dot_api_dot_JobService__pb2.StartOfflineToOnlineIngestionJobResponse.SerializeToString, ), + 'StartStreamIngestionJob': grpc.unary_unary_rpc_method_handler( + servicer.StartStreamIngestionJob, + request_deserializer=feast__spark_dot_api_dot_JobService__pb2.StartStreamIngestionJobRequest.FromString, + response_serializer=feast__spark_dot_api_dot_JobService__pb2.StartStreamIngestionJobResponse.SerializeToString, + ), 'ScheduleOfflineToOnlineIngestionJob': grpc.unary_unary_rpc_method_handler( servicer.ScheduleOfflineToOnlineIngestionJob, request_deserializer=feast__spark_dot_api_dot_JobService__pb2.ScheduleOfflineToOnlineIngestionJobRequest.FromString, @@ -155,10 +172,10 @@ def add_JobServiceServicer_to_server(servicer, server): request_deserializer=feast__spark_dot_api_dot_JobService__pb2.ListJobsRequest.FromString, response_serializer=feast__spark_dot_api_dot_JobService__pb2.ListJobsResponse.SerializeToString, ), - 'ListScheduledJob': grpc.unary_unary_rpc_method_handler( - servicer.ListScheduledJob, - request_deserializer=feast__spark_dot_api_dot_JobService__pb2.ListScheduledJobRequest.FromString, - response_serializer=feast__spark_dot_api_dot_JobService__pb2.ListScheduledJobResponse.SerializeToString, + 'ListScheduledJobs': grpc.unary_unary_rpc_method_handler( + servicer.ListScheduledJobs, + request_deserializer=feast__spark_dot_api_dot_JobService__pb2.ListScheduledJobsRequest.FromString, + response_serializer=feast__spark_dot_api_dot_JobService__pb2.ListScheduledJobsResponse.SerializeToString, ), 'CancelJob': grpc.unary_unary_rpc_method_handler( servicer.CancelJob, @@ -202,6 +219,23 @@ def StartOfflineToOnlineIngestionJob(request, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod + def StartStreamIngestionJob(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/feast_spark.api.JobService/StartStreamIngestionJob', + feast__spark_dot_api_dot_JobService__pb2.StartStreamIngestionJobRequest.SerializeToString, + feast__spark_dot_api_dot_JobService__pb2.StartStreamIngestionJobResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + @staticmethod def ScheduleOfflineToOnlineIngestionJob(request, target, @@ -271,7 +305,7 @@ def ListJobs(request, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod - def ListScheduledJob(request, + def ListScheduledJobs(request, target, options=(), channel_credentials=None, @@ -281,9 +315,9 @@ def ListScheduledJob(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/feast_spark.api.JobService/ListScheduledJob', - feast__spark_dot_api_dot_JobService__pb2.ListScheduledJobRequest.SerializeToString, - feast__spark_dot_api_dot_JobService__pb2.ListScheduledJobResponse.FromString, + return grpc.experimental.unary_unary(request, target, '/feast_spark.api.JobService/ListScheduledJobs', + feast__spark_dot_api_dot_JobService__pb2.ListScheduledJobsRequest.SerializeToString, + feast__spark_dot_api_dot_JobService__pb2.ListScheduledJobsResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata)