forked from kovyrin/hbase
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathhbase.genavro
270 lines (237 loc) · 6.97 KB
/
hbase.genavro
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
/*
* 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.
*/
/**
* Avro protocol for a "gateway" service
*/
@namespace("org.apache.hadoop.hbase.avro.generated")
protocol HBase {
//
// TYPES
//
//
// Cluster metadata
//
// TODO(hammer): Best way to represent java.net.InetSocketAddress?
record AServerAddress {
string bindAddress;
string hostname;
string inetSocketAddress;
int port;
}
record ARegionLoad {
int memStoreSizeMB;
bytes name;
int storefileIndexSizeMB;
int storefiles;
int storefileSizeMB;
int stores;
}
record AServerLoad {
int load;
int maxHeapMB;
int memStoreSizeInMB;
int numberOfRegions;
int numberOfRequests;
union { array<ARegionLoad>, null } regionsLoad;
int storefileIndexSizeInMB;
int storefiles;
int storefileSizeInMB;
int usedHeapMB;
}
record AServerInfo {
int infoPort;
AServerLoad load;
AServerAddress serverAddress;
string serverName;
long startCode;
}
// TODO(hammer): Implement reusable Writable to Avro record converter?
record AClusterStatus {
double averageLoad;
union { array<string>, null} deadServerNames;
int deadServers;
string hbaseVersion;
int regionsCount;
int requestsCount;
union { array<AServerInfo>, null } serverInfos;
int servers;
}
//
// Family metadata
//
// TODO(hammer): how to keep in sync with Java Enum?
enum ACompressionAlgorithm {
LZO, GZ, NONE
}
// TODO(hammer): include COLUMN_DESCRIPTOR_VERSION?
// TODO(hammer): add new bloomfilter stuff
record AFamilyDescriptor {
bytes name;
union { ACompressionAlgorithm, null } compression;
union { int, null } maxVersions;
union { int, null } blocksize;
union { boolean, null } inMemory;
union { int, null } timeToLive;
union { boolean, null } blockCacheEnabled;
}
//
// Table metadata
//
// TODO(hammer): include TABLE_DESCRIPTOR_VERSION?
record ATableDescriptor {
bytes name;
union { array<AFamilyDescriptor>, null } families;
union { long, null } maxFileSize;
union { long, null } memStoreFlushSize;
union { boolean, null } rootRegion;
union { boolean, null } metaRegion;
union { boolean, null } metaTable;
union { boolean, null } readOnly;
union { boolean, null } deferredLogFlush;
}
//
// Single-Row DML (Get)
//
record AColumn {
bytes family;
union { bytes, null } qualifier;
}
record ATimeRange {
long minStamp;
long maxStamp;
}
// TODO(hammer): Add filter options
record AGet {
bytes row;
union { array<AColumn>, null } columns;
union { long, null } timestamp;
union { ATimeRange, null } timerange;
union { int, null } maxVersions;
}
record AResultEntry {
bytes family;
bytes qualifier;
bytes value;
long timestamp;
}
// Avro maps can't use non-string keys, so using an array for now
record AResult {
bytes row;
union { array<AResultEntry>, null } entries;
}
//
// Single-Row DML (Put)
//
// TODO(hammer): Reuse a single KeyValue-style record for Get and Put?
record AColumnValue {
bytes family;
bytes qualifier;
bytes value;
union { long, null } timestamp;
}
record APut {
bytes row;
array<AColumnValue> columnValues;
}
//
// Single-Row DML (Delete)
//
// TODO(hammer): Add fields when API is rationalized (HBASE-2609)
record ADelete {
bytes row;
union { array<AColumn>, null } columns;
}
//
// Multi-Row DML (Scan)
//
record AScan {
union { bytes, null } startRow;
union { bytes, null } stopRow;
union { array<AColumn>, null } columns;
union { long, null } timestamp;
union { ATimeRange, null } timerange;
union { int, null } maxVersions;
}
//
// ERRORS
//
/**
* An AIOError error signals that an error occurred communicating
* to the HBase master or a HBase region server. Also used to return
* more general HBase error conditions.
*/
error AIOError {
string message;
}
/**
* An AIllegalArgument error indicates an illegal or invalid
* argument was passed into a procedure.
*/
error AIllegalArgument {
string message;
}
/**
* An ATableExists error that a table with the specified
* name already exists
*/
error ATableExists {
string message;
}
/**
* An AMasterNotRunning error means we couldn't reach the Master.
*/
error AMasterNotRunning {
string message;
}
//
// MESSAGES
//
// TODO(hammer): surgery tools
// TODO(hammer): getRowOrBefore/checkAndPut/flushCommits
// TODO(hammer): MultiPut/Get/Delete
// Cluster metadata
string getHBaseVersion() throws AIOError;
AClusterStatus getClusterStatus() throws AIOError;
array<ATableDescriptor> listTables() throws AIOError;
// Table metadata
ATableDescriptor describeTable(bytes table) throws AIOError;
boolean isTableEnabled(bytes table) throws AIOError;
boolean tableExists(bytes table) throws AIOError;
// Family metadata
AFamilyDescriptor describeFamily(bytes table, bytes family) throws AIOError;
// Table admin
void createTable(ATableDescriptor table) throws AIOError, AIllegalArgument, ATableExists, AMasterNotRunning;
void deleteTable(bytes table) throws AIOError;
void modifyTable(bytes table, ATableDescriptor tableDescriptor) throws AIOError;
void enableTable(bytes table) throws AIOError;
void disableTable(bytes table) throws AIOError;
void flush(bytes table) throws AIOError;
// Family admin
void addFamily(bytes table, AFamilyDescriptor family) throws AIOError;
void deleteFamily(bytes table, bytes family) throws AIOError;
void modifyFamily(bytes table, bytes familyName, AFamilyDescriptor familyDescriptor) throws AIOError;
// Single-row DML
AResult get(bytes table, AGet get) throws AIOError;
void put(bytes table, APut put) throws AIOError;
void delete(bytes table, ADelete delete) throws AIOError;
long incrementColumnValue(bytes table, bytes row, bytes family, bytes qualifier, long amount, boolean writeToWAL) throws AIOError;
// Multi-row DML (read-only)
int scannerOpen(bytes table, AScan scan) throws AIOError;
void scannerClose(int scannerId) throws AIOError, AIllegalArgument;
array<AResult> scannerGetRows(int scannerId, int numberOfRows) throws AIOError, AIllegalArgument;
}