Crate coprocessor_plugin_api[][src]

This crate contains some necessary types and traits for implementing a custom coprocessor plugin for TiKV.

Most notably, if you want to write a custom plugin, your plugin needs to implement the CoprocessorPlugin trait. The plugin then needs to be compiled to a dylib.

Note: Only dylib is supported, and not cdylib or staticlib, because the latter two are not able to use TiKV’s allocator. See also the documentation in std::alloc.

In order to make your plugin callable, you need to declare a constructor with the declare_plugin macro.

A plugin can interact with the underlying storage via the RawStorage trait.

Example

use coprocessor_plugin_api::*;
use std::ops::Range;

#[derive(Default)]
struct MyPlugin;

impl CoprocessorPlugin for MyPlugin {
    fn name(&self) -> &'static str { "my-plugin" }

    fn on_raw_coprocessor_request(
        &self,
        ranges: Vec<Range<Key>>,
        request: RawRequest,
        storage: &dyn RawStorage,
    ) -> Result<RawResponse, PluginError> {
        Ok(vec![])
    }
}

declare_plugin!(MyPlugin::default());

Modules

errors
plugin_api
storage_api

Macros

declare_plugin

Declare a plugin for the library so that it can be loaded by TiKV.

Enums

PluginError

Error returned by operations on [RawStorage].

Traits

CoprocessorPlugin

A plugin that allows users to execute arbitrary code on TiKV nodes.

RawStorage

Storage access for coprocessor plugins.

Type Definitions

Key

A raw key in the storage.

KvPair

A pair of a raw key and its value.

PluginResult

Result returned by operations on [RawStorage].

RawRequest

Raw bytes of the request payload from the client to the coprocessor.

RawResponse

The response from the coprocessor encoded as raw bytes that are sent back to the client.

Value

A raw value from the storage.