mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-09-06 00:25:55 +00:00
78 lines
3 KiB
Go
78 lines
3 KiB
Go
package controller
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/molecula/featurebase/v3/dax"
|
|
)
|
|
|
|
type Balancer interface {
|
|
AddWorker(ctx context.Context, worker fmt.Stringer) ([]dax.WorkerDiff, error)
|
|
RemoveWorker(ctx context.Context, worker fmt.Stringer) ([]dax.WorkerDiff, error)
|
|
AddJobs(ctx context.Context, job ...fmt.Stringer) ([]dax.WorkerDiff, error)
|
|
RemoveJob(ctx context.Context, job fmt.Stringer) ([]dax.WorkerDiff, error)
|
|
Balance(ctx context.Context) ([]dax.WorkerDiff, error)
|
|
CurrentState(ctx context.Context) ([]dax.WorkerInfo, error)
|
|
WorkerState(ctx context.Context, worker dax.Worker) (dax.WorkerInfo, error)
|
|
WorkersForJobs(ctx context.Context, jobs []dax.Job) ([]dax.WorkerInfo, error)
|
|
|
|
// WorkersForJobPrefix returns all workers and their job
|
|
// assignments which start with `prefix` for all jobs that start
|
|
// with `prefix`. If there are free jobs that start with `prefix`
|
|
// an error is returned.
|
|
//
|
|
// The motivating use case is getting all workers for a particular
|
|
// table so we can execute a query that will hit every shard in a
|
|
// table. If there are jobs representing shards in that table
|
|
// which are not assigned to any worker, that means the query
|
|
// would return incomplete data, so we want to error.
|
|
WorkersForJobPrefix(ctx context.Context, prefix string) ([]dax.WorkerInfo, error)
|
|
|
|
// RemoveJobs is for e.g. when dropping a table remove all jobs
|
|
// associated with that table without needing to look up in
|
|
// advance which shards or partitions are actually present.
|
|
RemoveJobs(ctx context.Context, prefix string) ([]dax.WorkerDiff, error)
|
|
}
|
|
|
|
// Ensure type implements interface.
|
|
var _ Balancer = (*NopBalancer)(nil)
|
|
|
|
// NopBalancer is a no-op implementation of the Balancer interface.
|
|
type NopBalancer struct{}
|
|
|
|
func NewNopBalancer() *NopBalancer {
|
|
return &NopBalancer{}
|
|
}
|
|
|
|
func (b *NopBalancer) AddWorker(ctx context.Context, worker fmt.Stringer) ([]dax.WorkerDiff, error) {
|
|
return []dax.WorkerDiff{}, nil
|
|
}
|
|
func (b *NopBalancer) RemoveWorker(ctx context.Context, worker fmt.Stringer) ([]dax.WorkerDiff, error) {
|
|
return []dax.WorkerDiff{}, nil
|
|
}
|
|
func (b *NopBalancer) AddJobs(ctx context.Context, job ...fmt.Stringer) ([]dax.WorkerDiff, error) {
|
|
return []dax.WorkerDiff{}, nil
|
|
}
|
|
func (b *NopBalancer) RemoveJob(ctx context.Context, job fmt.Stringer) ([]dax.WorkerDiff, error) {
|
|
return []dax.WorkerDiff{}, nil
|
|
}
|
|
func (b *NopBalancer) Balance(ctx context.Context) ([]dax.WorkerDiff, error) {
|
|
return []dax.WorkerDiff{}, nil
|
|
}
|
|
func (b *NopBalancer) CurrentState(ctx context.Context) ([]dax.WorkerInfo, error) {
|
|
return []dax.WorkerInfo{}, nil
|
|
}
|
|
func (b *NopBalancer) WorkerState(ctx context.Context, worker dax.Worker) (dax.WorkerInfo, error) {
|
|
return dax.WorkerInfo{}, nil
|
|
}
|
|
func (b *NopBalancer) WorkersForJobs(ctx context.Context, jobs []dax.Job) ([]dax.WorkerInfo, error) {
|
|
return []dax.WorkerInfo{}, nil
|
|
}
|
|
func (b *NopBalancer) WorkersForJobPrefix(ctx context.Context, prefix string) ([]dax.WorkerInfo, error) {
|
|
return []dax.WorkerInfo{}, nil
|
|
}
|
|
|
|
func (b *NopBalancer) RemoveJobs(ctx context.Context, prefix string) ([]dax.WorkerDiff, error) {
|
|
return nil, nil
|
|
}
|