93 lines
3.1 KiB
Go
93 lines
3.1 KiB
Go
// Copyright 2020 PingCAP, Inc.
|
|
//
|
|
// Licensed 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 kv
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/pingcap/kvproto/pkg/mpp"
|
|
)
|
|
|
|
// MPPTaskMeta means the meta info such as location of a mpp task.
|
|
type MPPTaskMeta interface {
|
|
// GetAddress indicates which node this task should execute on.
|
|
GetAddress() string
|
|
}
|
|
|
|
// MPPTask means the minimum execution unit of a mpp computation job.
|
|
type MPPTask struct {
|
|
Meta MPPTaskMeta // on which store this task will execute
|
|
ID int64 // mppTaskID
|
|
StartTs uint64
|
|
TableID int64 // physical table id
|
|
}
|
|
|
|
// ToPB generates the pb structure.
|
|
func (t *MPPTask) ToPB() *mpp.TaskMeta {
|
|
meta := &mpp.TaskMeta{
|
|
StartTs: t.StartTs,
|
|
TaskId: t.ID,
|
|
}
|
|
if t.ID != -1 {
|
|
meta.Address = t.Meta.GetAddress()
|
|
}
|
|
return meta
|
|
}
|
|
|
|
//MppTaskStates denotes the state of mpp tasks
|
|
type MppTaskStates uint8
|
|
|
|
const (
|
|
// MppTaskReady means the task is ready
|
|
MppTaskReady MppTaskStates = iota
|
|
// MppTaskRunning means the task is running
|
|
MppTaskRunning
|
|
// MppTaskCancelled means the task is cancelled
|
|
MppTaskCancelled
|
|
// MppTaskDone means the task is done
|
|
MppTaskDone
|
|
)
|
|
|
|
// MPPDispatchRequest stands for a dispatching task.
|
|
type MPPDispatchRequest struct {
|
|
Data []byte // data encodes the dag coprocessor request.
|
|
Meta MPPTaskMeta // mpp store is the location of tiflash store.
|
|
IsRoot bool // root task returns data to tidb directly.
|
|
Timeout uint64 // If task is assigned but doesn't receive a connect request during timeout, the task should be destroyed.
|
|
// SchemaVer is for any schema-ful storage (like tiflash) to validate schema correctness if necessary.
|
|
SchemaVar int64
|
|
StartTs uint64
|
|
ID int64 // identify a single task
|
|
State MppTaskStates
|
|
}
|
|
|
|
// MPPClient accepts and processes mpp requests.
|
|
type MPPClient interface {
|
|
// ConstructMPPTasks schedules task for a plan fragment.
|
|
// TODO:: This interface will be refined after we support more executors.
|
|
ConstructMPPTasks(context.Context, *MPPBuildTasksRequest, map[string]time.Time, time.Duration) ([]MPPTaskMeta, error)
|
|
|
|
// DispatchMPPTasks dispatches ALL mpp requests at once, and returns an iterator that transfers the data.
|
|
DispatchMPPTasks(ctx context.Context, vars interface{}, reqs []*MPPDispatchRequest, needTriggerFallback bool, startTs uint64) Response
|
|
}
|
|
|
|
// MPPBuildTasksRequest request the stores allocation for a mpp plan fragment.
|
|
// However, the request doesn't contain the particular plan, because only key ranges take effect on the location assignment.
|
|
type MPPBuildTasksRequest struct {
|
|
KeyRanges []KeyRange
|
|
StartTS uint64
|
|
}
|