You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.7 KiB
84 lines
2.7 KiB
// Copyright 2019 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,
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package plugin
|
|
|
|
import (
|
|
"context"
|
|
"reflect"
|
|
"unsafe"
|
|
|
|
"github.com/pingcap/tidb/sessionctx/variable"
|
|
)
|
|
|
|
const (
|
|
// LibrarySuffix defines TiDB plugin's file suffix.
|
|
LibrarySuffix = ".so"
|
|
// ManifestSymbol defines TiDB plugin's entrance symbol.
|
|
// Plugin take manifest info from this symbol.
|
|
ManifestSymbol = "PluginManifest"
|
|
)
|
|
|
|
// Manifest describes plugin info and how it can do by plugin itself.
|
|
type Manifest struct {
|
|
Name string
|
|
Description string
|
|
RequireVersion map[string]uint16
|
|
License string
|
|
BuildTime string
|
|
SysVars map[string]*variable.SysVar
|
|
// Validate defines the validate logic for plugin.
|
|
// returns error will stop load plugin process and TiDB startup.
|
|
Validate func(ctx context.Context, manifest *Manifest) error
|
|
// OnInit defines the plugin init logic.
|
|
// it will be called after domain init.
|
|
// return error will stop load plugin process and TiDB startup.
|
|
OnInit func(ctx context.Context, manifest *Manifest) error
|
|
// OnShutDown defines the plugin cleanup logic.
|
|
// return error will write log and continue shutdown.
|
|
OnShutdown func(ctx context.Context, manifest *Manifest) error
|
|
// OnFlush defines flush logic after executed `flush tidb plugins`.
|
|
// it will be called after OnInit.
|
|
// return error will write log and continue watch following flush.
|
|
OnFlush func(ctx context.Context, manifest *Manifest) error
|
|
flushWatcher *flushWatcher
|
|
|
|
Version uint16
|
|
Kind Kind
|
|
}
|
|
|
|
// ExportManifest exports a manifest to TiDB as a known format.
|
|
// it just casts sub-manifest to manifest.
|
|
func ExportManifest(m interface{}) *Manifest {
|
|
v := reflect.ValueOf(m)
|
|
return (*Manifest)(unsafe.Pointer(v.Pointer()))
|
|
}
|
|
|
|
// AuthenticationManifest presents a sub-manifest that every audit plugin must provide.
|
|
type AuthenticationManifest struct {
|
|
Manifest
|
|
AuthenticateUser func()
|
|
GenerateAuthenticationString func()
|
|
ValidateAuthenticationString func()
|
|
SetSalt func()
|
|
}
|
|
|
|
// SchemaManifest presents a sub-manifest that every schema plugins must provide.
|
|
type SchemaManifest struct {
|
|
Manifest
|
|
}
|
|
|
|
// DaemonManifest presents a sub-manifest that every DaemonManifest plugins must provide.
|
|
type DaemonManifest struct {
|
|
Manifest
|
|
}
|
|
|