HBASE-14853 Add on protobuf to c++ chain
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/b2887761 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/b2887761 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/b2887761 Branch: refs/heads/HBASE-14850 Commit: b2887761504f272fab2339168b706232e1f96728 Parents: 33cabe4 Author: Elliott Clark <ecl...@apache.org> Authored: Mon Dec 28 15:33:52 2015 -0800 Committer: Elliott Clark <ecl...@apache.org> Committed: Fri Apr 8 12:31:26 2016 -0700 ---------------------------------------------------------------------- hbase-native-client/bin/start-docker.sh | 1 + hbase-native-client/core/BUCK | 1 + hbase-native-client/core/client.cc | 4 + hbase-native-client/core/client.h | 2 + hbase-native-client/if/AccessControl.proto | 123 +++ hbase-native-client/if/Admin.proto | 309 ++++++++ hbase-native-client/if/Aggregate.proto | 63 ++ hbase-native-client/if/Authentication.proto | 82 ++ hbase-native-client/if/BUCK | 36 + hbase-native-client/if/Cell.proto | 67 ++ hbase-native-client/if/Client.proto | 472 +++++++++++ hbase-native-client/if/ClusterId.proto | 34 + hbase-native-client/if/ClusterStatus.proto | 224 ++++++ hbase-native-client/if/Comparator.proto | 74 ++ hbase-native-client/if/Encryption.proto | 33 + hbase-native-client/if/ErrorHandling.proto | 58 ++ hbase-native-client/if/FS.proto | 45 ++ hbase-native-client/if/Filter.proto | 170 ++++ hbase-native-client/if/HBase.proto | 258 ++++++ hbase-native-client/if/HFile.proto | 49 ++ hbase-native-client/if/LoadBalancer.proto | 29 + hbase-native-client/if/MapReduce.proto | 37 + hbase-native-client/if/Master.proto | 778 +++++++++++++++++++ hbase-native-client/if/MasterProcedure.proto | 245 ++++++ hbase-native-client/if/MultiRowMutation.proto | 45 ++ hbase-native-client/if/Procedure.proto | 119 +++ hbase-native-client/if/Quota.proto | 76 ++ hbase-native-client/if/RPC.proto | 136 ++++ hbase-native-client/if/RegionNormalizer.proto | 28 + hbase-native-client/if/RegionServerStatus.proto | 158 ++++ hbase-native-client/if/RowProcessor.proto | 45 ++ hbase-native-client/if/SecureBulkLoad.proto | 72 ++ hbase-native-client/if/Snapshot.proto | 66 ++ hbase-native-client/if/Tracing.proto | 33 + hbase-native-client/if/VisibilityLabels.proto | 83 ++ hbase-native-client/if/WAL.proto | 172 ++++ hbase-native-client/if/ZooKeeper.proto | 155 ++++ hbase-native-client/rpc/CMakeLists.txt | 17 - hbase-native-client/third-party/BUCK | 4 +- 39 files changed, 4385 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/b2887761/hbase-native-client/bin/start-docker.sh ---------------------------------------------------------------------- diff --git a/hbase-native-client/bin/start-docker.sh b/hbase-native-client/bin/start-docker.sh index bf38912..4426705 100755 --- a/hbase-native-client/bin/start-docker.sh +++ b/hbase-native-client/bin/start-docker.sh @@ -20,6 +20,7 @@ set -e set -x eval "$(docker-machine env docker-vm)" +eval "$(docker-machine env dinghy)" docker build -t hbase_native . http://git-wip-us.apache.org/repos/asf/hbase/blob/b2887761/hbase-native-client/core/BUCK ---------------------------------------------------------------------- diff --git a/hbase-native-client/core/BUCK b/hbase-native-client/core/BUCK index 2e4e755..ef027a1 100644 --- a/hbase-native-client/core/BUCK +++ b/hbase-native-client/core/BUCK @@ -41,6 +41,7 @@ cxx_binary( "scanner.cc", ], deps = [ + "//if:if", "//third-party:folly", "//third-party:wangle", ], http://git-wip-us.apache.org/repos/asf/hbase/blob/b2887761/hbase-native-client/core/client.cc ---------------------------------------------------------------------- diff --git a/hbase-native-client/core/client.cc b/hbase-native-client/core/client.cc index 98cf38a..a04daee 100644 --- a/hbase-native-client/core/client.cc +++ b/hbase-native-client/core/client.cc @@ -24,9 +24,13 @@ #include <glog/logging.h> #include <gflags/gflags.h> +#include "if/ZooKeeper.pb.h" + using namespace folly; +using namespace hbase::pb; int main(int argc, char *argv[]) { + MetaRegionServer mrs; google::ParseCommandLineFlags(&argc, &argv, true); google::InitGoogleLogging(argv[0]); http://git-wip-us.apache.org/repos/asf/hbase/blob/b2887761/hbase-native-client/core/client.h ---------------------------------------------------------------------- diff --git a/hbase-native-client/core/client.h b/hbase-native-client/core/client.h index 921cecc..35a3bd8 100644 --- a/hbase-native-client/core/client.h +++ b/hbase-native-client/core/client.h @@ -21,4 +21,6 @@ #include <folly/io/IOBuf.h> +#include "if/Cell.pb.h" + class Client {}; http://git-wip-us.apache.org/repos/asf/hbase/blob/b2887761/hbase-native-client/if/AccessControl.proto ---------------------------------------------------------------------- diff --git a/hbase-native-client/if/AccessControl.proto b/hbase-native-client/if/AccessControl.proto new file mode 100644 index 0000000..e67540b --- /dev/null +++ b/hbase-native-client/if/AccessControl.proto @@ -0,0 +1,123 @@ +/** + * 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. + */ +package hbase.pb; + +option java_package = "org.apache.hadoop.hbase.protobuf.generated"; +option java_outer_classname = "AccessControlProtos"; +option java_generic_services = true; +option java_generate_equals_and_hash = true; +option optimize_for = SPEED; + +import "HBase.proto"; + +message Permission { + enum Action { + READ = 0; + WRITE = 1; + EXEC = 2; + CREATE = 3; + ADMIN = 4; + } + enum Type { + Global = 1; + Namespace = 2; + Table = 3; + } + required Type type = 1; + optional GlobalPermission global_permission = 2; + optional NamespacePermission namespace_permission = 3; + optional TablePermission table_permission = 4; +} + +message TablePermission { + optional TableName table_name = 1; + optional bytes family = 2; + optional bytes qualifier = 3; + repeated Permission.Action action = 4; +} + +message NamespacePermission { + optional bytes namespace_name = 1; + repeated Permission.Action action = 2; +} + +message GlobalPermission { + repeated Permission.Action action = 1; +} + +message UserPermission { + required bytes user = 1; + required Permission permission = 3; +} + +/** + * Content of the /hbase/acl/<table or namespace> znode. + */ +message UsersAndPermissions { + message UserPermissions { + required bytes user = 1; + repeated Permission permissions = 2; + } + + repeated UserPermissions user_permissions = 1; +} + +message GrantRequest { + required UserPermission user_permission = 1; +} + +message GrantResponse { +} + +message RevokeRequest { + required UserPermission user_permission = 1; +} + +message RevokeResponse { +} + +message GetUserPermissionsRequest { + optional Permission.Type type = 1; + optional TableName table_name = 2; + optional bytes namespace_name = 3; +} + +message GetUserPermissionsResponse { + repeated UserPermission user_permission = 1; +} + +message CheckPermissionsRequest { + repeated Permission permission = 1; +} + +message CheckPermissionsResponse { +} + +service AccessControlService { + rpc Grant(GrantRequest) + returns (GrantResponse); + + rpc Revoke(RevokeRequest) + returns (RevokeResponse); + + rpc GetUserPermissions(GetUserPermissionsRequest) + returns (GetUserPermissionsResponse); + + rpc CheckPermissions(CheckPermissionsRequest) + returns (CheckPermissionsResponse); +} http://git-wip-us.apache.org/repos/asf/hbase/blob/b2887761/hbase-native-client/if/Admin.proto ---------------------------------------------------------------------- diff --git a/hbase-native-client/if/Admin.proto b/hbase-native-client/if/Admin.proto new file mode 100644 index 0000000..e905340 --- /dev/null +++ b/hbase-native-client/if/Admin.proto @@ -0,0 +1,309 @@ +/** + * 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. + */ + +// This file contains protocol buffers that are used for Admin service. +package hbase.pb; + +option java_package = "org.apache.hadoop.hbase.protobuf.generated"; +option java_outer_classname = "AdminProtos"; +option java_generic_services = true; +option java_generate_equals_and_hash = true; +option optimize_for = SPEED; + +import "HBase.proto"; +import "WAL.proto"; + +message GetRegionInfoRequest { + required RegionSpecifier region = 1; + optional bool compaction_state = 2; +} + +message GetRegionInfoResponse { + required RegionInfo region_info = 1; + optional CompactionState compaction_state = 2; + optional bool isRecovering = 3; + + enum CompactionState { + NONE = 0; + MINOR = 1; + MAJOR = 2; + MAJOR_AND_MINOR = 3; + } +} + +/** + * Get a list of store files for a set of column families in a particular region. + * If no column family is specified, get the store files for all column families. + */ +message GetStoreFileRequest { + required RegionSpecifier region = 1; + repeated bytes family = 2; +} + +message GetStoreFileResponse { + repeated string store_file = 1; +} + +message GetOnlineRegionRequest { +} + +message GetOnlineRegionResponse { + repeated RegionInfo region_info = 1; +} + +message OpenRegionRequest { + repeated RegionOpenInfo open_info = 1; + // the intended server for this RPC. + optional uint64 serverStartCode = 2; + // wall clock time from master + optional uint64 master_system_time = 5; + + message RegionOpenInfo { + required RegionInfo region = 1; + optional uint32 version_of_offline_node = 2; + repeated ServerName favored_nodes = 3; + // open region for distributedLogReplay + optional bool openForDistributedLogReplay = 4; + } +} + +message OpenRegionResponse { + repeated RegionOpeningState opening_state = 1; + + enum RegionOpeningState { + OPENED = 0; + ALREADY_OPENED = 1; + FAILED_OPENING = 2; + } +} + +message WarmupRegionRequest { + + required RegionInfo regionInfo = 1; +} + +message WarmupRegionResponse { +} + +/** + * Closes the specified region and will use or not use ZK during the close + * according to the specified flag. + */ +message CloseRegionRequest { + required RegionSpecifier region = 1; + optional uint32 version_of_closing_node = 2; + optional bool transition_in_ZK = 3 [default = true]; + optional ServerName destination_server = 4; + // the intended server for this RPC. + optional uint64 serverStartCode = 5; +} + +message CloseRegionResponse { + required bool closed = 1; +} + +/** + * Flushes the MemStore of the specified region. + * <p> + * This method is synchronous. + */ +message FlushRegionRequest { + required RegionSpecifier region = 1; + optional uint64 if_older_than_ts = 2; + optional bool write_flush_wal_marker = 3; // whether to write a marker to WAL even if not flushed +} + +message FlushRegionResponse { + required uint64 last_flush_time = 1; + optional bool flushed = 2; + optional bool wrote_flush_wal_marker = 3; +} + +/** + * Splits the specified region. + * <p> + * This method currently flushes the region and then forces a compaction which + * will then trigger a split. The flush is done synchronously but the + * compaction is asynchronous. + */ +message SplitRegionRequest { + required RegionSpecifier region = 1; + optional bytes split_point = 2; +} + +message SplitRegionResponse { +} + +/** + * Compacts the specified region. Performs a major compaction if specified. + * <p> + * This method is asynchronous. + */ +message CompactRegionRequest { + required RegionSpecifier region = 1; + optional bool major = 2; + optional bytes family = 3; +} + +message CompactRegionResponse { +} + +message UpdateFavoredNodesRequest { + repeated RegionUpdateInfo update_info = 1; + + message RegionUpdateInfo { + required RegionInfo region = 1; + repeated ServerName favored_nodes = 2; + } +} + +message UpdateFavoredNodesResponse { + optional uint32 response = 1; +} + +/** + * Merges the specified regions. + * <p> + * This method currently closes the regions and then merges them + */ +message MergeRegionsRequest { + required RegionSpecifier region_a = 1; + required RegionSpecifier region_b = 2; + optional bool forcible = 3 [default = false]; + // wall clock time from master + optional uint64 master_system_time = 4; +} + +message MergeRegionsResponse { +} + +// Protocol buffer version of WAL for replication +message WALEntry { + required WALKey key = 1; + // Following may be null if the KVs/Cells are carried along the side in a cellblock (See + // RPC for more on cellblocks). If Cells/KVs are in a cellblock, this next field is null + // and associated_cell_count has count of Cells associated w/ this WALEntry + repeated bytes key_value_bytes = 2; + // If Cell data is carried alongside in a cellblock, this is count of Cells in the cellblock. + optional int32 associated_cell_count = 3; +} + +/** + * Replicates the given entries. The guarantee is that the given entries + * will be durable on the slave cluster if this method returns without + * any exception. hbase.replication has to be set to true for this to work. + */ +message ReplicateWALEntryRequest { + repeated WALEntry entry = 1; + optional string replicationClusterId = 2; + optional string sourceBaseNamespaceDirPath = 3; + optional string sourceHFileArchiveDirPath = 4; +} + +message ReplicateWALEntryResponse { +} + +message RollWALWriterRequest { +} + +/* + * Roll request responses no longer include regions to flush + * this list will always be empty when talking to a 1.0 server + */ +message RollWALWriterResponse { + // A list of encoded name of regions to flush + repeated bytes region_to_flush = 1; +} + +message StopServerRequest { + required string reason = 1; +} + +message StopServerResponse { +} + +message GetServerInfoRequest { +} + +message ServerInfo { + required ServerName server_name = 1; + optional uint32 webui_port = 2; +} + +message GetServerInfoResponse { + required ServerInfo server_info = 1; +} + +message UpdateConfigurationRequest { +} + +message UpdateConfigurationResponse { +} + +service AdminService { + rpc GetRegionInfo(GetRegionInfoRequest) + returns(GetRegionInfoResponse); + + rpc GetStoreFile(GetStoreFileRequest) + returns(GetStoreFileResponse); + + rpc GetOnlineRegion(GetOnlineRegionRequest) + returns(GetOnlineRegionResponse); + + rpc OpenRegion(OpenRegionRequest) + returns(OpenRegionResponse); + + rpc WarmupRegion(WarmupRegionRequest) + returns(WarmupRegionResponse); + + rpc CloseRegion(CloseRegionRequest) + returns(CloseRegionResponse); + + rpc FlushRegion(FlushRegionRequest) + returns(FlushRegionResponse); + + rpc SplitRegion(SplitRegionRequest) + returns(SplitRegionResponse); + + rpc CompactRegion(CompactRegionRequest) + returns(CompactRegionResponse); + + rpc MergeRegions(MergeRegionsRequest) + returns(MergeRegionsResponse); + + rpc ReplicateWALEntry(ReplicateWALEntryRequest) + returns(ReplicateWALEntryResponse); + + rpc Replay(ReplicateWALEntryRequest) + returns(ReplicateWALEntryResponse); + + rpc RollWALWriter(RollWALWriterRequest) + returns(RollWALWriterResponse); + + rpc GetServerInfo(GetServerInfoRequest) + returns(GetServerInfoResponse); + + rpc StopServer(StopServerRequest) + returns(StopServerResponse); + + rpc UpdateFavoredNodes(UpdateFavoredNodesRequest) + returns(UpdateFavoredNodesResponse); + + rpc UpdateConfiguration(UpdateConfigurationRequest) + returns(UpdateConfigurationResponse); +} http://git-wip-us.apache.org/repos/asf/hbase/blob/b2887761/hbase-native-client/if/Aggregate.proto ---------------------------------------------------------------------- diff --git a/hbase-native-client/if/Aggregate.proto b/hbase-native-client/if/Aggregate.proto new file mode 100644 index 0000000..4d32e70 --- /dev/null +++ b/hbase-native-client/if/Aggregate.proto @@ -0,0 +1,63 @@ +/** + * 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. + */ +package hbase.pb; + +option java_package = "org.apache.hadoop.hbase.protobuf.generated"; +option java_outer_classname = "AggregateProtos"; +option java_generic_services = true; +option java_generate_equals_and_hash = true; +option optimize_for = SPEED; + +import "Client.proto"; + +message AggregateRequest { + /** The request passed to the AggregateService consists of three parts + * (1) the (canonical) classname of the ColumnInterpreter implementation + * (2) the Scan query + * (3) any bytes required to construct the ColumnInterpreter object + * properly + */ + required string interpreter_class_name = 1; + required Scan scan = 2; + optional bytes interpreter_specific_bytes = 3; +} + +message AggregateResponse { + /** + * The AggregateService methods all have a response that either is a Pair + * or a simple object. When it is a Pair both first_part and second_part + * have defined values (and the second_part is not present in the response + * when the response is not a pair). Refer to the AggregateImplementation + * class for an overview of the AggregateResponse object constructions. + */ + repeated bytes first_part = 1; + optional bytes second_part = 2; +} + +/** Refer to the AggregateImplementation class for an overview of the + * AggregateService method implementations and their functionality. + */ +service AggregateService { + rpc GetMax (AggregateRequest) returns (AggregateResponse); + rpc GetMin (AggregateRequest) returns (AggregateResponse); + rpc GetSum (AggregateRequest) returns (AggregateResponse); + rpc GetRowNum (AggregateRequest) returns (AggregateResponse); + rpc GetAvg (AggregateRequest) returns (AggregateResponse); + rpc GetStd (AggregateRequest) returns (AggregateResponse); + rpc GetMedian (AggregateRequest) returns (AggregateResponse); +} http://git-wip-us.apache.org/repos/asf/hbase/blob/b2887761/hbase-native-client/if/Authentication.proto ---------------------------------------------------------------------- diff --git a/hbase-native-client/if/Authentication.proto b/hbase-native-client/if/Authentication.proto new file mode 100644 index 0000000..2f64799 --- /dev/null +++ b/hbase-native-client/if/Authentication.proto @@ -0,0 +1,82 @@ +/** + * 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. + */ +package hbase.pb; + +option java_package = "org.apache.hadoop.hbase.protobuf.generated"; +option java_outer_classname = "AuthenticationProtos"; +option java_generic_services = true; +option java_generate_equals_and_hash = true; +option optimize_for = SPEED; + +message AuthenticationKey { + required int32 id = 1; + required int64 expiration_date = 2; + required bytes key = 3; +} + + +message TokenIdentifier { + enum Kind { + HBASE_AUTH_TOKEN = 0; + } + required Kind kind = 1; + required bytes username = 2; + required int32 key_id = 3; + optional int64 issue_date = 4; + optional int64 expiration_date = 5; + optional int64 sequence_number = 6; +} + + +// Serialization of the org.apache.hadoop.security.token.Token class +// Note that this is a Hadoop class, so fields may change! +message Token { + // the TokenIdentifier in serialized form + // Note: we can't use the protobuf directly because the Hadoop Token class + // only stores the serialized bytes + optional bytes identifier = 1; + optional bytes password = 2; + optional bytes service = 3; +} + + +// RPC request & response messages +message GetAuthenticationTokenRequest { +} + +message GetAuthenticationTokenResponse { + optional Token token = 1; +} + +message WhoAmIRequest { +} + +message WhoAmIResponse { + optional string username = 1; + optional string auth_method = 2; +} + + +// RPC service +service AuthenticationService { + rpc GetAuthenticationToken(GetAuthenticationTokenRequest) + returns (GetAuthenticationTokenResponse); + + rpc WhoAmI(WhoAmIRequest) + returns (WhoAmIResponse); +} http://git-wip-us.apache.org/repos/asf/hbase/blob/b2887761/hbase-native-client/if/BUCK ---------------------------------------------------------------------- diff --git a/hbase-native-client/if/BUCK b/hbase-native-client/if/BUCK new file mode 100644 index 0000000..3490a05 --- /dev/null +++ b/hbase-native-client/if/BUCK @@ -0,0 +1,36 @@ +PROTO_SRCS = glob(['*.proto']) +HEADER_FILENAMES = [ x.replace('.proto','.pb.h') for x in PROTO_SRCS] +CC_FILENAMES = [ x.replace('.proto', '.pb.cc') for x in PROTO_SRCS] + +genrule( + name = 'generate-proto-sources', + srcs = PROTO_SRCS, + cmd = 'mkdir -p $OUT && pwd && protoc --proto_path=. --cpp_out=$OUT *.proto', + out = 'output', +) + +for header_filename in HEADER_FILENAMES: + genrule( + name = header_filename, + cmd = 'mkdir -p `dirname $OUT` ' + ' && cp $(location :generate-proto-sources)/{} $OUT'.format(header_filename), + out = header_filename, + ) +for cc_filename in CC_FILENAMES: + genrule( + name = cc_filename, + cmd = 'mkdir -p `dirname $OUT` ' + ' && cp $(location :generate-proto-sources)/{} $OUT ' + ' && cp $(location :generate-proto-sources)/*.h `dirname $OUT`'.format(cc_filename), + out = cc_filename, + ) + +cxx_library( + name = 'if', + exported_headers = [':' + x for x in HEADER_FILENAMES], + srcs = [':' + x for x in CC_FILENAMES], + deps = [ '//third-party:protobuf'] + + [':' + x for x in CC_FILENAMES] + + [ ':' + x for x in HEADER_FILENAMES ], + visibility = [ 'PUBLIC', ], +) http://git-wip-us.apache.org/repos/asf/hbase/blob/b2887761/hbase-native-client/if/Cell.proto ---------------------------------------------------------------------- diff --git a/hbase-native-client/if/Cell.proto b/hbase-native-client/if/Cell.proto new file mode 100644 index 0000000..2c61035 --- /dev/null +++ b/hbase-native-client/if/Cell.proto @@ -0,0 +1,67 @@ +/** + * 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. + */ + +// Cell and KeyValue protos +package hbase.pb; + +option java_package = "org.apache.hadoop.hbase.protobuf.generated"; +option java_outer_classname = "CellProtos"; +option java_generate_equals_and_hash = true; +option optimize_for = SPEED; + +/** + * The type of the key in a Cell + */ +enum CellType { + MINIMUM = 0; + PUT = 4; + + DELETE = 8; + DELETE_COLUMN = 12; + DELETE_FAMILY = 14; + + // MAXIMUM is used when searching; you look from maximum on down. + MAXIMUM = 255; +} + +/** + * Protocol buffer version of Cell. + */ +message Cell { + optional bytes row = 1; + optional bytes family = 2; + optional bytes qualifier = 3; + optional uint64 timestamp = 4; + optional CellType cell_type = 5; + optional bytes value = 6; + optional bytes tags = 7; +} + +/** + * Protocol buffer version of KeyValue. + * It doesn't have those transient parameters + */ +message KeyValue { + required bytes row = 1; + required bytes family = 2; + required bytes qualifier = 3; + optional uint64 timestamp = 4; + optional CellType key_type = 5; + optional bytes value = 6; + optional bytes tags = 7; +} http://git-wip-us.apache.org/repos/asf/hbase/blob/b2887761/hbase-native-client/if/Client.proto ---------------------------------------------------------------------- diff --git a/hbase-native-client/if/Client.proto b/hbase-native-client/if/Client.proto new file mode 100644 index 0000000..ca9abdc --- /dev/null +++ b/hbase-native-client/if/Client.proto @@ -0,0 +1,472 @@ +/** + * 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. + */ + +// This file contains protocol buffers that are used for Client service. +package hbase.pb; + +option java_package = "org.apache.hadoop.hbase.protobuf.generated"; +option java_outer_classname = "ClientProtos"; +option java_generic_services = true; +option java_generate_equals_and_hash = true; +option optimize_for = SPEED; + +import "HBase.proto"; +import "Filter.proto"; +import "Cell.proto"; +import "Comparator.proto"; +import "MapReduce.proto"; + +/** + * The protocol buffer version of Authorizations. + */ +message Authorizations { + repeated string label = 1; +} + +/** + * The protocol buffer version of CellVisibility. + */ +message CellVisibility { + required string expression = 1; +} + +/** + * Container for a list of column qualifier names of a family. + */ +message Column { + required bytes family = 1; + repeated bytes qualifier = 2; +} + +/** + * Consistency defines the expected consistency level for an operation. + */ +enum Consistency { + STRONG = 0; + TIMELINE = 1; +} + +/** + * The protocol buffer version of Get. + * Unless existence_only is specified, return all the requested data + * for the row that matches exactly. + */ +message Get { + required bytes row = 1; + repeated Column column = 2; + repeated NameBytesPair attribute = 3; + optional Filter filter = 4; + optional TimeRange time_range = 5; + optional uint32 max_versions = 6 [default = 1]; + optional bool cache_blocks = 7 [default = true]; + optional uint32 store_limit = 8; + optional uint32 store_offset = 9; + + // The result isn't asked for, just check for + // the existence. + optional bool existence_only = 10 [default = false]; + + optional Consistency consistency = 12 [default = STRONG]; + repeated ColumnFamilyTimeRange cf_time_range = 13; +} + +message Result { + // Result includes the Cells or else it just has a count of Cells + // that are carried otherwise. + repeated Cell cell = 1; + // The below count is set when the associated cells are + // not part of this protobuf message; they are passed alongside + // and then this Message is just a placeholder with metadata. + // The count is needed to know how many to peel off the block of Cells as + // ours. NOTE: This is different from the pb managed cell_count of the + // 'cell' field above which is non-null when the cells are pb'd. + optional int32 associated_cell_count = 2; + + // used for Get to check existence only. Not set if existence_only was not set to true + // in the query. + optional bool exists = 3; + + // Whether or not the results are coming from possibly stale data + optional bool stale = 4 [default = false]; + + // Whether or not the entire result could be returned. Results will be split when + // the RPC chunk size limit is reached. Partial results contain only a subset of the + // cells for a row and must be combined with a result containing the remaining cells + // to form a complete result + optional bool partial = 5 [default = false]; +} + +/** + * The get request. Perform a single Get operation. + */ +message GetRequest { + required RegionSpecifier region = 1; + required Get get = 2; +} + +message GetResponse { + optional Result result = 1; +} + +/** + * Condition to check if the value of a given cell (row, + * family, qualifier) matches a value via a given comparator. + * + * Condition is used in check and mutate operations. + */ +message Condition { + required bytes row = 1; + required bytes family = 2; + required bytes qualifier = 3; + required CompareType compare_type = 4; + required Comparator comparator = 5; +} + + +/** + * A specific mutation inside a mutate request. + * It can be an append, increment, put or delete based + * on the mutation type. It can be fully filled in or + * only metadata present because data is being carried + * elsewhere outside of pb. + */ +message MutationProto { + optional bytes row = 1; + optional MutationType mutate_type = 2; + repeated ColumnValue column_value = 3; + optional uint64 timestamp = 4; + repeated NameBytesPair attribute = 5; + optional Durability durability = 6 [default = USE_DEFAULT]; + + // For some mutations, a result may be returned, in which case, + // time range can be specified for potential performance gain + optional TimeRange time_range = 7; + // The below count is set when the associated cells are NOT + // part of this protobuf message; they are passed alongside + // and then this Message is a placeholder with metadata. The + // count is needed to know how many to peel off the block of Cells as + // ours. NOTE: This is different from the pb managed cell_count of the + // 'cell' field above which is non-null when the cells are pb'd. + optional int32 associated_cell_count = 8; + + optional uint64 nonce = 9; + + enum Durability { + USE_DEFAULT = 0; + SKIP_WAL = 1; + ASYNC_WAL = 2; + SYNC_WAL = 3; + FSYNC_WAL = 4; + } + + enum MutationType { + APPEND = 0; + INCREMENT = 1; + PUT = 2; + DELETE = 3; + } + + enum DeleteType { + DELETE_ONE_VERSION = 0; + DELETE_MULTIPLE_VERSIONS = 1; + DELETE_FAMILY = 2; + DELETE_FAMILY_VERSION = 3; + } + + message ColumnValue { + required bytes family = 1; + repeated QualifierValue qualifier_value = 2; + + message QualifierValue { + optional bytes qualifier = 1; + optional bytes value = 2; + optional uint64 timestamp = 3; + optional DeleteType delete_type = 4; + optional bytes tags = 5; + } + } +} + +/** + * The mutate request. Perform a single Mutate operation. + * + * Optionally, you can specify a condition. The mutate + * will take place only if the condition is met. Otherwise, + * the mutate will be ignored. In the response result, + * parameter processed is used to indicate if the mutate + * actually happened. + */ +message MutateRequest { + required RegionSpecifier region = 1; + required MutationProto mutation = 2; + optional Condition condition = 3; + optional uint64 nonce_group = 4; +} + +message MutateResponse { + optional Result result = 1; + + // used for mutate to indicate processed only + optional bool processed = 2; +} + +/** + * Instead of get from a table, you can scan it with optional filters. + * You can specify the row key range, time range, the columns/families + * to scan and so on. + * + * This scan is used the first time in a scan request. The response of + * the initial scan will return a scanner id, which should be used to + * fetch result batches later on before it is closed. + */ +message Scan { + repeated Column column = 1; + repeated NameBytesPair attribute = 2; + optional bytes start_row = 3; + optional bytes stop_row = 4; + optional Filter filter = 5; + optional TimeRange time_range = 6; + optional uint32 max_versions = 7 [default = 1]; + optional bool cache_blocks = 8 [default = true]; + optional uint32 batch_size = 9; + optional uint64 max_result_size = 10; + optional uint32 store_limit = 11; + optional uint32 store_offset = 12; + optional bool load_column_families_on_demand = 13; /* DO NOT add defaults to load_column_families_on_demand. */ + optional bool small = 14; + optional bool reversed = 15 [default = false]; + optional Consistency consistency = 16 [default = STRONG]; + optional uint32 caching = 17; + optional bool allow_partial_results = 18; + repeated ColumnFamilyTimeRange cf_time_range = 19; +} + +/** + * A scan request. Initially, it should specify a scan. Later on, you + * can use the scanner id returned to fetch result batches with a different + * scan request. + * + * The scanner will remain open if there are more results, and it's not + * asked to be closed explicitly. + * + * You can fetch the results and ask the scanner to be closed to save + * a trip if you are not interested in remaining results. + */ +message ScanRequest { + optional RegionSpecifier region = 1; + optional Scan scan = 2; + optional uint64 scanner_id = 3; + optional uint32 number_of_rows = 4; + optional bool close_scanner = 5; + optional uint64 next_call_seq = 6; + optional bool client_handles_partials = 7; + optional bool client_handles_heartbeats = 8; + optional bool track_scan_metrics = 9; + optional bool renew = 10 [default = false]; +} + +/** + * The scan response. If there are no more results, more_results will + * be false. If it is not specified, it means there are more. + */ +message ScanResponse { + // This field is filled in if we are doing cellblocks. A cellblock is made up + // of all Cells serialized out as one cellblock BUT responses from a server + // have their Cells grouped by Result. So we can reconstitute the + // Results on the client-side, this field is a list of counts of Cells + // in each Result that makes up the response. For example, if this field + // has 3, 3, 3 in it, then we know that on the client, we are to make + // three Results each of three Cells each. + repeated uint32 cells_per_result = 1; + + optional uint64 scanner_id = 2; + optional bool more_results = 3; + optional uint32 ttl = 4; + // If cells are not carried in an accompanying cellblock, then they are pb'd here. + // This field is mutually exclusive with cells_per_result (since the Cells will + // be inside the pb'd Result) + repeated Result results = 5; + optional bool stale = 6; + + // This field is filled in if we are doing cellblocks. In the event that a row + // could not fit all of its cells into a single RPC chunk, the results will be + // returned as partials, and reconstructed into a complete result on the client + // side. This field is a list of flags indicating whether or not the result + // that the cells belong to is a partial result. For example, if this field + // has false, false, true in it, then we know that on the client side, we need to + // make another RPC request since the last result was only a partial. + repeated bool partial_flag_per_result = 7; + + // A server may choose to limit the number of results returned to the client for + // reasons such as the size in bytes or quantity of results accumulated. This field + // will true when more results exist in the current region. + optional bool more_results_in_region = 8; + + // This field is filled in if the server is sending back a heartbeat message. + // Heartbeat messages are sent back to the client to prevent the scanner from + // timing out. Seeing a heartbeat message communicates to the Client that the + // server would have continued to scan had the time limit not been reached. + optional bool heartbeat_message = 9; + + // This field is filled in if the client has requested that scan metrics be tracked. + // The metrics tracked here are sent back to the client to be tracked together with + // the existing client side metrics. + optional ScanMetrics scan_metrics = 10; +} + +/** + * Atomically bulk load multiple HFiles (say from different column families) + * into an open region. + */ +message BulkLoadHFileRequest { + required RegionSpecifier region = 1; + repeated FamilyPath family_path = 2; + optional bool assign_seq_num = 3; + + message FamilyPath { + required bytes family = 1; + required string path = 2; + } +} + +message BulkLoadHFileResponse { + required bool loaded = 1; +} + +message CoprocessorServiceCall { + required bytes row = 1; + required string service_name = 2; + required string method_name = 3; + required bytes request = 4; +} + +message CoprocessorServiceResult { + optional NameBytesPair value = 1; +} + +message CoprocessorServiceRequest { + required RegionSpecifier region = 1; + required CoprocessorServiceCall call = 2; +} + +message CoprocessorServiceResponse { + required RegionSpecifier region = 1; + required NameBytesPair value = 2; +} + +// Either a Get or a Mutation +message Action { + // If part of a multi action, useful aligning + // result with what was originally submitted. + optional uint32 index = 1; + optional MutationProto mutation = 2; + optional Get get = 3; + optional CoprocessorServiceCall service_call = 4; +} + +/** + * Actions to run against a Region. + */ +message RegionAction { + required RegionSpecifier region = 1; + // When set, run mutations as atomic unit. + optional bool atomic = 2; + repeated Action action = 3; +} + +/* +* Statistics about the current load on the region +*/ +message RegionLoadStats { + // Percent load on the memstore. Guaranteed to be positive, between 0 and 100. + optional int32 memstoreLoad = 1 [default = 0]; + // Percent JVM heap occupancy. Guaranteed to be positive, between 0 and 100. + // We can move this to "ServerLoadStats" should we develop them. + optional int32 heapOccupancy = 2 [default = 0]; + // Compaction pressure. Guaranteed to be positive, between 0 and 100. + optional int32 compactionPressure = 3 [default = 0]; +} + +/** + * Either a Result or an Exception NameBytesPair (keyed by + * exception name whose value is the exception stringified) + * or maybe empty if no result and no exception. + */ +message ResultOrException { + // If part of a multi call, save original index of the list of all + // passed so can align this response w/ original request. + optional uint32 index = 1; + optional Result result = 2; + optional NameBytesPair exception = 3; + // result if this was a coprocessor service call + optional CoprocessorServiceResult service_result = 4; + // current load on the region + optional RegionLoadStats loadStats = 5; +} + +/** + * The result of a RegionAction. + */ +message RegionActionResult { + repeated ResultOrException resultOrException = 1; + // If the operation failed globally for this region, this exception is set + optional NameBytesPair exception = 2; +} + +/** + * Execute a list of actions on a given region in order. + * Nothing prevents a request to contains a set of RegionAction on the same region. + * For this reason, the matching between the MultiRequest and the MultiResponse is not + * done by the region specifier but by keeping the order of the RegionActionResult vs. + * the order of the RegionAction. + */ +message MultiRequest { + repeated RegionAction regionAction = 1; + optional uint64 nonceGroup = 2; + optional Condition condition = 3; +} + +message MultiResponse { + repeated RegionActionResult regionActionResult = 1; + // used for mutate to indicate processed only + optional bool processed = 2; +} + + +service ClientService { + rpc Get(GetRequest) + returns(GetResponse); + + rpc Mutate(MutateRequest) + returns(MutateResponse); + + rpc Scan(ScanRequest) + returns(ScanResponse); + + rpc BulkLoadHFile(BulkLoadHFileRequest) + returns(BulkLoadHFileResponse); + + rpc ExecService(CoprocessorServiceRequest) + returns(CoprocessorServiceResponse); + + rpc ExecRegionServerService(CoprocessorServiceRequest) + returns(CoprocessorServiceResponse); + + rpc Multi(MultiRequest) + returns(MultiResponse); +} http://git-wip-us.apache.org/repos/asf/hbase/blob/b2887761/hbase-native-client/if/ClusterId.proto ---------------------------------------------------------------------- diff --git a/hbase-native-client/if/ClusterId.proto b/hbase-native-client/if/ClusterId.proto new file mode 100644 index 0000000..aed8cfc --- /dev/null +++ b/hbase-native-client/if/ClusterId.proto @@ -0,0 +1,34 @@ +/** + * 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. + */ + +// This file contains protocol buffers that are shared throughout HBase +package hbase.pb; + +option java_package = "org.apache.hadoop.hbase.protobuf.generated"; +option java_outer_classname = "ClusterIdProtos"; +option java_generate_equals_and_hash = true; +option optimize_for = SPEED; + +/** + * Content of the '/hbase/hbaseid', cluster id, znode. + * Also cluster of the ${HBASE_ROOTDIR}/hbase.id file. + */ +message ClusterId { + // This is the cluster id, a uuid as a String + required string cluster_id = 1; +} http://git-wip-us.apache.org/repos/asf/hbase/blob/b2887761/hbase-native-client/if/ClusterStatus.proto ---------------------------------------------------------------------- diff --git a/hbase-native-client/if/ClusterStatus.proto b/hbase-native-client/if/ClusterStatus.proto new file mode 100644 index 0000000..228be7e --- /dev/null +++ b/hbase-native-client/if/ClusterStatus.proto @@ -0,0 +1,224 @@ +/** + * 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. + */ + +// This file contains protocol buffers that are used for ClustStatus +package hbase.pb; + +option java_package = "org.apache.hadoop.hbase.protobuf.generated"; +option java_outer_classname = "ClusterStatusProtos"; +option java_generate_equals_and_hash = true; +option optimize_for = SPEED; + +import "HBase.proto"; +import "ClusterId.proto"; +import "FS.proto"; + +message RegionState { + required RegionInfo region_info = 1; + required State state = 2; + optional uint64 stamp = 3; + enum State { + OFFLINE = 0; // region is in an offline state + PENDING_OPEN = 1; // sent rpc to server to open but has not begun + OPENING = 2; // server has begun to open but not yet done + OPEN = 3; // server opened region and updated meta + PENDING_CLOSE = 4; // sent rpc to server to close but has not begun + CLOSING = 5; // server has begun to close but not yet done + CLOSED = 6; // server closed region and updated meta + SPLITTING = 7; // server started split of a region + SPLIT = 8; // server completed split of a region + FAILED_OPEN = 9; // failed to open, and won't retry any more + FAILED_CLOSE = 10; // failed to close, and won't retry any more + MERGING = 11; // server started merge a region + MERGED = 12; // server completed merge of a region + SPLITTING_NEW = 13; // new region to be created when RS splits a parent + // region but hasn't be created yet, or master doesn't + // know it's already created + MERGING_NEW = 14; // new region to be created when RS merges two + // daughter regions but hasn't be created yet, or + // master doesn't know it's already created + } +} + +message RegionInTransition { + required RegionSpecifier spec = 1; + required RegionState region_state = 2; +} + +/** + * sequence Id of a store + */ +message StoreSequenceId { + required bytes family_name = 1; + required uint64 sequence_id = 2; +} + +/** + * contains a sequence id of a region which should be the minimum of its store sequence ids and + * list of sequence ids of the region's stores + */ +message RegionStoreSequenceIds { + required uint64 last_flushed_sequence_id = 1; + repeated StoreSequenceId store_sequence_id = 2; +} + +message RegionLoad { + /** the region specifier */ + required RegionSpecifier region_specifier = 1; + + /** the number of stores for the region */ + optional uint32 stores = 2; + + /** the number of storefiles for the region */ + optional uint32 storefiles = 3; + + /** the total size of the store files for the region, uncompressed, in MB */ + optional uint32 store_uncompressed_size_MB = 4; + + /** the current total size of the store files for the region, in MB */ + optional uint32 storefile_size_MB = 5; + + /** the current size of the memstore for the region, in MB */ + optional uint32 memstore_size_MB = 6; + + /** + * The current total size of root-level store file indexes for the region, + * in MB. The same as {@link #rootIndexSizeKB} but in MB. + */ + optional uint32 storefile_index_size_MB = 7; + + /** the current total read requests made to region */ + optional uint64 read_requests_count = 8; + + /** the current total write requests made to region */ + optional uint64 write_requests_count = 9; + + /** the total compacting key values in currently running compaction */ + optional uint64 total_compacting_KVs = 10; + + /** the completed count of key values in currently running compaction */ + optional uint64 current_compacted_KVs = 11; + + /** The current total size of root-level indexes for the region, in KB. */ + optional uint32 root_index_size_KB = 12; + + /** The total size of all index blocks, not just the root level, in KB. */ + optional uint32 total_static_index_size_KB = 13; + + /** + * The total size of all Bloom filter blocks, not just loaded into the + * block cache, in KB. + */ + optional uint32 total_static_bloom_size_KB = 14; + + /** the most recent sequence Id from cache flush */ + optional uint64 complete_sequence_id = 15; + + /** The current data locality for region in the regionserver */ + optional float data_locality = 16; + + optional uint64 last_major_compaction_ts = 17 [default = 0]; + + /** the most recent sequence Id of store from cache flush */ + repeated StoreSequenceId store_complete_sequence_id = 18; +} + +/* Server-level protobufs */ + +message ReplicationLoadSink { + required uint64 ageOfLastAppliedOp = 1; + required uint64 timeStampsOfLastAppliedOp = 2; +} + +message ReplicationLoadSource { + required string peerID = 1; + required uint64 ageOfLastShippedOp = 2; + required uint32 sizeOfLogQueue = 3; + required uint64 timeStampOfLastShippedOp = 4; + required uint64 replicationLag = 5; +} + +message ServerLoad { + /** Number of requests since last report. */ + optional uint64 number_of_requests = 1; + + /** Total Number of requests from the start of the region server. */ + optional uint64 total_number_of_requests = 2; + + /** the amount of used heap, in MB. */ + optional uint32 used_heap_MB = 3; + + /** the maximum allowable size of the heap, in MB. */ + optional uint32 max_heap_MB = 4; + + /** Information on the load of individual regions. */ + repeated RegionLoad region_loads = 5; + + /** + * Regionserver-level coprocessors, e.g., WALObserver implementations. + * Region-level coprocessors, on the other hand, are stored inside RegionLoad + * objects. + */ + repeated Coprocessor coprocessors = 6; + + /** + * Time when incremental (non-total) counts began being calculated (e.g. number_of_requests) + * time is measured as the difference, measured in milliseconds, between the current time + * and midnight, January 1, 1970 UTC. + */ + optional uint64 report_start_time = 7; + + /** + * Time when report was generated. + * time is measured as the difference, measured in milliseconds, between the current time + * and midnight, January 1, 1970 UTC. + */ + optional uint64 report_end_time = 8; + + /** + * The port number that this region server is hosing an info server on. + */ + optional uint32 info_server_port = 9; + + /** + * The replicationLoadSource for the replication Source status of this region server. + */ + repeated ReplicationLoadSource replLoadSource = 10; + + /** + * The replicationLoadSink for the replication Sink status of this region server. + */ + optional ReplicationLoadSink replLoadSink = 11; +} + +message LiveServerInfo { + required ServerName server = 1; + required ServerLoad server_load = 2; +} + +message ClusterStatus { + optional HBaseVersionFileContent hbase_version = 1; + repeated LiveServerInfo live_servers = 2; + repeated ServerName dead_servers = 3; + repeated RegionInTransition regions_in_transition = 4; + optional ClusterId cluster_id = 5; + repeated Coprocessor master_coprocessors = 6; + optional ServerName master = 7; + repeated ServerName backup_masters = 8; + optional bool balancer_on = 9; +} http://git-wip-us.apache.org/repos/asf/hbase/blob/b2887761/hbase-native-client/if/Comparator.proto ---------------------------------------------------------------------- diff --git a/hbase-native-client/if/Comparator.proto b/hbase-native-client/if/Comparator.proto new file mode 100644 index 0000000..496b68d --- /dev/null +++ b/hbase-native-client/if/Comparator.proto @@ -0,0 +1,74 @@ +/** + * 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. + */ + +// This file contains protocol buffers that are used for filters +package hbase.pb; + +option java_package = "org.apache.hadoop.hbase.protobuf.generated"; +option java_outer_classname = "ComparatorProtos"; +option java_generic_services = true; +option java_generate_equals_and_hash = true; +option optimize_for = SPEED; + +// This file contains protocol buffers that are used for comparators (e.g. in filters) + +message Comparator { + required string name = 1; + optional bytes serialized_comparator = 2; +} + +message ByteArrayComparable { + optional bytes value = 1; +} + +message BinaryComparator { + required ByteArrayComparable comparable = 1; +} + +message LongComparator { + required ByteArrayComparable comparable = 1; +} + +message BinaryPrefixComparator { + required ByteArrayComparable comparable = 1; +} + +message BitComparator { + required ByteArrayComparable comparable = 1; + required BitwiseOp bitwise_op = 2; + + enum BitwiseOp { + AND = 1; + OR = 2; + XOR = 3; + } +} + +message NullComparator { +} + +message RegexStringComparator { + required string pattern = 1; + required int32 pattern_flags = 2; + required string charset = 3; + optional string engine = 4; +} + +message SubstringComparator { + required string substr = 1; +} http://git-wip-us.apache.org/repos/asf/hbase/blob/b2887761/hbase-native-client/if/Encryption.proto ---------------------------------------------------------------------- diff --git a/hbase-native-client/if/Encryption.proto b/hbase-native-client/if/Encryption.proto new file mode 100644 index 0000000..97ab5b2 --- /dev/null +++ b/hbase-native-client/if/Encryption.proto @@ -0,0 +1,33 @@ +/** + * 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. + */ + +// This file contains protocol buffers used for encryption +package hbase.pb; + +option java_package = "org.apache.hadoop.hbase.protobuf.generated"; +option java_outer_classname = "EncryptionProtos"; +option java_generate_equals_and_hash = true; +option optimize_for = SPEED; + +message WrappedKey { + required string algorithm = 1; + required uint32 length = 2; + required bytes data = 3; + optional bytes iv = 4; + optional bytes hash = 5; +} http://git-wip-us.apache.org/repos/asf/hbase/blob/b2887761/hbase-native-client/if/ErrorHandling.proto ---------------------------------------------------------------------- diff --git a/hbase-native-client/if/ErrorHandling.proto b/hbase-native-client/if/ErrorHandling.proto new file mode 100644 index 0000000..be9a743 --- /dev/null +++ b/hbase-native-client/if/ErrorHandling.proto @@ -0,0 +1,58 @@ +/** + * 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. + */ + +// This file contains protocol buffers that are used for error handling +package hbase.pb; + +option java_package = "org.apache.hadoop.hbase.protobuf.generated"; +option java_outer_classname = "ErrorHandlingProtos"; +option java_generate_equals_and_hash = true; +option optimize_for = SPEED; + +/** + * Protobuf version of a java.lang.StackTraceElement + * so we can serialize exceptions. + */ +message StackTraceElementMessage { + optional string declaring_class = 1; + optional string method_name = 2; + optional string file_name = 3; + optional int32 line_number = 4; +} + +/** + * Cause of a remote failure for a generic exception. Contains + * all the information for a generic exception as well as + * optional info about the error for generic info passing + * (which should be another protobuffed class). + */ +message GenericExceptionMessage { + optional string class_name = 1; + optional string message = 2; + optional bytes error_info = 3; + repeated StackTraceElementMessage trace = 4; +} + +/** + * Exception sent across the wire when a remote task needs + * to notify other tasks that it failed and why + */ +message ForeignExceptionMessage { + optional string source = 1; + optional GenericExceptionMessage generic_exception = 2; +} http://git-wip-us.apache.org/repos/asf/hbase/blob/b2887761/hbase-native-client/if/FS.proto ---------------------------------------------------------------------- diff --git a/hbase-native-client/if/FS.proto b/hbase-native-client/if/FS.proto new file mode 100644 index 0000000..9e93120 --- /dev/null +++ b/hbase-native-client/if/FS.proto @@ -0,0 +1,45 @@ +/** + * 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. + */ + +// This file contains protocol buffers that are written into the filesystem +package hbase.pb; + +option java_package = "org.apache.hadoop.hbase.protobuf.generated"; +option java_outer_classname = "FSProtos"; +option java_generate_equals_and_hash = true; +option optimize_for = SPEED; + +/** + * The ${HBASE_ROOTDIR}/hbase.version file content + */ +message HBaseVersionFileContent { + required string version = 1; +} + +/** + * Reference file content used when we split an hfile under a region. + */ +message Reference { + required bytes splitkey = 1; + enum Range { + TOP = 0; + BOTTOM = 1; + } + required Range range = 2; +} + http://git-wip-us.apache.org/repos/asf/hbase/blob/b2887761/hbase-native-client/if/Filter.proto ---------------------------------------------------------------------- diff --git a/hbase-native-client/if/Filter.proto b/hbase-native-client/if/Filter.proto new file mode 100644 index 0000000..67d5717 --- /dev/null +++ b/hbase-native-client/if/Filter.proto @@ -0,0 +1,170 @@ +/** + * 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. + */ + +// This file contains protocol buffers that are used for filters +package hbase.pb; + +option java_package = "org.apache.hadoop.hbase.protobuf.generated"; +option java_outer_classname = "FilterProtos"; +option java_generic_services = true; +option java_generate_equals_and_hash = true; +option optimize_for = SPEED; + +import "HBase.proto"; +import "Comparator.proto"; + +message Filter { + required string name = 1; + optional bytes serialized_filter = 2; +} + +message ColumnCountGetFilter { + required int32 limit = 1; +} + +message ColumnPaginationFilter { + required int32 limit = 1; + optional int32 offset = 2; + optional bytes column_offset = 3; +} + +message ColumnPrefixFilter { + required bytes prefix = 1; +} + +message ColumnRangeFilter { + optional bytes min_column = 1; + optional bool min_column_inclusive = 2; + optional bytes max_column = 3; + optional bool max_column_inclusive = 4; +} + +message CompareFilter { + required CompareType compare_op = 1; + optional Comparator comparator = 2; +} + +message DependentColumnFilter { + required CompareFilter compare_filter = 1; + optional bytes column_family = 2; + optional bytes column_qualifier = 3; + optional bool drop_dependent_column = 4; +} + +message FamilyFilter { + required CompareFilter compare_filter = 1; +} + +message FilterList { + required Operator operator = 1; + repeated Filter filters = 2; + + enum Operator { + MUST_PASS_ALL = 1; + MUST_PASS_ONE = 2; + } +} + +message FilterWrapper { + required Filter filter = 1; +} + +message FirstKeyOnlyFilter { +} + +message FirstKeyValueMatchingQualifiersFilter { + repeated bytes qualifiers = 1; +} + +message FuzzyRowFilter { + repeated BytesBytesPair fuzzy_keys_data = 1; +} + +message InclusiveStopFilter { + optional bytes stop_row_key = 1; +} + +message KeyOnlyFilter { + required bool len_as_val = 1; +} + +message MultipleColumnPrefixFilter { + repeated bytes sorted_prefixes = 1; +} + +message PageFilter { + required int64 page_size = 1; +} + +message PrefixFilter { + optional bytes prefix = 1; +} + +message QualifierFilter { + required CompareFilter compare_filter = 1; +} + +message RandomRowFilter { + required float chance = 1; +} + +message RowFilter { + required CompareFilter compare_filter = 1; +} + +message SingleColumnValueExcludeFilter { + required SingleColumnValueFilter single_column_value_filter = 1; +} + +message SingleColumnValueFilter { + optional bytes column_family = 1; + optional bytes column_qualifier = 2; + required CompareType compare_op = 3; + required Comparator comparator = 4; + optional bool filter_if_missing = 5; + optional bool latest_version_only = 6; +} + +message SkipFilter { + required Filter filter = 1; +} + +message TimestampsFilter { + repeated int64 timestamps = 1 [packed=true]; +} + +message ValueFilter { + required CompareFilter compare_filter = 1; +} + +message WhileMatchFilter { + required Filter filter = 1; +} +message FilterAllFilter { +} + +message RowRange { + optional bytes start_row = 1; + optional bool start_row_inclusive = 2; + optional bytes stop_row = 3; + optional bool stop_row_inclusive =4; +} + +message MultiRowRangeFilter { + repeated RowRange row_range_list = 1; +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hbase/blob/b2887761/hbase-native-client/if/HBase.proto ---------------------------------------------------------------------- diff --git a/hbase-native-client/if/HBase.proto b/hbase-native-client/if/HBase.proto new file mode 100644 index 0000000..e5c967a --- /dev/null +++ b/hbase-native-client/if/HBase.proto @@ -0,0 +1,258 @@ +/** + * 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. + */ + +// This file contains protocol buffers that are shared throughout HBase +package hbase.pb; + +option java_package = "org.apache.hadoop.hbase.protobuf.generated"; +option java_outer_classname = "HBaseProtos"; +option java_generate_equals_and_hash = true; +option optimize_for = SPEED; + +import "Cell.proto"; + +/** + * Table Name + */ +message TableName { + required bytes namespace = 1; + required bytes qualifier = 2; +} + +/** + * Table Schema + * Inspired by the rest TableSchema + */ +message TableSchema { + optional TableName table_name = 1; + repeated BytesBytesPair attributes = 2; + repeated ColumnFamilySchema column_families = 3; + repeated NameStringPair configuration = 4; +} + +/** Denotes state of the table */ +message TableState { + // Table's current state + enum State { + ENABLED = 0; + DISABLED = 1; + DISABLING = 2; + ENABLING = 3; + } + // This is the table's state. + required State state = 1; +} + +/** On HDFS representation of table state. */ +message TableDescriptor { + required TableSchema schema = 1; +} + +/** + * Column Family Schema + * Inspired by the rest ColumSchemaMessage + */ +message ColumnFamilySchema { + required bytes name = 1; + repeated BytesBytesPair attributes = 2; + repeated NameStringPair configuration = 3; +} + +/** + * Protocol buffer version of HRegionInfo. + */ +message RegionInfo { + required uint64 region_id = 1; + required TableName table_name = 2; + optional bytes start_key = 3; + optional bytes end_key = 4; + optional bool offline = 5; + optional bool split = 6; + optional int32 replica_id = 7 [default = 0]; +} + +/** + * Protocol buffer for favored nodes + */ +message FavoredNodes { + repeated ServerName favored_node = 1; +} + +/** + * Container protocol buffer to specify a region. + * You can specify region by region name, or the hash + * of the region name, which is known as encoded + * region name. + */ +message RegionSpecifier { + required RegionSpecifierType type = 1; + required bytes value = 2; + + enum RegionSpecifierType { + // <tablename>,<startkey>,<regionId>.<encodedName> + REGION_NAME = 1; + + // hash of <tablename>,<startkey>,<regionId> + ENCODED_REGION_NAME = 2; + } +} + +/** + * A range of time. Both from and to are Java time + * stamp in milliseconds. If you don't specify a time + * range, it means all time. By default, if not + * specified, from = 0, and to = Long.MAX_VALUE + */ +message TimeRange { + optional uint64 from = 1; + optional uint64 to = 2; +} + +/* ColumnFamily Specific TimeRange */ +message ColumnFamilyTimeRange { + required bytes column_family = 1; + required TimeRange time_range = 2; +} + +/* Comparison operators */ +enum CompareType { + LESS = 0; + LESS_OR_EQUAL = 1; + EQUAL = 2; + NOT_EQUAL = 3; + GREATER_OR_EQUAL = 4; + GREATER = 5; + NO_OP = 6; +} + +/** + * Protocol buffer version of ServerName + */ +message ServerName { + required string host_name = 1; + optional uint32 port = 2; + optional uint64 start_code = 3; +} + +// Comment data structures + +message Coprocessor { + required string name = 1; +} + +message NameStringPair { + required string name = 1; + required string value = 2; +} + +message NameBytesPair { + required string name = 1; + optional bytes value = 2; +} + +message BytesBytesPair { + required bytes first = 1; + required bytes second = 2; +} + +message NameInt64Pair { + optional string name = 1; + optional int64 value = 2; +} + +/** + * Description of the snapshot to take + */ +message SnapshotDescription { + required string name = 1; + optional string table = 2; // not needed for delete, but checked for in taking snapshot + optional int64 creation_time = 3 [default = 0]; + enum Type { + DISABLED = 0; + FLUSH = 1; + SKIPFLUSH = 2; + } + optional Type type = 4 [default = FLUSH]; + optional int32 version = 5; + optional string owner = 6; +} + +/** + * Description of the distributed procedure to take + */ +message ProcedureDescription { + required string signature = 1; // the unique signature of the procedure + optional string instance = 2; // the procedure instance name + optional int64 creation_time = 3 [default = 0]; + repeated NameStringPair configuration = 4; +} + +message EmptyMsg { +} + +enum TimeUnit { + NANOSECONDS = 1; + MICROSECONDS = 2; + MILLISECONDS = 3; + SECONDS = 4; + MINUTES = 5; + HOURS = 6; + DAYS = 7; +} + +message LongMsg { + required int64 long_msg = 1; +} + +message DoubleMsg { + required double double_msg = 1; +} + +message BigDecimalMsg { + required bytes bigdecimal_msg = 1; +} + +message UUID { + required uint64 least_sig_bits = 1; + required uint64 most_sig_bits = 2; +} + +message NamespaceDescriptor { + required bytes name = 1; + repeated NameStringPair configuration = 2; +} + +// Rpc client version info proto. Included in ConnectionHeader on connection setup +message VersionInfo { + required string version = 1; + required string url = 2; + required string revision = 3; + required string user = 4; + required string date = 5; + required string src_checksum = 6; + optional uint32 version_major = 7; + optional uint32 version_minor = 8; +} + +/** + * Description of the region server info + */ +message RegionServerInfo { + optional int32 infoPort = 1; + optional VersionInfo version_info = 2; +} http://git-wip-us.apache.org/repos/asf/hbase/blob/b2887761/hbase-native-client/if/HFile.proto ---------------------------------------------------------------------- diff --git a/hbase-native-client/if/HFile.proto b/hbase-native-client/if/HFile.proto new file mode 100644 index 0000000..5c5e4f3 --- /dev/null +++ b/hbase-native-client/if/HFile.proto @@ -0,0 +1,49 @@ +/** + * 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. + */ + +package hbase.pb; + +option java_package = "org.apache.hadoop.hbase.protobuf.generated"; +option java_outer_classname = "HFileProtos"; +option java_generic_services = true; +option java_generate_equals_and_hash = true; +option optimize_for = SPEED; + +import "HBase.proto"; + +// Map of name/values +message FileInfoProto { + repeated BytesBytesPair map_entry = 1; +} + +// HFile file trailer +message FileTrailerProto { + optional uint64 file_info_offset = 1; + optional uint64 load_on_open_data_offset = 2; + optional uint64 uncompressed_data_index_size = 3; + optional uint64 total_uncompressed_bytes = 4; + optional uint32 data_index_count = 5; + optional uint32 meta_index_count = 6; + optional uint64 entry_count = 7; + optional uint32 num_data_index_levels = 8; + optional uint64 first_data_block_offset = 9; + optional uint64 last_data_block_offset = 10; + optional string comparator_class_name = 11; + optional uint32 compression_codec = 12; + optional bytes encryption_key = 13; +} http://git-wip-us.apache.org/repos/asf/hbase/blob/b2887761/hbase-native-client/if/LoadBalancer.proto ---------------------------------------------------------------------- diff --git a/hbase-native-client/if/LoadBalancer.proto b/hbase-native-client/if/LoadBalancer.proto new file mode 100644 index 0000000..f9c5d0d --- /dev/null +++ b/hbase-native-client/if/LoadBalancer.proto @@ -0,0 +1,29 @@ +/** + * 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. + */ + +// This file contains protocol buffers to represent the state of the load balancer. +package hbase.pb; + +option java_package = "org.apache.hadoop.hbase.protobuf.generated"; +option java_outer_classname = "LoadBalancerProtos"; +option java_generate_equals_and_hash = true; +option optimize_for = SPEED; + +message LoadBalancerState { + optional bool balancer_on = 1; +} http://git-wip-us.apache.org/repos/asf/hbase/blob/b2887761/hbase-native-client/if/MapReduce.proto ---------------------------------------------------------------------- diff --git a/hbase-native-client/if/MapReduce.proto b/hbase-native-client/if/MapReduce.proto new file mode 100644 index 0000000..f96ffdf --- /dev/null +++ b/hbase-native-client/if/MapReduce.proto @@ -0,0 +1,37 @@ +/** + * 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. + */ + + //This file includes protocol buffers used in MapReduce only. +package hbase.pb; + +option java_package = "org.apache.hadoop.hbase.protobuf.generated"; +option java_outer_classname = "MapReduceProtos"; +option java_generate_equals_and_hash = true; +option optimize_for = SPEED; + +import "HBase.proto"; + +message ScanMetrics { + repeated NameInt64Pair metrics = 1; +} + +message TableSnapshotRegionSplit { + repeated string locations = 2; + optional TableSchema table = 3; + optional RegionInfo region = 4; +}