blob: 465c5bbf9daa3c7f0369ddd6ec3ee1e354f17362 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) 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.
syntax = "proto2";
package kudu.tools;
option java_package = "org.apache.kudu.tools";
import "kudu/common/common.proto";
import "kudu/common/wire_protocol.proto";
import "kudu/tablet/metadata.proto";
import "kudu/tablet/tablet.proto";
// Creates a new ExternalMiniCluster.
//
// The below fields generally map to options from ExternalMiniClusterOptions.
// If not provided, the defaults from that class will be used instead.
//
// Only one cluster may be created at a time.
message CreateClusterRequestPB {
// The desired number of masters.
//
// Currently only one or three masters are supported.
optional int32 num_masters = 1;
// The desired number of tablet servers.
optional int32 num_tservers = 2;
// Whether or not the cluster should be Kerberized.
optional bool enable_kerberos = 3;
// Service principal name used by the cluster if Kerberos is enabled (default:
// "kudu").
optional string principal = 10;
// Whether or not Ranger should be enabled
optional bool enable_ranger = 9;
// Whether or not to create a Hive Metastore, and/or enable Kudu Hive
// Metastore integration.
optional HmsMode hms_mode = 7;
// The directory where the cluster's data and logs should be placed.
optional string cluster_root = 4;
// Any additional gflags for masters or tablet servers. Each should be in a
// a format that's expected by gflag (i.e. "--foo=bar").
repeated string extra_master_flags = 5;
repeated string extra_tserver_flags = 6;
message MiniKdcOptionsPB {
// The default lifetime for initial ticket requests.
optional string ticket_lifetime = 1;
// The default renewable lifetime for initial ticket requests.
optional string renew_lifetime = 2;
}
optional MiniKdcOptionsPB mini_kdc_options = 8;
}
// Destroys a cluster created via 'create_cluster'.
message DestroyClusterRequestPB {}
// Starts all daemons in a newly created cluster, or restart all daemons
// in a stopped cluster.
//
// No-op for already started clusters.
message StartClusterRequestPB {}
// Stops a cluster.
//
// No-op for already stopped clusters.
message StopClusterRequestPB {}
// Type of daemon managed in a cluster.
enum DaemonType {
UNKNOWN_DAEMON = 0;
MASTER = 1;
TSERVER = 2;
KDC = 3;
}
// Identifier for a cluster daemon, unique to the cluster.
message DaemonIdentifierPB {
// Whether the daemon is a master, tserver, or whatever.
optional DaemonType type = 1;
// Index of the daemon in the cluster, if the cluster has multiple daemons
// of this type.
optional uint32 index = 2;
}
// Restart a stopped daemon.
message StartDaemonRequestPB {
// The identifier of the daemon to be restarted. This identifier is unique
// and immutable for the lifetime of the cluster.
optional DaemonIdentifierPB id = 1;
}
// Stops a started daemon.
//
// No-op for already stopped daemons.
message StopDaemonRequestPB {
// The identifier of the daemon to be stopped. This identifier is unique
// and immutable for the lifetime of the cluster.
optional DaemonIdentifierPB id = 1;
}
// Pause a daemon: send SIGSTOP signal to the process.
message PauseDaemonRequestPB {
// The identifier of the daemon to be paused.
optional DaemonIdentifierPB id = 1;
}
// Resume a paused daemon: send SIGCONT signal to the process.
message ResumeDaemonRequestPB {
// The identifier of the daemon to be resumed.
optional DaemonIdentifierPB id = 1;
}
// Daemon information.
message DaemonInfoPB {
// Unique identifier of the daemon.
optional DaemonIdentifierPB id = 1;
// Daemon's bound RPC address.
optional HostPortPB bound_rpc_address = 2;
}
// Response to a GetMastersRequestPB.
message GetMastersResponsePB {
// List of masters.
repeated DaemonInfoPB masters = 1;
}
// Gets information on each started master.
message GetMastersRequestPB {}
// Response to a GetTServersRequestPB.
message GetTServersResponsePB {
// List of tablet servers.
repeated DaemonInfoPB tservers = 1;
}
// Gets information on each started tablet server.
message GetTServersRequestPB {}
// Response to a GetKDCEnvVarsRequestPB.
message GetKDCEnvVarsResponsePB {
// Environment variables, mapped from key to value.
map<string, string> env_vars = 1;
}
// Gets all environment variables another process may need in order to
// communicate with this cluster's KDC.
//
// It is an error to call this on a non-Kerberized cluster.
message GetKDCEnvVarsRequestPB {}
// Removes all credentials for all principals from the KDC credential cache.
message KdestroyRequestPB {};
// Establishes a new Kerberos ticket cache (equivalent to running 'kinit').
message KinitRequestPB {
optional string username = 1 [ default = "test-admin" ];
};
// Call SetFlag() on the specific daemon.
message SetDaemonFlagRequestPB {
// The identifier of the daemon to sent the request to.
optional DaemonIdentifierPB id = 1;
// The name of the flag to set.
optional string flag = 2;
// Value to set.
optional string value = 3;
}
// Sent by the control shell in response to a control shell command request.
message ControlShellResponsePB {
// Only set if there was some kind of shell-side error.
optional AppStatusPB error = 1;
// The command response. Only set for commands that actually expect a response.
oneof response {
GetMastersResponsePB get_masters = 2;
GetTServersResponsePB get_tservers = 3;
GetKDCEnvVarsResponsePB get_kdc_env_vars = 4;
}
}
// Command sent to the control shell.
//
// Because the control shell communicates via pipe and not krpc, we can't make
// use of service dispatch and must instead multiplex all command requests and
// responses via ControlShellRequestPB and ControlShellResponsePB respectively.
message ControlShellRequestPB {
// The command request.
oneof request {
CreateClusterRequestPB create_cluster = 1;
DestroyClusterRequestPB destroy_cluster = 2;
StartClusterRequestPB start_cluster = 3;
StopClusterRequestPB stop_cluster = 4;
StartDaemonRequestPB start_daemon = 5;
StopDaemonRequestPB stop_daemon = 6;
GetMastersRequestPB get_masters = 7;
GetTServersRequestPB get_tservers = 8;
GetKDCEnvVarsRequestPB get_kdc_env_vars = 9;
KdestroyRequestPB kdestroy = 10;
KinitRequestPB kinit = 11;
SetDaemonFlagRequestPB set_daemon_flag = 12;
PauseDaemonRequestPB pause_daemon = 13;
ResumeDaemonRequestPB resume_daemon = 14;
}
}
// Results of ksck, the Kudu system check.
// See the struct analogues of these messages in ksck_results.h.
message KsckResultsPB {
repeated string errors = 1;
repeated ServerHealthSummaryPB master_summaries = 2;
repeated ServerHealthSummaryPB tserver_summaries = 3;
repeated string master_uuids = 4;
optional bool master_consensus_conflict = 5;
repeated ConsensusStatePB master_consensus_states = 6;
repeated TabletSummaryPB tablet_summaries = 7;
repeated TableSummaryPB table_summaries = 8;
repeated TableSummaryPB system_table_summaries = 12;
optional KsckChecksumResultsPB checksum_results = 9;
repeated KsckVersionSummaryPB version_summaries = 10;
repeated KsckCountSummaryPB count_summaries = 11;
}
message ServerHealthSummaryPB {
enum ServerHealth {
UNKNOWN = 999;
HEALTHY = 0;
UNAVAILABLE = 1;
WRONG_SERVER_UUID = 2;
UNAUTHORIZED = 3;
}
optional string uuid = 1;
optional string address = 2;
optional ServerHealth health = 3;
optional string status = 4;
optional string version = 5;
optional string location = 6;
}
message ConsensusStatePB {
enum ConfigType {
UNKNOWN = 999;
MASTER = 0;
COMMITTED = 1;
PENDING = 2;
}
optional ConfigType type = 1;
optional int64 term = 2;
optional int64 opid_index = 3;
optional string leader_uuid = 4;
repeated string voter_uuids = 5;
repeated string non_voter_uuids = 6;
}
enum KsckTabletHealthPB {
UNKNOWN = 999;
HEALTHY = 0;
RECOVERING = 1;
UNDER_REPLICATED = 2;
UNAVAILABLE = 3;
CONSENSUS_MISMATCH = 4;
}
message TabletSummaryPB {
optional string id = 1;
optional string table_id = 2;
optional string table_name = 3;
optional KsckTabletHealthPB health = 4;
optional string status = 5;
optional ConsensusStatePB master_cstate = 6;
repeated ReplicaSummaryPB replicas = 7;
optional string range_key_begin = 8;
}
message ReplicaSummaryPB {
optional string ts_uuid = 1;
optional string ts_address = 2;
optional bool ts_healthy = 3;
optional bool is_leader = 4;
optional bool is_voter = 5;
optional tablet.TabletStatePB state = 6;
optional tablet.TabletStatusPB status_pb = 7;
optional ConsensusStatePB consensus_state = 8;
}
message TableSummaryPB {
optional string id = 1;
optional string name = 2;
optional KsckTabletHealthPB health = 3;
optional int32 replication_factor = 4;
optional int32 total_tablets = 5;
optional int32 healthy_tablets = 6;
optional int32 recovering_tablets = 7;
optional int32 underreplicated_tablets = 8;
optional int32 unavailable_tablets = 9;
optional int32 consensus_mismatch_tablets = 10;
}
message KsckChecksumResultsPB {
optional fixed64 snapshot_timestamp = 1;
repeated KsckTableChecksumPB tables = 2;
}
message KsckTableChecksumPB {
optional string name = 1;
repeated KsckTabletChecksumPB tablets = 2;
}
message KsckTabletChecksumPB {
optional string tablet_id = 1;
optional bool mismatch = 2;
repeated KsckReplicaChecksumPB replica_checksums = 3;
}
message KsckReplicaChecksumPB {
optional string ts_address = 1;
optional string ts_uuid = 2;
optional string status = 3;
optional fixed64 checksum = 4;
}
message KsckVersionSummaryPB {
optional string version = 1;
repeated string servers = 2;
}
message KsckCountSummaryPB {
optional int32 masters = 1;
optional int32 tservers = 2;
optional int32 tables = 3;
optional int32 tablets = 4;
optional int32 replicas = 5;
}
message ColumnPB {
enum EncodingType {
AUTO_ENCODING = 0;
PLAIN_ENCODING = 1;
PREFIX_ENCODING = 2;
RLE = 3;
DICT_ENCODING = 4;
BIT_SHUFFLE = 5;
}
enum CompressionType {
DEFAULT_COMPRESSION = 0;
NO_COMPRESSION = 1;
SNAPPY = 2;
LZ4 = 3;
ZLIB = 4;
}
message ColumnAttributesPB {
// For decimal columns.
optional int32 precision = 1;
optional int32 scale = 2;
// For varchar columns.
optional int32 length = 3;
}
optional string column_name = 1;
optional string column_type = 2;
optional bool is_nullable = 3;
// The default value takes the form of a literal string.
optional string default_value = 4;
optional string comment = 5;
optional EncodingType encoding = 6;
optional CompressionType compression = 7;
// Column's attribute, used for DECIMAL and VARCHAR type columns.
optional ColumnAttributesPB type_attributes = 8;
// The preferred block size for cfile blocks.
optional int32 cfile_block_size = 9;
}
message PartitionPB {
message HashPartitionPB {
// Column names of columns included in the hash. Every column must be
// a component of the primary key.
repeated string columns = 1;
// Number of buckets into which columns will be hashed. Must be at least 2.
optional int32 num_buckets = 2;
// Seed value for hash calculation. Administrators may set a seed value
// on a per-table basis in order to randomize the mapping of rows to
// buckets. Setting a seed provides some amount of protection against denial
// of service attacks when the hash bucket columns contain user provided
// input.
optional uint32 seed = 3;
}
message RangePartitionPB {
message BoundPB {
enum Type {
UNKNOWN_BOUND = 0;
EXCLUSIVE = 1;
INCLUSIVE = 2;
}
// The type of range partition bound, "INCLUSIVE" or "EXCLUSIVE"
optional Type bound_type = 1;
// The start or end partition key values. Bounds value should be simply the
// exact string value for the bound.
repeated string bound_values = 2;
}
message RangeBoundPB {
// The lower bound.
optional BoundPB lower_bound = 1;
// The upper bound.
optional BoundPB upper_bound = 2;
}
message SplitValuePB {
// The split values of range partition keys. Split value should be simply the
// exact string value for the bound.
repeated string split_values = 1;
}
message RangeWithHashSchemaPB {
// The bounds of this range.
optional RangeBoundPB range_bounds = 1;
// Hash schema for this range.
repeated HashPartitionPB hash_schema = 2;
}
// Column names of columns included in the range. All columns must be
// a component of the primary key.
repeated string columns = 1;
// Range bounds.
repeated RangeBoundPB range_bounds = 2;
// Range splits.
repeated SplitValuePB range_splits = 3;
// Ranges with custom hash schemas.
repeated RangeWithHashSchemaPB custom_hash_schema_ranges = 4;
}
// A standalone message representing a hash schema.
message HashSchemaPB {
repeated HashPartitionPB hash_schema = 1;
}
// Table-wide hash schema.
repeated HashPartitionPB hash_partitions = 1;
// Range partitioning information.
optional RangePartitionPB range_partition = 2;
}
message ExtraConfigPB {
map<string, string> configs = 1;
}
message SchemaPB {
// Representation of table's columns, include more than one column message.
repeated ColumnPB columns = 1;
// The table's primary keys.
repeated string key_column_names = 2;
}
// Create table protobuffer message. The JSON message provided by user
// is converted to the PB. Used for creating a new table by kudu tool.
message CreateTablePB {
optional string table_name = 1;
// Representation of a table's schema.
optional SchemaPB schema = 2;
// Information on the table partitioning.
optional PartitionPB partition = 3;
// Number of replicas for table's tablets.
optional int32 num_replicas = 4;
// The table's extra configuration properties.
optional ExtraConfigPB extra_configs = 5;
// The dimension label for tablets that were created during table creation.
// Used for dimension-specific placement of tablet replicas corresponding
// to the partitions of the newly created table.
optional string dimension_label = 6;
// The owner for the newly created table. If not specified, the owner is
// automatically set to the effective OS user name that the kudu CLI tool is
// run with.
optional string owner = 7;
// Table's comment.
optional string comment = 8;
}
message TablesInfoPB {
message ReplicaInfoPB {
optional string role = 1;
optional string uuid = 2;
optional string host_port = 3;
}
message TabletWithPartitionPB {
optional string tablet_id = 1;
optional string partition_info = 2;
repeated ReplicaInfoPB replica_info = 3;
}
message TableInfoPB {
optional string name = 1;
optional int32 num_tablets = 2;
optional int32 num_replicas = 3;
optional uint64 live_row_count = 4;
repeated TabletWithPartitionPB tablet_with_partition = 5;
}
repeated TableInfoPB tables = 1;
}