milvus/internal/querycoordv2/job/job.go
yihao.dai 1f718118e9
Dynamic load/release partitions (#22655)
Signed-off-by: bigsheeper <yihao.dai@zilliz.com>
2023-03-20 14:55:57 +08:00

95 lines
2.2 KiB
Go

// Licensed to the LF AI & Data foundation under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package job
import (
"context"
)
// Job is request of loading/releasing collection/partitions,
// the execution flow is:
// 1. PreExecute()
// 2. Execute(), skip this step if PreExecute() failed
// 3. PostExecute()
type Job interface {
MsgID() int64
CollectionID() int64
Context() context.Context
// PreExecute does checks, DO NOT persists any thing within this stage,
PreExecute() error
// Execute processes the request
Execute() error
// PostExecute clears resources, it will be always processed
PostExecute()
Error() error
SetError(err error)
Done()
Wait() error
}
type BaseJob struct {
ctx context.Context
msgID int64
collectionID int64
err error
doneCh chan struct{}
}
func NewBaseJob(ctx context.Context, msgID, collectionID int64) *BaseJob {
return &BaseJob{
ctx: ctx,
msgID: msgID,
collectionID: collectionID,
doneCh: make(chan struct{}),
}
}
func (job *BaseJob) MsgID() int64 {
return job.msgID
}
func (job *BaseJob) CollectionID() int64 {
return job.collectionID
}
func (job *BaseJob) Context() context.Context {
return job.ctx
}
func (job *BaseJob) Error() error {
return job.err
}
func (job *BaseJob) SetError(err error) {
job.err = err
}
func (job *BaseJob) Done() {
close(job.doneCh)
}
func (job *BaseJob) Wait() error {
<-job.doneCh
return job.err
}
func (job *BaseJob) PreExecute() error {
return nil
}
func (job *BaseJob) PostExecute() {}