diff --git a/internal/common/eventutil/eventutil.go b/internal/common/eventutil/eventutil.go index a5eb49f9b61..5a87f3f6615 100644 --- a/internal/common/eventutil/eventutil.go +++ b/internal/common/eventutil/eventutil.go @@ -71,12 +71,11 @@ func UnmarshalEventSequence(ctx *armadacontext.Context, payload []byte) (*armada func ShortSequenceString(sequence *armadaevents.EventSequence) string { s := "" for _, event := range sequence.Events { - jobId, _ := armadaevents.JobIdFromEvent(event) - jobIdString, err := armadaevents.UlidStringFromProtoUuid(jobId) + jobId, err := armadaevents.JobIdFromEvent(event) if err != nil { - jobIdString = "" + jobId = "" } - s += fmt.Sprintf("[%T (job %s)] ", event.Event, jobIdString) + s += fmt.Sprintf("[%T (job %s)] ", event.Event, jobId) } return s } diff --git a/internal/common/ingest/testfixtures/event.go b/internal/common/ingest/testfixtures/event.go index 54c4cfe47a2..9de71d3834d 100644 --- a/internal/common/ingest/testfixtures/event.go +++ b/internal/common/ingest/testfixtures/event.go @@ -23,11 +23,7 @@ const ( ) var ( - JobIdProto, _ = armadaevents.ProtoUuidFromUlidString(JobIdString) - RunIdProto = armadaevents.ProtoUuidFromUuid(uuid.MustParse(RunIdString)) PartitionMarkerGroupIdProto = armadaevents.ProtoUuidFromUuid(uuid.MustParse(PartitionMarkerGroupIdString)) - JobIdUuid = armadaevents.UuidFromProtoUuid(JobIdProto) - RunIdUuid = armadaevents.UuidFromProtoUuid(RunIdProto) PartitionMarkerGroupIdUuid = armadaevents.UuidFromProtoUuid(PartitionMarkerGroupIdProto) PriorityClassName = "test-priority" Groups = []string{"group1", "group2"} @@ -84,7 +80,6 @@ var Submit = &armadaevents.EventSequence_Event{ Created: testfixtures.BasetimeProto, Event: &armadaevents.EventSequence_Event_SubmitJob{ SubmitJob: &armadaevents.SubmitJob{ - JobId: JobIdProto, JobIdStr: JobIdString, Priority: Priority, AtMostOnce: true, @@ -137,9 +132,7 @@ var Assigned = &armadaevents.EventSequence_Event{ Created: testfixtures.BasetimeProto, Event: &armadaevents.EventSequence_Event_JobRunAssigned{ JobRunAssigned: &armadaevents.JobRunAssigned{ - RunId: RunIdProto, RunIdStr: RunIdString, - JobId: JobIdProto, JobIdStr: JobIdString, ResourceInfos: []*armadaevents.KubernetesResourceInfo{ { @@ -164,9 +157,7 @@ var Leased = &armadaevents.EventSequence_Event{ Created: testfixtures.BasetimeProto, Event: &armadaevents.EventSequence_Event_JobRunLeased{ JobRunLeased: &armadaevents.JobRunLeased{ - RunId: RunIdProto, RunIdStr: RunIdString, - JobId: JobIdProto, JobIdStr: JobIdString, ExecutorId: ExecutorId, NodeId: NodeName, @@ -191,9 +182,7 @@ var Running = &armadaevents.EventSequence_Event{ Created: testfixtures.BasetimeProto, Event: &armadaevents.EventSequence_Event_JobRunRunning{ JobRunRunning: &armadaevents.JobRunRunning{ - RunId: RunIdProto, RunIdStr: RunIdString, - JobId: JobIdProto, JobIdStr: JobIdString, ResourceInfos: []*armadaevents.KubernetesResourceInfo{ { @@ -213,9 +202,7 @@ var JobRunSucceeded = &armadaevents.EventSequence_Event{ Created: testfixtures.BasetimeProto, Event: &armadaevents.EventSequence_Event_JobRunSucceeded{ JobRunSucceeded: &armadaevents.JobRunSucceeded{ - RunId: RunIdProto, RunIdStr: RunIdString, - JobId: JobIdProto, JobIdStr: JobIdString, }, }, @@ -225,9 +212,7 @@ var JobRunCancelled = &armadaevents.EventSequence_Event{ Created: testfixtures.BasetimeProto, Event: &armadaevents.EventSequence_Event_JobRunCancelled{ JobRunCancelled: &armadaevents.JobRunCancelled{ - RunId: RunIdProto, RunIdStr: RunIdString, - JobId: JobIdProto, JobIdStr: JobIdString, }, }, @@ -237,9 +222,7 @@ var LeaseReturned = &armadaevents.EventSequence_Event{ Created: testfixtures.BasetimeProto, Event: &armadaevents.EventSequence_Event_JobRunErrors{ JobRunErrors: &armadaevents.JobRunErrors{ - JobId: JobIdProto, JobIdStr: JobIdString, - RunId: RunIdProto, RunIdStr: RunIdString, Errors: []*armadaevents.Error{ { @@ -260,7 +243,6 @@ var JobCancelRequested = &armadaevents.EventSequence_Event{ Created: testfixtures.BasetimeProto, Event: &armadaevents.EventSequence_Event_CancelJob{ CancelJob: &armadaevents.CancelJob{ - JobId: JobIdProto, JobIdStr: JobIdString, }, }, @@ -277,7 +259,6 @@ var JobCancelled = &armadaevents.EventSequence_Event{ Created: testfixtures.BasetimeProto, Event: &armadaevents.EventSequence_Event_CancelledJob{ CancelledJob: &armadaevents.CancelledJob{ - JobId: JobIdProto, JobIdStr: JobIdString, }, }, @@ -287,7 +268,6 @@ var JobValidated = &armadaevents.EventSequence_Event{ Created: testfixtures.BasetimeProto, Event: &armadaevents.EventSequence_Event_JobValidated{ JobValidated: &armadaevents.JobValidated{ - JobId: JobIdProto, JobIdStr: JobIdString, Pools: []string{"cpu"}, }, @@ -298,7 +278,6 @@ var JobRequeued = &armadaevents.EventSequence_Event{ Created: testfixtures.BasetimeProto, Event: &armadaevents.EventSequence_Event_JobRequeued{ JobRequeued: &armadaevents.JobRequeued{ - JobId: JobIdProto, JobIdStr: JobIdString, SchedulingInfo: &schedulerobjects.JobSchedulingInfo{ Lifetime: 0, @@ -348,7 +327,6 @@ var JobReprioritiseRequested = &armadaevents.EventSequence_Event{ Created: testfixtures.BasetimeProto, Event: &armadaevents.EventSequence_Event_ReprioritiseJob{ ReprioritiseJob: &armadaevents.ReprioritiseJob{ - JobId: JobIdProto, JobIdStr: JobIdString, Priority: NewPriority, }, @@ -368,7 +346,6 @@ var JobReprioritised = &armadaevents.EventSequence_Event{ Created: testfixtures.BasetimeProto, Event: &armadaevents.EventSequence_Event_ReprioritisedJob{ ReprioritisedJob: &armadaevents.ReprioritisedJob{ - JobId: JobIdProto, JobIdStr: JobIdString, Priority: NewPriority, }, @@ -379,7 +356,6 @@ var JobPreemptionRequested = &armadaevents.EventSequence_Event{ Created: testfixtures.BasetimeProto, Event: &armadaevents.EventSequence_Event_JobPreemptionRequested{ JobPreemptionRequested: &armadaevents.JobPreemptionRequested{ - JobId: JobIdProto, JobIdStr: JobIdString, }, }, @@ -389,9 +365,7 @@ var JobRunPreempted = &armadaevents.EventSequence_Event{ Created: testfixtures.BasetimeProto, Event: &armadaevents.EventSequence_Event_JobRunPreempted{ JobRunPreempted: &armadaevents.JobRunPreempted{ - PreemptedJobId: JobIdProto, PreemptedJobIdStr: JobIdString, - PreemptedRunId: RunIdProto, PreemptedRunIdStr: RunIdString, }, }, @@ -401,9 +375,7 @@ var JobRunFailed = &armadaevents.EventSequence_Event{ Created: testfixtures.BasetimeProto, Event: &armadaevents.EventSequence_Event_JobRunErrors{ JobRunErrors: &armadaevents.JobRunErrors{ - JobId: JobIdProto, JobIdStr: JobIdString, - RunId: RunIdProto, RunIdStr: RunIdString, Errors: []*armadaevents.Error{ { @@ -428,9 +400,7 @@ var JobRunUnschedulable = &armadaevents.EventSequence_Event{ Created: testfixtures.BasetimeProto, Event: &armadaevents.EventSequence_Event_JobRunErrors{ JobRunErrors: &armadaevents.JobRunErrors{ - JobId: JobIdProto, JobIdStr: JobIdString, - RunId: RunIdProto, RunIdStr: RunIdString, Errors: []*armadaevents.Error{ { @@ -454,7 +424,6 @@ var JobPreempted = &armadaevents.EventSequence_Event{ Created: testfixtures.BasetimeProto, Event: &armadaevents.EventSequence_Event_JobErrors{ JobErrors: &armadaevents.JobErrors{ - JobId: JobIdProto, JobIdStr: JobIdString, Errors: []*armadaevents.Error{ { @@ -472,7 +441,6 @@ var JobRejected = &armadaevents.EventSequence_Event{ Created: testfixtures.BasetimeProto, Event: &armadaevents.EventSequence_Event_JobErrors{ JobErrors: &armadaevents.JobErrors{ - JobId: JobIdProto, JobIdStr: JobIdString, Errors: []*armadaevents.Error{ { @@ -492,7 +460,6 @@ var JobFailed = &armadaevents.EventSequence_Event{ Created: testfixtures.BasetimeProto, Event: &armadaevents.EventSequence_Event_JobErrors{ JobErrors: &armadaevents.JobErrors{ - JobId: JobIdProto, JobIdStr: JobIdString, Errors: []*armadaevents.Error{ { @@ -516,7 +483,6 @@ var JobSucceeded = &armadaevents.EventSequence_Event{ Created: testfixtures.BasetimeProto, Event: &armadaevents.EventSequence_Event_JobSucceeded{ JobSucceeded: &armadaevents.JobSucceeded{ - JobId: JobIdProto, JobIdStr: JobIdString, }, }, diff --git a/internal/executor/service/lease_requester.go b/internal/executor/service/lease_requester.go index 9c244626c6d..b69d743429d 100644 --- a/internal/executor/service/lease_requester.go +++ b/internal/executor/service/lease_requester.go @@ -4,6 +4,8 @@ import ( "fmt" "io" + armadaslices "github.com/armadaproject/armada/internal/common/slices" + grpcretry "github.com/grpc-ecosystem/go-grpc-middleware/retry" "github.com/pkg/errors" log "github.com/sirupsen/logrus" @@ -60,7 +62,10 @@ func (requester *JobLeaseRequester) LeaseJobRuns(ctx *armadacontext.Context, req Resources: request.AvailableResource.ToProtoMap(), Nodes: request.Nodes, UnassignedJobRunIds: request.UnassignedJobRunIds, - MaxJobsToLease: request.MaxJobsToLease, + UnassignedJobRunIdsStr: armadaslices.Map(request.UnassignedJobRunIds, func(uuid *armadaevents.Uuid) string { + return armadaevents.MustUuidStringFromProtoUuid(uuid) + }), + MaxJobsToLease: request.MaxJobsToLease, } if err := stream.Send(leaseRequest); err != nil { return nil, errors.WithStack(err) diff --git a/internal/executor/service/lease_requester_test.go b/internal/executor/service/lease_requester_test.go index 07757478968..254be4457b2 100644 --- a/internal/executor/service/lease_requester_test.go +++ b/internal/executor/service/lease_requester_test.go @@ -14,6 +14,7 @@ import ( "github.com/armadaproject/armada/internal/common/armadacontext" "github.com/armadaproject/armada/internal/common/mocks" armadaresource "github.com/armadaproject/armada/internal/common/resource" + armadaslices "github.com/armadaproject/armada/internal/common/slices" "github.com/armadaproject/armada/internal/executor/context/fake" "github.com/armadaproject/armada/pkg/api" "github.com/armadaproject/armada/pkg/armadaevents" @@ -108,7 +109,10 @@ func TestLeaseJobRuns_Send(t *testing.T) { Resources: leaseRequest.AvailableResource.ToProtoMap(), Nodes: leaseRequest.Nodes, UnassignedJobRunIds: leaseRequest.UnassignedJobRunIds, - MaxJobsToLease: leaseRequest.MaxJobsToLease, + UnassignedJobRunIdsStr: armadaslices.Map(leaseRequest.UnassignedJobRunIds, func(uuid *armadaevents.Uuid) string { + return armadaevents.MustUuidStringFromProtoUuid(uuid) + }), + MaxJobsToLease: leaseRequest.MaxJobsToLease, } jobRequester, mockExecutorApiClient, mockStream := setup(t) diff --git a/internal/lookoutingesterv2/instructions/instructions.go b/internal/lookoutingesterv2/instructions/instructions.go index aa9f9c5e28e..b3ddbd23e75 100644 --- a/internal/lookoutingesterv2/instructions/instructions.go +++ b/internal/lookoutingesterv2/instructions/instructions.go @@ -217,18 +217,12 @@ func (c *InstructionConverter) handleReprioritiseJob(ts time.Time, event *armada } func (c *InstructionConverter) handleCancelledJob(ts time.Time, event *armadaevents.CancelledJob, update *model.InstructionSet) error { - jobId, err := armadaevents.UlidStringFromProtoUuid(event.GetJobId()) - if err != nil { - c.metrics.RecordPulsarMessageError(metrics.PulsarMessageErrorProcessing) - return err - } - var reason *string if event.Reason != "" { reason = &event.Reason } jobUpdate := model.UpdateJobInstruction{ - JobId: jobId, + JobId: event.GetJobIdStr(), State: pointer.Int32(int32(lookout.JobCancelledOrdinal)), Cancelled: &ts, CancelReason: reason, @@ -283,19 +277,13 @@ func (c *InstructionConverter) handleJobErrors(ts time.Time, event *armadaevents } func (c *InstructionConverter) handleJobRunRunning(ts time.Time, event *armadaevents.JobRunRunning, update *model.InstructionSet) error { - runId, err := armadaevents.UuidStringFromProtoUuid(event.GetRunId()) - if err != nil { - c.metrics.RecordPulsarMessageError(metrics.PulsarMessageErrorProcessing) - return err - } - // Update Job job := model.UpdateJobInstruction{ JobId: event.JobIdStr, State: pointer.Int32(int32(lookout.JobRunningOrdinal)), LastTransitionTime: &ts, LastTransitionTimeSeconds: pointer.Int64(ts.Unix()), - LatestRunId: &runId, + LatestRunId: &event.RunIdStr, } update.JobsToUpdate = append(update.JobsToUpdate, &job) @@ -303,7 +291,7 @@ func (c *InstructionConverter) handleJobRunRunning(ts time.Time, event *armadaev // Update Job Run node := getNode(event.ResourceInfos) jobRun := model.UpdateJobRunInstruction{ - RunId: runId, + RunId: event.RunIdStr, Node: node, Started: &ts, JobRunState: pointer.Int32(lookout.JobRunRunningOrdinal), diff --git a/internal/lookoutingesterv2/instructions/instructions_test.go b/internal/lookoutingesterv2/instructions/instructions_test.go index 1e69d6fa66b..6b6f94c19a4 100644 --- a/internal/lookoutingesterv2/instructions/instructions_test.go +++ b/internal/lookoutingesterv2/instructions/instructions_test.go @@ -404,38 +404,14 @@ func TestConvert(t *testing.T) { MessageIds: []pulsar.MessageID{pulsarutils.NewMessageId(1)}, }, }, - "invalid event without job id or run id": { - events: &ingest.EventSequencesWithIds{ - EventSequences: []*armadaevents.EventSequence{ - testfixtures.NewEventSequence(&armadaevents.EventSequence_Event{ - Created: testfixtures.BaseTimeProto, - Event: &armadaevents.EventSequence_Event_JobRunRunning{ - JobRunRunning: &armadaevents.JobRunRunning{}, - }, - }), - testfixtures.NewEventSequence(submit), - }, - MessageIds: []pulsar.MessageID{ - pulsarutils.NewMessageId(1), - pulsarutils.NewMessageId(2), - }, - }, - expected: &model.InstructionSet{ - JobsToCreate: []*model.CreateJobInstruction{expectedSubmit}, - MessageIds: []pulsar.MessageID{ - pulsarutils.NewMessageId(1), - pulsarutils.NewMessageId(2), - }, - }, - }, "invalid event without created time": { events: &ingest.EventSequencesWithIds{ EventSequences: []*armadaevents.EventSequence{ testfixtures.NewEventSequence(&armadaevents.EventSequence_Event{ Event: &armadaevents.EventSequence_Event_JobRunRunning{ JobRunRunning: &armadaevents.JobRunRunning{ - RunId: testfixtures.RunIdProto, - JobId: testfixtures.JobIdProto, + RunIdStr: testfixtures.RunIdString, + JobIdStr: testfixtures.JobIdString, ResourceInfos: []*armadaevents.KubernetesResourceInfo{ { Info: &armadaevents.KubernetesResourceInfo_PodInfo{ diff --git a/internal/scheduler/api.go b/internal/scheduler/api.go index 983d52d4161..ab82d0602c7 100644 --- a/internal/scheduler/api.go +++ b/internal/scheduler/api.go @@ -174,12 +174,13 @@ func (srv *ExecutorApi) LeaseJobRuns(stream executorapi.ExecutorApi_LeaseJobRuns err := stream.Send(&executorapi.LeaseStreamMessage{ Event: &executorapi.LeaseStreamMessage_Lease{ Lease: &executorapi.JobRunLease{ - JobRunId: armadaevents.ProtoUuidFromUuid(lease.RunID), - Queue: lease.Queue, - Jobset: lease.JobSet, - User: lease.UserID, - Groups: groups, - Job: submitMsg, + JobRunId: armadaevents.MustProtoUuidFromUuidString(lease.RunID), + JobRunIdStr: lease.RunID, + Queue: lease.Queue, + Jobset: lease.JobSet, + User: lease.UserID, + Groups: groups, + Job: submitMsg, }, }, }) diff --git a/internal/scheduler/api_test.go b/internal/scheduler/api_test.go index 04dc7c04141..a2f93eb82fc 100644 --- a/internal/scheduler/api_test.go +++ b/internal/scheduler/api_test.go @@ -107,7 +107,7 @@ func TestExecutorApi_LeaseJobRuns(t *testing.T) { }, ) defaultLease := &database.JobRunLease{ - RunID: uuid.New(), + RunID: uuid.NewString(), Queue: "test-queue", JobSet: "test-jobset", UserID: "test-user", @@ -123,7 +123,7 @@ func TestExecutorApi_LeaseJobRuns(t *testing.T) { nil, ) leaseWithoutNode := &database.JobRunLease{ - RunID: uuid.New(), + RunID: uuid.NewString(), Queue: "test-queue", JobSet: "test-jobset", UserID: "test-user", @@ -142,7 +142,7 @@ func TestExecutorApi_LeaseJobRuns(t *testing.T) { }, ) preemptibleLease := &database.JobRunLease{ - RunID: uuid.New(), + RunID: uuid.NewString(), Queue: "test-queue", JobSet: "test-jobset", UserID: "test-user", @@ -159,7 +159,7 @@ func TestExecutorApi_LeaseJobRuns(t *testing.T) { }, } leaseWithOverlay := &database.JobRunLease{ - RunID: uuid.New(), + RunID: uuid.NewString(), Queue: "test-queue", JobSet: "test-jobset", UserID: "test-user", @@ -208,12 +208,13 @@ func TestExecutorApi_LeaseJobRuns(t *testing.T) { }, { Event: &executorapi.LeaseStreamMessage_Lease{Lease: &executorapi.JobRunLease{ - JobRunId: armadaevents.ProtoUuidFromUuid(defaultLease.RunID), - Queue: defaultLease.Queue, - Jobset: defaultLease.JobSet, - User: defaultLease.UserID, - Groups: groups, - Job: submit, + JobRunId: armadaevents.MustProtoUuidFromUuidString(defaultLease.RunID), + JobRunIdStr: defaultLease.RunID, + Queue: defaultLease.Queue, + Jobset: defaultLease.JobSet, + User: defaultLease.UserID, + Groups: groups, + Job: submit, }}, }, { @@ -228,12 +229,13 @@ func TestExecutorApi_LeaseJobRuns(t *testing.T) { expectedMsgs: []*executorapi.LeaseStreamMessage{ { Event: &executorapi.LeaseStreamMessage_Lease{Lease: &executorapi.JobRunLease{ - JobRunId: armadaevents.ProtoUuidFromUuid(leaseWithoutNode.RunID), - Queue: leaseWithoutNode.Queue, - Jobset: leaseWithoutNode.JobSet, - User: leaseWithoutNode.UserID, - Groups: groups, - Job: submitWithoutNodeSelector, + JobRunId: armadaevents.MustProtoUuidFromUuidString(leaseWithoutNode.RunID), + JobRunIdStr: leaseWithoutNode.RunID, + Queue: leaseWithoutNode.Queue, + Jobset: leaseWithoutNode.JobSet, + User: leaseWithoutNode.UserID, + Groups: groups, + Job: submitWithoutNodeSelector, }}, }, { @@ -248,12 +250,13 @@ func TestExecutorApi_LeaseJobRuns(t *testing.T) { expectedMsgs: []*executorapi.LeaseStreamMessage{ { Event: &executorapi.LeaseStreamMessage_Lease{Lease: &executorapi.JobRunLease{ - JobRunId: armadaevents.ProtoUuidFromUuid(leaseWithOverlay.RunID), - Queue: leaseWithOverlay.Queue, - Jobset: leaseWithOverlay.JobSet, - User: leaseWithOverlay.UserID, - Groups: groups, - Job: submitWithOverlay, + JobRunId: armadaevents.MustProtoUuidFromUuidString(leaseWithOverlay.RunID), + JobRunIdStr: leaseWithOverlay.RunID, + Queue: leaseWithOverlay.Queue, + Jobset: leaseWithOverlay.JobSet, + User: leaseWithOverlay.UserID, + Groups: groups, + Job: submitWithOverlay, }}, }, { @@ -268,12 +271,13 @@ func TestExecutorApi_LeaseJobRuns(t *testing.T) { expectedMsgs: []*executorapi.LeaseStreamMessage{ { Event: &executorapi.LeaseStreamMessage_Lease{Lease: &executorapi.JobRunLease{ - JobRunId: armadaevents.ProtoUuidFromUuid(preemptibleLease.RunID), - Queue: preemptibleLease.Queue, - Jobset: preemptibleLease.JobSet, - User: preemptibleLease.UserID, - Groups: groups, - Job: preemptibleSubmit, + JobRunId: armadaevents.MustProtoUuidFromUuidString(preemptibleLease.RunID), + JobRunIdStr: preemptibleLease.RunID, + Queue: preemptibleLease.Queue, + Jobset: preemptibleLease.JobSet, + User: preemptibleLease.UserID, + Groups: groups, + Job: preemptibleSubmit, }}, }, { diff --git a/internal/scheduler/database/db_pruner_test.go b/internal/scheduler/database/db_pruner_test.go index 7c19347d109..fa85029bb4b 100644 --- a/internal/scheduler/database/db_pruner_test.go +++ b/internal/scheduler/database/db_pruner_test.go @@ -27,7 +27,7 @@ func TestPruneDb_RemoveJobs(t *testing.T) { runs []Run errors []JobRunError expectedJobsPostPrune []string - expectedJobRunsPostPrune []uuid.UUID + expectedJobRunsPostPrune []string expectedErrorsPostPrune []JobRunError }{ "remove succeeded job": { @@ -76,7 +76,7 @@ func TestPruneDb_RemoveJobs(t *testing.T) { LastModified: expiredJobTime, }}, runs: []Run{{ - RunID: uuid.New(), + RunID: uuid.NewString(), JobID: "test-job", JobSet: "test-jobset", Running: true, @@ -93,7 +93,7 @@ func TestPruneDb_RemoveJobs(t *testing.T) { LastModified: expiredJobTime, }}, errors: []JobRunError{{ - RunID: uuid.New(), + RunID: uuid.NewString(), JobID: "test-job", Error: []byte{0x1}, }}, diff --git a/internal/scheduler/database/job_repository.go b/internal/scheduler/database/job_repository.go index 7d8daab315c..a9414c6880e 100644 --- a/internal/scheduler/database/job_repository.go +++ b/internal/scheduler/database/job_repository.go @@ -23,7 +23,7 @@ type hasSerial interface { } type JobRunLease struct { - RunID uuid.UUID + RunID string Queue string JobSet string UserID string @@ -106,7 +106,7 @@ func (r *PostgresJobRepository) FetchJobRunErrors(ctx *armadacontext.Context, ru } defer rows.Close() for rows.Next() { - var runId uuid.UUID + var runId string var errorBytes []byte err := rows.Scan(&runId, &errorBytes) if err != nil { @@ -116,7 +116,7 @@ func (r *PostgresJobRepository) FetchJobRunErrors(ctx *armadacontext.Context, ru if err != nil { return errors.WithStack(err) } - errorsByRunId[runId.String()] = jobError + errorsByRunId[runId] = jobError } } return nil @@ -219,12 +219,12 @@ func (r *PostgresJobRepository) FindInactiveRuns(ctx *armadacontext.Context, run } defer rows.Close() for rows.Next() { - runId := uuid.UUID{} + runId := "" err = rows.Scan(&runId) if err != nil { return errors.WithStack(err) } - inactiveRuns = append(inactiveRuns, runId.String()) + inactiveRuns = append(inactiveRuns, runId) } return nil }) @@ -315,7 +315,7 @@ func fetch[T hasSerial](from int64, batchSize int32, fetchBatch func(int64) ([]T func insertRunIdsToTmpTable(ctx *armadacontext.Context, tx pgx.Tx, runIds []string) (string, error) { tmpTable := database.UniqueTableName("job_runs") - _, err := tx.Exec(ctx, fmt.Sprintf("CREATE TEMPORARY TABLE %s (run_id uuid) ON COMMIT DROP", tmpTable)) + _, err := tx.Exec(ctx, fmt.Sprintf("CREATE TEMPORARY TABLE %s (run_id text) ON COMMIT DROP", tmpTable)) if err != nil { return "", errors.WithStack(err) } diff --git a/internal/scheduler/database/job_repository_test.go b/internal/scheduler/database/job_repository_test.go index 3de0ab76c4c..3ef099e31fc 100644 --- a/internal/scheduler/database/job_repository_test.go +++ b/internal/scheduler/database/job_repository_test.go @@ -131,7 +131,7 @@ func TestFetchJobRunErrors(t *testing.T) { } expectedErrors[i] = runError dbErrors[i] = JobRunError{ - RunID: uuid.New(), + RunID: uuid.NewString(), JobID: util.NewULID(), Error: protoutil.MustMarshallAndCompress(runError, compress.NewThreadSafeZlibCompressor(1024)), } @@ -145,25 +145,25 @@ func TestFetchJobRunErrors(t *testing.T) { }{ "single error": { errorsInDb: dbErrors, - idsToLookup: []string{dbErrors[1].RunID.String()}, - expected: map[string]*armadaevents.Error{dbErrors[1].RunID.String(): expectedErrors[1]}, + idsToLookup: []string{dbErrors[1].RunID}, + expected: map[string]*armadaevents.Error{dbErrors[1].RunID: expectedErrors[1]}, }, "multiple errors": { errorsInDb: dbErrors, - idsToLookup: []string{dbErrors[1].RunID.String(), dbErrors[4].RunID.String(), dbErrors[5].RunID.String(), dbErrors[7].RunID.String()}, + idsToLookup: []string{dbErrors[1].RunID, dbErrors[4].RunID, dbErrors[5].RunID, dbErrors[7].RunID}, expected: map[string]*armadaevents.Error{ - dbErrors[1].RunID.String(): expectedErrors[1], - dbErrors[4].RunID.String(): expectedErrors[4], - dbErrors[5].RunID.String(): expectedErrors[5], - dbErrors[7].RunID.String(): expectedErrors[7], + dbErrors[1].RunID: expectedErrors[1], + dbErrors[4].RunID: expectedErrors[4], + dbErrors[5].RunID: expectedErrors[5], + dbErrors[7].RunID: expectedErrors[7], }, }, "some errors missing": { errorsInDb: dbErrors, - idsToLookup: []string{dbErrors[1].RunID.String(), uuid.NewString(), uuid.NewString(), dbErrors[7].RunID.String()}, + idsToLookup: []string{dbErrors[1].RunID, uuid.NewString(), uuid.NewString(), dbErrors[7].RunID}, expected: map[string]*armadaevents.Error{ - dbErrors[1].RunID.String(): expectedErrors[1], - dbErrors[7].RunID.String(): expectedErrors[7], + dbErrors[1].RunID: expectedErrors[1], + dbErrors[7].RunID: expectedErrors[7], }, }, "all errors missing": { @@ -182,7 +182,7 @@ func TestFetchJobRunErrors(t *testing.T) { JobID: dbErrors[0].JobID, Error: []byte{0x1, 0x4, 0x5}, // not a valid compressed proto }}, - idsToLookup: []string{dbErrors[0].RunID.String()}, + idsToLookup: []string{dbErrors[0].RunID}, expectError: true, }, } @@ -298,11 +298,9 @@ func createTestJobs(numJobs int) ([]Job, []Job) { } func TestFindInactiveRuns(t *testing.T) { - stringIds := make([]string, 3) - uuids := make([]uuid.UUID, 3) - for i := 0; i < len(stringIds); i++ { - uuids[i] = uuid.New() - stringIds[i] = uuids[i].String() + runIds := make([]string, 3) + for i := 0; i < len(runIds); i++ { + runIds[i] = uuid.New().String() } tests := map[string]struct { @@ -311,52 +309,52 @@ func TestFindInactiveRuns(t *testing.T) { expectedInactive []string }{ "empty database": { - runsToCheck: stringIds, - expectedInactive: stringIds, + runsToCheck: runIds, + expectedInactive: runIds, }, "no inactive": { - runsToCheck: stringIds, + runsToCheck: runIds, dbRuns: []Run{ - {RunID: uuids[0]}, - {RunID: uuids[1]}, - {RunID: uuids[2]}, + {RunID: runIds[0]}, + {RunID: runIds[1]}, + {RunID: runIds[2]}, }, expectedInactive: nil, }, "run succeeded": { - runsToCheck: stringIds, + runsToCheck: runIds, dbRuns: []Run{ - {RunID: uuids[0]}, - {RunID: uuids[1], Succeeded: true}, - {RunID: uuids[2]}, + {RunID: runIds[0]}, + {RunID: runIds[1], Succeeded: true}, + {RunID: runIds[2]}, }, - expectedInactive: []string{stringIds[1]}, + expectedInactive: []string{runIds[1]}, }, "run failed": { - runsToCheck: stringIds, + runsToCheck: runIds, dbRuns: []Run{ - {RunID: uuids[0]}, - {RunID: uuids[1], Failed: true}, - {RunID: uuids[2]}, + {RunID: runIds[0]}, + {RunID: runIds[1], Failed: true}, + {RunID: runIds[2]}, }, - expectedInactive: []string{stringIds[1]}, + expectedInactive: []string{runIds[1]}, }, "run cancelled": { - runsToCheck: stringIds, + runsToCheck: runIds, dbRuns: []Run{ - {RunID: uuids[0]}, - {RunID: uuids[1], Cancelled: true}, - {RunID: uuids[2]}, + {RunID: runIds[0]}, + {RunID: runIds[1], Cancelled: true}, + {RunID: runIds[2]}, }, - expectedInactive: []string{stringIds[1]}, + expectedInactive: []string{runIds[1]}, }, "run missing": { - runsToCheck: stringIds, + runsToCheck: runIds, dbRuns: []Run{ - {RunID: uuids[0]}, - {RunID: uuids[2]}, + {RunID: runIds[0]}, + {RunID: runIds[2]}, }, - expectedInactive: []string{stringIds[1]}, + expectedInactive: []string{runIds[1]}, }, } for name, tc := range tests { @@ -389,25 +387,25 @@ func TestFetchJobRunLeases(t *testing.T) { // last three runs are not available dbRuns := []Run{ { - RunID: uuid.New(), + RunID: uuid.NewString(), JobID: dbJobs[0].JobID, JobSet: "test-jobset", Executor: executorName, }, { - RunID: uuid.New(), + RunID: uuid.NewString(), JobID: dbJobs[1].JobID, JobSet: "test-jobset", Executor: executorName, }, { - RunID: uuid.New(), + RunID: uuid.NewString(), JobID: dbJobs[2].JobID, JobSet: "test-jobset", Executor: executorName, }, { - RunID: uuid.New(), + RunID: uuid.NewString(), JobID: dbJobs[2].JobID, JobSet: "test-jobset", Executor: executorName, @@ -424,21 +422,21 @@ func TestFetchJobRunLeases(t *testing.T) { ), }, { - RunID: uuid.New(), + RunID: uuid.NewString(), JobID: dbJobs[0].JobID, JobSet: "test-jobset", Executor: executorName, Failed: true, // should be ignored as terminal }, { - RunID: uuid.New(), + RunID: uuid.NewString(), JobID: dbJobs[0].JobID, JobSet: "test-jobset", Executor: executorName, Cancelled: true, // should be ignored as terminal }, { - RunID: uuid.New(), + RunID: uuid.NewString(), JobID: dbJobs[3].JobID, JobSet: "test-jobset", Executor: executorName, @@ -484,7 +482,7 @@ func TestFetchJobRunLeases(t *testing.T) { "exclude one run": { dbJobs: dbJobs, dbRuns: dbRuns, - excludedRuns: []string{dbRuns[1].RunID.String()}, + excludedRuns: []string{dbRuns[1].RunID}, maxRowsToFetch: 100, executor: executorName, expectedLeases: []*JobRunLease{expectedLeases[0], expectedLeases[2], expectedLeases[3]}, @@ -492,7 +490,7 @@ func TestFetchJobRunLeases(t *testing.T) { "exclude everything": { dbJobs: dbJobs, dbRuns: dbRuns, - excludedRuns: []string{dbRuns[0].RunID.String(), dbRuns[1].RunID.String(), dbRuns[2].RunID.String(), dbRuns[3].RunID.String()}, + excludedRuns: []string{dbRuns[0].RunID, dbRuns[1].RunID, dbRuns[2].RunID, dbRuns[3].RunID}, maxRowsToFetch: 100, executor: executorName, expectedLeases: nil, @@ -520,9 +518,9 @@ func TestFetchJobRunLeases(t *testing.T) { leases, err := repo.FetchJobRunLeases(ctx, tc.executor, tc.maxRowsToFetch, tc.excludedRuns) require.NoError(t, err) leaseSort := func(a *JobRunLease, b *JobRunLease) int { - if a.RunID.String() > b.RunID.String() { + if a.RunID > b.RunID { return -1 - } else if a.RunID.String() < b.RunID.String() { + } else if a.RunID < b.RunID { return 1 } else { return 0 @@ -545,7 +543,7 @@ func createTestRuns(numRuns int) ([]Run, []Run) { for i := 0; i < numRuns; i++ { dbRuns[i] = Run{ - RunID: uuid.New(), + RunID: uuid.NewString(), JobID: util.NewULID(), JobSet: "test-jobset", Executor: "test-executor", diff --git a/internal/scheduler/database/migrations/014_change_runid_type.sql b/internal/scheduler/database/migrations/014_change_runid_type.sql new file mode 100644 index 00000000000..fab0875f7ec --- /dev/null +++ b/internal/scheduler/database/migrations/014_change_runid_type.sql @@ -0,0 +1,2 @@ +ALTER TABLE runs ALTER COLUMN run_id TYPE text USING run_id::text; +ALTER TABLE job_run_errors ALTER COLUMN run_id TYPE text USING run_id::text; diff --git a/internal/scheduler/database/models.go b/internal/scheduler/database/models.go index 811ce18864d..1326b191ce5 100644 --- a/internal/scheduler/database/models.go +++ b/internal/scheduler/database/models.go @@ -41,9 +41,9 @@ type Job struct { } type JobRunError struct { - RunID uuid.UUID `db:"run_id"` - JobID string `db:"job_id"` - Error []byte `db:"error"` + RunID string `db:"run_id"` + JobID string `db:"job_id"` + Error []byte `db:"error"` } type Marker struct { @@ -52,13 +52,8 @@ type Marker struct { Created time.Time `db:"created"` } -type Queue struct { - Name string `db:"name"` - Weight float64 `db:"weight"` -} - type Run struct { - RunID uuid.UUID `db:"run_id"` + RunID string `db:"run_id"` JobID string `db:"job_id"` Created int64 `db:"created"` JobSet string `db:"job_set"` diff --git a/internal/scheduler/database/query.sql.go b/internal/scheduler/database/query.sql.go index d746b886a2c..263075ed987 100644 --- a/internal/scheduler/database/query.sql.go +++ b/internal/scheduler/database/query.sql.go @@ -33,19 +33,19 @@ func (q *Queries) DeleteOldMarkers(ctx context.Context, cutoff time.Time) error } const findActiveRuns = `-- name: FindActiveRuns :many -SELECT run_id FROM runs WHERE run_id = ANY($1::UUID[]) +SELECT run_id FROM runs WHERE run_id = ANY($1::text[]) AND (succeeded = false AND failed = false AND cancelled = false) ` -func (q *Queries) FindActiveRuns(ctx context.Context, runIds []uuid.UUID) ([]uuid.UUID, error) { +func (q *Queries) FindActiveRuns(ctx context.Context, runIds []string) ([]string, error) { rows, err := q.db.Query(ctx, findActiveRuns, runIds) if err != nil { return nil, err } defer rows.Close() - var items []uuid.UUID + var items []string for rows.Next() { - var run_id uuid.UUID + var run_id string if err := rows.Scan(&run_id); err != nil { return nil, err } @@ -73,19 +73,19 @@ func (q *Queries) InsertMarker(ctx context.Context, arg InsertMarkerParams) erro } const markJobRunsAttemptedById = `-- name: MarkJobRunsAttemptedById :exec -UPDATE runs SET run_attempted = true WHERE run_id = ANY($1::UUID[]) +UPDATE runs SET run_attempted = true WHERE run_id = ANY($1::text[]) ` -func (q *Queries) MarkJobRunsAttemptedById(ctx context.Context, runIds []uuid.UUID) error { +func (q *Queries) MarkJobRunsAttemptedById(ctx context.Context, runIds []string) error { _, err := q.db.Exec(ctx, markJobRunsAttemptedById, runIds) return err } const markJobRunsFailedById = `-- name: MarkJobRunsFailedById :exec -UPDATE runs SET failed = true WHERE run_id = ANY($1::UUID[]) +UPDATE runs SET failed = true WHERE run_id = ANY($1::text[]) ` -func (q *Queries) MarkJobRunsFailedById(ctx context.Context, runIds []uuid.UUID) error { +func (q *Queries) MarkJobRunsFailedById(ctx context.Context, runIds []string) error { _, err := q.db.Exec(ctx, markJobRunsFailedById, runIds) return err } @@ -106,28 +106,28 @@ func (q *Queries) MarkJobRunsPreemptRequestedByJobId(ctx context.Context, arg Ma } const markJobRunsReturnedById = `-- name: MarkJobRunsReturnedById :exec -UPDATE runs SET returned = true WHERE run_id = ANY($1::UUID[]) +UPDATE runs SET returned = true WHERE run_id = ANY($1::text[]) ` -func (q *Queries) MarkJobRunsReturnedById(ctx context.Context, runIds []uuid.UUID) error { +func (q *Queries) MarkJobRunsReturnedById(ctx context.Context, runIds []string) error { _, err := q.db.Exec(ctx, markJobRunsReturnedById, runIds) return err } const markJobRunsRunningById = `-- name: MarkJobRunsRunningById :exec -UPDATE runs SET running = true WHERE run_id = ANY($1::UUID[]) +UPDATE runs SET running = true WHERE run_id = ANY($1::text[]) ` -func (q *Queries) MarkJobRunsRunningById(ctx context.Context, runIds []uuid.UUID) error { +func (q *Queries) MarkJobRunsRunningById(ctx context.Context, runIds []string) error { _, err := q.db.Exec(ctx, markJobRunsRunningById, runIds) return err } const markJobRunsSucceededById = `-- name: MarkJobRunsSucceededById :exec -UPDATE runs SET succeeded = true WHERE run_id = ANY($1::UUID[]) +UPDATE runs SET succeeded = true WHERE run_id = ANY($1::text[]) ` -func (q *Queries) MarkJobRunsSucceededById(ctx context.Context, runIds []uuid.UUID) error { +func (q *Queries) MarkJobRunsSucceededById(ctx context.Context, runIds []string) error { _, err := q.db.Exec(ctx, markJobRunsSucceededById, runIds) return err } @@ -298,15 +298,15 @@ const selectAllRunIds = `-- name: SelectAllRunIds :many SELECT run_id FROM runs ` -func (q *Queries) SelectAllRunIds(ctx context.Context) ([]uuid.UUID, error) { +func (q *Queries) SelectAllRunIds(ctx context.Context) ([]string, error) { rows, err := q.db.Query(ctx, selectAllRunIds) if err != nil { return nil, err } defer rows.Close() - var items []uuid.UUID + var items []string for rows.Next() { - var run_id uuid.UUID + var run_id string if err := rows.Scan(&run_id); err != nil { return nil, err } @@ -353,22 +353,22 @@ FROM runs jr JOIN jobs j ON jr.job_id = j.job_id WHERE jr.executor = $1 - AND jr.run_id NOT IN ($2::UUID[]) + AND jr.run_id NOT IN ($2::text[]) AND jr.succeeded = false AND jr.failed = false AND jr.cancelled = false ` type SelectJobsForExecutorParams struct { - Executor string `db:"executor"` - RunIds []uuid.UUID `db:"run_ids"` + Executor string `db:"executor"` + RunIds []string `db:"run_ids"` } type SelectJobsForExecutorRow struct { - RunID uuid.UUID `db:"run_id"` - Queue string `db:"queue"` - JobSet string `db:"job_set"` - UserID string `db:"user_id"` - Groups []byte `db:"groups"` - SubmitMessage []byte `db:"submit_message"` + RunID string `db:"run_id"` + Queue string `db:"queue"` + JobSet string `db:"job_set"` + UserID string `db:"user_id"` + Groups []byte `db:"groups"` + SubmitMessage []byte `db:"submit_message"` } func (q *Queries) SelectJobsForExecutor(ctx context.Context, arg SelectJobsForExecutorParams) ([]SelectJobsForExecutorRow, error) { @@ -562,11 +562,11 @@ func (q *Queries) SelectNewRunsForJobs(ctx context.Context, arg SelectNewRunsFor } const selectRunErrorsById = `-- name: SelectRunErrorsById :many -SELECT run_id, job_id, error FROM job_run_errors WHERE run_id = ANY($1::UUID[]) +SELECT run_id, job_id, error FROM job_run_errors WHERE run_id = ANY($1::text[]) ` // Run errors -func (q *Queries) SelectRunErrorsById(ctx context.Context, runIds []uuid.UUID) ([]JobRunError, error) { +func (q *Queries) SelectRunErrorsById(ctx context.Context, runIds []string) ([]JobRunError, error) { rows, err := q.db.Query(ctx, selectRunErrorsById, runIds) if err != nil { return nil, err @@ -659,7 +659,7 @@ UPDATE runs SET leased_timestamp = $1 WHERE run_id = $2 type SetLeasedTimeParams struct { LeasedTimestamp *time.Time `db:"leased_timestamp"` - RunID uuid.UUID `db:"run_id"` + RunID string `db:"run_id"` } func (q *Queries) SetLeasedTime(ctx context.Context, arg SetLeasedTimeParams) error { @@ -673,7 +673,7 @@ UPDATE runs SET pending_timestamp = $1 WHERE run_id = $2 type SetPendingTimeParams struct { PendingTimestamp *time.Time `db:"pending_timestamp"` - RunID uuid.UUID `db:"run_id"` + RunID string `db:"run_id"` } func (q *Queries) SetPendingTime(ctx context.Context, arg SetPendingTimeParams) error { @@ -687,7 +687,7 @@ UPDATE runs SET running_timestamp = $1 WHERE run_id = $2 type SetRunningTimeParams struct { RunningTimestamp *time.Time `db:"running_timestamp"` - RunID uuid.UUID `db:"run_id"` + RunID string `db:"run_id"` } func (q *Queries) SetRunningTime(ctx context.Context, arg SetRunningTimeParams) error { @@ -701,7 +701,7 @@ UPDATE runs SET terminated_timestamp = $1 WHERE run_id = $2 type SetTerminatedTimeParams struct { TerminatedTimestamp *time.Time `db:"terminated_timestamp"` - RunID uuid.UUID `db:"run_id"` + RunID string `db:"run_id"` } func (q *Queries) SetTerminatedTime(ctx context.Context, arg SetTerminatedTimeParams) error { diff --git a/internal/scheduler/database/query/query.sql b/internal/scheduler/database/query/query.sql index 91504e1ea84..48d70b8b630 100644 --- a/internal/scheduler/database/query/query.sql +++ b/internal/scheduler/database/query/query.sql @@ -41,19 +41,19 @@ SELECT * FROM runs WHERE serial > $1 AND job_id = ANY(sqlc.arg(job_ids)::text[]) UPDATE runs SET preempt_requested = true WHERE queue = sqlc.arg(queue) and job_set = sqlc.arg(job_set) and job_id = ANY(sqlc.arg(job_ids)::text[]); -- name: MarkJobRunsSucceededById :exec -UPDATE runs SET succeeded = true WHERE run_id = ANY(sqlc.arg(run_ids)::UUID[]); +UPDATE runs SET succeeded = true WHERE run_id = ANY(sqlc.arg(run_ids)::text[]); -- name: MarkJobRunsFailedById :exec -UPDATE runs SET failed = true WHERE run_id = ANY(sqlc.arg(run_ids)::UUID[]); +UPDATE runs SET failed = true WHERE run_id = ANY(sqlc.arg(run_ids)::text[]); -- name: MarkJobRunsReturnedById :exec -UPDATE runs SET returned = true WHERE run_id = ANY(sqlc.arg(run_ids)::UUID[]); +UPDATE runs SET returned = true WHERE run_id = ANY(sqlc.arg(run_ids)::text[]); -- name: MarkJobRunsAttemptedById :exec -UPDATE runs SET run_attempted = true WHERE run_id = ANY(sqlc.arg(run_ids)::UUID[]); +UPDATE runs SET run_attempted = true WHERE run_id = ANY(sqlc.arg(run_ids)::text[]); -- name: MarkJobRunsRunningById :exec -UPDATE runs SET running = true WHERE run_id = ANY(sqlc.arg(run_ids)::UUID[]); +UPDATE runs SET running = true WHERE run_id = ANY(sqlc.arg(run_ids)::text[]); -- name: MarkRunsCancelledByJobId :exec UPDATE runs SET cancelled = true WHERE job_id = ANY(sqlc.arg(job_ids)::text[]); @@ -64,11 +64,11 @@ FROM runs jr JOIN jobs j ON jr.job_id = j.job_id WHERE jr.executor = $1 - AND jr.run_id NOT IN (sqlc.arg(run_ids)::UUID[]) + AND jr.run_id NOT IN (sqlc.arg(run_ids)::text[]) AND jr.succeeded = false AND jr.failed = false AND jr.cancelled = false; -- name: FindActiveRuns :many -SELECT run_id FROM runs WHERE run_id = ANY(sqlc.arg(run_ids)::UUID[]) +SELECT run_id FROM runs WHERE run_id = ANY(sqlc.arg(run_ids)::text[]) AND (succeeded = false AND failed = false AND cancelled = false); -- name: CountGroup :one @@ -85,7 +85,7 @@ INSERT INTO markers (group_id, partition_id, created) VALUES ($1, $2, $3) ON CON -- Run errors -- name: SelectRunErrorsById :many -SELECT * FROM job_run_errors WHERE run_id = ANY(sqlc.arg(run_ids)::UUID[]); +SELECT * FROM job_run_errors WHERE run_id = ANY(sqlc.arg(run_ids)::text[]); -- name: SelectAllRunErrors :many SELECT * FROM job_run_errors; diff --git a/internal/scheduler/jobdb/reconciliation.go b/internal/scheduler/jobdb/reconciliation.go index 8513feae9cf..37a8c0e3193 100644 --- a/internal/scheduler/jobdb/reconciliation.go +++ b/internal/scheduler/jobdb/reconciliation.go @@ -158,7 +158,7 @@ func (jobDb *JobDb) reconcileJobDifferences(job *Job, jobRepoJob *database.Job, // Reconcile run state transitions. for _, jobRepoRun := range jobRepoRuns { - rst := jobDb.reconcileRunDifferences(job.RunById(jobRepoRun.RunID.String()), jobRepoRun) + rst := jobDb.reconcileRunDifferences(job.RunById(jobRepoRun.RunID), jobRepoRun) jst = jst.applyRunStateTransitions(rst) job = job.WithUpdatedRun(rst.JobRun) } @@ -293,7 +293,7 @@ func (jobDb *JobDb) schedulerJobFromDatabaseJob(dbJob *database.Job) (*Job, erro func (jobDb *JobDb) schedulerRunFromDatabaseRun(dbRun *database.Run) *JobRun { nodeId := api.NodeIdFromExecutorAndNodeName(dbRun.Executor, dbRun.Node) return jobDb.CreateRun( - dbRun.RunID.String(), + dbRun.RunID, dbRun.JobID, dbRun.Created, dbRun.Executor, diff --git a/internal/scheduler/publisher.go b/internal/scheduler/publisher.go index c0729463158..cd9d4a4c201 100644 --- a/internal/scheduler/publisher.go +++ b/internal/scheduler/publisher.go @@ -88,8 +88,9 @@ func (p *PulsarPublisher) PublishMessages(ctx *armadacontext.Context, events []* func (p *PulsarPublisher) PublishMarkers(ctx *armadacontext.Context, groupId uuid.UUID) (uint32, error) { for i := 0; i < p.numPartitions; i++ { pm := &armadaevents.PartitionMarker{ - GroupId: armadaevents.ProtoUuidFromUuid(groupId), - Partition: uint32(i), + GroupId: armadaevents.ProtoUuidFromUuid(groupId), + GroupIdStr: groupId.String(), + Partition: uint32(i), } es := &armadaevents.EventSequence{ Queue: "armada-scheduler", diff --git a/internal/scheduler/scheduler_test.go b/internal/scheduler/scheduler_test.go index 933f1b36997..d7a6a068c6c 100644 --- a/internal/scheduler/scheduler_test.go +++ b/internal/scheduler/scheduler_test.go @@ -225,15 +225,17 @@ var defaultJobError = &armadaevents.Error{ }, } -func defaultJobRunError(jobId string, runId uuid.UUID) *armadaevents.JobRunErrors { +func defaultJobRunError(jobId string, runId string) *armadaevents.JobRunErrors { protoJobId, err := armadaevents.ProtoUuidFromUlidString(jobId) if err != nil { panic(err) } - protoRunId := armadaevents.ProtoUuidFromUuid(runId) + protoRunId := armadaevents.MustProtoUuidFromUuidString(runId) return &armadaevents.JobRunErrors{ - RunId: protoRunId, - JobId: protoJobId, + RunId: protoRunId, + JobId: protoJobId, + JobIdStr: jobId, + RunIdStr: runId, Errors: []*armadaevents.Error{ defaultJobError, }, @@ -457,7 +459,7 @@ func TestScheduler_TestCycle(t *testing.T) { }, runUpdates: []database.Run{ { - RunID: uuid.MustParse(requeuedJob.LatestRun().Id()), + RunID: requeuedJob.LatestRun().Id(), JobID: requeuedJob.Id(), JobSet: "testJobSet", Executor: "testExecutor", @@ -475,7 +477,7 @@ func TestScheduler_TestCycle(t *testing.T) { initialJobs: []*jobdb.Job{leasedJob}, runUpdates: []database.Run{ { - RunID: uuid.MustParse(leasedJob.LatestRun().Id()), + RunID: leasedJob.LatestRun().Id(), JobID: leasedJob.Id(), JobSet: "testJobSet", Executor: "testExecutor", @@ -496,7 +498,7 @@ func TestScheduler_TestCycle(t *testing.T) { initialJobs: []*jobdb.Job{leasedJob}, runUpdates: []database.Run{ { - RunID: uuid.MustParse(leasedJob.LatestRun().Id()), + RunID: leasedJob.LatestRun().Id(), JobID: leasedJob.Id(), JobSet: "testJobSet", Executor: "testExecutor", @@ -516,7 +518,7 @@ func TestScheduler_TestCycle(t *testing.T) { initialJobs: []*jobdb.Job{leasedJob.WithValidated(true)}, runUpdates: []database.Run{ { - RunID: uuid.MustParse(leasedJob.LatestRun().Id()), + RunID: leasedJob.LatestRun().Id(), JobID: leasedJob.Id(), JobSet: "testJobSet", Executor: "testExecutor", @@ -538,7 +540,7 @@ func TestScheduler_TestCycle(t *testing.T) { initialJobs: []*jobdb.Job{returnedOnceLeasedJob}, runUpdates: []database.Run{ { - RunID: uuid.MustParse(returnedOnceLeasedJob.LatestRun().Id()), + RunID: returnedOnceLeasedJob.LatestRun().Id(), JobID: returnedOnceLeasedJob.Id(), JobSet: "testJobSet", Executor: "testExecutor", @@ -561,7 +563,7 @@ func TestScheduler_TestCycle(t *testing.T) { // Fail fast should mean there is only ever 1 attempted run runUpdates: []database.Run{ { - RunID: uuid.MustParse(leasedFailFastJob.LatestRun().Id()), + RunID: leasedFailFastJob.LatestRun().Id(), JobID: leasedFailFastJob.Id(), JobSet: "testJobSet", Executor: "testExecutor", @@ -598,7 +600,7 @@ func TestScheduler_TestCycle(t *testing.T) { initialJobs: []*jobdb.Job{preemptibleLeasedJob}, runUpdates: []database.Run{ { - RunID: uuid.MustParse(preemptibleLeasedJob.LatestRun().Id()), + RunID: preemptibleLeasedJob.LatestRun().Id(), JobID: preemptibleLeasedJob.Id(), JobSet: "testJobSet", Executor: "testExecutor", @@ -616,7 +618,7 @@ func TestScheduler_TestCycle(t *testing.T) { initialJobs: []*jobdb.Job{leasedJob}, runUpdates: []database.Run{ { - RunID: uuid.MustParse(leasedJob.LatestRun().Id()), + RunID: leasedJob.LatestRun().Id(), JobID: leasedJob.Id(), JobSet: "testJobSet", Executor: "testExecutor", @@ -740,7 +742,7 @@ func TestScheduler_TestCycle(t *testing.T) { initialJobs: []*jobdb.Job{leasedJob}, runUpdates: []database.Run{ { - RunID: uuid.MustParse(leasedJob.LatestRun().Id()), + RunID: leasedJob.LatestRun().Id(), JobID: leasedJob.Id(), JobSet: "testJobSet", Executor: "testExecutor", @@ -759,7 +761,7 @@ func TestScheduler_TestCycle(t *testing.T) { initialJobs: []*jobdb.Job{leasedJob}, runUpdates: []database.Run{ { - RunID: uuid.MustParse(leasedJob.LatestRun().Id()), + RunID: leasedJob.LatestRun().Id(), JobID: leasedJob.Id(), JobSet: "testJobSet", Executor: "testExecutor", @@ -959,11 +961,7 @@ func createAntiAffinity(t *testing.T, key string, values []string) *v1.Affinity func subtractEventsFromOutstandingEventsByType(eventSequences []*armadaevents.EventSequence, outstandingEventsByType map[string]map[string]bool) error { for _, eventSequence := range eventSequences { for _, event := range eventSequence.Events { - protoJobId, err := armadaevents.JobIdFromEvent(event) - if err != nil { - return err - } - jobId, err := armadaevents.UlidStringFromProtoUuid(protoJobId) + jobId, err := armadaevents.JobIdFromEvent(event) if err != nil { return err } @@ -1106,7 +1104,7 @@ func TestScheduler_TestSyncState(t *testing.T) { }, runUpdates: []database.Run{ { - RunID: uuid.MustParse(leasedJob.LatestRun().Id()), + RunID: leasedJob.LatestRun().Id(), JobID: queuedJob.Id(), JobSet: queuedJob.Jobset(), Executor: "test-executor", @@ -1164,7 +1162,7 @@ func TestScheduler_TestSyncState(t *testing.T) { }, runUpdates: []database.Run{ { - RunID: uuid.MustParse(leasedJob.LatestRun().Id()), + RunID: leasedJob.LatestRun().Id(), JobID: leasedJob.LatestRun().JobId(), JobSet: leasedJob.Jobset(), Succeeded: true, @@ -1579,7 +1577,7 @@ var ( Serial: 0, } newRunA = &database.Run{ - RunID: testfixtures.UUIDFromInt(1), + RunID: testfixtures.UUIDFromInt(1).String(), JobID: queuedJobA.JobID, JobSet: queuedJobA.JobSet, Executor: testExecutor, @@ -1589,7 +1587,7 @@ var ( ScheduledAtPriority: &scheduledAtPriority, } successfulRunA = &database.Run{ - RunID: testfixtures.UUIDFromInt(1), + RunID: testfixtures.UUIDFromInt(1).String(), JobID: queuedJobA.JobID, JobSet: queuedJobA.JobSet, Executor: testExecutor, @@ -1600,7 +1598,7 @@ var ( ScheduledAtPriority: &scheduledAtPriority, } failedAttemptedRunA = &database.Run{ - RunID: testfixtures.UUIDFromInt(1), + RunID: testfixtures.UUIDFromInt(1).String(), JobID: queuedJobA.JobID, JobSet: queuedJobA.JobSet, Executor: testExecutor, @@ -1611,7 +1609,7 @@ var ( ScheduledAtPriority: &scheduledAtPriority, } failedRunA = &database.Run{ - RunID: testfixtures.UUIDFromInt(1), + RunID: testfixtures.UUIDFromInt(1).String(), JobID: queuedJobA.JobID, JobSet: queuedJobA.JobSet, Executor: testExecutor, @@ -1621,7 +1619,7 @@ var ( ScheduledAtPriority: &scheduledAtPriority, } failedReturnedRunA = &database.Run{ - RunID: testfixtures.UUIDFromInt(1), + RunID: testfixtures.UUIDFromInt(1).String(), JobID: queuedJobA.JobID, JobSet: queuedJobA.JobSet, Executor: testExecutor, diff --git a/internal/scheduleringester/dbops.go b/internal/scheduleringester/dbops.go index e1a6e8cb407..c40746f9a6b 100644 --- a/internal/scheduleringester/dbops.go +++ b/internal/scheduleringester/dbops.go @@ -4,7 +4,6 @@ import ( "time" "github.com/apache/pulsar-client-go/pulsar" - "github.com/google/uuid" "golang.org/x/exp/maps" schedulerdb "github.com/armadaproject/armada/internal/scheduler/database" @@ -122,7 +121,7 @@ func discardNilOps(ops []DbOperation) []DbOperation { type ( InsertJobs map[string]*schedulerdb.Job - InsertRuns map[uuid.UUID]*JobRunDetails + InsertRuns map[string]*JobRunDetails UpdateJobSetPriorities map[JobSetKey]int64 MarkJobSetsCancelRequested map[JobSetKey]*JobSetCancelAction MarkJobsCancelRequested map[JobSetKey][]string @@ -131,13 +130,13 @@ type ( MarkJobsFailed map[string]bool UpdateJobSchedulingInfo map[string]*JobSchedulingInfoUpdate UpdateJobQueuedState map[string]*JobQueuedStateUpdate - MarkRunsSucceeded map[uuid.UUID]time.Time - MarkRunsFailed map[uuid.UUID]*JobRunFailed + MarkRunsSucceeded map[string]time.Time + MarkRunsFailed map[string]*JobRunFailed MarkRunsForJobPreemptRequested map[JobSetKey][]string - MarkRunsRunning map[uuid.UUID]time.Time - MarkRunsPending map[uuid.UUID]time.Time - MarkRunsPreempted map[uuid.UUID]time.Time - InsertJobRunErrors map[uuid.UUID]*schedulerdb.JobRunError + MarkRunsRunning map[string]time.Time + MarkRunsPending map[string]time.Time + MarkRunsPreempted map[string]time.Time + InsertJobRunErrors map[string]*schedulerdb.JobRunError UpdateJobPriorities struct { key JobReprioritiseKey jobIds []string @@ -472,7 +471,7 @@ func definesJob[M ~map[string]V, V any](a M, b DbOperation) bool { // definesRun returns true if b is an InsertRuns operation // that inserts at least one run with id equal to any of the keys of a. -func definesRun[M ~map[uuid.UUID]V, V any](a M, b DbOperation) bool { +func definesRun[M ~map[string]V, V any](a M, b DbOperation) bool { if op, ok := b.(InsertRuns); ok { for _, run := range op { if _, ok := a[run.DbRun.RunID]; ok { diff --git a/internal/scheduleringester/dbops_test.go b/internal/scheduleringester/dbops_test.go index a3228674399..ab389f5575b 100644 --- a/internal/scheduleringester/dbops_test.go +++ b/internal/scheduleringester/dbops_test.go @@ -140,9 +140,9 @@ func TestDbOperationOptimisation(t *testing.T) { for i := range jobIds { jobIds[i] = util.NewULID() } - runIds := make([]uuid.UUID, 10) + runIds := make([]string, 10) for i := range runIds { - runIds[i] = uuid.New() + runIds[i] = uuid.NewString() } tests := map[string]struct { N int // Expected number of ops after optimisation. @@ -369,13 +369,13 @@ func TestInsertJobRequestCancel(t *testing.T) { type mockDb struct { Jobs map[string]*schedulerdb.Job - Runs map[uuid.UUID]*schedulerdb.Run + Runs map[string]*schedulerdb.Run } func newMockDb() *mockDb { return &mockDb{ Jobs: make(map[string]*schedulerdb.Job), - Runs: make(map[uuid.UUID]*schedulerdb.Run), + Runs: make(map[string]*schedulerdb.Run), } } diff --git a/internal/scheduleringester/instructions.go b/internal/scheduleringester/instructions.go index 9fe4c1466ce..7653977e9b0 100644 --- a/internal/scheduleringester/instructions.go +++ b/internal/scheduleringester/instructions.go @@ -130,14 +130,7 @@ func (c *InstructionConverter) dbOperationsFromEventSequence(es *armadaevents.Ev } func (c *InstructionConverter) handleSubmitJob(job *armadaevents.SubmitJob, submitTime time.Time, meta eventSequenceCommon) ([]DbOperation, error) { - jobId, err := armadaevents.UlidStringFromProtoUuid(job.JobId) - if err != nil { - return nil, err - } - if job.IsDuplicate { - log.Debugf("job %s is a duplicate, ignoring", jobId) - return nil, nil - } + jobId := job.JobIdStr // Store the job submit message so that it can be sent to an executor. submitJobBytes, err := proto.Marshal(job) @@ -182,11 +175,7 @@ func (c *InstructionConverter) handleSubmitJob(job *armadaevents.SubmitJob, subm } func (c *InstructionConverter) handleJobRunLeased(jobRunLeased *armadaevents.JobRunLeased, eventTime time.Time, meta eventSequenceCommon) ([]DbOperation, error) { - runId := armadaevents.UuidFromProtoUuid(jobRunLeased.GetRunId()) - jobId, err := armadaevents.UlidStringFromProtoUuid(jobRunLeased.GetJobId()) - if err != nil { - return nil, err - } + runId := jobRunLeased.RunIdStr var scheduledAtPriority *int32 if jobRunLeased.HasScheduledAtPriority { scheduledAtPriority = &jobRunLeased.ScheduledAtPriority @@ -200,7 +189,7 @@ func (c *InstructionConverter) handleJobRunLeased(jobRunLeased *armadaevents.Job Queue: meta.queue, DbRun: &schedulerdb.Run{ RunID: runId, - JobID: jobId, + JobID: jobRunLeased.JobIdStr, Created: eventTime.UnixNano(), JobSet: meta.jobset, Queue: meta.queue, @@ -212,7 +201,7 @@ func (c *InstructionConverter) handleJobRunLeased(jobRunLeased *armadaevents.Job PodRequirementsOverlay: PodRequirementsOverlay, }, }}, - UpdateJobQueuedState{jobId: &JobQueuedStateUpdate{ + UpdateJobQueuedState{jobRunLeased.JobIdStr: &JobQueuedStateUpdate{ Queued: false, QueuedStateVersion: jobRunLeased.UpdateSequenceNumber, }}, @@ -224,16 +213,12 @@ func (c *InstructionConverter) handleJobRequeued(jobRequeued *armadaevents.JobRe if err != nil { return nil, errors.WithStack(err) } - jobId, err := armadaevents.UlidStringFromProtoUuid(jobRequeued.GetJobId()) - if err != nil { - return nil, err - } return []DbOperation{ - UpdateJobQueuedState{jobId: &JobQueuedStateUpdate{ + UpdateJobQueuedState{jobRequeued.JobIdStr: &JobQueuedStateUpdate{ Queued: true, QueuedStateVersion: jobRequeued.UpdateSequenceNumber, }}, - UpdateJobSchedulingInfo{jobId: &JobSchedulingInfoUpdate{ + UpdateJobSchedulingInfo{jobRequeued.JobIdStr: &JobSchedulingInfoUpdate{ JobSchedulingInfo: schedulingInfoBytes, JobSchedulingInfoVersion: int32(jobRequeued.SchedulingInfo.Version), }}, @@ -241,31 +226,28 @@ func (c *InstructionConverter) handleJobRequeued(jobRequeued *armadaevents.JobRe } func (c *InstructionConverter) handleJobRunRunning(jobRunRunning *armadaevents.JobRunRunning, runningTime time.Time) ([]DbOperation, error) { - runId := armadaevents.UuidFromProtoUuid(jobRunRunning.GetRunId()) + runId := jobRunRunning.RunIdStr return []DbOperation{MarkRunsRunning{runId: runningTime}}, nil } func (c *InstructionConverter) handleJobRunSucceeded(jobRunSucceeded *armadaevents.JobRunSucceeded, successTime time.Time) ([]DbOperation, error) { - runId := armadaevents.UuidFromProtoUuid(jobRunSucceeded.GetRunId()) + runId := jobRunSucceeded.RunIdStr return []DbOperation{MarkRunsSucceeded{runId: successTime}}, nil } func (c *InstructionConverter) handleJobRunPreempted(jobRunPreempted *armadaevents.JobRunPreempted, preemptedTime time.Time) ([]DbOperation, error) { - runId := armadaevents.UuidFromProtoUuid(jobRunPreempted.PreemptedRunId) + runId := jobRunPreempted.PreemptedRunIdStr return []DbOperation{MarkRunsPreempted{runId: preemptedTime}}, nil } func (c *InstructionConverter) handleJobRunAssigned(jobRunAssigned *armadaevents.JobRunAssigned, assignedTime time.Time) ([]DbOperation, error) { - runId := armadaevents.UuidFromProtoUuid(jobRunAssigned.GetRunId()) + runId := jobRunAssigned.RunIdStr return []DbOperation{MarkRunsPending{runId: assignedTime}}, nil } func (c *InstructionConverter) handleJobRunErrors(jobRunErrors *armadaevents.JobRunErrors, failureTime time.Time) ([]DbOperation, error) { - runId := armadaevents.UuidFromProtoUuid(jobRunErrors.GetRunId()) - jobId, err := armadaevents.UlidStringFromProtoUuid(jobRunErrors.JobId) - if err != nil { - return nil, err - } + runId := jobRunErrors.RunIdStr + jobId := jobRunErrors.JobIdStr insertJobRunErrors := make(InsertJobRunErrors) markRunsFailed := make(MarkRunsFailed) for _, runError := range jobRunErrors.GetErrors() { @@ -296,25 +278,17 @@ func (c *InstructionConverter) handleJobRunErrors(jobRunErrors *armadaevents.Job } func (c *InstructionConverter) handleJobSucceeded(jobSucceeded *armadaevents.JobSucceeded) ([]DbOperation, error) { - jobId, err := armadaevents.UlidStringFromProtoUuid(jobSucceeded.GetJobId()) - if err != nil { - return nil, err - } return []DbOperation{MarkJobsSucceeded{ - jobId: true, + jobSucceeded.JobIdStr: true, }}, nil } func (c *InstructionConverter) handleJobErrors(jobErrors *armadaevents.JobErrors) ([]DbOperation, error) { - jobId, err := armadaevents.UlidStringFromProtoUuid(jobErrors.GetJobId()) - if err != nil { - return nil, err - } for _, jobError := range jobErrors.GetErrors() { // For terminal errors, we also need to mark the job as failed. if jobError.GetTerminal() { markJobsFailed := make(MarkJobsFailed) - markJobsFailed[jobId] = true + markJobsFailed[jobErrors.JobIdStr] = true return []DbOperation{markJobsFailed}, nil } } @@ -322,23 +296,15 @@ func (c *InstructionConverter) handleJobErrors(jobErrors *armadaevents.JobErrors } func (c *InstructionConverter) handleJobPreemptionRequested(preemptionRequested *armadaevents.JobPreemptionRequested, meta eventSequenceCommon) ([]DbOperation, error) { - jobId, err := armadaevents.UlidStringFromProtoUuid(preemptionRequested.GetJobId()) - if err != nil { - return nil, err - } return []DbOperation{MarkRunsForJobPreemptRequested{ JobSetKey{ queue: meta.queue, jobSet: meta.jobset, - }: []string{jobId}, + }: []string{preemptionRequested.JobIdStr}, }}, nil } func (c *InstructionConverter) handleReprioritiseJob(reprioritiseJob *armadaevents.ReprioritiseJob, meta eventSequenceCommon) ([]DbOperation, error) { - jobId, err := armadaevents.UlidStringFromProtoUuid(reprioritiseJob.GetJobId()) - if err != nil { - return nil, err - } return []DbOperation{&UpdateJobPriorities{ key: JobReprioritiseKey{ JobSetKey: JobSetKey{ @@ -347,7 +313,7 @@ func (c *InstructionConverter) handleReprioritiseJob(reprioritiseJob *armadaeven }, Priority: int64(reprioritiseJob.Priority), }, - jobIds: []string{jobId}, + jobIds: []string{reprioritiseJob.JobIdStr}, }}, nil } @@ -358,15 +324,11 @@ func (c *InstructionConverter) handleReprioritiseJobSet(reprioritiseJobSet *arma } func (c *InstructionConverter) handleCancelJob(cancelJob *armadaevents.CancelJob, meta eventSequenceCommon) ([]DbOperation, error) { - jobId, err := armadaevents.UlidStringFromProtoUuid(cancelJob.GetJobId()) - if err != nil { - return nil, err - } return []DbOperation{MarkJobsCancelRequested{ JobSetKey{ queue: meta.queue, jobSet: meta.jobset, - }: []string{jobId}, + }: []string{cancelJob.JobIdStr}, }}, nil } @@ -386,12 +348,8 @@ func (c *InstructionConverter) handleCancelJobSet(cancelJobSet *armadaevents.Can } func (c *InstructionConverter) handleCancelledJob(cancelledJob *armadaevents.CancelledJob, cancelTime time.Time) ([]DbOperation, error) { - jobId, err := armadaevents.UlidStringFromProtoUuid(cancelledJob.GetJobId()) - if err != nil { - return nil, err - } return []DbOperation{MarkJobsCancelled{ - jobId: cancelTime, + cancelledJob.JobIdStr: cancelTime, }}, nil } @@ -408,12 +366,8 @@ func (c *InstructionConverter) handlePartitionMarker(pm *armadaevents.PartitionM } func (c *InstructionConverter) handleJobValidated(checked *armadaevents.JobValidated) ([]DbOperation, error) { - jobId, err := armadaevents.UlidStringFromProtoUuid(checked.GetJobId()) - if err != nil { - return nil, err - } return []DbOperation{ - MarkJobsValidated{jobId: checked.Pools}, + MarkJobsValidated{checked.JobIdStr: checked.Pools}, }, nil } diff --git a/internal/scheduleringester/instructions_test.go b/internal/scheduleringester/instructions_test.go index 89e3065e9bf..ccd0caddbff 100644 --- a/internal/scheduleringester/instructions_test.go +++ b/internal/scheduleringester/instructions_test.go @@ -50,8 +50,8 @@ func TestConvertSequence(t *testing.T) { "job run leased": { events: []*armadaevents.EventSequence_Event{f.Leased}, expected: []DbOperation{ - InsertRuns{f.RunIdUuid: &JobRunDetails{Queue: f.Queue, DbRun: &schedulerdb.Run{ - RunID: f.RunIdUuid, + InsertRuns{f.RunIdString: &JobRunDetails{Queue: f.Queue, DbRun: &schedulerdb.Run{ + RunID: f.RunIdString, JobID: f.JobIdString, JobSet: f.JobSetName, Queue: f.Queue, @@ -71,15 +71,15 @@ func TestConvertSequence(t *testing.T) { }, "job run running": { events: []*armadaevents.EventSequence_Event{f.Running}, - expected: []DbOperation{MarkRunsRunning{f.RunIdUuid: f.BaseTime}}, + expected: []DbOperation{MarkRunsRunning{f.RunIdString: f.BaseTime}}, }, "job run succeeded": { events: []*armadaevents.EventSequence_Event{f.JobRunSucceeded}, - expected: []DbOperation{MarkRunsSucceeded{f.RunIdUuid: f.BaseTime}}, + expected: []DbOperation{MarkRunsSucceeded{f.RunIdString: f.BaseTime}}, }, "job run pending": { events: []*armadaevents.EventSequence_Event{f.Assigned}, - expected: []DbOperation{MarkRunsPending{f.RunIdUuid: f.BaseTime}}, + expected: []DbOperation{MarkRunsPending{f.RunIdString: f.BaseTime}}, }, "job preemption requested": { events: []*armadaevents.EventSequence_Event{f.JobPreemptionRequested}, @@ -87,28 +87,28 @@ func TestConvertSequence(t *testing.T) { }, "job run preempted": { events: []*armadaevents.EventSequence_Event{f.JobRunPreempted}, - expected: []DbOperation{MarkRunsPreempted{f.RunIdUuid: f.BaseTime}}, + expected: []DbOperation{MarkRunsPreempted{f.RunIdString: f.BaseTime}}, }, "lease returned": { events: []*armadaevents.EventSequence_Event{f.LeaseReturned}, expected: []DbOperation{ - InsertJobRunErrors{f.RunIdUuid: &schedulerdb.JobRunError{ - RunID: f.RunIdUuid, + InsertJobRunErrors{f.RunIdString: &schedulerdb.JobRunError{ + RunID: f.RunIdString, JobID: f.JobIdString, Error: protoutil.MustMarshallAndCompress(f.LeaseReturned.GetJobRunErrors().Errors[0], compressor), }}, - MarkRunsFailed{f.RunIdUuid: &JobRunFailed{LeaseReturned: true, RunAttempted: true, FailureTime: f.BaseTime}}, + MarkRunsFailed{f.RunIdString: &JobRunFailed{LeaseReturned: true, RunAttempted: true, FailureTime: f.BaseTime}}, }, }, "job failed": { events: []*armadaevents.EventSequence_Event{f.JobRunFailed}, expected: []DbOperation{ - InsertJobRunErrors{f.RunIdUuid: &schedulerdb.JobRunError{ - RunID: f.RunIdUuid, + InsertJobRunErrors{f.RunIdString: &schedulerdb.JobRunError{ + RunID: f.RunIdString, JobID: f.JobIdString, Error: protoutil.MustMarshallAndCompress(f.JobRunFailed.GetJobRunErrors().Errors[0], compressor), }}, - MarkRunsFailed{f.RunIdUuid: &JobRunFailed{LeaseReturned: false, RunAttempted: true, FailureTime: f.BaseTime}}, + MarkRunsFailed{f.RunIdString: &JobRunFailed{LeaseReturned: false, RunAttempted: true, FailureTime: f.BaseTime}}, }, }, "job errors terminal": { @@ -212,7 +212,7 @@ func TestConvertSequence(t *testing.T) { events: []*armadaevents.EventSequence_Event{f.JobSetCancelRequested, f.Running, f.JobSucceeded}, expected: []DbOperation{ MarkJobSetsCancelRequested{JobSetKey{queue: f.Queue, jobSet: f.JobSetName}: &JobSetCancelAction{cancelQueued: true, cancelLeased: true}}, - MarkRunsRunning{f.RunIdUuid: f.BaseTime}, + MarkRunsRunning{f.RunIdString: f.BaseTime}, MarkJobsSucceeded{f.JobIdString: true}, }, }, @@ -220,10 +220,10 @@ func TestConvertSequence(t *testing.T) { events: multipleEventsMultipleTimeStamps(), expected: []DbOperation{ MarkJobsCancelled{f.JobIdString: f.BaseTime}, - MarkRunsSucceeded{f.RunIdUuid: f.BaseTime}, - MarkRunsRunning{f.RunIdUuid: f.BaseTime}, + MarkRunsSucceeded{f.RunIdString: f.BaseTime}, + MarkRunsRunning{f.RunIdString: f.BaseTime}, MarkJobsCancelled{f.JobIdString: f.BaseTime.Add(time.Hour)}, - MarkRunsSucceeded{f.RunIdUuid: f.BaseTime.Add(time.Hour)}, + MarkRunsSucceeded{f.RunIdString: f.BaseTime.Add(time.Hour)}, }, }, } diff --git a/internal/scheduleringester/schedulerdb.go b/internal/scheduleringester/schedulerdb.go index ef74b5ac4f7..69c77a3cd41 100644 --- a/internal/scheduleringester/schedulerdb.go +++ b/internal/scheduleringester/schedulerdb.go @@ -4,7 +4,6 @@ import ( "fmt" "time" - "github.com/google/uuid" "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgxpool" "github.com/pkg/errors" @@ -239,7 +238,7 @@ func (s *SchedulerDb) WriteDbOp(ctx *armadacontext.Context, tx pgx.Tx, op DbOper case MarkRunsSucceeded: successTimes := make([]interface{}, 0, len(o)) succeeded := make([]bool, 0, len(o)) - runIds := make([]uuid.UUID, 0, len(o)) + runIds := make([]string, 0, len(o)) for runId, successTime := range o { successTimes = append(successTimes, successTime) runIds = append(runIds, runId) @@ -251,11 +250,11 @@ func (s *SchedulerDb) WriteDbOp(ctx *armadacontext.Context, tx pgx.Tx, op DbOper return errors.WithStack(err) } case MarkRunsFailed: - runIds := make([]uuid.UUID, 0, len(o)) + runIds := make([]string, 0, len(o)) failTimes := make([]interface{}, 0, len(o)) failed := make([]bool, 0, len(o)) - returned := make([]uuid.UUID, 0) - runAttempted := make([]uuid.UUID, 0) + returned := make([]string, 0) + runAttempted := make([]string, 0) for k, v := range o { runIds = append(runIds, k) failTimes = append(failTimes, v.FailureTime) @@ -280,7 +279,7 @@ func (s *SchedulerDb) WriteDbOp(ctx *armadacontext.Context, tx pgx.Tx, op DbOper return errors.WithStack(err) } case MarkRunsRunning: - runIds := make([]uuid.UUID, 0, len(o)) + runIds := make([]string, 0, len(o)) runningTimes := make([]interface{}, 0, len(runIds)) running := make([]bool, 0, len(runIds)) for runId, failTime := range o { @@ -294,7 +293,7 @@ func (s *SchedulerDb) WriteDbOp(ctx *armadacontext.Context, tx pgx.Tx, op DbOper return errors.WithStack(err) } case MarkRunsPending: - runIds := make([]uuid.UUID, 0, len(o)) + runIds := make([]string, 0, len(o)) pendingTimes := make([]interface{}, 0, len(o)) pending := make([]bool, 0, len(o)) for runId, pendingTime := range o { @@ -307,7 +306,7 @@ func (s *SchedulerDb) WriteDbOp(ctx *armadacontext.Context, tx pgx.Tx, op DbOper return errors.WithStack(err) } case MarkRunsPreempted: - runIds := make([]uuid.UUID, 0, len(o)) + runIds := make([]string, 0, len(o)) preemptedTimes := make([]interface{}, 0, len(o)) preempted := make([]bool, 0, len(o)) for runId, preemptedTime := range o { @@ -372,15 +371,11 @@ func execBatch(ctx *armadacontext.Context, tx pgx.Tx, batch *pgx.Batch) error { } func multiColumnRunsUpdateStmt(id, phaseColumn, timeStampColumn string) string { - idPgType := "uuid" - if id == "job_id" { - idPgType = "text" - } return fmt.Sprintf(`update runs set %[2]v = runs_temp.%[2]v, %[3]v = runs_temp.%[3]v from (select * from unnest($1::%[4]v[], $2::boolean[] ,$3::timestamptz[])) as runs_temp(%[1]v, %[2]v, %[3]v) where runs.%[1]v = runs_temp.%[1]v;`, - id, phaseColumn, timeStampColumn, idPgType) + id, phaseColumn, timeStampColumn, "text") } diff --git a/internal/scheduleringester/schedulerdb_test.go b/internal/scheduleringester/schedulerdb_test.go index 9ad4ea7e2f5..bd725b92994 100644 --- a/internal/scheduleringester/schedulerdb_test.go +++ b/internal/scheduleringester/schedulerdb_test.go @@ -24,11 +24,11 @@ import ( func TestWriteOps(t *testing.T) { jobIds := make([]string, 10) for i := range jobIds { - jobIds[i] = util.ULID().String() + jobIds[i] = util.NewULID() } - runIds := make([]uuid.UUID, 10) + runIds := make([]string, 10) for i := range runIds { - runIds[i] = uuid.New() + runIds[i] = uuid.NewString() } scheduledAtPriorities := []int32{5, 10} tests := map[string]struct { @@ -792,7 +792,7 @@ func assertOpSuccess(t *testing.T, schedulerDb *SchedulerDb, serials map[string] func TestStore(t *testing.T) { jobId := util.ULID().String() - runId := uuid.New() + runId := uuid.NewString() ops := []DbOperation{ InsertJobs{ jobId: &schedulerdb.Job{ @@ -820,7 +820,7 @@ func TestStore(t *testing.T) { runIds, err := q.SelectAllRunIds(ctx) require.NoError(t, err) - require.Equal(t, []uuid.UUID{runId}, runIds) + require.Equal(t, []string{runId}, runIds) return nil }) diff --git a/pkg/armadaevents/events.pb.go b/pkg/armadaevents/events.pb.go index 911eb35d0b4..709637338c5 100644 --- a/pkg/armadaevents/events.pb.go +++ b/pkg/armadaevents/events.pb.go @@ -3588,6 +3588,8 @@ func (m *JobRunPreempted) GetPreemptedRunIdStr() string { type PartitionMarker struct { // group id ties together multiple messages across different partitions GroupId *Uuid `protobuf:"bytes,1,opt,name=group_id,json=groupId,proto3" json:"groupId,omitempty"` + // string group id + GroupIdStr string `protobuf:"bytes,3,opt,name=group_id_str,json=groupIdStr,proto3" json:"groupIdStr,omitempty"` // The pulsar partition on which this message was sent Partition uint32 `protobuf:"varint,2,opt,name=partition,proto3" json:"partition,omitempty"` } @@ -3632,6 +3634,13 @@ func (m *PartitionMarker) GetGroupId() *Uuid { return nil } +func (m *PartitionMarker) GetGroupIdStr() string { + if m != nil { + return m.GroupIdStr + } + return "" +} + func (m *PartitionMarker) GetPartition() uint32 { if m != nil { return m.Partition @@ -3953,245 +3962,246 @@ func init() { func init() { proto.RegisterFile("pkg/armadaevents/events.proto", fileDescriptor_6aab92ca59e015f8) } var fileDescriptor_6aab92ca59e015f8 = []byte{ - // 3808 bytes of a gzipped FileDescriptorProto + // 3824 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3c, 0x4d, 0x6f, 0x1b, 0x47, 0x96, 0x6e, 0x92, 0xe2, 0xc7, 0xa3, 0x3e, 0xe8, 0xd2, 0x87, 0x69, 0x25, 0x16, 0x65, 0x3a, 0xbb, - 0xb1, 0x83, 0x84, 0x4a, 0x14, 0x27, 0xc8, 0xc7, 0x22, 0x81, 0x68, 0x2b, 0xb6, 0x15, 0xcb, 0x56, - 0x28, 0x2b, 0xeb, 0x0d, 0xb2, 0x60, 0x9a, 0xec, 0x12, 0xd5, 0x16, 0xd9, 0xcd, 0xf4, 0x87, 0x22, - 0x01, 0x39, 0x6c, 0x16, 0xc1, 0xee, 0x2d, 0xc8, 0x65, 0x81, 0xc5, 0x5e, 0xb2, 0xc7, 0xdd, 0x19, - 0x04, 0x03, 0xcc, 0x61, 0x2e, 0x33, 0x83, 0xb9, 0xcc, 0x61, 0x06, 0x18, 0x0c, 0x72, 0x9c, 0xcb, - 0x10, 0x03, 0x67, 0x66, 0x0e, 0x04, 0x66, 0xfe, 0xc1, 0x00, 0x83, 0xfa, 0xe8, 0xee, 0xaa, 0x66, - 0xd1, 0xa6, 0x25, 0xcb, 0x4e, 0x90, 0x9c, 0xec, 0x7e, 0x9f, 0x55, 0xf5, 0x5e, 0xbd, 0x7a, 0xef, - 0x55, 0x51, 0x70, 0xa6, 0xbb, 0xdb, 0x5a, 0xd2, 0x9d, 0x8e, 0x6e, 0xe8, 0x78, 0x0f, 0x5b, 0x9e, - 0xbb, 0xc4, 0xfe, 0xa9, 0x74, 0x1d, 0xdb, 0xb3, 0xd1, 0xb8, 0x88, 0x9a, 0x2f, 0xef, 0xbe, 0xe2, - 0x56, 0x4c, 0x7b, 0x49, 0xef, 0x9a, 0x4b, 0x4d, 0xdb, 0xc1, 0x4b, 0x7b, 0x2f, 0x2c, 0xb5, 0xb0, - 0x85, 0x1d, 0xdd, 0xc3, 0x06, 0xe3, 0x98, 0x3f, 0x2f, 0xd0, 0x58, 0xd8, 0xfb, 0xc8, 0x76, 0x76, - 0x4d, 0xab, 0xa5, 0xa2, 0x2c, 0xb5, 0x6c, 0xbb, 0xd5, 0xc6, 0x4b, 0xf4, 0xab, 0xe1, 0x6f, 0x2f, - 0x79, 0x66, 0x07, 0xbb, 0x9e, 0xde, 0xe9, 0x72, 0x82, 0x8b, 0x91, 0xa8, 0x8e, 0xde, 0xdc, 0x31, - 0x2d, 0xec, 0x1c, 0x2c, 0xd1, 0xf1, 0x76, 0xcd, 0x25, 0x07, 0xbb, 0xb6, 0xef, 0x34, 0xf1, 0x80, - 0xd8, 0xd7, 0x4c, 0xcb, 0xc3, 0x8e, 0xa5, 0xb7, 0x97, 0xdc, 0xe6, 0x0e, 0x36, 0xfc, 0x36, 0x76, - 0xa2, 0xff, 0xd9, 0x8d, 0x3b, 0xb8, 0xe9, 0xb9, 0x03, 0x00, 0xc6, 0x5b, 0xfe, 0xfd, 0x2c, 0x4c, - 0xac, 0x92, 0xb9, 0x6e, 0xe2, 0x0f, 0x7d, 0x6c, 0x35, 0x31, 0xba, 0x00, 0x63, 0x1f, 0xfa, 0xd8, - 0xc7, 0x45, 0x6d, 0x51, 0x3b, 0x9f, 0xab, 0x4e, 0xf7, 0x7b, 0xa5, 0x29, 0x0a, 0x78, 0xd6, 0xee, - 0x98, 0x1e, 0xee, 0x74, 0xbd, 0x83, 0x1a, 0xa3, 0x40, 0xaf, 0xc1, 0xf8, 0x1d, 0xbb, 0x51, 0x77, - 0xb1, 0x57, 0xb7, 0xf4, 0x0e, 0x2e, 0x26, 0x28, 0x47, 0xb1, 0xdf, 0x2b, 0xcd, 0xdc, 0xb1, 0x1b, - 0x9b, 0xd8, 0xbb, 0xa1, 0x77, 0x44, 0x36, 0x88, 0xa0, 0xe8, 0x39, 0xc8, 0xf8, 0x2e, 0x76, 0xea, - 0xa6, 0x51, 0x4c, 0x52, 0xb6, 0x99, 0x7e, 0xaf, 0x54, 0x20, 0xa0, 0x6b, 0x86, 0xc0, 0x92, 0x66, - 0x10, 0xf4, 0x2c, 0xa4, 0x5b, 0x8e, 0xed, 0x77, 0xdd, 0x62, 0x6a, 0x31, 0x19, 0x50, 0x33, 0x88, - 0x48, 0xcd, 0x20, 0xe8, 0x26, 0xa4, 0x99, 0x01, 0x8b, 0x63, 0x8b, 0xc9, 0xf3, 0xf9, 0xe5, 0xb3, - 0x15, 0xd1, 0xaa, 0x15, 0x69, 0xc2, 0xec, 0x8b, 0x09, 0x64, 0x78, 0x51, 0x20, 0xf7, 0x83, 0x9f, - 0x4c, 0xc3, 0x18, 0xa5, 0x43, 0x6f, 0x43, 0xa6, 0xe9, 0x60, 0xb2, 0xfa, 0x45, 0xb4, 0xa8, 0x9d, - 0xcf, 0x2f, 0xcf, 0x57, 0x98, 0x55, 0x2b, 0x81, 0x55, 0x2b, 0xb7, 0x02, 0xab, 0x56, 0x67, 0xfb, - 0xbd, 0xd2, 0x49, 0x4e, 0x2e, 0x48, 0x0d, 0x24, 0xa0, 0x0d, 0xc8, 0xb9, 0x7e, 0xa3, 0x63, 0x7a, - 0x6b, 0x76, 0x83, 0xae, 0x77, 0x7e, 0xf9, 0x94, 0x3c, 0xd4, 0xcd, 0x00, 0x5d, 0x3d, 0xd5, 0xef, - 0x95, 0xa6, 0x43, 0xea, 0x48, 0xda, 0xd5, 0x13, 0xb5, 0x48, 0x08, 0xda, 0x81, 0x29, 0x07, 0x77, - 0x1d, 0xd3, 0x76, 0x4c, 0xcf, 0x74, 0x31, 0x91, 0x9b, 0xa0, 0x72, 0xcf, 0xc8, 0x72, 0x6b, 0x32, - 0x51, 0xf5, 0x4c, 0xbf, 0x57, 0x3a, 0x1d, 0xe3, 0x94, 0x74, 0xc4, 0xc5, 0x22, 0x0f, 0x50, 0x0c, - 0xb4, 0x89, 0x3d, 0x6a, 0xcb, 0xfc, 0xf2, 0xe2, 0x3d, 0x95, 0x6d, 0x62, 0xaf, 0xba, 0xd8, 0xef, - 0x95, 0x9e, 0x1c, 0xe4, 0x97, 0x54, 0x2a, 0xe4, 0xa3, 0x36, 0x14, 0x44, 0xa8, 0x41, 0x26, 0x98, - 0xa2, 0x3a, 0x17, 0x86, 0xeb, 0x24, 0x54, 0xd5, 0x85, 0x7e, 0xaf, 0x34, 0x1f, 0xe7, 0x95, 0xf4, - 0x0d, 0x48, 0x26, 0xf6, 0x69, 0xea, 0x56, 0x13, 0xb7, 0x89, 0x9a, 0x31, 0x95, 0x7d, 0x2e, 0x05, - 0x68, 0x66, 0x9f, 0x90, 0x5a, 0xb6, 0x4f, 0x08, 0x46, 0xef, 0xc3, 0x78, 0xf8, 0x41, 0xd6, 0x2b, - 0xcd, 0x7d, 0x48, 0x2d, 0x94, 0xac, 0xd4, 0x7c, 0xbf, 0x57, 0x9a, 0x13, 0x79, 0x24, 0xd1, 0x92, - 0xb4, 0x48, 0x7a, 0x9b, 0xad, 0x4c, 0x66, 0xb8, 0x74, 0x46, 0x21, 0x4a, 0x6f, 0x0f, 0xae, 0x88, - 0x24, 0x8d, 0x48, 0x27, 0x1b, 0xd8, 0x6f, 0x36, 0x31, 0x36, 0xb0, 0x51, 0xcc, 0xaa, 0xa4, 0xaf, - 0x09, 0x14, 0x4c, 0xba, 0xc8, 0x23, 0x4b, 0x17, 0x31, 0x64, 0xad, 0xef, 0xd8, 0x8d, 0x55, 0xc7, - 0xb1, 0x1d, 0xb7, 0x98, 0x53, 0xad, 0xf5, 0x5a, 0x80, 0x66, 0x6b, 0x1d, 0x52, 0xcb, 0x6b, 0x1d, - 0x82, 0xf9, 0x78, 0x6b, 0xbe, 0x75, 0x1d, 0xeb, 0x2e, 0x36, 0x8a, 0x30, 0x64, 0xbc, 0x21, 0x45, - 0x38, 0xde, 0x10, 0x32, 0x30, 0xde, 0x10, 0x83, 0x0c, 0x98, 0x64, 0xdf, 0x2b, 0xae, 0x6b, 0xb6, - 0x2c, 0x6c, 0x14, 0xf3, 0x54, 0xfe, 0x93, 0x2a, 0xf9, 0x01, 0x4d, 0xf5, 0xc9, 0x7e, 0xaf, 0x54, - 0x94, 0xf9, 0x24, 0x1d, 0x31, 0x99, 0xe8, 0x03, 0x98, 0x60, 0x90, 0x9a, 0x6f, 0x59, 0xa6, 0xd5, - 0x2a, 0x8e, 0x53, 0x25, 0x4f, 0xa8, 0x94, 0x70, 0x92, 0xea, 0x13, 0xfd, 0x5e, 0xe9, 0x94, 0xc4, - 0x25, 0xa9, 0x90, 0x05, 0x92, 0x88, 0xc1, 0x00, 0x91, 0x61, 0x27, 0x54, 0x11, 0x63, 0x4d, 0x26, - 0x62, 0x11, 0x23, 0xc6, 0x29, 0x47, 0x8c, 0x18, 0x32, 0xb2, 0x07, 0x37, 0xf2, 0xe4, 0x70, 0x7b, - 0x70, 0x3b, 0x0b, 0xf6, 0x50, 0x98, 0x5a, 0x92, 0x86, 0xfe, 0x4d, 0x83, 0x59, 0xd7, 0xd3, 0x2d, - 0x43, 0x6f, 0xdb, 0x16, 0xbe, 0x66, 0xb5, 0x1c, 0xec, 0xba, 0xd7, 0xac, 0x6d, 0xbb, 0x58, 0xa0, - 0x7a, 0xce, 0xc5, 0x02, 0xab, 0x8a, 0xb4, 0x7a, 0xae, 0xdf, 0x2b, 0x95, 0x94, 0x52, 0x24, 0xcd, - 0x6a, 0x45, 0x68, 0x1f, 0xa6, 0x83, 0x43, 0x7a, 0xcb, 0x33, 0xdb, 0xa6, 0xab, 0x7b, 0xa6, 0x6d, - 0x15, 0x4f, 0x52, 0xfd, 0x67, 0xe3, 0xf1, 0x69, 0x80, 0xb0, 0x7a, 0xb6, 0xdf, 0x2b, 0x9d, 0x51, - 0x48, 0x90, 0x74, 0xab, 0x54, 0x44, 0x46, 0xdc, 0x70, 0x30, 0x21, 0xc4, 0x46, 0x71, 0x7a, 0xb8, - 0x11, 0x43, 0x22, 0xd1, 0x88, 0x21, 0x50, 0x65, 0xc4, 0x10, 0x49, 0x34, 0x75, 0x75, 0xc7, 0x33, - 0x89, 0xda, 0x75, 0xdd, 0xd9, 0xc5, 0x4e, 0x71, 0x46, 0xa5, 0x69, 0x43, 0x26, 0x62, 0x9a, 0x62, - 0x9c, 0xb2, 0xa6, 0x18, 0x12, 0x7d, 0xae, 0x81, 0x3c, 0x34, 0xd3, 0xb6, 0x6a, 0xe4, 0xd0, 0x76, - 0xc9, 0xf4, 0x66, 0xa9, 0xd2, 0xa7, 0xef, 0x31, 0x3d, 0x91, 0xbc, 0xfa, 0x74, 0xbf, 0x57, 0x3a, - 0x37, 0x54, 0x9a, 0x34, 0x90, 0xe1, 0x4a, 0xd1, 0x6d, 0xc8, 0x13, 0x24, 0xa6, 0xe9, 0x8f, 0x51, - 0x9c, 0xa3, 0x63, 0x38, 0x3d, 0x38, 0x06, 0x4e, 0x50, 0x3d, 0xdd, 0xef, 0x95, 0x66, 0x05, 0x0e, - 0x49, 0x8f, 0x28, 0x0a, 0x7d, 0xaa, 0x01, 0x71, 0x74, 0xd5, 0x4c, 0x4f, 0x51, 0x2d, 0x4f, 0x0d, - 0x68, 0x51, 0x4d, 0xf3, 0xa9, 0x7e, 0xaf, 0xb4, 0xa8, 0x96, 0x23, 0xe9, 0x1e, 0xa2, 0x2b, 0xf2, - 0xa3, 0xf0, 0x90, 0x28, 0x16, 0x87, 0xfb, 0x51, 0x48, 0x24, 0xfa, 0x51, 0x08, 0x54, 0xf9, 0x51, - 0x88, 0xe4, 0xc1, 0xe0, 0x5d, 0xbd, 0x6d, 0x1a, 0x34, 0x99, 0x3a, 0x3d, 0x24, 0x18, 0x84, 0x14, - 0x61, 0x30, 0x08, 0x21, 0x03, 0xc1, 0x20, 0xa2, 0xcd, 0xc0, 0x18, 0x15, 0x51, 0xbe, 0x9b, 0x81, - 0x69, 0xc5, 0x56, 0x43, 0x6f, 0x40, 0xda, 0xf1, 0x2d, 0x92, 0x7d, 0xb2, 0xb4, 0x0b, 0xc9, 0x8a, - 0xb7, 0x7c, 0xd3, 0x60, 0xa9, 0xaf, 0xe3, 0x5b, 0x52, 0x42, 0x3a, 0x46, 0x01, 0x84, 0x9f, 0xa4, - 0xbe, 0xa6, 0xc1, 0xd3, 0xab, 0xa1, 0xfc, 0x77, 0xec, 0x86, 0xcc, 0x4f, 0x01, 0x08, 0xc3, 0x44, - 0xb0, 0x8f, 0xeb, 0x26, 0x09, 0x52, 0x49, 0x95, 0x95, 0xdf, 0xf6, 0x1b, 0xd8, 0xb1, 0xb0, 0x87, - 0xdd, 0x60, 0x0e, 0x34, 0x4a, 0xd1, 0x95, 0x70, 0x04, 0x88, 0x20, 0x7f, 0x5c, 0x84, 0xa3, 0xff, - 0xd1, 0xa0, 0xd8, 0xd1, 0xf7, 0xeb, 0x01, 0xd0, 0xad, 0x6f, 0xdb, 0x4e, 0xbd, 0x8b, 0x1d, 0xd3, - 0x36, 0x68, 0x26, 0x9d, 0x5f, 0xfe, 0xa7, 0xfb, 0xc6, 0xa5, 0xca, 0xba, 0xbe, 0x1f, 0x80, 0xdd, - 0xb7, 0x6c, 0x67, 0x83, 0xb2, 0xaf, 0x5a, 0x9e, 0x73, 0xc0, 0x02, 0x66, 0x47, 0x85, 0x17, 0xc6, - 0x34, 0xab, 0x24, 0x40, 0xff, 0xa5, 0xc1, 0x9c, 0x67, 0x7b, 0x7a, 0xbb, 0xde, 0xf4, 0x3b, 0x7e, - 0x5b, 0xf7, 0xcc, 0x3d, 0x5c, 0xf7, 0x5d, 0xbd, 0x85, 0x79, 0xda, 0xfe, 0xfa, 0xfd, 0x87, 0x76, - 0x8b, 0xf0, 0x5f, 0x0a, 0xd9, 0xb7, 0x08, 0x37, 0x1b, 0x59, 0xb9, 0xdf, 0x2b, 0x2d, 0x78, 0x0a, - 0xb4, 0x30, 0xb0, 0x19, 0x15, 0x1e, 0x5d, 0x04, 0x60, 0xb6, 0xad, 0xbb, 0x9e, 0x43, 0x33, 0xb4, - 0x5c, 0x75, 0xae, 0xdf, 0x2b, 0x21, 0x6a, 0xba, 0x4d, 0x4f, 0x88, 0x5b, 0xb5, 0x6c, 0x00, 0x23, - 0x5c, 0xcc, 0xa3, 0x28, 0x57, 0x26, 0xe2, 0xa2, 0x0e, 0x13, 0xe3, 0x0a, 0x60, 0xf3, 0xff, 0xab, - 0xc1, 0xfc, 0xf0, 0xe5, 0x45, 0xe7, 0x20, 0xb9, 0x8b, 0x0f, 0x78, 0x29, 0x76, 0xb2, 0xdf, 0x2b, - 0x4d, 0xec, 0xe2, 0x03, 0x41, 0x10, 0xc1, 0xa2, 0x7f, 0x81, 0xb1, 0x3d, 0xbd, 0xed, 0x63, 0xee, - 0x8a, 0x95, 0x0a, 0xab, 0x22, 0x2b, 0x62, 0x15, 0x59, 0xe9, 0xee, 0xb6, 0x08, 0xa0, 0x12, 0x78, - 0x42, 0xe5, 0x1d, 0x5f, 0xb7, 0x3c, 0xd3, 0x3b, 0x60, 0x6e, 0x4a, 0x05, 0x88, 0x6e, 0x4a, 0x01, - 0xaf, 0x25, 0x5e, 0xd1, 0xe6, 0xbf, 0xd0, 0xe0, 0xf4, 0xd0, 0x65, 0xfe, 0x26, 0x8c, 0xb0, 0x5c, - 0x87, 0x14, 0xd9, 0x70, 0xa4, 0x48, 0xdc, 0x31, 0x5b, 0x3b, 0x2f, 0x5f, 0xa4, 0xc3, 0x49, 0xb3, - 0x9a, 0x8e, 0x41, 0xc4, 0x9a, 0x8e, 0x41, 0x48, 0xa1, 0xdb, 0xb6, 0x3f, 0x7a, 0xf9, 0x22, 0x1d, - 0x54, 0x9a, 0x29, 0xa1, 0x00, 0x51, 0x09, 0x05, 0x94, 0xfb, 0x69, 0xc8, 0x85, 0x95, 0x98, 0xb0, - 0xf7, 0xb5, 0x43, 0xed, 0xfd, 0xab, 0x50, 0x30, 0xb0, 0xe1, 0x77, 0xdb, 0x66, 0x93, 0x3a, 0x71, - 0x10, 0x45, 0x72, 0x2c, 0x8c, 0x4a, 0x38, 0x89, 0x7f, 0x2a, 0x86, 0x42, 0xcb, 0x90, 0xe5, 0x15, - 0xcb, 0x01, 0x0d, 0x20, 0x13, 0xcc, 0xe3, 0x02, 0x98, 0xe8, 0x71, 0x01, 0x0c, 0xd5, 0x00, 0x58, - 0x0b, 0x60, 0x1d, 0x7b, 0x3a, 0xaf, 0x9d, 0x8a, 0xf2, 0x0c, 0x6e, 0x86, 0x78, 0x56, 0xcc, 0x47, - 0xf4, 0x62, 0x31, 0x1f, 0x41, 0xd1, 0xfb, 0x00, 0x1d, 0xdd, 0xb4, 0x18, 0x1f, 0x2f, 0x94, 0xca, - 0xc3, 0x42, 0xd9, 0x7a, 0x48, 0xc9, 0xa4, 0x47, 0x9c, 0xa2, 0xf4, 0x08, 0x8a, 0x6e, 0x42, 0x86, - 0x37, 0x2d, 0x8a, 0x69, 0x1a, 0x17, 0x16, 0x86, 0x89, 0xe6, 0x62, 0x69, 0xd9, 0xcd, 0x59, 0xc4, - 0xb2, 0x9b, 0x83, 0xc8, 0xb2, 0xb5, 0xcd, 0x6d, 0xec, 0x99, 0x1d, 0x4c, 0x37, 0x2a, 0x5f, 0xb6, - 0x00, 0x26, 0x2e, 0x5b, 0x00, 0x43, 0xaf, 0x00, 0xe8, 0xde, 0xba, 0xed, 0x7a, 0x37, 0xad, 0x26, - 0xa6, 0xa5, 0x4f, 0x96, 0x0d, 0x3f, 0x82, 0x8a, 0xc3, 0x8f, 0xa0, 0xe8, 0x75, 0xc8, 0x77, 0xf9, - 0x51, 0xdb, 0x68, 0x63, 0x5a, 0xda, 0x64, 0x59, 0x66, 0x20, 0x80, 0x05, 0x5e, 0x91, 0x1a, 0x5d, - 0x81, 0xa9, 0xa6, 0x6d, 0x35, 0x7d, 0xc7, 0xc1, 0x56, 0xf3, 0x60, 0x53, 0xdf, 0xc6, 0xb4, 0x8c, - 0xc9, 0x32, 0x57, 0x89, 0xa1, 0x44, 0x57, 0x89, 0xa1, 0xd0, 0x4b, 0x90, 0x0b, 0x5b, 0x40, 0xb4, - 0x52, 0xc9, 0xf1, 0x8e, 0x42, 0x00, 0x14, 0x98, 0x23, 0x4a, 0x32, 0x78, 0xd3, 0xbd, 0xcc, 0x9d, - 0x0e, 0xd3, 0xea, 0x83, 0x0f, 0x5e, 0x00, 0x8b, 0x83, 0x17, 0xc0, 0xb1, 0x40, 0x3a, 0x39, 0x5a, - 0x20, 0x2d, 0xff, 0x46, 0x83, 0x19, 0x95, 0xb7, 0xc4, 0x3c, 0x57, 0x7b, 0x28, 0x9e, 0xfb, 0x2e, - 0x64, 0xbb, 0xb6, 0x51, 0x77, 0xbb, 0xb8, 0xc9, 0x83, 0x53, 0xcc, 0x6f, 0x37, 0x6c, 0x63, 0xb3, - 0x8b, 0x9b, 0xff, 0x6c, 0x7a, 0x3b, 0x2b, 0x7b, 0xb6, 0x69, 0x5c, 0x37, 0x5d, 0xee, 0x60, 0x5d, - 0x86, 0x91, 0xb2, 0x90, 0x0c, 0x07, 0x56, 0xb3, 0x90, 0x66, 0x5a, 0xca, 0xbf, 0x4d, 0x42, 0x21, - 0xee, 0xa1, 0xdf, 0xa6, 0xa9, 0xa0, 0xdb, 0x90, 0x31, 0x59, 0x91, 0xc3, 0x93, 0x94, 0x7f, 0x10, - 0xc2, 0x77, 0x25, 0xea, 0x78, 0x56, 0xf6, 0x5e, 0xa8, 0xf0, 0x6a, 0x88, 0x2e, 0x01, 0x95, 0xcc, - 0x39, 0x65, 0xc9, 0x1c, 0x88, 0x6a, 0x90, 0x71, 0xb1, 0xb3, 0x67, 0x36, 0x31, 0x8f, 0x43, 0x25, - 0x51, 0x72, 0xd3, 0x76, 0x30, 0x91, 0xb9, 0xc9, 0x48, 0x22, 0x99, 0x9c, 0x47, 0x96, 0xc9, 0x81, - 0xe8, 0x5d, 0xc8, 0x35, 0x6d, 0x6b, 0xdb, 0x6c, 0xad, 0xeb, 0x5d, 0x1e, 0x89, 0xce, 0xa8, 0xa4, - 0x5e, 0x0a, 0x88, 0x78, 0xe3, 0x26, 0xf8, 0x8c, 0x35, 0x6e, 0x42, 0xaa, 0xc8, 0xa0, 0x7f, 0x4d, - 0x01, 0x44, 0xc6, 0x41, 0xaf, 0x42, 0x1e, 0xef, 0xe3, 0xa6, 0xef, 0xd9, 0x4e, 0x70, 0x24, 0xf0, - 0x1e, 0x68, 0x00, 0x96, 0x62, 0x38, 0x44, 0x50, 0xb2, 0x27, 0x2d, 0xbd, 0x83, 0xdd, 0xae, 0xde, - 0x0c, 0x9a, 0xa7, 0x74, 0x30, 0x21, 0x50, 0xdc, 0x93, 0x21, 0x10, 0xfd, 0x23, 0xa4, 0x68, 0xbb, - 0x95, 0xf5, 0x4d, 0x51, 0xbf, 0x57, 0x9a, 0xb4, 0xe4, 0x46, 0x2b, 0xc5, 0xa3, 0x37, 0x61, 0x62, - 0x37, 0x74, 0x3c, 0x32, 0xb6, 0x14, 0x65, 0xa0, 0xd9, 0x63, 0x84, 0x90, 0x46, 0x37, 0x2e, 0xc2, - 0xd1, 0x36, 0xe4, 0x75, 0xcb, 0xb2, 0x3d, 0x7a, 0xdc, 0x04, 0xbd, 0xd4, 0x0b, 0xc3, 0xdc, 0xb4, - 0xb2, 0x12, 0xd1, 0xb2, 0x14, 0x8c, 0xc6, 0x09, 0x41, 0x82, 0x18, 0x27, 0x04, 0x30, 0xaa, 0x41, - 0xba, 0xad, 0x37, 0x70, 0x3b, 0x88, 0xef, 0x4f, 0x0d, 0x55, 0x71, 0x9d, 0x92, 0x31, 0xe9, 0xf4, - 0x74, 0x67, 0x7c, 0xe2, 0xe9, 0xce, 0x20, 0xf3, 0xdb, 0x50, 0x88, 0x8f, 0x67, 0xb4, 0x5c, 0xe5, - 0x82, 0x98, 0xab, 0xe4, 0xee, 0x9b, 0x1d, 0xe9, 0x90, 0x17, 0x06, 0x75, 0x1c, 0x2a, 0xca, 0xff, - 0xaf, 0xc1, 0x8c, 0x6a, 0xef, 0xa2, 0x75, 0x61, 0xc7, 0x6b, 0xbc, 0x2f, 0xa4, 0x70, 0x75, 0xce, - 0x3b, 0x64, 0xab, 0x47, 0x1b, 0xbd, 0x0a, 0x93, 0x96, 0x6d, 0xe0, 0xba, 0x4e, 0x14, 0xb4, 0x4d, - 0xd7, 0x2b, 0x26, 0x68, 0xaf, 0x9d, 0xf6, 0x93, 0x08, 0x66, 0x25, 0x40, 0x08, 0xdc, 0x13, 0x12, - 0xa2, 0xfc, 0x53, 0x0d, 0xa6, 0x62, 0xed, 0xde, 0x23, 0xe7, 0x4b, 0x62, 0x96, 0x93, 0x18, 0x31, - 0xcb, 0x91, 0x8f, 0x9e, 0xe4, 0x88, 0x47, 0xcf, 0xaf, 0x13, 0x90, 0x17, 0xea, 0xf7, 0x23, 0x8f, - 0xfc, 0x0e, 0x4c, 0xf1, 0xa3, 0xd4, 0xb4, 0x5a, 0xac, 0xce, 0x4b, 0xf0, 0x66, 0xd4, 0xc0, 0x7d, - 0xcc, 0x9a, 0xdd, 0xd8, 0x0c, 0x69, 0x69, 0x99, 0x47, 0x7b, 0x85, 0xae, 0x04, 0x13, 0x54, 0x4c, - 0xca, 0x18, 0x74, 0x1b, 0xe6, 0xfc, 0x2e, 0xa9, 0x7e, 0xeb, 0x2e, 0xbf, 0xd9, 0xa8, 0x5b, 0x7e, - 0xa7, 0x81, 0xd9, 0xec, 0xc7, 0x58, 0x3d, 0xc4, 0x28, 0x82, 0xab, 0x8f, 0x1b, 0x14, 0x2f, 0xd6, - 0x43, 0x2a, 0x7c, 0x6c, 0x2d, 0x53, 0x23, 0xae, 0xe5, 0x55, 0x40, 0x83, 0x7d, 0x7f, 0xc9, 0x96, - 0xda, 0x68, 0xb6, 0x2c, 0xff, 0x4c, 0x83, 0x42, 0xbc, 0x9d, 0xff, 0x2d, 0x72, 0xaa, 0x1f, 0x69, - 0x90, 0x0b, 0x3b, 0xfa, 0x47, 0x1e, 0xf7, 0xb3, 0x90, 0x76, 0xb0, 0xee, 0xda, 0x16, 0x0f, 0x1e, - 0x34, 0x0a, 0x32, 0x88, 0x18, 0x05, 0x19, 0xe4, 0x90, 0x23, 0xbe, 0x05, 0xe3, 0xcc, 0x5c, 0x6f, - 0x99, 0x6d, 0x0f, 0x3b, 0xe8, 0x32, 0xa4, 0x5d, 0x4f, 0xf7, 0xb0, 0x5b, 0xd4, 0x16, 0x93, 0xe7, - 0x27, 0x97, 0xe7, 0x06, 0x5b, 0xfe, 0x04, 0xcd, 0xc6, 0xc2, 0x28, 0xc5, 0xb1, 0x30, 0x48, 0xf9, - 0xdf, 0x35, 0x18, 0x17, 0x6f, 0x36, 0x1e, 0x8e, 0xd8, 0x07, 0x5b, 0x90, 0xf2, 0x8f, 0xc3, 0x41, - 0xb4, 0x1f, 0x8e, 0x1f, 0x3d, 0x0a, 0x7b, 0xfc, 0x45, 0x63, 0x06, 0x09, 0x3b, 0xe9, 0x47, 0x1d, - 0x74, 0x2b, 0xea, 0x3e, 0x91, 0xd8, 0xe1, 0xd2, 0x40, 0x3f, 0x6a, 0xf7, 0x89, 0x1e, 0x07, 0x12, - 0xbb, 0x78, 0x1c, 0x48, 0x88, 0x43, 0xce, 0xf7, 0xff, 0xd2, 0x74, 0xbe, 0xd1, 0x5d, 0xcb, 0xe3, - 0xee, 0xd6, 0xc5, 0x72, 0xbc, 0xe4, 0x03, 0xe4, 0x78, 0xcf, 0x41, 0x86, 0x1e, 0xaa, 0x61, 0xfa, - 0x45, 0x1d, 0x84, 0x80, 0xe4, 0x7b, 0x6e, 0x06, 0xb9, 0x47, 0x14, 0x1f, 0x3b, 0x62, 0x14, 0xaf, - 0xc3, 0xe9, 0x1d, 0xdd, 0xad, 0x07, 0xe7, 0x8e, 0x51, 0xd7, 0xbd, 0x7a, 0x18, 0x01, 0xd3, 0xb4, - 0xae, 0xa3, 0xdd, 0xe3, 0x1d, 0xdd, 0xdd, 0x0c, 0x68, 0x56, 0xbc, 0x8d, 0xc1, 0x78, 0x38, 0xa7, - 0xa6, 0x40, 0x5b, 0x30, 0xab, 0x16, 0x9e, 0xa1, 0x23, 0xa7, 0x97, 0x1b, 0xee, 0x3d, 0x25, 0x4f, - 0x2b, 0xd0, 0xe8, 0x13, 0x0d, 0x8a, 0x24, 0xcb, 0x71, 0xf0, 0x87, 0xbe, 0xe9, 0xe0, 0x0e, 0xb1, - 0x58, 0xdd, 0xde, 0xc3, 0x4e, 0x5b, 0x3f, 0xe0, 0xf7, 0x84, 0x67, 0x07, 0x4f, 0xd3, 0x0d, 0xdb, - 0xa8, 0x09, 0x0c, 0x6c, 0x6a, 0x5d, 0x19, 0x78, 0x93, 0x09, 0x11, 0xa7, 0xa6, 0xa6, 0x88, 0xb9, - 0x31, 0x1c, 0xaa, 0x23, 0x98, 0x1f, 0xad, 0x23, 0x48, 0xb2, 0xfb, 0xae, 0x6d, 0xb7, 0x69, 0xa9, - 0xcd, 0xb3, 0x7b, 0xf2, 0x2d, 0x66, 0xf7, 0xe4, 0x7b, 0x2d, 0x95, 0xcd, 0x16, 0x72, 0xe5, 0x3f, - 0x25, 0x60, 0x52, 0xbe, 0x62, 0x7c, 0xec, 0x9b, 0x65, 0x20, 0xb8, 0x24, 0x1f, 0x49, 0x70, 0x49, - 0x1d, 0xca, 0x2a, 0x63, 0xa3, 0x59, 0xa5, 0xfc, 0xc7, 0x04, 0x4c, 0x48, 0xb7, 0xac, 0xdf, 0x2f, - 0xf3, 0x71, 0x2c, 0xf3, 0x7f, 0x27, 0x60, 0x4e, 0x3d, 0xe4, 0x63, 0x69, 0x99, 0x5c, 0x05, 0x52, - 0xfc, 0x5c, 0x8b, 0xf2, 0xf2, 0xd9, 0x81, 0x8e, 0x09, 0x5d, 0xae, 0xa0, 0x72, 0x1a, 0xb8, 0x08, - 0x0e, 0xd8, 0xd1, 0x6d, 0xc8, 0x9b, 0xc2, 0x95, 0x73, 0x52, 0x75, 0x33, 0x28, 0x5e, 0x34, 0xb3, - 0x16, 0xda, 0x90, 0xeb, 0x65, 0x51, 0x54, 0x35, 0x0d, 0x29, 0x52, 0x38, 0x94, 0xf7, 0x20, 0xc3, - 0x87, 0x83, 0x5e, 0x84, 0x1c, 0x3d, 0x53, 0x68, 0x17, 0x40, 0x8b, 0x96, 0x96, 0x00, 0x63, 0x4f, - 0xae, 0xb2, 0x01, 0x0c, 0xbd, 0x0c, 0x40, 0xc2, 0x28, 0x3f, 0x4d, 0x12, 0x34, 0x26, 0xd3, 0x6e, - 0x43, 0xd7, 0x36, 0x06, 0x8e, 0x90, 0x5c, 0x08, 0x2c, 0x7f, 0x99, 0x80, 0xbc, 0x78, 0xc9, 0x7d, - 0x28, 0xe5, 0x1f, 0x43, 0xd0, 0x09, 0xaa, 0xeb, 0x86, 0x41, 0xfe, 0xc5, 0x41, 0xd2, 0xb1, 0x34, - 0x74, 0x91, 0x82, 0xff, 0xaf, 0x04, 0x1c, 0xac, 0xee, 0xa7, 0x0f, 0x79, 0xcc, 0x18, 0x4a, 0xd0, - 0x5a, 0x88, 0xe3, 0xe6, 0x77, 0x61, 0x56, 0x29, 0x4a, 0xac, 0xd6, 0xc7, 0x1e, 0x56, 0xb5, 0xfe, - 0x65, 0x1a, 0x66, 0x95, 0x8f, 0x0b, 0x1e, 0x7b, 0xc4, 0x90, 0x77, 0x50, 0xf2, 0xa1, 0xec, 0xa0, - 0xff, 0xd0, 0x54, 0x96, 0x65, 0x37, 0x8b, 0xaf, 0x8e, 0xf0, 0xe2, 0xe2, 0x61, 0xd9, 0x58, 0x76, - 0xcb, 0xb1, 0x43, 0xed, 0x89, 0xf4, 0xa8, 0x7b, 0x02, 0x3d, 0xcf, 0x1a, 0x2f, 0x54, 0x17, 0xbb, - 0xe9, 0x0b, 0x22, 0x44, 0x4c, 0x55, 0x86, 0x83, 0xd0, 0x9b, 0x30, 0x11, 0x70, 0xb0, 0x76, 0x5f, - 0x36, 0xea, 0xc5, 0x71, 0x9a, 0x78, 0xc7, 0x6f, 0x5c, 0x84, 0xc7, 0xa2, 0x70, 0xee, 0x50, 0x51, - 0x18, 0x46, 0xbc, 0x94, 0x7c, 0xa4, 0xfb, 0xe5, 0xcf, 0x09, 0x98, 0x8a, 0xbd, 0x2d, 0xfa, 0xfe, - 0x6c, 0x3d, 0x8e, 0xb3, 0xf5, 0x97, 0x1a, 0xe4, 0xc2, 0x27, 0x74, 0x47, 0x2e, 0x21, 0x57, 0x20, - 0x8d, 0xd9, 0x33, 0x2e, 0x16, 0xc6, 0xa7, 0x63, 0x4f, 0x6c, 0x09, 0x8e, 0x3f, 0xaa, 0x8d, 0xbd, - 0xdc, 0xaa, 0x71, 0xc6, 0x43, 0x16, 0x87, 0x3f, 0x4f, 0x04, 0xc5, 0x61, 0x34, 0x93, 0xc7, 0xea, - 0x2c, 0xd1, 0x4a, 0x24, 0x1f, 0xce, 0x4a, 0x1c, 0xaf, 0x1b, 0xfc, 0x22, 0x07, 0x63, 0x74, 0x4c, - 0x68, 0x19, 0xb2, 0x1e, 0x76, 0x3a, 0xa6, 0xa5, 0xb7, 0xe9, 0xd2, 0x65, 0x19, 0x77, 0x00, 0x13, - 0xb9, 0x03, 0x18, 0xda, 0x81, 0xa9, 0xe8, 0x8a, 0x80, 0x8a, 0x51, 0xbf, 0x2f, 0x7e, 0x5b, 0x26, - 0x62, 0xd7, 0x95, 0x31, 0x4e, 0xf9, 0x81, 0x50, 0x0c, 0x89, 0x0c, 0x98, 0x6c, 0xda, 0x96, 0xa7, - 0x9b, 0x16, 0x76, 0x98, 0xa2, 0xa4, 0xea, 0x7d, 0xe5, 0x25, 0x89, 0x86, 0xf5, 0x4c, 0x65, 0x3e, - 0xf9, 0x7d, 0xa5, 0x8c, 0x43, 0x1f, 0xc0, 0x44, 0x50, 0xac, 0x33, 0x25, 0x29, 0xd5, 0xfb, 0xca, - 0x55, 0x91, 0x84, 0x6d, 0x70, 0x89, 0x4b, 0x7e, 0x5f, 0x29, 0xa1, 0x50, 0x1b, 0x0a, 0x5d, 0xdb, - 0xd8, 0xb2, 0x78, 0x89, 0xaa, 0x37, 0xda, 0x98, 0xdf, 0x4b, 0x2d, 0x0c, 0x24, 0x9b, 0x12, 0x15, - 0x3b, 0x04, 0xe3, 0xbc, 0xf2, 0x8b, 0xe5, 0x38, 0x16, 0xbd, 0x0f, 0xe3, 0x6d, 0xac, 0xbb, 0x78, - 0x75, 0xbf, 0x6b, 0x3a, 0xd8, 0x50, 0xbf, 0x2f, 0xbe, 0x2e, 0x50, 0xb0, 0x23, 0x48, 0xe4, 0x91, - 0x9f, 0x55, 0x89, 0x18, 0x62, 0xfd, 0x8e, 0xbe, 0x5f, 0xf3, 0x2d, 0x77, 0x75, 0x9f, 0xbf, 0x15, - 0xcd, 0xa8, 0xac, 0xbf, 0x2e, 0x13, 0x31, 0xeb, 0xc7, 0x38, 0x65, 0xeb, 0xc7, 0x90, 0xe8, 0x3a, - 0x3d, 0x61, 0x99, 0x49, 0xd8, 0x3b, 0xe3, 0xb9, 0x81, 0xd5, 0x62, 0xd6, 0x60, 0x6d, 0x5b, 0xfe, - 0x25, 0x09, 0x0d, 0x25, 0x70, 0x1b, 0xd0, 0x69, 0xd7, 0xb0, 0xe7, 0x3b, 0x16, 0x36, 0x78, 0xeb, - 0x60, 0xd0, 0x06, 0x12, 0x55, 0x68, 0x03, 0x09, 0x3a, 0x60, 0x03, 0x09, 0x8b, 0x3e, 0x86, 0x99, - 0xd8, 0xab, 0x49, 0x36, 0x8f, 0xbc, 0xea, 0x52, 0x76, 0x4d, 0x41, 0xc9, 0xba, 0x3c, 0x2a, 0x19, - 0x92, 0x66, 0xa5, 0x16, 0xa2, 0xbd, 0xa5, 0x5b, 0xad, 0x35, 0xbb, 0x21, 0xfb, 0xdc, 0xb8, 0x4a, - 0xfb, 0x15, 0x05, 0x25, 0xd3, 0xae, 0x92, 0x21, 0x6b, 0x57, 0x51, 0x84, 0x2f, 0x24, 0x49, 0x82, - 0x18, 0xbe, 0x24, 0x56, 0xbd, 0x90, 0x64, 0x04, 0xc2, 0x0b, 0x49, 0x06, 0x50, 0xbc, 0x90, 0xe4, - 0x94, 0xd9, 0xa0, 0xd1, 0x5a, 0xfe, 0x42, 0x83, 0xa9, 0x58, 0x7c, 0x41, 0x6f, 0x40, 0xf8, 0xf0, - 0xed, 0xd6, 0x41, 0x37, 0x28, 0x4c, 0xa4, 0x87, 0x72, 0x04, 0xae, 0x7a, 0x28, 0x47, 0xe0, 0xe8, - 0x3a, 0x40, 0x78, 0x32, 0xdf, 0xeb, 0x20, 0xa0, 0x59, 0x71, 0x44, 0x29, 0x66, 0xc5, 0x11, 0xb4, - 0xfc, 0x79, 0x0a, 0xb2, 0x81, 0x83, 0x1e, 0x4b, 0xe1, 0xba, 0x04, 0x99, 0x0e, 0x76, 0xe9, 0x53, - 0xb9, 0x44, 0x94, 0x7f, 0x72, 0x90, 0x98, 0x7f, 0x72, 0x90, 0x9c, 0x1e, 0x27, 0x0f, 0x95, 0x1e, - 0xa7, 0x46, 0x4e, 0x8f, 0x31, 0x7d, 0xb4, 0x22, 0x84, 0xd9, 0xe0, 0xee, 0xf8, 0xde, 0xb1, 0x3b, - 0x78, 0xd2, 0x22, 0x32, 0xc6, 0x9e, 0xb4, 0x88, 0x28, 0xb4, 0x0b, 0x27, 0x85, 0xfb, 0x6d, 0xde, - 0x85, 0x27, 0x01, 0x6f, 0x72, 0xf8, 0x0b, 0xa1, 0x1a, 0xa5, 0x62, 0xdb, 0x7a, 0x37, 0x06, 0x15, - 0xeb, 0x8b, 0x38, 0x8e, 0x38, 0x98, 0x81, 0x1b, 0x7e, 0x6b, 0x9d, 0x2f, 0x7b, 0x26, 0x72, 0x30, - 0x11, 0x2e, 0x3a, 0x98, 0x08, 0xa7, 0x8d, 0x3a, 0x79, 0xbe, 0xc7, 0xe2, 0x18, 0x2f, 0x42, 0x0e, - 0xef, 0x9b, 0x5e, 0xbd, 0x69, 0x1b, 0x98, 0x17, 0xf9, 0xd4, 0xce, 0x04, 0x78, 0xc9, 0x36, 0x24, - 0x3b, 0x07, 0x30, 0xd1, 0x9b, 0x92, 0x23, 0x79, 0x53, 0x74, 0xe9, 0x91, 0x1a, 0xe1, 0xd2, 0x43, - 0x69, 0xa7, 0xdc, 0xf1, 0xd8, 0xa9, 0xfc, 0x55, 0x02, 0x0a, 0xf1, 0x28, 0xfe, 0xcd, 0xd8, 0x82, - 0xf2, 0x6e, 0x4a, 0x8e, 0xbc, 0x9b, 0xde, 0x84, 0x09, 0x92, 0xe6, 0xe9, 0x9e, 0xc7, 0x5f, 0xf6, - 0xa7, 0x68, 0xae, 0xc6, 0x62, 0x9b, 0x6f, 0xad, 0x04, 0x70, 0x29, 0xb6, 0x09, 0xf0, 0x01, 0xd7, - 0x1d, 0x7b, 0x40, 0xd7, 0xfd, 0x24, 0x01, 0x13, 0x1b, 0xb6, 0x71, 0x8b, 0xe5, 0x80, 0xde, 0x37, - 0x65, 0x3d, 0x1f, 0x65, 0x48, 0x2b, 0x4f, 0xc1, 0x84, 0x94, 0x04, 0x96, 0x3f, 0x65, 0x7e, 0x26, - 0x9f, 0x7e, 0xdf, 0xbd, 0x75, 0x99, 0x84, 0x71, 0x31, 0x9b, 0x2c, 0x57, 0x61, 0x2a, 0x96, 0xfc, - 0x89, 0x13, 0xd0, 0x46, 0x99, 0x40, 0x79, 0x0e, 0x66, 0x54, 0x59, 0x51, 0xf9, 0x0a, 0xcc, 0xa8, - 0xf2, 0x95, 0x07, 0x57, 0xf0, 0x06, 0x7f, 0xe5, 0xc1, 0x32, 0x8b, 0x07, 0xe7, 0xff, 0x61, 0x2a, - 0x68, 0x59, 0x44, 0xbf, 0x8b, 0x79, 0x0f, 0x0a, 0xdd, 0xe0, 0xa3, 0x7e, 0xdf, 0xca, 0x9a, 0x96, - 0x29, 0x21, 0xfd, 0x5a, 0xac, 0xb0, 0x9c, 0x94, 0x31, 0xb2, 0x6c, 0x5e, 0xeb, 0x26, 0x46, 0x94, - 0x5d, 0x8b, 0x15, 0xbd, 0x93, 0x32, 0x06, 0xfd, 0x2b, 0x9c, 0x0c, 0xde, 0x9b, 0xee, 0xe1, 0x60, - 0xe0, 0xc9, 0xa1, 0xc2, 0xd9, 0xcf, 0x78, 0x42, 0x86, 0xf8, 0xc8, 0xa7, 0x62, 0xa8, 0x98, 0x78, - 0x3e, 0xf6, 0xd4, 0xa8, 0xe2, 0xe3, 0x83, 0x9f, 0x8a, 0xa1, 0xd0, 0x06, 0xcc, 0xc4, 0x57, 0x5d, - 0x28, 0x86, 0x4b, 0xfd, 0x5e, 0xe9, 0x09, 0x79, 0x2d, 0xe5, 0xaa, 0xf8, 0xe4, 0x00, 0x52, 0x96, - 0x28, 0x94, 0xd7, 0x69, 0x85, 0xc4, 0xda, 0x60, 0x9d, 0x7d, 0x72, 0x00, 0x59, 0xfe, 0x4c, 0x83, - 0xa9, 0xd8, 0xaf, 0xa1, 0xd0, 0x65, 0xc8, 0xd2, 0x9f, 0x2a, 0xdf, 0xdb, 0x4b, 0xa8, 0x1f, 0x52, - 0x3a, 0x69, 0x15, 0x32, 0x1c, 0x84, 0x5e, 0x82, 0x5c, 0xf8, 0xa3, 0x29, 0xfe, 0x88, 0x85, 0xed, - 0xd9, 0x00, 0x28, 0xed, 0xd9, 0x00, 0x58, 0xfe, 0xcf, 0x04, 0x9c, 0x1e, 0xfa, 0x4b, 0xa9, 0xc7, - 0xde, 0x4e, 0x39, 0x54, 0x57, 0x28, 0xd6, 0x0b, 0x49, 0x8d, 0xd8, 0x0b, 0xf9, 0x4c, 0x83, 0x39, - 0xf5, 0x2f, 0xa9, 0x8e, 0xdc, 0x1f, 0x93, 0xa7, 0x91, 0x18, 0xfd, 0xad, 0xd0, 0xb8, 0xf8, 0xa3, - 0xa7, 0x23, 0x0f, 0xe3, 0x02, 0x8c, 0x75, 0x6d, 0xbb, 0xed, 0xf2, 0xa7, 0x7c, 0x94, 0x94, 0x02, - 0x44, 0x52, 0x0a, 0x38, 0x64, 0x3b, 0xee, 0x6f, 0x5a, 0x10, 0x0b, 0xa3, 0xdf, 0x76, 0x7d, 0x87, - 0x5c, 0xe8, 0x99, 0xe7, 0x21, 0x1b, 0x3c, 0x54, 0x42, 0x00, 0xe9, 0x77, 0xb6, 0x56, 0xb7, 0x56, - 0x2f, 0x17, 0x4e, 0xa0, 0x3c, 0x64, 0x36, 0x56, 0x6f, 0x5c, 0xbe, 0x76, 0xe3, 0x4a, 0x41, 0x23, - 0x1f, 0xb5, 0xad, 0x1b, 0x37, 0xc8, 0x47, 0xe2, 0x99, 0xeb, 0xe2, 0x7b, 0x70, 0x5e, 0x5d, 0x8c, - 0x43, 0x76, 0xa5, 0xdb, 0xa5, 0xc7, 0x1c, 0xe3, 0x5d, 0xdd, 0x33, 0xc9, 0xd9, 0x54, 0xd0, 0x50, - 0x06, 0x92, 0x37, 0x6f, 0xae, 0x17, 0x12, 0x68, 0x06, 0x0a, 0x97, 0xb1, 0x6e, 0xb4, 0x4d, 0x0b, - 0x07, 0x67, 0x6b, 0x21, 0x59, 0xbd, 0xf3, 0xab, 0xbb, 0x0b, 0xda, 0x57, 0x77, 0x17, 0xb4, 0x3f, - 0xdc, 0x5d, 0xd0, 0x3e, 0xff, 0x7a, 0xe1, 0xc4, 0x57, 0x5f, 0x2f, 0x9c, 0xf8, 0xdd, 0xd7, 0x0b, - 0x27, 0xde, 0x7b, 0xbe, 0x65, 0x7a, 0x3b, 0x7e, 0xa3, 0xd2, 0xb4, 0x3b, 0xfc, 0xef, 0x5d, 0x74, - 0x1d, 0x9b, 0x1c, 0x79, 0xfc, 0x6b, 0x29, 0xfe, 0x87, 0x30, 0x7e, 0x90, 0x38, 0xb3, 0x42, 0x3f, - 0x37, 0x18, 0x5d, 0xe5, 0x9a, 0x5d, 0x61, 0x00, 0xfa, 0xa7, 0x0f, 0xdc, 0x46, 0x9a, 0xfe, 0x89, - 0x83, 0x17, 0xff, 0x1e, 0x00, 0x00, 0xff, 0xff, 0x43, 0xc6, 0x02, 0xa7, 0x43, 0x43, 0x00, 0x00, + 0xb1, 0x83, 0x84, 0x4a, 0x14, 0x27, 0x48, 0x9c, 0x45, 0x02, 0xd1, 0x56, 0x6c, 0x2b, 0x96, 0xad, + 0x50, 0x56, 0xd6, 0x1b, 0x64, 0xc1, 0x34, 0xd9, 0x25, 0xaa, 0x2d, 0xb2, 0x9b, 0xe9, 0x0f, 0x45, + 0x02, 0x72, 0xd8, 0x2c, 0x82, 0xdd, 0xdb, 0x22, 0x97, 0x05, 0x16, 0x7b, 0xc9, 0x1e, 0xf7, 0x03, + 0xc1, 0x02, 0x73, 0x98, 0xcb, 0xcc, 0x60, 0x2e, 0x73, 0x98, 0x19, 0x0c, 0x06, 0x39, 0xce, 0x65, + 0x88, 0x81, 0x33, 0x33, 0x07, 0x02, 0x33, 0xff, 0x60, 0x80, 0x41, 0x7d, 0x75, 0x57, 0x35, 0x9b, + 0x36, 0x2d, 0x59, 0x76, 0x82, 0xe4, 0x64, 0xf7, 0xfb, 0xac, 0xaa, 0xf7, 0xea, 0xd5, 0x7b, 0xaf, + 0x8a, 0x82, 0x33, 0xdd, 0xdd, 0xd6, 0x92, 0xee, 0x74, 0x74, 0x43, 0xc7, 0x7b, 0xd8, 0xf2, 0xdc, + 0x25, 0xf6, 0x4f, 0xa5, 0xeb, 0xd8, 0x9e, 0x8d, 0xc6, 0x65, 0xd4, 0x7c, 0x79, 0xf7, 0x35, 0xb7, + 0x62, 0xda, 0x4b, 0x7a, 0xd7, 0x5c, 0x6a, 0xda, 0x0e, 0x5e, 0xda, 0x7b, 0x69, 0xa9, 0x85, 0x2d, + 0xec, 0xe8, 0x1e, 0x36, 0x18, 0xc7, 0xfc, 0x79, 0x89, 0xc6, 0xc2, 0xde, 0xc7, 0xb6, 0xb3, 0x6b, + 0x5a, 0xad, 0x38, 0xca, 0x52, 0xcb, 0xb6, 0x5b, 0x6d, 0xbc, 0x44, 0xbf, 0x1a, 0xfe, 0xf6, 0x92, + 0x67, 0x76, 0xb0, 0xeb, 0xe9, 0x9d, 0x2e, 0x27, 0xb8, 0x18, 0x8a, 0xea, 0xe8, 0xcd, 0x1d, 0xd3, + 0xc2, 0xce, 0xc1, 0x12, 0x1d, 0x6f, 0xd7, 0x5c, 0x72, 0xb0, 0x6b, 0xfb, 0x4e, 0x13, 0x0f, 0x88, + 0xbd, 0x64, 0x5a, 0x1e, 0x76, 0x2c, 0xbd, 0xbd, 0xe4, 0x36, 0x77, 0xb0, 0xe1, 0xb7, 0xb1, 0x13, + 0xfe, 0xcf, 0x6e, 0xdc, 0xc5, 0x4d, 0xcf, 0x1d, 0x00, 0x30, 0xde, 0xf2, 0x6f, 0x67, 0x61, 0x62, + 0x95, 0xcc, 0x75, 0x13, 0x7f, 0xe4, 0x63, 0xab, 0x89, 0xd1, 0x05, 0x18, 0xfb, 0xc8, 0xc7, 0x3e, + 0x2e, 0x6a, 0x8b, 0xda, 0xf9, 0x5c, 0x75, 0xba, 0xdf, 0x2b, 0x4d, 0x51, 0xc0, 0xf3, 0x76, 0xc7, + 0xf4, 0x70, 0xa7, 0xeb, 0x1d, 0xd4, 0x18, 0x05, 0xba, 0x04, 0xe3, 0x77, 0xed, 0x46, 0xdd, 0xc5, + 0x5e, 0xdd, 0xd2, 0x3b, 0xb8, 0x98, 0xa0, 0x1c, 0xc5, 0x7e, 0xaf, 0x34, 0x73, 0xd7, 0x6e, 0x6c, + 0x62, 0xef, 0xa6, 0xde, 0x91, 0xd9, 0x20, 0x84, 0xa2, 0x17, 0x20, 0xe3, 0xbb, 0xd8, 0xa9, 0x9b, + 0x46, 0x31, 0x49, 0xd9, 0x66, 0xfa, 0xbd, 0x52, 0x81, 0x80, 0xae, 0x1b, 0x12, 0x4b, 0x9a, 0x41, + 0xd0, 0xf3, 0x90, 0x6e, 0x39, 0xb6, 0xdf, 0x75, 0x8b, 0xa9, 0xc5, 0xa4, 0xa0, 0x66, 0x10, 0x99, + 0x9a, 0x41, 0xd0, 0x2d, 0x48, 0x33, 0x03, 0x16, 0xc7, 0x16, 0x93, 0xe7, 0xf3, 0xcb, 0x67, 0x2b, + 0xb2, 0x55, 0x2b, 0xca, 0x84, 0xd9, 0x17, 0x13, 0xc8, 0xf0, 0xb2, 0x40, 0xee, 0x07, 0x3f, 0x9c, + 0x86, 0x31, 0x4a, 0x87, 0xde, 0x81, 0x4c, 0xd3, 0xc1, 0x64, 0xf5, 0x8b, 0x68, 0x51, 0x3b, 0x9f, + 0x5f, 0x9e, 0xaf, 0x30, 0xab, 0x56, 0x84, 0x55, 0x2b, 0xb7, 0x85, 0x55, 0xab, 0xb3, 0xfd, 0x5e, + 0xe9, 0x24, 0x27, 0x97, 0xa4, 0x0a, 0x09, 0x68, 0x03, 0x72, 0xae, 0xdf, 0xe8, 0x98, 0xde, 0x9a, + 0xdd, 0xa0, 0xeb, 0x9d, 0x5f, 0x3e, 0xa5, 0x0e, 0x75, 0x53, 0xa0, 0xab, 0xa7, 0xfa, 0xbd, 0xd2, + 0x74, 0x40, 0x1d, 0x4a, 0xbb, 0x76, 0xa2, 0x16, 0x0a, 0x41, 0x3b, 0x30, 0xe5, 0xe0, 0xae, 0x63, + 0xda, 0x8e, 0xe9, 0x99, 0x2e, 0x26, 0x72, 0x13, 0x54, 0xee, 0x19, 0x55, 0x6e, 0x4d, 0x25, 0xaa, + 0x9e, 0xe9, 0xf7, 0x4a, 0xa7, 0x23, 0x9c, 0x8a, 0x8e, 0xa8, 0x58, 0xe4, 0x01, 0x8a, 0x80, 0x36, + 0xb1, 0x47, 0x6d, 0x99, 0x5f, 0x5e, 0xbc, 0xaf, 0xb2, 0x4d, 0xec, 0x55, 0x17, 0xfb, 0xbd, 0xd2, + 0xd3, 0x83, 0xfc, 0x8a, 0xca, 0x18, 0xf9, 0xa8, 0x0d, 0x05, 0x19, 0x6a, 0x90, 0x09, 0xa6, 0xa8, + 0xce, 0x85, 0xe1, 0x3a, 0x09, 0x55, 0x75, 0xa1, 0xdf, 0x2b, 0xcd, 0x47, 0x79, 0x15, 0x7d, 0x03, + 0x92, 0x89, 0x7d, 0x9a, 0xba, 0xd5, 0xc4, 0x6d, 0xa2, 0x66, 0x2c, 0xce, 0x3e, 0x97, 0x05, 0x9a, + 0xd9, 0x27, 0xa0, 0x56, 0xed, 0x13, 0x80, 0xd1, 0x07, 0x30, 0x1e, 0x7c, 0x90, 0xf5, 0x4a, 0x73, + 0x1f, 0x8a, 0x17, 0x4a, 0x56, 0x6a, 0xbe, 0xdf, 0x2b, 0xcd, 0xc9, 0x3c, 0x8a, 0x68, 0x45, 0x5a, + 0x28, 0xbd, 0xcd, 0x56, 0x26, 0x33, 0x5c, 0x3a, 0xa3, 0x90, 0xa5, 0xb7, 0x07, 0x57, 0x44, 0x91, + 0x46, 0xa4, 0x93, 0x0d, 0xec, 0x37, 0x9b, 0x18, 0x1b, 0xd8, 0x28, 0x66, 0xe3, 0xa4, 0xaf, 0x49, + 0x14, 0x4c, 0xba, 0xcc, 0xa3, 0x4a, 0x97, 0x31, 0x64, 0xad, 0xef, 0xda, 0x8d, 0x55, 0xc7, 0xb1, + 0x1d, 0xb7, 0x98, 0x8b, 0x5b, 0xeb, 0x35, 0x81, 0x66, 0x6b, 0x1d, 0x50, 0xab, 0x6b, 0x1d, 0x80, + 0xf9, 0x78, 0x6b, 0xbe, 0x75, 0x03, 0xeb, 0x2e, 0x36, 0x8a, 0x30, 0x64, 0xbc, 0x01, 0x45, 0x30, + 0xde, 0x00, 0x32, 0x30, 0xde, 0x00, 0x83, 0x0c, 0x98, 0x64, 0xdf, 0x2b, 0xae, 0x6b, 0xb6, 0x2c, + 0x6c, 0x14, 0xf3, 0x54, 0xfe, 0xd3, 0x71, 0xf2, 0x05, 0x4d, 0xf5, 0xe9, 0x7e, 0xaf, 0x54, 0x54, + 0xf9, 0x14, 0x1d, 0x11, 0x99, 0xe8, 0x43, 0x98, 0x60, 0x90, 0x9a, 0x6f, 0x59, 0xa6, 0xd5, 0x2a, + 0x8e, 0x53, 0x25, 0x4f, 0xc5, 0x29, 0xe1, 0x24, 0xd5, 0xa7, 0xfa, 0xbd, 0xd2, 0x29, 0x85, 0x4b, + 0x51, 0xa1, 0x0a, 0x24, 0x11, 0x83, 0x01, 0x42, 0xc3, 0x4e, 0xc4, 0x45, 0x8c, 0x35, 0x95, 0x88, + 0x45, 0x8c, 0x08, 0xa7, 0x1a, 0x31, 0x22, 0xc8, 0xd0, 0x1e, 0xdc, 0xc8, 0x93, 0xc3, 0xed, 0xc1, + 0xed, 0x2c, 0xd9, 0x23, 0xc6, 0xd4, 0x8a, 0x34, 0xf4, 0x4f, 0x1a, 0xcc, 0xba, 0x9e, 0x6e, 0x19, + 0x7a, 0xdb, 0xb6, 0xf0, 0x75, 0xab, 0xe5, 0x60, 0xd7, 0xbd, 0x6e, 0x6d, 0xdb, 0xc5, 0x02, 0xd5, + 0x73, 0x2e, 0x12, 0x58, 0xe3, 0x48, 0xab, 0xe7, 0xfa, 0xbd, 0x52, 0x29, 0x56, 0x8a, 0xa2, 0x39, + 0x5e, 0x11, 0xda, 0x87, 0x69, 0x71, 0x48, 0x6f, 0x79, 0x66, 0xdb, 0x74, 0x75, 0xcf, 0xb4, 0xad, + 0xe2, 0x49, 0xaa, 0xff, 0x6c, 0x34, 0x3e, 0x0d, 0x10, 0x56, 0xcf, 0xf6, 0x7b, 0xa5, 0x33, 0x31, + 0x12, 0x14, 0xdd, 0x71, 0x2a, 0x42, 0x23, 0x6e, 0x38, 0x98, 0x10, 0x62, 0xa3, 0x38, 0x3d, 0xdc, + 0x88, 0x01, 0x91, 0x6c, 0xc4, 0x00, 0x18, 0x67, 0xc4, 0x00, 0x49, 0x34, 0x75, 0x75, 0xc7, 0x33, + 0x89, 0xda, 0x75, 0xdd, 0xd9, 0xc5, 0x4e, 0x71, 0x26, 0x4e, 0xd3, 0x86, 0x4a, 0xc4, 0x34, 0x45, + 0x38, 0x55, 0x4d, 0x11, 0x24, 0xfa, 0x5c, 0x03, 0x75, 0x68, 0xa6, 0x6d, 0xd5, 0xc8, 0xa1, 0xed, + 0x92, 0xe9, 0xcd, 0x52, 0xa5, 0xcf, 0xde, 0x67, 0x7a, 0x32, 0x79, 0xf5, 0xd9, 0x7e, 0xaf, 0x74, + 0x6e, 0xa8, 0x34, 0x65, 0x20, 0xc3, 0x95, 0xa2, 0x3b, 0x90, 0x27, 0x48, 0x4c, 0xd3, 0x1f, 0xa3, + 0x38, 0x47, 0xc7, 0x70, 0x7a, 0x70, 0x0c, 0x9c, 0xa0, 0x7a, 0xba, 0xdf, 0x2b, 0xcd, 0x4a, 0x1c, + 0x8a, 0x1e, 0x59, 0x14, 0xfa, 0x4c, 0x03, 0xe2, 0xe8, 0x71, 0x33, 0x3d, 0x45, 0xb5, 0x3c, 0x33, + 0xa0, 0x25, 0x6e, 0x9a, 0xcf, 0xf4, 0x7b, 0xa5, 0xc5, 0x78, 0x39, 0x8a, 0xee, 0x21, 0xba, 0x42, + 0x3f, 0x0a, 0x0e, 0x89, 0x62, 0x71, 0xb8, 0x1f, 0x05, 0x44, 0xb2, 0x1f, 0x05, 0xc0, 0x38, 0x3f, + 0x0a, 0x90, 0x3c, 0x18, 0xbc, 0xa7, 0xb7, 0x4d, 0x83, 0x26, 0x53, 0xa7, 0x87, 0x04, 0x83, 0x80, + 0x22, 0x08, 0x06, 0x01, 0x64, 0x20, 0x18, 0x84, 0xb4, 0x19, 0x18, 0xa3, 0x22, 0xca, 0xf7, 0x32, + 0x30, 0x1d, 0xb3, 0xd5, 0xd0, 0x9b, 0x90, 0x76, 0x7c, 0x8b, 0x64, 0x9f, 0x2c, 0xed, 0x42, 0xaa, + 0xe2, 0x2d, 0xdf, 0x34, 0x58, 0xea, 0xeb, 0xf8, 0x96, 0x92, 0x90, 0x8e, 0x51, 0x00, 0xe1, 0x27, + 0xa9, 0xaf, 0x69, 0xf0, 0xf4, 0x6a, 0x28, 0xff, 0x5d, 0xbb, 0xa1, 0xf2, 0x53, 0x00, 0xc2, 0x30, + 0x21, 0xf6, 0x71, 0xdd, 0x24, 0x41, 0x2a, 0x19, 0x67, 0xe5, 0x77, 0xfc, 0x06, 0x76, 0x2c, 0xec, + 0x61, 0x57, 0xcc, 0x81, 0x46, 0x29, 0xba, 0x12, 0x8e, 0x04, 0x91, 0xe4, 0x8f, 0xcb, 0x70, 0xf4, + 0x9f, 0x1a, 0x14, 0x3b, 0xfa, 0x7e, 0x5d, 0x00, 0xdd, 0xfa, 0xb6, 0xed, 0xd4, 0xbb, 0xd8, 0x31, + 0x6d, 0x83, 0x66, 0xd2, 0xf9, 0xe5, 0xbf, 0x7b, 0x60, 0x5c, 0xaa, 0xac, 0xeb, 0xfb, 0x02, 0xec, + 0xbe, 0x6d, 0x3b, 0x1b, 0x94, 0x7d, 0xd5, 0xf2, 0x9c, 0x03, 0x16, 0x30, 0x3b, 0x71, 0x78, 0x69, + 0x4c, 0xb3, 0xb1, 0x04, 0xe8, 0xdf, 0x35, 0x98, 0xf3, 0x6c, 0x4f, 0x6f, 0xd7, 0x9b, 0x7e, 0xc7, + 0x6f, 0xeb, 0x9e, 0xb9, 0x87, 0xeb, 0xbe, 0xab, 0xb7, 0x30, 0x4f, 0xdb, 0xdf, 0x78, 0xf0, 0xd0, + 0x6e, 0x13, 0xfe, 0xcb, 0x01, 0xfb, 0x16, 0xe1, 0x66, 0x23, 0x2b, 0xf7, 0x7b, 0xa5, 0x05, 0x2f, + 0x06, 0x2d, 0x0d, 0x6c, 0x26, 0x0e, 0x8f, 0x2e, 0x02, 0x30, 0xdb, 0xd6, 0x5d, 0xcf, 0xa1, 0x19, + 0x5a, 0xae, 0x3a, 0xd7, 0xef, 0x95, 0x10, 0x35, 0xdd, 0xa6, 0x27, 0xc5, 0xad, 0x5a, 0x56, 0xc0, + 0x08, 0x17, 0xf3, 0x28, 0xca, 0x95, 0x09, 0xb9, 0xa8, 0xc3, 0x44, 0xb8, 0x04, 0x6c, 0xfe, 0xbf, + 0x34, 0x98, 0x1f, 0xbe, 0xbc, 0xe8, 0x1c, 0x24, 0x77, 0xf1, 0x01, 0x2f, 0xc5, 0x4e, 0xf6, 0x7b, + 0xa5, 0x89, 0x5d, 0x7c, 0x20, 0x09, 0x22, 0x58, 0xf4, 0x0f, 0x30, 0xb6, 0xa7, 0xb7, 0x7d, 0xcc, + 0x5d, 0xb1, 0x52, 0x61, 0x55, 0x64, 0x45, 0xae, 0x22, 0x2b, 0xdd, 0xdd, 0x16, 0x01, 0x54, 0x84, + 0x27, 0x54, 0xde, 0xf5, 0x75, 0xcb, 0x33, 0xbd, 0x03, 0xe6, 0xa6, 0x54, 0x80, 0xec, 0xa6, 0x14, + 0x70, 0x29, 0xf1, 0x9a, 0x36, 0xff, 0x85, 0x06, 0xa7, 0x87, 0x2e, 0xf3, 0x37, 0x61, 0x84, 0xe5, + 0x3a, 0xa4, 0xc8, 0x86, 0x23, 0x45, 0xe2, 0x8e, 0xd9, 0xda, 0x79, 0xf5, 0x22, 0x1d, 0x4e, 0x9a, + 0xd5, 0x74, 0x0c, 0x22, 0xd7, 0x74, 0x0c, 0x42, 0x0a, 0xdd, 0xb6, 0xfd, 0xf1, 0xab, 0x17, 0xe9, + 0xa0, 0xd2, 0x4c, 0x09, 0x05, 0xc8, 0x4a, 0x28, 0xa0, 0xdc, 0x4f, 0x43, 0x2e, 0xa8, 0xc4, 0xa4, + 0xbd, 0xaf, 0x1d, 0x6a, 0xef, 0x5f, 0x83, 0x82, 0x81, 0x0d, 0xbf, 0xdb, 0x36, 0x9b, 0xd4, 0x89, + 0x45, 0x14, 0xc9, 0xb1, 0x30, 0xaa, 0xe0, 0x14, 0xfe, 0xa9, 0x08, 0x0a, 0x2d, 0x43, 0x96, 0x57, + 0x2c, 0x07, 0x34, 0x80, 0x4c, 0x30, 0x8f, 0x13, 0x30, 0xd9, 0xe3, 0x04, 0x0c, 0xd5, 0x00, 0x58, + 0x0b, 0x60, 0x1d, 0x7b, 0x3a, 0xaf, 0x9d, 0x8a, 0xea, 0x0c, 0x6e, 0x05, 0x78, 0x56, 0xcc, 0x87, + 0xf4, 0x72, 0x31, 0x1f, 0x42, 0xd1, 0x07, 0x00, 0x1d, 0xdd, 0xb4, 0x18, 0x1f, 0x2f, 0x94, 0xca, + 0xc3, 0x42, 0xd9, 0x7a, 0x40, 0xc9, 0xa4, 0x87, 0x9c, 0xb2, 0xf4, 0x10, 0x8a, 0x6e, 0x41, 0x86, + 0x37, 0x2d, 0x8a, 0x69, 0x1a, 0x17, 0x16, 0x86, 0x89, 0xe6, 0x62, 0x69, 0xd9, 0xcd, 0x59, 0xe4, + 0xb2, 0x9b, 0x83, 0xc8, 0xb2, 0xb5, 0xcd, 0x6d, 0xec, 0x99, 0x1d, 0x4c, 0x37, 0x2a, 0x5f, 0x36, + 0x01, 0x93, 0x97, 0x4d, 0xc0, 0xd0, 0x6b, 0x00, 0xba, 0xb7, 0x6e, 0xbb, 0xde, 0x2d, 0xab, 0x89, + 0x69, 0xe9, 0x93, 0x65, 0xc3, 0x0f, 0xa1, 0xf2, 0xf0, 0x43, 0x28, 0x7a, 0x03, 0xf2, 0x5d, 0x7e, + 0xd4, 0x36, 0xda, 0x98, 0x96, 0x36, 0x59, 0x96, 0x19, 0x48, 0x60, 0x89, 0x57, 0xa6, 0x46, 0x57, + 0x61, 0xaa, 0x69, 0x5b, 0x4d, 0xdf, 0x71, 0xb0, 0xd5, 0x3c, 0xd8, 0xd4, 0xb7, 0x31, 0x2d, 0x63, + 0xb2, 0xcc, 0x55, 0x22, 0x28, 0xd9, 0x55, 0x22, 0x28, 0xf4, 0x0a, 0xe4, 0x82, 0x16, 0x10, 0xad, + 0x54, 0x72, 0xbc, 0xa3, 0x20, 0x80, 0x12, 0x73, 0x48, 0x49, 0x06, 0x6f, 0xba, 0x57, 0xb8, 0xd3, + 0x61, 0x5a, 0x7d, 0xf0, 0xc1, 0x4b, 0x60, 0x79, 0xf0, 0x12, 0x38, 0x12, 0x48, 0x27, 0x47, 0x0b, + 0xa4, 0xe5, 0x5f, 0x69, 0x30, 0x13, 0xe7, 0x2d, 0x11, 0xcf, 0xd5, 0x1e, 0x89, 0xe7, 0xbe, 0x07, + 0xd9, 0xae, 0x6d, 0xd4, 0xdd, 0x2e, 0x6e, 0xf2, 0xe0, 0x14, 0xf1, 0xdb, 0x0d, 0xdb, 0xd8, 0xec, + 0xe2, 0xe6, 0xdf, 0x9b, 0xde, 0xce, 0xca, 0x9e, 0x6d, 0x1a, 0x37, 0x4c, 0x97, 0x3b, 0x58, 0x97, + 0x61, 0x94, 0x2c, 0x24, 0xc3, 0x81, 0xd5, 0x2c, 0xa4, 0x99, 0x96, 0xf2, 0xaf, 0x93, 0x50, 0x88, + 0x7a, 0xe8, 0xb7, 0x69, 0x2a, 0xe8, 0x0e, 0x64, 0x4c, 0x56, 0xe4, 0xf0, 0x24, 0xe5, 0x6f, 0xa4, + 0xf0, 0x5d, 0x09, 0x3b, 0x9e, 0x95, 0xbd, 0x97, 0x2a, 0xbc, 0x1a, 0xa2, 0x4b, 0x40, 0x25, 0x73, + 0x4e, 0x55, 0x32, 0x07, 0xa2, 0x1a, 0x64, 0x5c, 0xec, 0xec, 0x99, 0x4d, 0xcc, 0xe3, 0x50, 0x49, + 0x96, 0xdc, 0xb4, 0x1d, 0x4c, 0x64, 0x6e, 0x32, 0x92, 0x50, 0x26, 0xe7, 0x51, 0x65, 0x72, 0x20, + 0x7a, 0x0f, 0x72, 0x4d, 0xdb, 0xda, 0x36, 0x5b, 0xeb, 0x7a, 0x97, 0x47, 0xa2, 0x33, 0x71, 0x52, + 0x2f, 0x0b, 0x22, 0xde, 0xb8, 0x11, 0x9f, 0x91, 0xc6, 0x4d, 0x40, 0x15, 0x1a, 0xf4, 0xcf, 0x29, + 0x80, 0xd0, 0x38, 0xe8, 0x75, 0xc8, 0xe3, 0x7d, 0xdc, 0xf4, 0x3d, 0xdb, 0x11, 0x47, 0x02, 0xef, + 0x81, 0x0a, 0xb0, 0x12, 0xc3, 0x21, 0x84, 0x92, 0x3d, 0x69, 0xe9, 0x1d, 0xec, 0x76, 0xf5, 0xa6, + 0x68, 0x9e, 0xd2, 0xc1, 0x04, 0x40, 0x79, 0x4f, 0x06, 0x40, 0xf4, 0xb7, 0x90, 0xa2, 0xed, 0x56, + 0xd6, 0x37, 0x45, 0xfd, 0x5e, 0x69, 0xd2, 0x52, 0x1b, 0xad, 0x14, 0x8f, 0xde, 0x82, 0x89, 0xdd, + 0xc0, 0xf1, 0xc8, 0xd8, 0x52, 0x94, 0x81, 0x66, 0x8f, 0x21, 0x42, 0x19, 0xdd, 0xb8, 0x0c, 0x47, + 0xdb, 0x90, 0xd7, 0x2d, 0xcb, 0xf6, 0xe8, 0x71, 0x23, 0x7a, 0xa9, 0x17, 0x86, 0xb9, 0x69, 0x65, + 0x25, 0xa4, 0x65, 0x29, 0x18, 0x8d, 0x13, 0x92, 0x04, 0x39, 0x4e, 0x48, 0x60, 0x54, 0x83, 0x74, + 0x5b, 0x6f, 0xe0, 0xb6, 0x88, 0xef, 0xcf, 0x0c, 0x55, 0x71, 0x83, 0x92, 0x31, 0xe9, 0xf4, 0x74, + 0x67, 0x7c, 0xf2, 0xe9, 0xce, 0x20, 0xf3, 0xdb, 0x50, 0x88, 0x8e, 0x67, 0xb4, 0x5c, 0xe5, 0x82, + 0x9c, 0xab, 0xe4, 0x1e, 0x98, 0x1d, 0xe9, 0x90, 0x97, 0x06, 0x75, 0x1c, 0x2a, 0xca, 0xff, 0xa3, + 0xc1, 0x4c, 0xdc, 0xde, 0x45, 0xeb, 0xd2, 0x8e, 0xd7, 0x78, 0x5f, 0x28, 0xc6, 0xd5, 0x39, 0xef, + 0x90, 0xad, 0x1e, 0x6e, 0xf4, 0x2a, 0x4c, 0x5a, 0xb6, 0x81, 0xeb, 0x3a, 0x51, 0xd0, 0x36, 0x5d, + 0xaf, 0x98, 0xa0, 0xbd, 0x76, 0xda, 0x4f, 0x22, 0x98, 0x15, 0x81, 0x90, 0xb8, 0x27, 0x14, 0x44, + 0xf9, 0x47, 0x1a, 0x4c, 0x45, 0xda, 0xbd, 0x47, 0xce, 0x97, 0xe4, 0x2c, 0x27, 0x31, 0x62, 0x96, + 0xa3, 0x1e, 0x3d, 0xc9, 0x11, 0x8f, 0x9e, 0x5f, 0x24, 0x20, 0x2f, 0xd5, 0xef, 0x47, 0x1e, 0xf9, + 0x5d, 0x98, 0xe2, 0x47, 0xa9, 0x69, 0xb5, 0x58, 0x9d, 0x97, 0xe0, 0xcd, 0xa8, 0x81, 0xfb, 0x98, + 0x35, 0xbb, 0xb1, 0x19, 0xd0, 0xd2, 0x32, 0x8f, 0xf6, 0x0a, 0x5d, 0x05, 0x26, 0xa9, 0x98, 0x54, + 0x31, 0xe8, 0x0e, 0xcc, 0xf9, 0x5d, 0x52, 0xfd, 0xd6, 0x5d, 0x7e, 0xb3, 0x51, 0xb7, 0xfc, 0x4e, + 0x03, 0xb3, 0xd9, 0x8f, 0xb1, 0x7a, 0x88, 0x51, 0x88, 0xab, 0x8f, 0x9b, 0x14, 0x2f, 0xd7, 0x43, + 0x71, 0xf8, 0xc8, 0x5a, 0xa6, 0x46, 0x5c, 0xcb, 0x6b, 0x80, 0x06, 0xfb, 0xfe, 0x8a, 0x2d, 0xb5, + 0xd1, 0x6c, 0x59, 0xfe, 0xb1, 0x06, 0x85, 0x68, 0x3b, 0xff, 0x5b, 0xe4, 0x54, 0xff, 0xaf, 0x41, + 0x2e, 0xe8, 0xe8, 0x1f, 0x79, 0xdc, 0xcf, 0x43, 0xda, 0xc1, 0xba, 0x6b, 0x5b, 0x3c, 0x78, 0xd0, + 0x28, 0xc8, 0x20, 0x72, 0x14, 0x64, 0x90, 0x43, 0x8e, 0xf8, 0x36, 0x8c, 0x33, 0x73, 0xbd, 0x6d, + 0xb6, 0x3d, 0xec, 0xa0, 0x2b, 0x90, 0x76, 0x3d, 0xdd, 0xc3, 0x6e, 0x51, 0x5b, 0x4c, 0x9e, 0x9f, + 0x5c, 0x9e, 0x1b, 0x6c, 0xf9, 0x13, 0x34, 0x1b, 0x0b, 0xa3, 0x94, 0xc7, 0xc2, 0x20, 0xe5, 0x7f, + 0xd6, 0x60, 0x5c, 0xbe, 0xd9, 0x78, 0x34, 0x62, 0x1f, 0x6e, 0x41, 0xca, 0x3f, 0x08, 0x06, 0xd1, + 0x7e, 0x34, 0x7e, 0xf4, 0x38, 0xec, 0xf1, 0x27, 0x8d, 0x19, 0x24, 0xe8, 0xa4, 0x1f, 0x75, 0xd0, + 0xad, 0xb0, 0xfb, 0x44, 0x62, 0x87, 0x4b, 0x03, 0xfd, 0xa8, 0xdd, 0x27, 0x7a, 0x1c, 0x28, 0xec, + 0xf2, 0x71, 0xa0, 0x20, 0x0e, 0x39, 0xdf, 0xff, 0x4e, 0xd3, 0xf9, 0x86, 0x77, 0x2d, 0x4f, 0xba, + 0x5b, 0x17, 0xc9, 0xf1, 0x92, 0x0f, 0x91, 0xe3, 0xbd, 0x00, 0x19, 0x7a, 0xa8, 0x06, 0xe9, 0x17, + 0x75, 0x10, 0x02, 0x52, 0xef, 0xb9, 0x19, 0xe4, 0x3e, 0x51, 0x7c, 0xec, 0x88, 0x51, 0xbc, 0x0e, + 0xa7, 0x77, 0x74, 0xb7, 0x2e, 0xce, 0x1d, 0xa3, 0xae, 0x7b, 0xf5, 0x20, 0x02, 0xa6, 0x69, 0x5d, + 0x47, 0xbb, 0xc7, 0x3b, 0xba, 0xbb, 0x29, 0x68, 0x56, 0xbc, 0x8d, 0xc1, 0x78, 0x38, 0x17, 0x4f, + 0x81, 0xb6, 0x60, 0x36, 0x5e, 0x78, 0x86, 0x8e, 0x9c, 0x5e, 0x6e, 0xb8, 0xf7, 0x95, 0x3c, 0x1d, + 0x83, 0x46, 0x9f, 0x6a, 0x50, 0x24, 0x59, 0x8e, 0x83, 0x3f, 0xf2, 0x4d, 0x07, 0x77, 0x88, 0xc5, + 0xea, 0xf6, 0x1e, 0x76, 0xda, 0xfa, 0x01, 0xbf, 0x27, 0x3c, 0x3b, 0x78, 0x9a, 0x6e, 0xd8, 0x46, + 0x4d, 0x62, 0x60, 0x53, 0xeb, 0xaa, 0xc0, 0x5b, 0x4c, 0x88, 0x3c, 0xb5, 0x78, 0x8a, 0x88, 0x1b, + 0xc3, 0xa1, 0x3a, 0x82, 0xf9, 0xd1, 0x3a, 0x82, 0x24, 0xbb, 0xef, 0xda, 0x76, 0x9b, 0x96, 0xda, + 0x3c, 0xbb, 0x27, 0xdf, 0x72, 0x76, 0x4f, 0xbe, 0xd7, 0x52, 0xd9, 0x6c, 0x21, 0x57, 0xfe, 0x43, + 0x02, 0x26, 0xd5, 0x2b, 0xc6, 0x27, 0xbe, 0x59, 0x06, 0x82, 0x4b, 0xf2, 0xb1, 0x04, 0x97, 0xd4, + 0xa1, 0xac, 0x32, 0x36, 0x9a, 0x55, 0xca, 0xbf, 0x4f, 0xc0, 0x84, 0x72, 0xcb, 0xfa, 0xfd, 0x32, + 0x1f, 0xc7, 0x32, 0xff, 0x47, 0x02, 0xe6, 0xe2, 0x87, 0x7c, 0x2c, 0x2d, 0x93, 0x6b, 0x40, 0x8a, + 0x9f, 0xeb, 0x61, 0x5e, 0x3e, 0x3b, 0xd0, 0x31, 0xa1, 0xcb, 0x25, 0x2a, 0xa7, 0x81, 0x8b, 0x60, + 0xc1, 0x8e, 0xee, 0x40, 0xde, 0x94, 0xae, 0x9c, 0x93, 0x71, 0x37, 0x83, 0xf2, 0x45, 0x33, 0x6b, + 0xa1, 0x0d, 0xb9, 0x5e, 0x96, 0x45, 0x55, 0xd3, 0x90, 0x22, 0x85, 0x43, 0x79, 0x0f, 0x32, 0x7c, + 0x38, 0xe8, 0x65, 0xc8, 0xd1, 0x33, 0x85, 0x76, 0x01, 0xb4, 0x70, 0x69, 0x09, 0x30, 0xf2, 0xe4, + 0x2a, 0x2b, 0x60, 0xe8, 0x55, 0x00, 0x12, 0x46, 0xf9, 0x69, 0x92, 0xa0, 0x31, 0x99, 0x76, 0x1b, + 0xba, 0xb6, 0x31, 0x70, 0x84, 0xe4, 0x02, 0x60, 0xf9, 0xcb, 0x04, 0xe4, 0xe5, 0x4b, 0xee, 0x43, + 0x29, 0xff, 0x04, 0x44, 0x27, 0xa8, 0xae, 0x1b, 0x06, 0xf9, 0x17, 0x8b, 0xa4, 0x63, 0x69, 0xe8, + 0x22, 0x89, 0xff, 0xaf, 0x08, 0x0e, 0x56, 0xf7, 0xd3, 0x87, 0x3c, 0x66, 0x04, 0x25, 0x69, 0x2d, + 0x44, 0x71, 0xf3, 0xbb, 0x30, 0x1b, 0x2b, 0x4a, 0xae, 0xd6, 0xc7, 0x1e, 0x55, 0xb5, 0xfe, 0x65, + 0x1a, 0x66, 0x63, 0x1f, 0x17, 0x3c, 0xf1, 0x88, 0xa1, 0xee, 0xa0, 0xe4, 0x23, 0xd9, 0x41, 0xff, + 0xa2, 0xc5, 0x59, 0x96, 0xdd, 0x2c, 0xbe, 0x3e, 0xc2, 0x8b, 0x8b, 0x47, 0x65, 0x63, 0xd5, 0x2d, + 0xc7, 0x0e, 0xb5, 0x27, 0xd2, 0xa3, 0xee, 0x09, 0xf4, 0x22, 0x6b, 0xbc, 0x50, 0x5d, 0xec, 0xa6, + 0x4f, 0x44, 0x88, 0x88, 0xaa, 0x0c, 0x07, 0xa1, 0xb7, 0x60, 0x42, 0x70, 0xb0, 0x76, 0x5f, 0x36, + 0xec, 0xc5, 0x71, 0x9a, 0x68, 0xc7, 0x6f, 0x5c, 0x86, 0x47, 0xa2, 0x70, 0xee, 0x50, 0x51, 0x18, + 0x46, 0xbc, 0x94, 0x7c, 0xac, 0xfb, 0xe5, 0x8f, 0x09, 0x98, 0x8a, 0xbc, 0x2d, 0xfa, 0xfe, 0x6c, + 0x3d, 0x8e, 0xb3, 0xf5, 0x67, 0x1a, 0xe4, 0x82, 0x27, 0x74, 0x47, 0x2e, 0x21, 0x57, 0x20, 0x8d, + 0xd9, 0x33, 0x2e, 0x16, 0xc6, 0xa7, 0x23, 0x4f, 0x6c, 0x09, 0x8e, 0x3f, 0xaa, 0x8d, 0xbc, 0xdc, + 0xaa, 0x71, 0xc6, 0x43, 0x16, 0x87, 0x3f, 0x49, 0x88, 0xe2, 0x30, 0x9c, 0xc9, 0x13, 0x75, 0x96, + 0x70, 0x25, 0x92, 0x8f, 0x66, 0x25, 0x8e, 0xd7, 0x0d, 0x7e, 0x9a, 0x83, 0x31, 0x3a, 0x26, 0xb4, + 0x0c, 0x59, 0x0f, 0x3b, 0x1d, 0xd3, 0xd2, 0xdb, 0x74, 0xe9, 0xb2, 0x8c, 0x5b, 0xc0, 0x64, 0x6e, + 0x01, 0x43, 0x3b, 0x30, 0x15, 0x5e, 0x11, 0x50, 0x31, 0xf1, 0xef, 0x8b, 0xdf, 0x51, 0x89, 0xd8, + 0x75, 0x65, 0x84, 0x53, 0x7d, 0x20, 0x14, 0x41, 0x22, 0x03, 0x26, 0x9b, 0xb6, 0xe5, 0xe9, 0xa6, + 0x85, 0x1d, 0xa6, 0x28, 0x19, 0xf7, 0xbe, 0xf2, 0xb2, 0x42, 0xc3, 0x7a, 0xa6, 0x2a, 0x9f, 0xfa, + 0xbe, 0x52, 0xc5, 0xa1, 0x0f, 0x61, 0x42, 0x14, 0xeb, 0x4c, 0x49, 0x2a, 0xee, 0x7d, 0xe5, 0xaa, + 0x4c, 0xc2, 0x36, 0xb8, 0xc2, 0xa5, 0xbe, 0xaf, 0x54, 0x50, 0xa8, 0x0d, 0x85, 0xae, 0x6d, 0x6c, + 0x59, 0xbc, 0x44, 0xd5, 0x1b, 0x6d, 0xcc, 0xef, 0xa5, 0x16, 0x06, 0x92, 0x4d, 0x85, 0x8a, 0x1d, + 0x82, 0x51, 0x5e, 0xf5, 0xc5, 0x72, 0x14, 0x8b, 0x3e, 0x80, 0xf1, 0x36, 0xd6, 0x5d, 0xbc, 0xba, + 0xdf, 0x35, 0x1d, 0x6c, 0xc4, 0xbf, 0x2f, 0xbe, 0x21, 0x51, 0xb0, 0x23, 0x48, 0xe6, 0x51, 0x9f, + 0x55, 0xc9, 0x18, 0x62, 0xfd, 0x8e, 0xbe, 0x5f, 0xf3, 0x2d, 0x77, 0x75, 0x9f, 0xbf, 0x15, 0xcd, + 0xc4, 0x59, 0x7f, 0x5d, 0x25, 0x62, 0xd6, 0x8f, 0x70, 0xaa, 0xd6, 0x8f, 0x20, 0xd1, 0x0d, 0x7a, + 0xc2, 0x32, 0x93, 0xb0, 0x77, 0xc6, 0x73, 0x03, 0xab, 0xc5, 0xac, 0xc1, 0xda, 0xb6, 0xfc, 0x4b, + 0x11, 0x1a, 0x48, 0xe0, 0x36, 0xa0, 0xd3, 0xae, 0x61, 0xcf, 0x77, 0x2c, 0x6c, 0xf0, 0xd6, 0xc1, + 0xa0, 0x0d, 0x14, 0xaa, 0xc0, 0x06, 0x0a, 0x74, 0xc0, 0x06, 0x0a, 0x16, 0x7d, 0x02, 0x33, 0x91, + 0x57, 0x93, 0x6c, 0x1e, 0xf9, 0xb8, 0x4b, 0xd9, 0xb5, 0x18, 0x4a, 0xd6, 0xe5, 0x89, 0x93, 0xa1, + 0x68, 0x8e, 0xd5, 0x42, 0xb4, 0xb7, 0x74, 0xab, 0xb5, 0x66, 0x37, 0x54, 0x9f, 0x1b, 0x8f, 0xd3, + 0x7e, 0x35, 0x86, 0x92, 0x69, 0x8f, 0x93, 0xa1, 0x6a, 0x8f, 0xa3, 0x08, 0x5e, 0x48, 0x92, 0x04, + 0x31, 0x78, 0x49, 0x1c, 0xf7, 0x42, 0x92, 0x11, 0x48, 0x2f, 0x24, 0x19, 0x20, 0xe6, 0x85, 0x24, + 0xa7, 0xcc, 0x8a, 0x46, 0x6b, 0xf9, 0x0b, 0x0d, 0xa6, 0x22, 0xf1, 0x05, 0xbd, 0x09, 0xc1, 0xc3, + 0xb7, 0xdb, 0x07, 0x5d, 0x51, 0x98, 0x28, 0x0f, 0xe5, 0x08, 0x3c, 0xee, 0xa1, 0x1c, 0x81, 0xa3, + 0x1b, 0x00, 0xc1, 0xc9, 0x7c, 0xbf, 0x83, 0x80, 0x66, 0xc5, 0x21, 0xa5, 0x9c, 0x15, 0x87, 0xd0, + 0xf2, 0xe7, 0x29, 0xc8, 0x0a, 0x07, 0x3d, 0x96, 0xc2, 0x75, 0x09, 0x32, 0x1d, 0xec, 0xd2, 0xa7, + 0x72, 0x89, 0x30, 0xff, 0xe4, 0x20, 0x39, 0xff, 0xe4, 0x20, 0x35, 0x3d, 0x4e, 0x1e, 0x2a, 0x3d, + 0x4e, 0x8d, 0x9c, 0x1e, 0x63, 0xfa, 0x68, 0x45, 0x0a, 0xb3, 0xe2, 0xee, 0xf8, 0xfe, 0xb1, 0x5b, + 0x3c, 0x69, 0x91, 0x19, 0x23, 0x4f, 0x5a, 0x64, 0x14, 0xda, 0x85, 0x93, 0xd2, 0xfd, 0x36, 0xef, + 0xc2, 0x93, 0x80, 0x37, 0x39, 0xfc, 0x85, 0x50, 0x8d, 0x52, 0xb1, 0x6d, 0xbd, 0x1b, 0x81, 0xca, + 0xf5, 0x45, 0x14, 0x47, 0x1c, 0xcc, 0xc0, 0x0d, 0xbf, 0xb5, 0xce, 0x97, 0x3d, 0x13, 0x3a, 0x98, + 0x0c, 0x97, 0x1d, 0x4c, 0x86, 0xd3, 0x46, 0x9d, 0x3a, 0xdf, 0x63, 0x71, 0x8c, 0x97, 0x21, 0x87, + 0xf7, 0x4d, 0xaf, 0xde, 0xb4, 0x0d, 0xcc, 0x8b, 0x7c, 0x6a, 0x67, 0x02, 0xbc, 0x6c, 0x1b, 0x8a, + 0x9d, 0x05, 0x4c, 0xf6, 0xa6, 0xe4, 0x48, 0xde, 0x14, 0x5e, 0x7a, 0xa4, 0x46, 0xb8, 0xf4, 0x88, + 0xb5, 0x53, 0xee, 0x78, 0xec, 0x54, 0xfe, 0x2a, 0x01, 0x85, 0x68, 0x14, 0xff, 0x66, 0x6c, 0x41, + 0x75, 0x37, 0x25, 0x47, 0xde, 0x4d, 0x6f, 0xc1, 0x04, 0x49, 0xf3, 0x74, 0xcf, 0xe3, 0x2f, 0xfb, + 0x53, 0x34, 0x57, 0x63, 0xb1, 0xcd, 0xb7, 0x56, 0x04, 0x5c, 0x89, 0x6d, 0x12, 0x7c, 0xc0, 0x75, + 0xc7, 0x1e, 0xd2, 0x75, 0x3f, 0x4d, 0xc0, 0xc4, 0x86, 0x6d, 0xdc, 0x66, 0x39, 0xa0, 0xf7, 0x4d, + 0x59, 0xcf, 0xc7, 0x19, 0xd2, 0xca, 0x53, 0x30, 0xa1, 0x24, 0x81, 0xe5, 0xcf, 0x98, 0x9f, 0xa9, + 0xa7, 0xdf, 0x77, 0x6f, 0x5d, 0x26, 0x61, 0x5c, 0xce, 0x26, 0xcb, 0x55, 0x98, 0x8a, 0x24, 0x7f, + 0xf2, 0x04, 0xb4, 0x51, 0x26, 0x50, 0x9e, 0x83, 0x99, 0xb8, 0xac, 0xa8, 0x7c, 0x15, 0x66, 0xe2, + 0xf2, 0x95, 0x87, 0x57, 0xf0, 0x26, 0x7f, 0xe5, 0xc1, 0x32, 0x8b, 0x87, 0xe7, 0xff, 0xbf, 0x94, + 0x68, 0x59, 0x84, 0xbf, 0x8b, 0x79, 0x1f, 0x0a, 0x5d, 0xf1, 0x51, 0x7f, 0x60, 0x65, 0x4d, 0xcb, + 0x94, 0x80, 0x7e, 0x2d, 0x52, 0x58, 0x4e, 0xaa, 0x18, 0x55, 0x36, 0xaf, 0x75, 0x13, 0x23, 0xca, + 0xae, 0x45, 0x8a, 0xde, 0x49, 0x15, 0x83, 0xfe, 0x11, 0x4e, 0x8a, 0xf7, 0xa6, 0x7b, 0x58, 0x0c, + 0x3c, 0x39, 0x54, 0x38, 0xfb, 0x19, 0x4f, 0xc0, 0x10, 0x1d, 0xf9, 0x54, 0x04, 0x15, 0x11, 0xcf, + 0xc7, 0x9e, 0x1a, 0x55, 0x7c, 0x74, 0xf0, 0x53, 0x11, 0x14, 0xda, 0x80, 0x99, 0xe8, 0xaa, 0x4b, + 0xc5, 0x70, 0xa9, 0xdf, 0x2b, 0x3d, 0xa5, 0xae, 0xa5, 0x5a, 0x15, 0x9f, 0x1c, 0x40, 0xaa, 0x12, + 0xa5, 0xf2, 0x3a, 0x1d, 0x23, 0xb1, 0x36, 0x58, 0x67, 0x9f, 0x1c, 0x40, 0x96, 0x7f, 0xa9, 0xc1, + 0x54, 0xe4, 0xd7, 0x50, 0xe8, 0x0a, 0x64, 0xe9, 0x4f, 0x95, 0xef, 0xef, 0x25, 0xd4, 0x0f, 0x29, + 0x9d, 0xb2, 0x0a, 0x19, 0x0e, 0x42, 0x97, 0x60, 0x5c, 0x48, 0x91, 0x5a, 0x28, 0x34, 0xac, 0x70, + 0x12, 0x75, 0x70, 0x10, 0x42, 0xd1, 0x2b, 0x90, 0x0b, 0x7e, 0x70, 0xc5, 0x1f, 0xc0, 0xb0, 0xfd, + 0x2e, 0x80, 0xca, 0x7e, 0x17, 0xc0, 0xf2, 0xbf, 0x26, 0xe0, 0xf4, 0xd0, 0x5f, 0x59, 0x3d, 0xf1, + 0x56, 0xcc, 0xa1, 0x3a, 0x4a, 0x91, 0x3e, 0x4a, 0x6a, 0xc4, 0x3e, 0xca, 0xbf, 0x69, 0x30, 0x17, + 0xff, 0x2b, 0xac, 0x23, 0xf7, 0xd6, 0xd4, 0x69, 0x24, 0x46, 0x7f, 0x67, 0x34, 0x2e, 0xff, 0x60, + 0xea, 0xc8, 0xc3, 0xb8, 0x00, 0x63, 0x5d, 0xdb, 0x6e, 0xbb, 0xfc, 0x19, 0x20, 0x25, 0xa5, 0x00, + 0x99, 0x94, 0x02, 0x0e, 0xd9, 0xca, 0xfb, 0x8b, 0x26, 0xe2, 0x68, 0xf8, 0xbb, 0xb0, 0xef, 0x90, + 0x0b, 0x3d, 0xf7, 0x22, 0x64, 0xc5, 0x23, 0x27, 0x04, 0x90, 0x7e, 0x77, 0x6b, 0x75, 0x6b, 0xf5, + 0x4a, 0xe1, 0x04, 0xca, 0x43, 0x66, 0x63, 0xf5, 0xe6, 0x95, 0xeb, 0x37, 0xaf, 0x16, 0x34, 0xf2, + 0x51, 0xdb, 0xba, 0x79, 0x93, 0x7c, 0x24, 0x9e, 0xbb, 0x21, 0xbf, 0x25, 0xe7, 0x95, 0xc9, 0x38, + 0x64, 0x57, 0xba, 0x5d, 0x7a, 0x44, 0x32, 0xde, 0xd5, 0x3d, 0x93, 0x9c, 0x6b, 0x05, 0x0d, 0x65, + 0x20, 0x79, 0xeb, 0xd6, 0x7a, 0x21, 0x81, 0x66, 0xa0, 0x70, 0x05, 0xeb, 0x46, 0xdb, 0xb4, 0xb0, + 0x38, 0x97, 0x0b, 0xc9, 0xea, 0xdd, 0x9f, 0xdf, 0x5b, 0xd0, 0xbe, 0xba, 0xb7, 0xa0, 0xfd, 0xee, + 0xde, 0x82, 0xf6, 0xf9, 0xd7, 0x0b, 0x27, 0xbe, 0xfa, 0x7a, 0xe1, 0xc4, 0x6f, 0xbe, 0x5e, 0x38, + 0xf1, 0xfe, 0x8b, 0x2d, 0xd3, 0xdb, 0xf1, 0x1b, 0x95, 0xa6, 0xdd, 0xe1, 0x7f, 0x2b, 0xa3, 0xeb, + 0xd8, 0xe4, 0xb8, 0xe4, 0x5f, 0x4b, 0xd1, 0x3f, 0xa2, 0xf1, 0xbf, 0x89, 0x33, 0x2b, 0xf4, 0x73, + 0x83, 0xd1, 0x55, 0xae, 0xdb, 0x15, 0x06, 0xa0, 0x7f, 0x36, 0xc1, 0x6d, 0xa4, 0xe9, 0x9f, 0x47, + 0x78, 0xf9, 0xaf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x13, 0xc4, 0x01, 0x6c, 0x7f, 0x43, 0x00, 0x00, } func (m *EventSequence) Marshal() (dAtA []byte, err error) { @@ -7506,6 +7516,13 @@ func (m *PartitionMarker) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.GroupIdStr) > 0 { + i -= len(m.GroupIdStr) + copy(dAtA[i:], m.GroupIdStr) + i = encodeVarintEvents(dAtA, i, uint64(len(m.GroupIdStr))) + i-- + dAtA[i] = 0x1a + } if m.Partition != 0 { i = encodeVarintEvents(dAtA, i, uint64(m.Partition)) i-- @@ -9274,6 +9291,10 @@ func (m *PartitionMarker) Size() (n int) { if m.Partition != 0 { n += 1 + sovEvents(uint64(m.Partition)) } + l = len(m.GroupIdStr) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } return n } @@ -18157,6 +18178,38 @@ func (m *PartitionMarker) Unmarshal(dAtA []byte) error { break } } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GroupIdStr", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.GroupIdStr = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipEvents(dAtA[iNdEx:]) diff --git a/pkg/armadaevents/events.proto b/pkg/armadaevents/events.proto index b84adfe7088..eed67236513 100644 --- a/pkg/armadaevents/events.proto +++ b/pkg/armadaevents/events.proto @@ -562,6 +562,8 @@ message JobRunPreempted{ message PartitionMarker { // group id ties together multiple messages across different partitions Uuid group_id = 1; + // string group id + string group_id_str = 3; // The pulsar partition on which this message was sent uint32 partition = 2; } diff --git a/pkg/armadaevents/jobid.go b/pkg/armadaevents/jobid.go index 05cc110b218..676add6627e 100644 --- a/pkg/armadaevents/jobid.go +++ b/pkg/armadaevents/jobid.go @@ -6,51 +6,48 @@ import ( "github.com/armadaproject/armada/internal/common/armadaerrors" ) -func JobIdFromEvent(event *EventSequence_Event) (*Uuid, error) { +func JobIdFromEvent(event *EventSequence_Event) (string, error) { switch e := event.Event.(type) { case *EventSequence_Event_SubmitJob: - return e.SubmitJob.JobId, nil + return e.SubmitJob.JobIdStr, nil case *EventSequence_Event_ReprioritiseJob: - return e.ReprioritiseJob.JobId, nil + return e.ReprioritiseJob.JobIdStr, nil case *EventSequence_Event_ReprioritisedJob: - return e.ReprioritisedJob.JobId, nil + return e.ReprioritisedJob.JobIdStr, nil case *EventSequence_Event_CancelJob: - return e.CancelJob.JobId, nil + return e.CancelJob.JobIdStr, nil case *EventSequence_Event_CancelledJob: - return e.CancelledJob.JobId, nil + return e.CancelledJob.JobIdStr, nil case *EventSequence_Event_JobSucceeded: - return e.JobSucceeded.JobId, nil + return e.JobSucceeded.JobIdStr, nil case *EventSequence_Event_JobRunSucceeded: - return e.JobRunSucceeded.JobId, nil + return e.JobRunSucceeded.JobIdStr, nil case *EventSequence_Event_JobRunLeased: - return e.JobRunLeased.JobId, nil + return e.JobRunLeased.JobIdStr, nil case *EventSequence_Event_JobRunAssigned: - return e.JobRunAssigned.JobId, nil + return e.JobRunAssigned.JobIdStr, nil case *EventSequence_Event_JobRunRunning: - return e.JobRunRunning.JobId, nil + return e.JobRunRunning.JobIdStr, nil case *EventSequence_Event_JobErrors: - return e.JobErrors.JobId, nil + return e.JobErrors.JobIdStr, nil case *EventSequence_Event_JobRunErrors: - return e.JobRunErrors.JobId, nil + return e.JobRunErrors.JobIdStr, nil case *EventSequence_Event_StandaloneIngressInfo: - return e.StandaloneIngressInfo.JobId, nil + return e.StandaloneIngressInfo.JobIdStr, nil case *EventSequence_Event_JobRunPreempted: - return e.JobRunPreempted.PreemptedJobId, nil + return e.JobRunPreempted.PreemptedJobIdStr, nil case *EventSequence_Event_JobRunCancelled: - return e.JobRunCancelled.JobId, nil + return e.JobRunCancelled.JobIdStr, nil case *EventSequence_Event_JobRequeued: - return e.JobRequeued.JobId, nil + return e.JobRequeued.JobIdStr, nil case *EventSequence_Event_JobValidated: - return e.JobValidated.JobId, nil + return e.JobValidated.JobIdStr, nil default: err := errors.WithStack(&armadaerrors.ErrInvalidArgument{ Name: "event.Event", Value: e, Message: "event doesn't contain a jobId", }) - return &Uuid{ - High64: 0, - Low64: 0, - }, err + return "", err } } diff --git a/pkg/executorapi/executorapi.pb.go b/pkg/executorapi/executorapi.pb.go index f7d2519267e..fdf87632e8e 100644 --- a/pkg/executorapi/executorapi.pb.go +++ b/pkg/executorapi/executorapi.pb.go @@ -298,6 +298,8 @@ type LeaseRequest struct { UnassignedJobRunIds []*armadaevents.Uuid `protobuf:"bytes,6,rep,name=unassigned_job_run_ids,json=unassignedJobRunIds,proto3" json:"unassignedJobRunIds,omitempty"` // Max number of jobs this request should return MaxJobsToLease uint32 `protobuf:"varint,7,opt,name=max_jobs_to_lease,json=maxJobsToLease,proto3" json:"maxJobsToLease,omitempty"` + // Run Ids of jobs owned by the executor but not currently assigned to a node. + UnassignedJobRunIdsStr []string `protobuf:"bytes,8,rep,name=unassigned_job_run_ids_str,json=unassignedJobRunIdsStr,proto3" json:"unassignedJobRunIdsStr,omitempty"` } func (m *LeaseRequest) Reset() { *m = LeaseRequest{} } @@ -382,14 +384,22 @@ func (m *LeaseRequest) GetMaxJobsToLease() uint32 { return 0 } +func (m *LeaseRequest) GetUnassignedJobRunIdsStr() []string { + if m != nil { + return m.UnassignedJobRunIdsStr + } + return nil +} + // Indicates that a job run is now leased. type JobRunLease struct { - JobRunId *armadaevents.Uuid `protobuf:"bytes,1,opt,name=job_run_id,json=jobRunId,proto3" json:"jobRunId,omitempty"` - Queue string `protobuf:"bytes,2,opt,name=queue,proto3" json:"queue,omitempty"` - Jobset string `protobuf:"bytes,3,opt,name=jobset,proto3" json:"jobset,omitempty"` - User string `protobuf:"bytes,4,opt,name=user,proto3" json:"user,omitempty"` - Groups []string `protobuf:"bytes,5,rep,name=groups,proto3" json:"groups,omitempty"` - Job *armadaevents.SubmitJob `protobuf:"bytes,6,opt,name=job,proto3" json:"job,omitempty"` + JobRunId *armadaevents.Uuid `protobuf:"bytes,1,opt,name=job_run_id,json=jobRunId,proto3" json:"jobRunId,omitempty"` + Queue string `protobuf:"bytes,2,opt,name=queue,proto3" json:"queue,omitempty"` + Jobset string `protobuf:"bytes,3,opt,name=jobset,proto3" json:"jobset,omitempty"` + User string `protobuf:"bytes,4,opt,name=user,proto3" json:"user,omitempty"` + Groups []string `protobuf:"bytes,5,rep,name=groups,proto3" json:"groups,omitempty"` + Job *armadaevents.SubmitJob `protobuf:"bytes,6,opt,name=job,proto3" json:"job,omitempty"` + JobRunIdStr string `protobuf:"bytes,7,opt,name=job_run_id_str,json=jobRunIdStr,proto3" json:"jobRunIdStr,omitempty"` } func (m *JobRunLease) Reset() { *m = JobRunLease{} } @@ -467,9 +477,17 @@ func (m *JobRunLease) GetJob() *armadaevents.SubmitJob { return nil } +func (m *JobRunLease) GetJobRunIdStr() string { + if m != nil { + return m.JobRunIdStr + } + return "" +} + // Indicates that the job runs with the given ids should be cancelled. type CancelRuns struct { - JobRunIdsToCancel []*armadaevents.Uuid `protobuf:"bytes,1,rep,name=job_run_ids_to_cancel,json=jobRunIdsToCancel,proto3" json:"jobRunIdsToCancel,omitempty"` + JobRunIdsToCancel []*armadaevents.Uuid `protobuf:"bytes,1,rep,name=job_run_ids_to_cancel,json=jobRunIdsToCancel,proto3" json:"jobRunIdsToCancel,omitempty"` + JobRunIdsToCancelStr []string `protobuf:"bytes,2,rep,name=job_run_ids_to_cancel_str,json=jobRunIdsToCancelStr,proto3" json:"jobRunIdsToCancelStr,omitempty"` } func (m *CancelRuns) Reset() { *m = CancelRuns{} } @@ -512,9 +530,17 @@ func (m *CancelRuns) GetJobRunIdsToCancel() []*armadaevents.Uuid { return nil } +func (m *CancelRuns) GetJobRunIdsToCancelStr() []string { + if m != nil { + return m.JobRunIdsToCancelStr + } + return nil +} + // Indicates that the job runs with the given ids should be preempted. type PreemptRuns struct { - JobRunIdsToPreempt []*armadaevents.Uuid `protobuf:"bytes,1,rep,name=job_run_ids_to_preempt,json=jobRunIdsToPreempt,proto3" json:"jobRunIdsToPreempt,omitempty"` + JobRunIdsToPreempt []*armadaevents.Uuid `protobuf:"bytes,1,rep,name=job_run_ids_to_preempt,json=jobRunIdsToPreempt,proto3" json:"jobRunIdsToPreempt,omitempty"` + JobRunIdsToPreemptStr []string `protobuf:"bytes,2,rep,name=job_run_ids_to_preempt_str,json=jobRunIdsToPreemptStr,proto3" json:"jobRunIdsToPreemptStr,omitempty"` } func (m *PreemptRuns) Reset() { *m = PreemptRuns{} } @@ -557,6 +583,13 @@ func (m *PreemptRuns) GetJobRunIdsToPreempt() []*armadaevents.Uuid { return nil } +func (m *PreemptRuns) GetJobRunIdsToPreemptStr() []string { + if m != nil { + return m.JobRunIdsToPreemptStr + } + return nil +} + // Indicates the end of the lease stream. type EndMarker struct { } @@ -731,102 +764,108 @@ func init() { func init() { proto.RegisterFile("pkg/executorapi/executorapi.proto", fileDescriptor_57e0d9d0e484e459) } var fileDescriptor_57e0d9d0e484e459 = []byte{ - // 1519 bytes of a gzipped FileDescriptorProto + // 1607 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0x4b, 0x6f, 0xdb, 0xc6, - 0x16, 0x36, 0xfd, 0x50, 0xec, 0x91, 0xed, 0x24, 0xe3, 0x17, 0x6d, 0x27, 0xa2, 0xa3, 0x8b, 0x7b, - 0xe1, 0xe0, 0x26, 0xd4, 0x8d, 0x73, 0x51, 0xa4, 0x45, 0x5b, 0xd4, 0x0a, 0x8c, 0xc4, 0x46, 0x92, - 0x36, 0xb2, 0x53, 0xb4, 0xdd, 0x10, 0x43, 0x71, 0x22, 0x53, 0x16, 0x39, 0x0c, 0x67, 0xe8, 0x44, - 0x59, 0x75, 0xd1, 0x45, 0xd1, 0x07, 0xd0, 0x45, 0x37, 0x5d, 0x04, 0xdd, 0xf5, 0x97, 0x74, 0xd1, - 0x65, 0x80, 0x6e, 0xba, 0x22, 0x8a, 0x64, 0xc7, 0x6d, 0xff, 0x40, 0x31, 0x33, 0xa4, 0x34, 0x94, - 0x28, 0x3b, 0x28, 0x0a, 0xd4, 0x2b, 0x9b, 0xe7, 0x3b, 0xef, 0xc3, 0xf3, 0x10, 0xc1, 0x95, 0xe0, - 0xa8, 0x55, 0xc3, 0xcf, 0x70, 0x33, 0x62, 0x24, 0x44, 0x81, 0xab, 0xfe, 0x6f, 0x06, 0x21, 0x61, - 0x04, 0x96, 0x15, 0xd2, 0xda, 0x65, 0xce, 0x8f, 0x42, 0x0f, 0x39, 0x08, 0x1f, 0x63, 0x9f, 0xd1, - 0x9a, 0xfc, 0x23, 0x79, 0xd7, 0x16, 0x05, 0x1c, 0xb8, 0x35, 0x1a, 0xd9, 0x9e, 0xcb, 0x52, 0xea, - 0x7a, 0x8b, 0x90, 0x56, 0x07, 0xd7, 0xc4, 0x93, 0x1d, 0x3d, 0xae, 0x61, 0x2f, 0x60, 0xdd, 0x14, - 0xac, 0x1e, 0xdd, 0xa2, 0xa6, 0x4b, 0x84, 0x54, 0x93, 0x84, 0xb8, 0x76, 0x7c, 0xa3, 0xd6, 0xc2, - 0x3e, 0x0e, 0x11, 0xc3, 0x4e, 0xca, 0xf3, 0xff, 0x3e, 0x8f, 0x87, 0x9a, 0x87, 0xae, 0x8f, 0xc3, - 0x6e, 0x2d, 0x33, 0x15, 0x62, 0x4a, 0xa2, 0xb0, 0x89, 0x07, 0xa5, 0xaa, 0x5f, 0x2c, 0x80, 0xe9, - 0x07, 0xc4, 0xc1, 0xbb, 0xfe, 0x63, 0x02, 0xff, 0x03, 0x26, 0x7d, 0xe4, 0x61, 0x5d, 0xdb, 0xd0, - 0x36, 0x67, 0xea, 0x30, 0x89, 0x8d, 0x79, 0xfe, 0x7c, 0x8d, 0x78, 0x2e, 0x13, 0xee, 0x34, 0x04, - 0x0e, 0xef, 0x80, 0x12, 0x43, 0xae, 0xcf, 0xa8, 0x3e, 0xbe, 0x31, 0xb1, 0x59, 0xde, 0x5a, 0x35, - 0xa5, 0x6d, 0x93, 0x27, 0x84, 0xfb, 0x67, 0x1e, 0xdf, 0x30, 0x0f, 0x38, 0x47, 0x7d, 0x31, 0x89, - 0x8d, 0x0b, 0x92, 0x59, 0x51, 0x93, 0x8a, 0xc3, 0x0f, 0x41, 0xa9, 0x83, 0x6c, 0xdc, 0xa1, 0xfa, - 0x84, 0x50, 0x74, 0xc5, 0x54, 0x53, 0x9b, 0xf9, 0x65, 0xde, 0x13, 0x3c, 0x3b, 0x3e, 0x0b, 0xbb, - 0x52, 0xa1, 0x14, 0x52, 0x15, 0x4a, 0x0a, 0xfc, 0x52, 0x03, 0x4b, 0xa8, 0xd3, 0x21, 0x4d, 0xc4, - 0x90, 0xdd, 0xc1, 0x56, 0x16, 0x37, 0xd5, 0x27, 0x85, 0x81, 0x5a, 0xb1, 0x81, 0xed, 0xbe, 0x48, - 0x23, 0x93, 0x90, 0xe6, 0xaa, 0x49, 0x6c, 0x54, 0x50, 0x01, 0xac, 0x18, 0x5f, 0x2c, 0xc2, 0xe1, - 0xe7, 0x1a, 0x58, 0x40, 0xc7, 0xc8, 0xed, 0x0c, 0x38, 0x32, 0x25, 0x1c, 0xb9, 0x3e, 0xc2, 0x91, - 0x4c, 0x60, 0xc0, 0x8d, 0x8d, 0x24, 0x36, 0x2e, 0xa1, 0x21, 0x50, 0x71, 0x02, 0x0e, 0xa3, 0x30, - 0x00, 0xe7, 0x19, 0x61, 0xa8, 0xa3, 0x58, 0x2f, 0x09, 0xeb, 0x57, 0x8b, 0xad, 0x1f, 0x70, 0xe6, - 0x01, 0xcb, 0x97, 0x92, 0xd8, 0xd0, 0x59, 0x0e, 0x50, 0xac, 0xce, 0xe7, 0x11, 0x19, 0xb4, 0xcc, - 0x06, 0x76, 0x14, 0xb3, 0xe7, 0x4e, 0x0c, 0x3a, 0x13, 0x28, 0x0c, 0x7a, 0x08, 0xcc, 0x05, 0x3d, - 0x84, 0x42, 0x1f, 0x5c, 0x08, 0x23, 0xdf, 0x72, 0x1d, 0x6a, 0xd9, 0x5d, 0x8b, 0x32, 0xc4, 0xb0, - 0x3e, 0x2d, 0xcc, 0x6f, 0x16, 0x9b, 0x6f, 0x44, 0xfe, 0xae, 0x43, 0xeb, 0xdd, 0x7d, 0xce, 0x2a, - 0x2d, 0xaf, 0x27, 0xb1, 0xb1, 0x12, 0xaa, 0x74, 0xc5, 0xe8, 0x5c, 0x0e, 0x80, 0x3f, 0x69, 0xa0, - 0xe2, 0x13, 0xdf, 0x92, 0x0d, 0x6f, 0x15, 0x45, 0x3f, 0x23, 0xcc, 0xbf, 0x55, 0x6c, 0xfe, 0x01, - 0xf1, 0xb7, 0x85, 0xe8, 0xa8, 0x34, 0x5c, 0x4d, 0x62, 0xe3, 0xdf, 0xfe, 0x68, 0x2e, 0xc5, 0xb5, - 0xf5, 0x13, 0xd8, 0xe0, 0x36, 0x98, 0x8b, 0x7c, 0xda, 0x3c, 0xc4, 0x4e, 0x24, 0xde, 0x13, 0x1d, - 0x6c, 0x68, 0x9b, 0xd3, 0x32, 0xd6, 0x1c, 0xa0, 0xc6, 0x9a, 0x03, 0xe0, 0x57, 0x1a, 0x58, 0xc9, - 0xc2, 0xb2, 0x22, 0x8a, 0x5a, 0x98, 0xe7, 0xf8, 0x49, 0x84, 0x23, 0xac, 0x97, 0x4f, 0x6a, 0xb0, - 0xcc, 0x8b, 0x47, 0x5c, 0xa6, 0xde, 0x7d, 0xc8, 0x25, 0x94, 0x06, 0x0b, 0x0b, 0x60, 0xb5, 0xc1, - 0x8a, 0x70, 0x78, 0x13, 0xcc, 0xf8, 0xc4, 0xc1, 0x16, 0xeb, 0x06, 0x58, 0x9f, 0x15, 0x23, 0x6b, - 0x39, 0x89, 0x0d, 0xc8, 0x89, 0x07, 0xdd, 0x40, 0x55, 0x30, 0x9d, 0xd1, 0xf8, 0x88, 0x0b, 0x08, - 0xe9, 0xe8, 0x73, 0xfd, 0x11, 0xc7, 0x9f, 0xd5, 0x11, 0xc7, 0x9f, 0xd7, 0x10, 0x28, 0x2b, 0x53, - 0x07, 0xfe, 0x0b, 0x4c, 0x1c, 0xe1, 0x6e, 0x3a, 0x18, 0x2f, 0x26, 0xb1, 0x31, 0x77, 0x84, 0xbb, - 0x8a, 0x10, 0x47, 0xe1, 0x55, 0x30, 0x75, 0x8c, 0x3a, 0x11, 0xd6, 0xc7, 0x05, 0xdb, 0x42, 0x12, - 0x1b, 0xe7, 0x05, 0x41, 0x61, 0x94, 0x1c, 0xef, 0x8c, 0xdf, 0xd2, 0xd6, 0x7e, 0xd4, 0xc0, 0xea, - 0xc8, 0xc1, 0xf3, 0x66, 0x16, 0x3f, 0x55, 0x2d, 0x96, 0xb7, 0x4c, 0x65, 0x0e, 0xf7, 0x76, 0x80, - 0x19, 0x1c, 0xb5, 0xc4, 0x60, 0xce, 0x92, 0x68, 0x3e, 0x8c, 0x90, 0xcf, 0x5c, 0xd6, 0x3d, 0xd5, - 0xc3, 0x17, 0x1a, 0x58, 0x19, 0x31, 0x91, 0xce, 0x84, 0x7f, 0x3f, 0x68, 0x60, 0xa1, 0x60, 0x66, - 0x9d, 0x09, 0xdf, 0xbe, 0xe6, 0xb9, 0x2b, 0xee, 0x68, 0xd5, 0xbf, 0xa9, 0x91, 0xfe, 0xdd, 0xc9, - 0xfb, 0x77, 0x29, 0xd7, 0x58, 0xb7, 0x89, 0x17, 0x44, 0xac, 0x57, 0x93, 0x53, 0xbd, 0x79, 0x0a, - 0xe0, 0xf0, 0x98, 0x7b, 0xb3, 0x3c, 0xdd, 0x52, 0xfd, 0x98, 0xdf, 0x9a, 0x13, 0xf9, 0xd8, 0x23, - 0xb6, 0xd0, 0x73, 0xaa, 0xe1, 0xef, 0x35, 0xb0, 0x71, 0xda, 0x84, 0xfb, 0x07, 0xf2, 0xf1, 0xad, - 0x06, 0x56, 0x47, 0xce, 0xa4, 0x37, 0xcb, 0xcb, 0xdf, 0xe9, 0x4f, 0xf5, 0x9b, 0x71, 0x70, 0x7e, - 0x40, 0x06, 0xda, 0x60, 0xa6, 0xbf, 0x42, 0x34, 0x31, 0x5d, 0xff, 0x7b, 0x92, 0x11, 0x73, 0x60, - 0x6f, 0xac, 0x24, 0xb1, 0xb1, 0x10, 0x16, 0x6c, 0x89, 0xbe, 0x5a, 0x5e, 0x9e, 0xf9, 0xb3, 0xd7, - 0x3c, 0xd5, 0x8f, 0xc1, 0xcc, 0x0e, 0x3f, 0x99, 0xef, 0xb9, 0x94, 0xc1, 0x5d, 0x50, 0x92, 0xf7, - 0x73, 0x9a, 0x84, 0x75, 0x53, 0xbd, 0xad, 0x4d, 0xc1, 0xb8, 0x8f, 0x9f, 0x44, 0xd8, 0x6f, 0x62, - 0x79, 0x1e, 0x4a, 0x44, 0x3d, 0x0f, 0x25, 0xa5, 0xfa, 0x47, 0x09, 0xcc, 0xde, 0xc3, 0x88, 0xe2, - 0x06, 0xe7, 0xa7, 0x0c, 0xbe, 0x0d, 0x7a, 0x97, 0xbb, 0xe5, 0x3a, 0x69, 0xd0, 0x7a, 0x12, 0x1b, - 0x8b, 0x19, 0x79, 0xd7, 0x51, 0xf4, 0x80, 0x3e, 0xb5, 0xb7, 0x49, 0xc6, 0x4f, 0xde, 0x24, 0xd0, - 0x52, 0xcb, 0x38, 0x51, 0x70, 0x88, 0xa8, 0x0e, 0xfd, 0x85, 0x1a, 0xc2, 0x08, 0x5c, 0xf0, 0x5c, - 0xdf, 0xf5, 0x22, 0xcf, 0x6a, 0x13, 0xdb, 0xa2, 0xee, 0x73, 0x9c, 0x5e, 0xbb, 0xd7, 0x47, 0xdb, - 0xb9, 0x2f, 0x25, 0x78, 0x1f, 0xbb, 0xcf, 0xb1, 0x72, 0xea, 0x79, 0x39, 0x40, 0x3d, 0xf5, 0xf2, - 0x08, 0xfc, 0x00, 0x4c, 0xf1, 0xad, 0x9a, 0x1d, 0xb4, 0x4b, 0x85, 0x8b, 0x5f, 0x56, 0x5a, 0xf0, - 0xa9, 0x95, 0x16, 0x04, 0xd8, 0x06, 0xcb, 0x91, 0x8f, 0x28, 0x75, 0x5b, 0x3e, 0x76, 0x84, 0xef, - 0xe9, 0xe1, 0x96, 0x5e, 0xa9, 0x30, 0x5f, 0xe8, 0x47, 0x91, 0xeb, 0xd4, 0xaf, 0x24, 0xb1, 0x71, - 0xb9, 0x2f, 0xb5, 0x47, 0x6c, 0x39, 0xd7, 0x14, 0xed, 0x0b, 0x05, 0x30, 0xbc, 0x03, 0x2e, 0x7a, - 0xe8, 0x19, 0x37, 0x42, 0x2d, 0x46, 0xac, 0x0e, 0xcf, 0x85, 0x7e, 0x6e, 0x43, 0xdb, 0x9c, 0x4b, - 0xc3, 0x46, 0xcf, 0xf6, 0x88, 0x4d, 0x0f, 0x88, 0xc8, 0x52, 0x2e, 0xec, 0x1c, 0x72, 0x46, 0x3b, - 0x46, 0xac, 0xc2, 0x82, 0x9a, 0x9e, 0x89, 0x6e, 0xfe, 0x79, 0x1c, 0x94, 0x65, 0x25, 0x44, 0x0a, - 0xe1, 0x5d, 0x00, 0xfa, 0xc5, 0x16, 0xae, 0x15, 0xd7, 0x5a, 0x5c, 0x73, 0xed, 0xb4, 0x84, 0xea, - 0x35, 0x97, 0xd1, 0xf8, 0xc5, 0x25, 0x8f, 0x4f, 0xe5, 0xe2, 0x7a, 0x32, 0x70, 0x3c, 0x4a, 0x0e, - 0x78, 0x0d, 0x94, 0x78, 0xf1, 0x31, 0xd3, 0x27, 0x04, 0xaf, 0x18, 0x14, 0x92, 0xa2, 0x0e, 0x0a, - 0x49, 0xe1, 0xcd, 0x1d, 0x51, 0x1c, 0xea, 0x93, 0xfd, 0xe6, 0xe6, 0xcf, 0x6a, 0x73, 0xf3, 0x67, - 0xae, 0xb5, 0x15, 0x92, 0x28, 0x90, 0x5d, 0x90, 0x6a, 0x95, 0x14, 0x55, 0xab, 0xa4, 0xc0, 0x77, - 0xc1, 0x44, 0x9b, 0xd8, 0x7a, 0x49, 0x44, 0xbc, 0x92, 0x8f, 0x78, 0x5f, 0x7c, 0x0c, 0xd8, 0x23, - 0xb6, 0xac, 0x52, 0x9b, 0xd8, 0x6a, 0x95, 0xda, 0xc4, 0xae, 0x52, 0x00, 0x6e, 0x23, 0xbf, 0x89, - 0x3b, 0x8d, 0xc8, 0xa7, 0x10, 0x83, 0x25, 0xa5, 0x63, 0xf8, 0x3b, 0xdd, 0x14, 0x60, 0x3a, 0x24, - 0x8b, 0xf2, 0x69, 0x24, 0xb1, 0xb1, 0x9e, 0xe5, 0x8e, 0x1e, 0x10, 0xa9, 0x4d, 0x31, 0x73, 0x71, - 0x08, 0xac, 0x3e, 0x05, 0xe5, 0x8f, 0x42, 0xcc, 0x61, 0x61, 0xf5, 0x10, 0x2c, 0x0f, 0x58, 0x0d, - 0x24, 0x7a, 0x82, 0x59, 0xf1, 0x33, 0x4e, 0xd1, 0x9c, 0xea, 0x53, 0x7f, 0xc6, 0x0d, 0xa3, 0xd5, - 0x32, 0x98, 0xd9, 0xf1, 0x9d, 0xfb, 0x28, 0x3c, 0xc2, 0x61, 0xf5, 0xd7, 0x71, 0x00, 0xc5, 0xbb, - 0xb3, 0xcf, 0x42, 0x8c, 0xbc, 0xfb, 0x98, 0xf2, 0x9d, 0x0d, 0x77, 0xc0, 0x94, 0x6c, 0x64, 0xf9, - 0x0e, 0xe9, 0xb9, 0x11, 0xa4, 0xbc, 0x71, 0xf2, 0xc5, 0xe8, 0xe4, 0x3b, 0xfb, 0xee, 0x58, 0x43, - 0x4a, 0xc3, 0x03, 0x50, 0x96, 0xb9, 0xe3, 0x71, 0xd1, 0xb4, 0x09, 0x56, 0xf2, 0xab, 0xb6, 0x97, - 0x78, 0xb9, 0x1d, 0x9a, 0xbd, 0xe7, 0x9c, 0x42, 0xd0, 0xa7, 0xc3, 0xf7, 0xc0, 0x04, 0xf6, 0x1d, - 0xf1, 0xb6, 0x95, 0xb7, 0x96, 0x73, 0xda, 0x7a, 0x81, 0xc9, 0x5a, 0x63, 0xdf, 0xc9, 0x69, 0xe1, - 0x72, 0xf0, 0x13, 0x30, 0x9b, 0xa6, 0x56, 0x7a, 0x35, 0x59, 0x10, 0xa2, 0x52, 0x99, 0xfa, 0x6a, - 0x12, 0x1b, 0x4b, 0x41, 0x9f, 0x90, 0xd3, 0x58, 0x56, 0x80, 0xfa, 0x39, 0x30, 0x25, 0xca, 0xb3, - 0xf5, 0x42, 0x03, 0xe5, 0x9d, 0x54, 0xdd, 0x76, 0xe0, 0xc2, 0x07, 0xe9, 0x72, 0x94, 0x99, 0xa3, - 0x70, 0x75, 0xe4, 0xfa, 0x58, 0x33, 0x86, 0xa1, 0x5c, 0x69, 0x36, 0xb5, 0xff, 0x69, 0xf0, 0x7d, - 0x30, 0xdb, 0xc0, 0x01, 0x09, 0x99, 0x58, 0xd1, 0x14, 0x0e, 0x24, 0x21, 0x5b, 0xf0, 0x6b, 0xcb, - 0xa6, 0xfc, 0xf6, 0x65, 0x66, 0xdf, 0xbe, 0xcc, 0x1d, 0xee, 0x77, 0x7d, 0xf7, 0x97, 0x57, 0x15, - 0xed, 0xe5, 0xab, 0x8a, 0xf6, 0xfb, 0xab, 0x8a, 0xf6, 0xdd, 0xeb, 0xca, 0xd8, 0xcb, 0xd7, 0x95, - 0xb1, 0xdf, 0x5e, 0x57, 0xc6, 0x3e, 0xab, 0xb5, 0x5c, 0x76, 0x18, 0xd9, 0x66, 0x93, 0x78, 0xe9, - 0x87, 0xb6, 0x20, 0x24, 0x6d, 0xdc, 0x64, 0xe9, 0x53, 0x6d, 0xe0, 0x8b, 0x9d, 0x5d, 0x12, 0xaa, - 0x6f, 0xfe, 0x19, 0x00, 0x00, 0xff, 0xff, 0xf1, 0xe5, 0x49, 0xc5, 0xcb, 0x13, 0x00, 0x00, + 0x16, 0x36, 0x2d, 0x3f, 0x8f, 0x6c, 0x27, 0x19, 0xbf, 0x68, 0x39, 0x11, 0x1d, 0xe5, 0xde, 0x0b, + 0x07, 0x37, 0xa1, 0x6e, 0x9c, 0x8b, 0x22, 0x2d, 0xda, 0xa0, 0x56, 0x60, 0x24, 0x36, 0x92, 0xb4, + 0xb1, 0x9d, 0xa2, 0x0f, 0xa0, 0xec, 0x50, 0x9a, 0xc8, 0xb4, 0x25, 0x0e, 0x43, 0x0e, 0xdd, 0x28, + 0xab, 0x2e, 0xb2, 0x28, 0xfa, 0x00, 0xba, 0xe8, 0xa6, 0x8b, 0xa0, 0xbb, 0xfe, 0x96, 0x2e, 0x03, + 0x14, 0x45, 0xbb, 0x22, 0x8a, 0x64, 0xc7, 0x5f, 0x51, 0xcc, 0x0c, 0x69, 0x0d, 0x25, 0xca, 0x0e, + 0x8a, 0x02, 0xf5, 0xca, 0x9e, 0xf3, 0x9d, 0xf7, 0x99, 0x73, 0xe6, 0x88, 0x70, 0xd1, 0x3b, 0x68, + 0x56, 0xc9, 0x13, 0x52, 0x0f, 0x19, 0xf5, 0xb1, 0xe7, 0xa8, 0xff, 0x9b, 0x9e, 0x4f, 0x19, 0x45, + 0x45, 0x85, 0x54, 0xba, 0xc0, 0xf9, 0xb1, 0xdf, 0xc6, 0x0d, 0x4c, 0x0e, 0x89, 0xcb, 0x82, 0xaa, + 0xfc, 0x23, 0x79, 0x4b, 0x73, 0x02, 0xf6, 0x9c, 0x6a, 0x10, 0xda, 0x6d, 0x87, 0x25, 0xd4, 0xe5, + 0x26, 0xa5, 0xcd, 0x16, 0xa9, 0x8a, 0x93, 0x1d, 0x3e, 0xaa, 0x92, 0xb6, 0xc7, 0x3a, 0x09, 0x58, + 0x39, 0xb8, 0x11, 0x98, 0x0e, 0x15, 0x52, 0x75, 0xea, 0x93, 0xea, 0xe1, 0xb5, 0x6a, 0x93, 0xb8, + 0xc4, 0xc7, 0x8c, 0x34, 0x12, 0x9e, 0xff, 0x77, 0x79, 0xda, 0xb8, 0xbe, 0xe7, 0xb8, 0xc4, 0xef, + 0x54, 0x53, 0x53, 0x3e, 0x09, 0x68, 0xe8, 0xd7, 0x49, 0xaf, 0x54, 0xe5, 0xd9, 0x2c, 0x4c, 0xdc, + 0xa7, 0x0d, 0xb2, 0xe9, 0x3e, 0xa2, 0xe8, 0x3f, 0x30, 0xe2, 0xe2, 0x36, 0xd1, 0xb5, 0x15, 0x6d, + 0x75, 0xb2, 0x86, 0xe2, 0xc8, 0x98, 0xe1, 0xe7, 0x2b, 0xb4, 0xed, 0x30, 0xe1, 0xce, 0xb6, 0xc0, + 0xd1, 0x6d, 0x18, 0x63, 0xd8, 0x71, 0x59, 0xa0, 0x0f, 0xaf, 0x14, 0x56, 0x8b, 0x6b, 0x4b, 0xa6, + 0xb4, 0x6d, 0xf2, 0x84, 0x70, 0xff, 0xcc, 0xc3, 0x6b, 0xe6, 0x2e, 0xe7, 0xa8, 0xcd, 0xc5, 0x91, + 0x71, 0x56, 0x32, 0x2b, 0x6a, 0x12, 0x71, 0xf4, 0x1e, 0x8c, 0xb5, 0xb0, 0x4d, 0x5a, 0x81, 0x5e, + 0x10, 0x8a, 0x2e, 0x9a, 0x6a, 0x6a, 0x53, 0xbf, 0xcc, 0xbb, 0x82, 0x67, 0xc3, 0x65, 0x7e, 0x47, + 0x2a, 0x94, 0x42, 0xaa, 0x42, 0x49, 0x41, 0x5f, 0x6a, 0x30, 0x8f, 0x5b, 0x2d, 0x5a, 0xc7, 0x0c, + 0xdb, 0x2d, 0x62, 0xa5, 0x71, 0x07, 0xfa, 0x88, 0x30, 0x50, 0xcd, 0x37, 0xb0, 0xde, 0x15, 0xd9, + 0x4e, 0x25, 0xa4, 0xb9, 0x4a, 0x1c, 0x19, 0x65, 0x9c, 0x03, 0x2b, 0xc6, 0xe7, 0xf2, 0x70, 0xf4, + 0x85, 0x06, 0xb3, 0xf8, 0x10, 0x3b, 0xad, 0x1e, 0x47, 0x46, 0x85, 0x23, 0x57, 0x07, 0x38, 0x92, + 0x0a, 0xf4, 0xb8, 0xb1, 0x12, 0x47, 0xc6, 0x79, 0xdc, 0x07, 0x2a, 0x4e, 0xa0, 0x7e, 0x14, 0x79, + 0x70, 0x86, 0x51, 0x86, 0x5b, 0x8a, 0xf5, 0x31, 0x61, 0xfd, 0x72, 0xbe, 0xf5, 0x5d, 0xce, 0xdc, + 0x63, 0xf9, 0x7c, 0x1c, 0x19, 0x3a, 0xcb, 0x00, 0x8a, 0xd5, 0x99, 0x2c, 0x22, 0x83, 0x96, 0xd9, + 0x20, 0x0d, 0xc5, 0xec, 0xf8, 0xb1, 0x41, 0xa7, 0x02, 0xb9, 0x41, 0xf7, 0x81, 0x99, 0xa0, 0xfb, + 0x50, 0xe4, 0xc2, 0x59, 0x3f, 0x74, 0x2d, 0xa7, 0x11, 0x58, 0x76, 0xc7, 0x0a, 0x18, 0x66, 0x44, + 0x9f, 0x10, 0xe6, 0x57, 0xf3, 0xcd, 0x6f, 0x87, 0xee, 0x66, 0x23, 0xa8, 0x75, 0x76, 0x38, 0xab, + 0xb4, 0xbc, 0x1c, 0x47, 0xc6, 0xa2, 0xaf, 0xd2, 0x15, 0xa3, 0xd3, 0x19, 0x00, 0xfd, 0xa4, 0x41, + 0xd9, 0xa5, 0xae, 0x25, 0x1b, 0xde, 0xca, 0x8b, 0x7e, 0x52, 0x98, 0x7f, 0x23, 0xdf, 0xfc, 0x7d, + 0xea, 0xae, 0x0b, 0xd1, 0x41, 0x69, 0xb8, 0x1c, 0x47, 0xc6, 0xbf, 0xdd, 0xc1, 0x5c, 0x8a, 0x6b, + 0xcb, 0xc7, 0xb0, 0xa1, 0x75, 0x98, 0x0e, 0xdd, 0xa0, 0xbe, 0x47, 0x1a, 0xa1, 0xb8, 0x27, 0x3a, + 0xac, 0x68, 0xab, 0x13, 0x32, 0xd6, 0x0c, 0xa0, 0xc6, 0x9a, 0x01, 0xd0, 0x57, 0x1a, 0x2c, 0xa6, + 0x61, 0x59, 0x61, 0x80, 0x9b, 0x84, 0xe7, 0xf8, 0x71, 0x48, 0x42, 0xa2, 0x17, 0x8f, 0x6b, 0xb0, + 0xd4, 0x8b, 0x87, 0x5c, 0xa6, 0xd6, 0x79, 0xc0, 0x25, 0x94, 0x06, 0xf3, 0x73, 0x60, 0xb5, 0xc1, + 0xf2, 0x70, 0x74, 0x1d, 0x26, 0x5d, 0xda, 0x20, 0x16, 0xeb, 0x78, 0x44, 0x9f, 0x12, 0x23, 0x6b, + 0x21, 0x8e, 0x0c, 0xc4, 0x89, 0xbb, 0x1d, 0x4f, 0x55, 0x30, 0x91, 0xd2, 0xf8, 0x88, 0xf3, 0x28, + 0x6d, 0xe9, 0xd3, 0xdd, 0x11, 0xc7, 0xcf, 0xea, 0x88, 0xe3, 0xe7, 0x12, 0x86, 0xa2, 0x32, 0x75, + 0xd0, 0x25, 0x28, 0x1c, 0x90, 0x4e, 0x32, 0x18, 0xcf, 0xc5, 0x91, 0x31, 0x7d, 0x40, 0x3a, 0x8a, + 0x10, 0x47, 0xd1, 0x65, 0x18, 0x3d, 0xc4, 0xad, 0x90, 0xe8, 0xc3, 0x82, 0x6d, 0x36, 0x8e, 0x8c, + 0x33, 0x82, 0xa0, 0x30, 0x4a, 0x8e, 0xb7, 0x86, 0x6f, 0x68, 0xa5, 0x1f, 0x35, 0x58, 0x1a, 0x38, + 0x78, 0x5e, 0xcf, 0xe2, 0x47, 0xaa, 0xc5, 0xe2, 0x9a, 0xa9, 0xcc, 0xe1, 0xa3, 0x37, 0xc0, 0xf4, + 0x0e, 0x9a, 0x62, 0x30, 0xa7, 0x49, 0x34, 0x1f, 0x84, 0xd8, 0x65, 0x0e, 0xeb, 0x9c, 0xe8, 0xe1, + 0x73, 0x0d, 0x16, 0x07, 0x4c, 0xa4, 0x53, 0xe1, 0xdf, 0x0f, 0x1a, 0xcc, 0xe6, 0xcc, 0xac, 0x53, + 0xe1, 0xdb, 0xd7, 0x3c, 0x77, 0xf9, 0x1d, 0xad, 0xfa, 0x37, 0x3a, 0xd0, 0xbf, 0xdb, 0x59, 0xff, + 0xce, 0x67, 0x1a, 0xeb, 0x16, 0x6d, 0x7b, 0x21, 0x3b, 0xaa, 0xc9, 0x89, 0xde, 0x7c, 0x0e, 0xa8, + 0x7f, 0xcc, 0xbd, 0x5e, 0x9e, 0x6e, 0xa8, 0x7e, 0xcc, 0xac, 0x4d, 0x8b, 0x7c, 0x6c, 0x51, 0x5b, + 0xe8, 0x39, 0xd1, 0xf0, 0xf7, 0x1a, 0xac, 0x9c, 0x34, 0xe1, 0xfe, 0x81, 0x7c, 0x7c, 0xab, 0xc1, + 0xd2, 0xc0, 0x99, 0xf4, 0x7a, 0x79, 0xf9, 0x3b, 0xfd, 0xa9, 0x7c, 0x33, 0x0c, 0x67, 0x7a, 0x64, + 0x90, 0x0d, 0x93, 0xdd, 0x27, 0x44, 0x13, 0xd3, 0xf5, 0xbf, 0xc7, 0x19, 0x31, 0x7b, 0xde, 0x8d, + 0xc5, 0x38, 0x32, 0x66, 0xfd, 0x9c, 0x57, 0xa2, 0xab, 0x96, 0x97, 0x67, 0xe6, 0xf4, 0x35, 0x4f, + 0xe5, 0x03, 0x98, 0xdc, 0xe0, 0x2b, 0xf3, 0x5d, 0x27, 0x60, 0x68, 0x13, 0xc6, 0xe4, 0xfe, 0x9c, + 0x24, 0x61, 0xd9, 0x54, 0x77, 0x6b, 0x53, 0x30, 0xee, 0x90, 0xc7, 0x21, 0x71, 0xeb, 0x44, 0xae, + 0x87, 0x12, 0x51, 0xd7, 0x43, 0x49, 0xa9, 0xfc, 0x3a, 0x0e, 0x53, 0x77, 0x09, 0x0e, 0xc8, 0x36, + 0xe7, 0x0f, 0x18, 0x7a, 0x13, 0x8e, 0x36, 0x77, 0xcb, 0x69, 0x24, 0x41, 0xeb, 0x71, 0x64, 0xcc, + 0xa5, 0xe4, 0xcd, 0x86, 0xa2, 0x07, 0xba, 0xd4, 0xa3, 0x97, 0x64, 0xf8, 0xf8, 0x97, 0x04, 0x59, + 0x6a, 0x19, 0x0b, 0x39, 0x8b, 0x88, 0xea, 0xd0, 0x5f, 0xa8, 0x21, 0x0a, 0xe1, 0x6c, 0xdb, 0x71, + 0x9d, 0x76, 0xd8, 0xb6, 0xf6, 0xa9, 0x6d, 0x05, 0xce, 0x53, 0x92, 0x6c, 0xbb, 0x57, 0x07, 0xdb, + 0xb9, 0x27, 0x25, 0x78, 0x1f, 0x3b, 0x4f, 0x89, 0xb2, 0xea, 0xb5, 0x33, 0x80, 0xba, 0xea, 0x65, + 0x11, 0xf4, 0x2e, 0x8c, 0xf2, 0x57, 0x35, 0x5d, 0x68, 0xe7, 0x73, 0x1f, 0x7e, 0x59, 0x69, 0xc1, + 0xa7, 0x56, 0x5a, 0x10, 0xd0, 0x3e, 0x2c, 0x84, 0x2e, 0x0e, 0x02, 0xa7, 0xe9, 0x92, 0x86, 0xf0, + 0x3d, 0x59, 0xdc, 0x92, 0x2d, 0x15, 0x65, 0x0b, 0xfd, 0x30, 0x74, 0x1a, 0xb5, 0x8b, 0x71, 0x64, + 0x5c, 0xe8, 0x4a, 0x6d, 0x51, 0x5b, 0xce, 0x35, 0x45, 0xfb, 0x6c, 0x0e, 0x8c, 0x6e, 0xc3, 0xb9, + 0x36, 0x7e, 0xc2, 0x8d, 0x04, 0x16, 0xa3, 0x56, 0x8b, 0xe7, 0x42, 0x1f, 0x5f, 0xd1, 0x56, 0xa7, + 0x93, 0xb0, 0xf1, 0x93, 0x2d, 0x6a, 0x07, 0xbb, 0x54, 0x64, 0x29, 0x13, 0x76, 0x06, 0x41, 0x9f, + 0x41, 0x29, 0xdf, 0x69, 0x2b, 0x60, 0xbe, 0x58, 0x34, 0x27, 0x6b, 0xff, 0x8a, 0x23, 0x63, 0x25, + 0xc7, 0x8b, 0x1d, 0xe6, 0x2b, 0x9a, 0x17, 0xf2, 0x39, 0x4e, 0x69, 0x4f, 0x8a, 0xc7, 0x36, 0xe7, + 0xd6, 0x9c, 0x8a, 0x79, 0xf1, 0xac, 0x00, 0x45, 0x99, 0x43, 0x59, 0xa4, 0x3b, 0x00, 0xdd, 0xca, + 0x08, 0xd7, 0xf2, 0x6f, 0x93, 0xd8, 0x17, 0xf7, 0x93, 0xe4, 0xab, 0xfb, 0x62, 0x4a, 0xe3, 0x3b, + 0x9d, 0x5c, 0x6f, 0x95, 0x9d, 0xee, 0x71, 0xcf, 0x7a, 0x2a, 0x39, 0xd0, 0x15, 0x18, 0xe3, 0xd7, + 0x8b, 0x30, 0xbd, 0x20, 0x78, 0xc5, 0x28, 0x92, 0x14, 0x75, 0x14, 0x49, 0x0a, 0x1f, 0x1f, 0x61, + 0x40, 0x7c, 0x7d, 0xa4, 0x3b, 0x3e, 0xf8, 0x59, 0x1d, 0x1f, 0xfc, 0xcc, 0xb5, 0x36, 0x7d, 0x1a, + 0x7a, 0xb2, 0xcf, 0x12, 0xad, 0x92, 0xa2, 0x6a, 0x95, 0x14, 0xf4, 0x36, 0x14, 0xf6, 0xa9, 0xad, + 0x8f, 0x89, 0x88, 0x17, 0xb3, 0x11, 0xef, 0x88, 0xcf, 0x0d, 0x5b, 0xd4, 0x96, 0x55, 0xda, 0xa7, + 0xb6, 0x5a, 0xa5, 0x7d, 0x6a, 0xa3, 0x9b, 0x30, 0xd3, 0x4d, 0x9b, 0xb8, 0xcf, 0xe3, 0xc2, 0xbb, + 0xa5, 0x38, 0x32, 0xe6, 0xd3, 0x94, 0x64, 0x2f, 0x71, 0x51, 0x21, 0x57, 0x5e, 0x68, 0x00, 0xb7, + 0xb0, 0x5b, 0x27, 0xad, 0xed, 0xd0, 0x0d, 0x10, 0x81, 0x79, 0xb5, 0x3f, 0x18, 0xb5, 0xea, 0x02, + 0x4c, 0xe6, 0x78, 0x5e, 0x41, 0x8c, 0x38, 0x32, 0x96, 0x53, 0x95, 0xc1, 0x2e, 0x95, 0xda, 0x14, + 0x7b, 0xe7, 0xfa, 0x40, 0xf4, 0x09, 0x2c, 0xe5, 0x9a, 0x11, 0x01, 0x0c, 0x8b, 0xa4, 0x89, 0x1f, + 0x19, 0x7d, 0x92, 0xd9, 0x48, 0xe6, 0xf2, 0xf0, 0xca, 0x6f, 0x1a, 0x14, 0xdf, 0xf7, 0x09, 0x67, + 0x11, 0x31, 0xed, 0xc1, 0x42, 0x8f, 0x31, 0x4f, 0xa2, 0xc7, 0x04, 0x25, 0x7e, 0xc7, 0x2a, 0xda, + 0x13, 0x7d, 0xea, 0xef, 0xd8, 0x7e, 0x14, 0x7d, 0x0a, 0xa5, 0x7c, 0x4b, 0x4a, 0x5c, 0x97, 0xe2, + 0xc8, 0x30, 0xfa, 0x65, 0xb3, 0x81, 0xcd, 0xe7, 0x32, 0x54, 0x8a, 0x30, 0xb9, 0xe1, 0x36, 0xee, + 0x61, 0xff, 0x80, 0xf8, 0x95, 0x5f, 0x86, 0x01, 0x89, 0xd6, 0xd9, 0x61, 0x3e, 0xc1, 0xed, 0x7b, + 0x24, 0xe0, 0x4b, 0x11, 0xda, 0x80, 0x51, 0x39, 0x29, 0x65, 0x0b, 0xe9, 0x99, 0x19, 0xaf, 0x34, + 0x9c, 0xec, 0x8b, 0x56, 0x76, 0x74, 0xde, 0x19, 0xda, 0x96, 0xd2, 0x68, 0x17, 0x8a, 0x49, 0x49, + 0xfc, 0xd0, 0x0d, 0x92, 0x19, 0xb0, 0x98, 0xdd, 0x65, 0x8e, 0xae, 0x8d, 0x7c, 0x7e, 0xeb, 0x47, + 0xe7, 0x8c, 0x42, 0xe8, 0xd2, 0xd1, 0x3b, 0x50, 0x20, 0x6e, 0x43, 0x34, 0x5b, 0x71, 0x6d, 0x21, + 0xa3, 0xed, 0x28, 0x30, 0x79, 0xd5, 0x89, 0xdb, 0xc8, 0x68, 0xe1, 0x72, 0xe8, 0x43, 0x98, 0x4a, + 0x13, 0x2a, 0xbc, 0x1a, 0xc9, 0x09, 0x51, 0xa9, 0xbc, 0x6c, 0x02, 0xaf, 0x4b, 0xc8, 0x68, 0x2c, + 0x2a, 0x40, 0x6d, 0x1c, 0x46, 0x45, 0xf9, 0xd7, 0x9e, 0x6b, 0x50, 0xdc, 0x48, 0xd4, 0xad, 0x7b, + 0x0e, 0xba, 0x9f, 0x6c, 0x1f, 0x32, 0x73, 0x01, 0x5a, 0x1a, 0xf8, 0x3e, 0x97, 0x8c, 0x7e, 0x28, + 0x53, 0x9a, 0x55, 0xed, 0x7f, 0x1a, 0xba, 0x09, 0x53, 0xdb, 0xc4, 0xa3, 0x3e, 0x13, 0x3b, 0x50, + 0x80, 0x7a, 0x92, 0x90, 0x6e, 0x50, 0xa5, 0x05, 0x53, 0x7e, 0x5c, 0x34, 0xd3, 0x8f, 0x8b, 0xe6, + 0x06, 0xf7, 0xbb, 0xb6, 0xf9, 0xf3, 0xcb, 0xb2, 0xf6, 0xe2, 0x65, 0x59, 0xfb, 0xe3, 0x65, 0x59, + 0xfb, 0xee, 0x55, 0x79, 0xe8, 0xc5, 0xab, 0xf2, 0xd0, 0xef, 0xaf, 0xca, 0x43, 0x1f, 0x57, 0x9b, + 0x0e, 0xdb, 0x0b, 0x6d, 0xb3, 0x4e, 0xdb, 0xc9, 0x97, 0x4c, 0xcf, 0xa7, 0xfb, 0xa4, 0xce, 0x92, + 0x53, 0xb5, 0xe7, 0x93, 0xa8, 0x3d, 0x26, 0x54, 0x5f, 0xff, 0x33, 0x00, 0x00, 0xff, 0xff, 0x25, + 0xd8, 0xb8, 0x42, 0x2c, 0x15, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1354,6 +1393,15 @@ func (m *LeaseRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.UnassignedJobRunIdsStr) > 0 { + for iNdEx := len(m.UnassignedJobRunIdsStr) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.UnassignedJobRunIdsStr[iNdEx]) + copy(dAtA[i:], m.UnassignedJobRunIdsStr[iNdEx]) + i = encodeVarintExecutorapi(dAtA, i, uint64(len(m.UnassignedJobRunIdsStr[iNdEx]))) + i-- + dAtA[i] = 0x42 + } + } if m.MaxJobsToLease != 0 { i = encodeVarintExecutorapi(dAtA, i, uint64(m.MaxJobsToLease)) i-- @@ -1476,6 +1524,13 @@ func (m *JobRunLease) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.JobRunIdStr) > 0 { + i -= len(m.JobRunIdStr) + copy(dAtA[i:], m.JobRunIdStr) + i = encodeVarintExecutorapi(dAtA, i, uint64(len(m.JobRunIdStr))) + i-- + dAtA[i] = 0x3a + } if m.Job != nil { { size, err := m.Job.MarshalToSizedBuffer(dAtA[:i]) @@ -1553,6 +1608,15 @@ func (m *CancelRuns) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.JobRunIdsToCancelStr) > 0 { + for iNdEx := len(m.JobRunIdsToCancelStr) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.JobRunIdsToCancelStr[iNdEx]) + copy(dAtA[i:], m.JobRunIdsToCancelStr[iNdEx]) + i = encodeVarintExecutorapi(dAtA, i, uint64(len(m.JobRunIdsToCancelStr[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } if len(m.JobRunIdsToCancel) > 0 { for iNdEx := len(m.JobRunIdsToCancel) - 1; iNdEx >= 0; iNdEx-- { { @@ -1590,6 +1654,15 @@ func (m *PreemptRuns) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.JobRunIdsToPreemptStr) > 0 { + for iNdEx := len(m.JobRunIdsToPreemptStr) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.JobRunIdsToPreemptStr[iNdEx]) + copy(dAtA[i:], m.JobRunIdsToPreemptStr[iNdEx]) + i = encodeVarintExecutorapi(dAtA, i, uint64(len(m.JobRunIdsToPreemptStr[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } if len(m.JobRunIdsToPreempt) > 0 { for iNdEx := len(m.JobRunIdsToPreempt) - 1; iNdEx >= 0; iNdEx-- { { @@ -1973,6 +2046,12 @@ func (m *LeaseRequest) Size() (n int) { if m.MaxJobsToLease != 0 { n += 1 + sovExecutorapi(uint64(m.MaxJobsToLease)) } + if len(m.UnassignedJobRunIdsStr) > 0 { + for _, s := range m.UnassignedJobRunIdsStr { + l = len(s) + n += 1 + l + sovExecutorapi(uint64(l)) + } + } return n } @@ -2008,6 +2087,10 @@ func (m *JobRunLease) Size() (n int) { l = m.Job.Size() n += 1 + l + sovExecutorapi(uint64(l)) } + l = len(m.JobRunIdStr) + if l > 0 { + n += 1 + l + sovExecutorapi(uint64(l)) + } return n } @@ -2023,6 +2106,12 @@ func (m *CancelRuns) Size() (n int) { n += 1 + l + sovExecutorapi(uint64(l)) } } + if len(m.JobRunIdsToCancelStr) > 0 { + for _, s := range m.JobRunIdsToCancelStr { + l = len(s) + n += 1 + l + sovExecutorapi(uint64(l)) + } + } return n } @@ -2038,6 +2127,12 @@ func (m *PreemptRuns) Size() (n int) { n += 1 + l + sovExecutorapi(uint64(l)) } } + if len(m.JobRunIdsToPreemptStr) > 0 { + for _, s := range m.JobRunIdsToPreemptStr { + l = len(s) + n += 1 + l + sovExecutorapi(uint64(l)) + } + } return n } @@ -4004,6 +4099,38 @@ func (m *LeaseRequest) Unmarshal(dAtA []byte) error { break } } + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UnassignedJobRunIdsStr", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExecutorapi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthExecutorapi + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthExecutorapi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UnassignedJobRunIdsStr = append(m.UnassignedJobRunIdsStr, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipExecutorapi(dAtA[iNdEx:]) @@ -4254,6 +4381,38 @@ func (m *JobRunLease) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field JobRunIdStr", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExecutorapi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthExecutorapi + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthExecutorapi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.JobRunIdStr = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipExecutorapi(dAtA[iNdEx:]) @@ -4338,6 +4497,38 @@ func (m *CancelRuns) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field JobRunIdsToCancelStr", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExecutorapi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthExecutorapi + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthExecutorapi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.JobRunIdsToCancelStr = append(m.JobRunIdsToCancelStr, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipExecutorapi(dAtA[iNdEx:]) @@ -4422,6 +4613,38 @@ func (m *PreemptRuns) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field JobRunIdsToPreemptStr", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExecutorapi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthExecutorapi + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthExecutorapi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.JobRunIdsToPreemptStr = append(m.JobRunIdsToPreemptStr, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipExecutorapi(dAtA[iNdEx:]) diff --git a/pkg/executorapi/executorapi.proto b/pkg/executorapi/executorapi.proto index 6d7bb387950..14f2ac064be 100644 --- a/pkg/executorapi/executorapi.proto +++ b/pkg/executorapi/executorapi.proto @@ -71,6 +71,8 @@ message LeaseRequest{ repeated armadaevents.Uuid unassigned_job_run_ids = 6; // Max number of jobs this request should return uint32 max_jobs_to_lease = 7; + // Run Ids of jobs owned by the executor but not currently assigned to a node. + repeated string unassigned_job_run_ids_str = 8; } // Indicates that a job run is now leased. @@ -81,16 +83,19 @@ message JobRunLease{ string user = 4; repeated string groups = 5; armadaevents.SubmitJob job = 6; + string job_run_id_str = 7; } // Indicates that the job runs with the given ids should be cancelled. message CancelRuns{ repeated armadaevents.Uuid job_run_ids_to_cancel = 1; + repeated string job_run_ids_to_cancel_str = 2; } // Indicates that the job runs with the given ids should be preempted. message PreemptRuns{ repeated armadaevents.Uuid job_run_ids_to_preempt = 1; + repeated string job_run_ids_to_preempt_str = 2; } // Indicates the end of the lease stream.