1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.protobuf;
19
20 import java.io.IOException;
21 import java.util.List;
22
23 import org.apache.hadoop.classification.InterfaceAudience;
24 import org.apache.hadoop.hbase.CellScannable;
25 import org.apache.hadoop.hbase.TableName;
26 import org.apache.hadoop.hbase.DoNotRetryIOException;
27 import org.apache.hadoop.hbase.HColumnDescriptor;
28 import org.apache.hadoop.hbase.HRegionInfo;
29 import org.apache.hadoop.hbase.HTableDescriptor;
30 import org.apache.hadoop.hbase.ServerName;
31 import org.apache.hadoop.hbase.client.Action;
32 import org.apache.hadoop.hbase.client.Append;
33 import org.apache.hadoop.hbase.client.Delete;
34 import org.apache.hadoop.hbase.client.Get;
35 import org.apache.hadoop.hbase.client.Increment;
36 import org.apache.hadoop.hbase.client.Mutation;
37 import org.apache.hadoop.hbase.client.Put;
38 import org.apache.hadoop.hbase.client.Row;
39 import org.apache.hadoop.hbase.client.RowMutations;
40 import org.apache.hadoop.hbase.client.Scan;
41 import org.apache.hadoop.hbase.client.Durability;
42 import org.apache.hadoop.hbase.exceptions.DeserializationException;
43 import org.apache.hadoop.hbase.filter.ByteArrayComparable;
44 import org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos;
45 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionRequest;
46 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionRequest;
47 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionRequest;
48 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionRequest;
49 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoRequest;
50 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoRequest;
51 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileRequest;
52 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsRequest;
53 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest;
54 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;
55 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterRequest;
56 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionRequest;
57 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerRequest;
58 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;
59 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest;
60 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;
61 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Column;
62 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Condition;
63 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetRequest;
64 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiAction;
65 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiGetRequest;
66 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiRequest;
67 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateRequest;
68 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto;
69 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.ColumnValue;
70 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.ColumnValue.QualifierValue;
71 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType;
72 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;
73 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.CompareType;
74 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier;
75 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;
76 import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.AddColumnRequest;
77 import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.AssignRegionRequest;
78 import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.BalanceRequest;
79 import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.CatalogScanRequest;
80 import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.CreateTableRequest;
81 import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.DeleteColumnRequest;
82 import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.DeleteTableRequest;
83 import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.DisableTableRequest;
84 import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.DispatchMergingRegionsRequest;
85 import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.EnableCatalogJanitorRequest;
86 import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.EnableTableRequest;
87 import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.IsCatalogJanitorEnabledRequest;
88 import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.ModifyColumnRequest;
89 import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.ModifyTableRequest;
90 import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.MoveRegionRequest;
91 import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.OfflineRegionRequest;
92 import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.SetBalancerRunningRequest;
93 import org.apache.hadoop.hbase.protobuf.generated.MasterAdminProtos.UnassignRegionRequest;
94 import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetClusterStatusRequest;
95 import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetSchemaAlterStatusRequest;
96 import org.apache.hadoop.hbase.protobuf.generated.MasterMonitorProtos.GetTableDescriptorsRequest;
97 import org.apache.hadoop.hbase.protobuf.generated.MasterProtos.IsMasterRunningRequest;
98 import org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos.GetLastFlushedSequenceIdRequest;
99 import org.apache.hadoop.hbase.util.Bytes;
100 import org.apache.hadoop.hbase.util.Pair;
101 import org.apache.hadoop.hbase.util.Triple;
102
103 import com.google.protobuf.ByteString;
104
105
106
107
108
109 @InterfaceAudience.Private
110 public final class RequestConverter {
111
112 private RequestConverter() {
113 }
114
115
116
117
118
119
120
121
122
123
124
125
126
127 public static GetRequest buildGetRowOrBeforeRequest(
128 final byte[] regionName, final byte[] row, final byte[] family) {
129 GetRequest.Builder builder = GetRequest.newBuilder();
130 RegionSpecifier region = buildRegionSpecifier(
131 RegionSpecifierType.REGION_NAME, regionName);
132 builder.setClosestRowBefore(true);
133 builder.setRegion(region);
134
135 Column.Builder columnBuilder = Column.newBuilder();
136 columnBuilder.setFamily(ByteString.copyFrom(family));
137 ClientProtos.Get.Builder getBuilder =
138 ClientProtos.Get.newBuilder();
139 getBuilder.setRow(ByteString.copyFrom(row));
140 getBuilder.addColumn(columnBuilder.build());
141 builder.setGet(getBuilder.build());
142 return builder.build();
143 }
144
145
146
147
148
149
150
151
152 public static GetRequest buildGetRequest(final byte[] regionName,
153 final Get get) throws IOException {
154 return buildGetRequest(regionName, get, false);
155 }
156
157
158
159
160
161
162
163
164
165 public static GetRequest buildGetRequest(final byte[] regionName,
166 final Get get, final boolean existenceOnly) throws IOException {
167 GetRequest.Builder builder = GetRequest.newBuilder();
168 RegionSpecifier region = buildRegionSpecifier(
169 RegionSpecifierType.REGION_NAME, regionName);
170 builder.setExistenceOnly(existenceOnly);
171 builder.setRegion(region);
172 builder.setGet(ProtobufUtil.toGet(get));
173 return builder.build();
174 }
175
176
177
178
179
180
181
182
183
184 public static MultiGetRequest buildMultiGetRequest(final byte[] regionName, final List<Get> gets,
185 final boolean existenceOnly, final boolean closestRowBefore) throws IOException {
186 MultiGetRequest.Builder builder = MultiGetRequest.newBuilder();
187 RegionSpecifier region = buildRegionSpecifier(RegionSpecifierType.REGION_NAME, regionName);
188 builder.setExistenceOnly(existenceOnly);
189 builder.setClosestRowBefore(closestRowBefore);
190 builder.setRegion(region);
191 for (Get get : gets) {
192 builder.addGet(ProtobufUtil.toGet(get));
193 }
194 return builder.build();
195 }
196
197
198
199
200
201
202
203
204
205
206
207
208 public static MutateRequest buildMutateRequest(
209 final byte[] regionName, final byte[] row, final byte[] family,
210 final byte [] qualifier, final long amount, final Durability durability) {
211 MutateRequest.Builder builder = MutateRequest.newBuilder();
212 RegionSpecifier region = buildRegionSpecifier(
213 RegionSpecifierType.REGION_NAME, regionName);
214 builder.setRegion(region);
215
216 MutationProto.Builder mutateBuilder = MutationProto.newBuilder();
217 mutateBuilder.setRow(ByteString.copyFrom(row));
218 mutateBuilder.setMutateType(MutationType.INCREMENT);
219 mutateBuilder.setDurability(ProtobufUtil.toDurability(durability));
220 ColumnValue.Builder columnBuilder = ColumnValue.newBuilder();
221 columnBuilder.setFamily(ByteString.copyFrom(family));
222 QualifierValue.Builder valueBuilder = QualifierValue.newBuilder();
223 valueBuilder.setValue(ByteString.copyFrom(Bytes.toBytes(amount)));
224 valueBuilder.setQualifier(ByteString.copyFrom(qualifier));
225 columnBuilder.addQualifierValue(valueBuilder.build());
226 mutateBuilder.addColumnValue(columnBuilder.build());
227 builder.setMutation(mutateBuilder.build());
228 return builder.build();
229 }
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244 public static MutateRequest buildMutateRequest(
245 final byte[] regionName, final byte[] row, final byte[] family,
246 final byte [] qualifier, final ByteArrayComparable comparator,
247 final CompareType compareType, final Put put) throws IOException {
248 MutateRequest.Builder builder = MutateRequest.newBuilder();
249 RegionSpecifier region = buildRegionSpecifier(
250 RegionSpecifierType.REGION_NAME, regionName);
251 builder.setRegion(region);
252 Condition condition = buildCondition(
253 row, family, qualifier, comparator, compareType);
254 builder.setMutation(ProtobufUtil.toMutation(MutationType.PUT, put));
255 builder.setCondition(condition);
256 return builder.build();
257 }
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272 public static MutateRequest buildMutateRequest(
273 final byte[] regionName, final byte[] row, final byte[] family,
274 final byte [] qualifier, final ByteArrayComparable comparator,
275 final CompareType compareType, final Delete delete) throws IOException {
276 MutateRequest.Builder builder = MutateRequest.newBuilder();
277 RegionSpecifier region = buildRegionSpecifier(
278 RegionSpecifierType.REGION_NAME, regionName);
279 builder.setRegion(region);
280 Condition condition = buildCondition(
281 row, family, qualifier, comparator, compareType);
282 builder.setMutation(ProtobufUtil.toMutation(MutationType.DELETE, delete));
283 builder.setCondition(condition);
284 return builder.build();
285 }
286
287
288
289
290
291
292
293
294
295 public static MutateRequest buildMutateRequest(
296 final byte[] regionName, final Put put) throws IOException {
297 MutateRequest.Builder builder = MutateRequest.newBuilder();
298 RegionSpecifier region = buildRegionSpecifier(
299 RegionSpecifierType.REGION_NAME, regionName);
300 builder.setRegion(region);
301 builder.setMutation(ProtobufUtil.toMutation(MutationType.PUT, put));
302 return builder.build();
303 }
304
305
306
307
308
309
310
311
312
313 public static MutateRequest buildMutateRequest(
314 final byte[] regionName, final Append append) throws IOException {
315 MutateRequest.Builder builder = MutateRequest.newBuilder();
316 RegionSpecifier region = buildRegionSpecifier(
317 RegionSpecifierType.REGION_NAME, regionName);
318 builder.setRegion(region);
319 builder.setMutation(ProtobufUtil.toMutation(MutationType.APPEND, append));
320 return builder.build();
321 }
322
323
324
325
326
327
328
329
330 public static MutateRequest buildMutateRequest(
331 final byte[] regionName, final Increment increment) {
332 MutateRequest.Builder builder = MutateRequest.newBuilder();
333 RegionSpecifier region = buildRegionSpecifier(
334 RegionSpecifierType.REGION_NAME, regionName);
335 builder.setRegion(region);
336 builder.setMutation(ProtobufUtil.toMutation(increment));
337 return builder.build();
338 }
339
340
341
342
343
344
345
346
347
348 public static MutateRequest buildMutateRequest(
349 final byte[] regionName, final Delete delete) throws IOException {
350 MutateRequest.Builder builder = MutateRequest.newBuilder();
351 RegionSpecifier region = buildRegionSpecifier(
352 RegionSpecifierType.REGION_NAME, regionName);
353 builder.setRegion(region);
354 builder.setMutation(ProtobufUtil.toMutation(MutationType.DELETE, delete));
355 return builder.build();
356 }
357
358
359
360
361
362
363
364
365
366 public static MultiRequest buildMultiRequest(final byte[] regionName,
367 final RowMutations rowMutations)
368 throws IOException {
369 MultiRequest.Builder builder = getMultiRequestBuilderWithRegionAndAtomicSet(regionName, true);
370 for (Mutation mutation: rowMutations.getMutations()) {
371 MutationType mutateType = null;
372 if (mutation instanceof Put) {
373 mutateType = MutationType.PUT;
374 } else if (mutation instanceof Delete) {
375 mutateType = MutationType.DELETE;
376 } else {
377 throw new DoNotRetryIOException("RowMutations supports only put and delete, not " +
378 mutation.getClass().getName());
379 }
380 MutationProto mp = ProtobufUtil.toMutation(mutateType, mutation);
381 builder.addAction(MultiAction.newBuilder().setMutation(mp).build());
382 }
383 return builder.build();
384 }
385
386
387
388
389
390
391
392
393
394
395
396 public static MultiRequest buildNoDataMultiRequest(final byte[] regionName,
397 final RowMutations rowMutations, final List<CellScannable> cells)
398 throws IOException {
399 MultiRequest.Builder builder = getMultiRequestBuilderWithRegionAndAtomicSet(regionName, true);
400 for (Mutation mutation: rowMutations.getMutations()) {
401 MutationType type = null;
402 if (mutation instanceof Put) {
403 type = MutationType.PUT;
404 } else if (mutation instanceof Delete) {
405 type = MutationType.DELETE;
406 } else {
407 throw new DoNotRetryIOException("RowMutations supports only put and delete, not " +
408 mutation.getClass().getName());
409 }
410 MutationProto mp = ProtobufUtil.toMutationNoData(type, mutation);
411 cells.add(mutation);
412 builder.addAction(MultiAction.newBuilder().setMutation(mp).build());
413 }
414 return builder.build();
415 }
416
417 private static MultiRequest.Builder getMultiRequestBuilderWithRegionAndAtomicSet(final byte [] regionName,
418 final boolean atomic) {
419 MultiRequest.Builder builder = MultiRequest.newBuilder();
420 RegionSpecifier region = buildRegionSpecifier(RegionSpecifierType.REGION_NAME, regionName);
421 builder.setRegion(region);
422 return builder.setAtomic(atomic);
423 }
424
425
426
427
428
429
430
431
432
433
434
435 public static ScanRequest buildScanRequest(final byte[] regionName,
436 final Scan scan, final int numberOfRows,
437 final boolean closeScanner) throws IOException {
438 ScanRequest.Builder builder = ScanRequest.newBuilder();
439 RegionSpecifier region = buildRegionSpecifier(
440 RegionSpecifierType.REGION_NAME, regionName);
441 builder.setNumberOfRows(numberOfRows);
442 builder.setCloseScanner(closeScanner);
443 builder.setRegion(region);
444 builder.setScan(ProtobufUtil.toScan(scan));
445 return builder.build();
446 }
447
448
449
450
451
452
453
454
455
456 public static ScanRequest buildScanRequest(final long scannerId,
457 final int numberOfRows, final boolean closeScanner) {
458 ScanRequest.Builder builder = ScanRequest.newBuilder();
459 builder.setNumberOfRows(numberOfRows);
460 builder.setCloseScanner(closeScanner);
461 builder.setScannerId(scannerId);
462 return builder.build();
463 }
464
465
466
467
468
469
470
471
472
473
474 public static ScanRequest buildScanRequest(final long scannerId, final int numberOfRows,
475 final boolean closeScanner, final long nextCallSeq) {
476 ScanRequest.Builder builder = ScanRequest.newBuilder();
477 builder.setNumberOfRows(numberOfRows);
478 builder.setCloseScanner(closeScanner);
479 builder.setScannerId(scannerId);
480 builder.setNextCallSeq(nextCallSeq);
481 return builder.build();
482 }
483
484
485
486
487
488
489
490
491
492 public static BulkLoadHFileRequest buildBulkLoadHFileRequest(
493 final List<Pair<byte[], String>> familyPaths,
494 final byte[] regionName, boolean assignSeqNum) {
495 BulkLoadHFileRequest.Builder builder = BulkLoadHFileRequest.newBuilder();
496 RegionSpecifier region = buildRegionSpecifier(
497 RegionSpecifierType.REGION_NAME, regionName);
498 builder.setRegion(region);
499 FamilyPath.Builder familyPathBuilder = FamilyPath.newBuilder();
500 for (Pair<byte[], String> familyPath: familyPaths) {
501 familyPathBuilder.setFamily(ByteString.copyFrom(familyPath.getFirst()));
502 familyPathBuilder.setPath(familyPath.getSecond());
503 builder.addFamilyPath(familyPathBuilder.build());
504 }
505 builder.setAssignSeqNum(assignSeqNum);
506 return builder.build();
507 }
508
509
510
511
512
513
514
515
516
517
518 public static <R> MultiRequest buildMultiRequest(final byte[] regionName,
519 final List<Action<R>> actions)
520 throws IOException {
521 MultiRequest.Builder builder = getMultiRequestBuilderWithRegionAndAtomicSet(regionName, false);
522 for (Action<R> action: actions) {
523 MultiAction.Builder protoAction = MultiAction.newBuilder();
524 Row row = action.getAction();
525 if (row instanceof Get) {
526 protoAction.setGet(ProtobufUtil.toGet((Get)row));
527 } else if (row instanceof Put) {
528 protoAction.setMutation(ProtobufUtil.toMutation(MutationType.PUT, (Put)row));
529 } else if (row instanceof Delete) {
530 protoAction.setMutation(ProtobufUtil.toMutation(MutationType.DELETE, (Delete)row));
531 } else if (row instanceof Append) {
532 protoAction.setMutation(ProtobufUtil.toMutation(MutationType.APPEND, (Append)row));
533 } else if (row instanceof Increment) {
534 protoAction.setMutation(ProtobufUtil.toMutation((Increment)row));
535 } else if (row instanceof RowMutations) {
536 continue;
537 } else {
538 throw new DoNotRetryIOException(
539 "multi doesn't support " + row.getClass().getName());
540 }
541 builder.addAction(protoAction.build());
542 }
543 return builder.build();
544 }
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562 public static <R> MultiRequest buildNoDataMultiRequest(final byte[] regionName,
563 final List<Action<R>> actions, final List<CellScannable> cells)
564 throws IOException {
565 MultiRequest.Builder builder = getMultiRequestBuilderWithRegionAndAtomicSet(regionName, false);
566 for (Action<R> action: actions) {
567 MultiAction.Builder protoAction = MultiAction.newBuilder();
568 Row row = action.getAction();
569 if (row instanceof Get) {
570
571 protoAction.setGet(ProtobufUtil.toGet((Get)row));
572 } else if (row instanceof Put) {
573 Put p = (Put)row;
574 cells.add(p);
575 protoAction.setMutation(ProtobufUtil.toMutationNoData(MutationType.PUT, p));
576 } else if (row instanceof Delete) {
577 Delete d = (Delete)row;
578 int size = d.size();
579
580
581
582
583
584 if (size > 0) {
585 cells.add(d);
586 protoAction.setMutation(ProtobufUtil.toMutationNoData(MutationType.DELETE, d));
587 } else {
588 protoAction.setMutation(ProtobufUtil.toMutation(MutationType.DELETE, d));
589 }
590 } else if (row instanceof Append) {
591 Append a = (Append)row;
592 cells.add(a);
593 protoAction.setMutation(ProtobufUtil.toMutationNoData(MutationType.APPEND, a));
594 } else if (row instanceof Increment) {
595 Increment i = (Increment)row;
596 cells.add(i);
597 protoAction.setMutation(ProtobufUtil.toMutationNoData(MutationType.INCREMENT, i));
598 } else if (row instanceof RowMutations) {
599 continue;
600 } else {
601 throw new DoNotRetryIOException("Multi doesn't support " + row.getClass().getName());
602 }
603 builder.addAction(protoAction.build());
604 }
605 return builder.build();
606 }
607
608
609
610
611
612
613
614
615
616
617 public static GetRegionInfoRequest
618 buildGetRegionInfoRequest(final byte[] regionName) {
619 return buildGetRegionInfoRequest(regionName, false);
620 }
621
622
623
624
625
626
627
628
629 public static GetRegionInfoRequest
630 buildGetRegionInfoRequest(final byte[] regionName,
631 final boolean includeCompactionState) {
632 GetRegionInfoRequest.Builder builder = GetRegionInfoRequest.newBuilder();
633 RegionSpecifier region = buildRegionSpecifier(
634 RegionSpecifierType.REGION_NAME, regionName);
635 builder.setRegion(region);
636 if (includeCompactionState) {
637 builder.setCompactionState(includeCompactionState);
638 }
639 return builder.build();
640 }
641
642
643
644
645
646
647
648
649 public static GetStoreFileRequest
650 buildGetStoreFileRequest(final byte[] regionName, final byte[] family) {
651 GetStoreFileRequest.Builder builder = GetStoreFileRequest.newBuilder();
652 RegionSpecifier region = buildRegionSpecifier(
653 RegionSpecifierType.REGION_NAME, regionName);
654 builder.setRegion(region);
655 builder.addFamily(ByteString.copyFrom(family));
656 return builder.build();
657 }
658
659
660
661
662
663
664 public static GetOnlineRegionRequest buildGetOnlineRegionRequest() {
665 return GetOnlineRegionRequest.newBuilder().build();
666 }
667
668
669
670
671
672
673
674 public static FlushRegionRequest
675 buildFlushRegionRequest(final byte[] regionName) {
676 FlushRegionRequest.Builder builder = FlushRegionRequest.newBuilder();
677 RegionSpecifier region = buildRegionSpecifier(
678 RegionSpecifierType.REGION_NAME, regionName);
679 builder.setRegion(region);
680 return builder.build();
681 }
682
683
684
685
686
687
688
689 public static OpenRegionRequest
690 buildOpenRegionRequest(final List<Triple<HRegionInfo, Integer,
691 List<ServerName>>> regionOpenInfos) {
692 OpenRegionRequest.Builder builder = OpenRegionRequest.newBuilder();
693 for (Triple<HRegionInfo, Integer, List<ServerName>> regionOpenInfo: regionOpenInfos) {
694 Integer second = regionOpenInfo.getSecond();
695 int versionOfOfflineNode = second == null ? -1 : second.intValue();
696 builder.addOpenInfo(buildRegionOpenInfo(
697 regionOpenInfo.getFirst(), versionOfOfflineNode, regionOpenInfo.getThird()));
698 }
699 return builder.build();
700 }
701
702
703
704
705
706
707
708
709
710 public static OpenRegionRequest buildOpenRegionRequest(
711 final HRegionInfo region, final int versionOfOfflineNode, List<ServerName> favoredNodes) {
712 OpenRegionRequest.Builder builder = OpenRegionRequest.newBuilder();
713 builder.addOpenInfo(buildRegionOpenInfo(region, versionOfOfflineNode, favoredNodes));
714 return builder.build();
715 }
716
717
718
719
720
721
722
723
724 public static CloseRegionRequest buildCloseRegionRequest(
725 final byte[] regionName, final boolean transitionInZK) {
726 CloseRegionRequest.Builder builder = CloseRegionRequest.newBuilder();
727 RegionSpecifier region = buildRegionSpecifier(
728 RegionSpecifierType.REGION_NAME, regionName);
729 builder.setRegion(region);
730 builder.setTransitionInZK(transitionInZK);
731 return builder.build();
732 }
733
734 public static CloseRegionRequest buildCloseRegionRequest(
735 final byte[] regionName, final int versionOfClosingNode,
736 ServerName destinationServer, final boolean transitionInZK) {
737 CloseRegionRequest.Builder builder = CloseRegionRequest.newBuilder();
738 RegionSpecifier region = buildRegionSpecifier(
739 RegionSpecifierType.REGION_NAME, regionName);
740 builder.setRegion(region);
741 builder.setVersionOfClosingNode(versionOfClosingNode);
742 builder.setTransitionInZK(transitionInZK);
743 if (destinationServer != null){
744 builder.setDestinationServer(ProtobufUtil.toServerName( destinationServer) );
745 }
746 return builder.build();
747 }
748
749
750
751
752
753
754
755
756 public static CloseRegionRequest
757 buildCloseRegionRequest(final String encodedRegionName,
758 final boolean transitionInZK) {
759 CloseRegionRequest.Builder builder = CloseRegionRequest.newBuilder();
760 RegionSpecifier region = buildRegionSpecifier(
761 RegionSpecifierType.ENCODED_REGION_NAME,
762 Bytes.toBytes(encodedRegionName));
763 builder.setRegion(region);
764 builder.setTransitionInZK(transitionInZK);
765 return builder.build();
766 }
767
768
769
770
771
772
773
774
775 public static SplitRegionRequest buildSplitRegionRequest(
776 final byte[] regionName, final byte[] splitPoint) {
777 SplitRegionRequest.Builder builder = SplitRegionRequest.newBuilder();
778 RegionSpecifier region = buildRegionSpecifier(
779 RegionSpecifierType.REGION_NAME, regionName);
780 builder.setRegion(region);
781 if (splitPoint != null) {
782 builder.setSplitPoint(ByteString.copyFrom(splitPoint));
783 }
784 return builder.build();
785 }
786
787
788
789
790
791
792
793
794 public static MergeRegionsRequest buildMergeRegionsRequest(
795 final byte[] regionA, final byte[] regionB, final boolean forcible) {
796 MergeRegionsRequest.Builder builder = MergeRegionsRequest.newBuilder();
797 RegionSpecifier regionASpecifier = buildRegionSpecifier(
798 RegionSpecifierType.REGION_NAME, regionA);
799 RegionSpecifier regionBSpecifier = buildRegionSpecifier(
800 RegionSpecifierType.REGION_NAME, regionB);
801 builder.setRegionA(regionASpecifier);
802 builder.setRegionB(regionBSpecifier);
803 builder.setForcible(forcible);
804 return builder.build();
805 }
806
807
808
809
810
811
812
813
814 public static CompactRegionRequest buildCompactRegionRequest(
815 final byte[] regionName, final boolean major, final byte [] family) {
816 CompactRegionRequest.Builder builder = CompactRegionRequest.newBuilder();
817 RegionSpecifier region = buildRegionSpecifier(
818 RegionSpecifierType.REGION_NAME, regionName);
819 builder.setRegion(region);
820 builder.setMajor(major);
821 if (family != null) {
822 builder.setFamily(ByteString.copyFrom(family));
823 }
824 return builder.build();
825 }
826
827
828
829
830
831
832 public static RollWALWriterRequest buildRollWALWriterRequest() {
833 RollWALWriterRequest.Builder builder = RollWALWriterRequest.newBuilder();
834 return builder.build();
835 }
836
837
838
839
840
841
842 public static GetServerInfoRequest buildGetServerInfoRequest() {
843 GetServerInfoRequest.Builder builder = GetServerInfoRequest.newBuilder();
844 return builder.build();
845 }
846
847
848
849
850
851
852
853 public static StopServerRequest buildStopServerRequest(final String reason) {
854 StopServerRequest.Builder builder = StopServerRequest.newBuilder();
855 builder.setReason(reason);
856 return builder.build();
857 }
858
859
860
861
862
863
864
865
866
867
868 public static RegionSpecifier buildRegionSpecifier(
869 final RegionSpecifierType type, final byte[] value) {
870 RegionSpecifier.Builder regionBuilder = RegionSpecifier.newBuilder();
871 regionBuilder.setValue(ByteString.copyFrom(value));
872 regionBuilder.setType(type);
873 return regionBuilder.build();
874 }
875
876
877
878
879
880
881
882
883
884
885
886
887 private static Condition buildCondition(final byte[] row,
888 final byte[] family, final byte [] qualifier,
889 final ByteArrayComparable comparator,
890 final CompareType compareType) throws IOException {
891 Condition.Builder builder = Condition.newBuilder();
892 builder.setRow(ByteString.copyFrom(row));
893 builder.setFamily(ByteString.copyFrom(family));
894 builder.setQualifier(ByteString.copyFrom(qualifier));
895 builder.setComparator(ProtobufUtil.toComparator(comparator));
896 builder.setCompareType(compareType);
897 return builder.build();
898 }
899
900
901
902
903
904
905
906
907 public static AddColumnRequest buildAddColumnRequest(
908 final TableName tableName, final HColumnDescriptor column) {
909 AddColumnRequest.Builder builder = AddColumnRequest.newBuilder();
910 builder.setTableName(ProtobufUtil.toProtoTableName(tableName));
911 builder.setColumnFamilies(column.convert());
912 return builder.build();
913 }
914
915
916
917
918
919
920
921
922 public static DeleteColumnRequest buildDeleteColumnRequest(
923 final TableName tableName, final byte [] columnName) {
924 DeleteColumnRequest.Builder builder = DeleteColumnRequest.newBuilder();
925 builder.setTableName(ProtobufUtil.toProtoTableName((tableName)));
926 builder.setColumnName(ByteString.copyFrom(columnName));
927 return builder.build();
928 }
929
930
931
932
933
934
935
936
937 public static ModifyColumnRequest buildModifyColumnRequest(
938 final TableName tableName, final HColumnDescriptor column) {
939 ModifyColumnRequest.Builder builder = ModifyColumnRequest.newBuilder();
940 builder.setTableName(ProtobufUtil.toProtoTableName((tableName)));
941 builder.setColumnFamilies(column.convert());
942 return builder.build();
943 }
944
945
946
947
948
949
950
951
952
953 public static MoveRegionRequest buildMoveRegionRequest(
954 final byte [] encodedRegionName, final byte [] destServerName) throws
955 DeserializationException {
956 MoveRegionRequest.Builder builder = MoveRegionRequest.newBuilder();
957 builder.setRegion(
958 buildRegionSpecifier(RegionSpecifierType.ENCODED_REGION_NAME,encodedRegionName));
959 if (destServerName != null) {
960 builder.setDestServerName(
961 ProtobufUtil.toServerName(new ServerName(Bytes.toString(destServerName))));
962 }
963 return builder.build();
964 }
965
966 public static DispatchMergingRegionsRequest buildDispatchMergingRegionsRequest(
967 final byte[] encodedNameOfRegionA, final byte[] encodedNameOfRegionB,
968 final boolean forcible) throws DeserializationException {
969 DispatchMergingRegionsRequest.Builder builder = DispatchMergingRegionsRequest.newBuilder();
970 builder.setRegionA(buildRegionSpecifier(
971 RegionSpecifierType.ENCODED_REGION_NAME, encodedNameOfRegionA));
972 builder.setRegionB(buildRegionSpecifier(
973 RegionSpecifierType.ENCODED_REGION_NAME, encodedNameOfRegionB));
974 builder.setForcible(forcible);
975 return builder.build();
976 }
977
978
979
980
981
982
983
984 public static AssignRegionRequest buildAssignRegionRequest(final byte [] regionName) {
985 AssignRegionRequest.Builder builder = AssignRegionRequest.newBuilder();
986 builder.setRegion(buildRegionSpecifier(RegionSpecifierType.REGION_NAME,regionName));
987 return builder.build();
988 }
989
990
991
992
993
994
995
996
997 public static UnassignRegionRequest buildUnassignRegionRequest(
998 final byte [] regionName, final boolean force) {
999 UnassignRegionRequest.Builder builder = UnassignRegionRequest.newBuilder();
1000 builder.setRegion(buildRegionSpecifier(RegionSpecifierType.REGION_NAME,regionName));
1001 builder.setForce(force);
1002 return builder.build();
1003 }
1004
1005
1006
1007
1008
1009
1010
1011 public static OfflineRegionRequest buildOfflineRegionRequest(final byte [] regionName) {
1012 OfflineRegionRequest.Builder builder = OfflineRegionRequest.newBuilder();
1013 builder.setRegion(buildRegionSpecifier(RegionSpecifierType.REGION_NAME,regionName));
1014 return builder.build();
1015 }
1016
1017
1018
1019
1020
1021
1022
1023 public static DeleteTableRequest buildDeleteTableRequest(final TableName tableName) {
1024 DeleteTableRequest.Builder builder = DeleteTableRequest.newBuilder();
1025 builder.setTableName(ProtobufUtil.toProtoTableName(tableName));
1026 return builder.build();
1027 }
1028
1029
1030
1031
1032
1033
1034
1035 public static EnableTableRequest buildEnableTableRequest(final TableName tableName) {
1036 EnableTableRequest.Builder builder = EnableTableRequest.newBuilder();
1037 builder.setTableName(ProtobufUtil.toProtoTableName(tableName));
1038 return builder.build();
1039 }
1040
1041
1042
1043
1044
1045
1046
1047 public static DisableTableRequest buildDisableTableRequest(final TableName tableName) {
1048 DisableTableRequest.Builder builder = DisableTableRequest.newBuilder();
1049 builder.setTableName(ProtobufUtil.toProtoTableName((tableName)));
1050 return builder.build();
1051 }
1052
1053
1054
1055
1056
1057
1058
1059
1060 public static CreateTableRequest buildCreateTableRequest(
1061 final HTableDescriptor hTableDesc, final byte [][] splitKeys) {
1062 CreateTableRequest.Builder builder = CreateTableRequest.newBuilder();
1063 builder.setTableSchema(hTableDesc.convert());
1064 if (splitKeys != null) {
1065 for (byte [] splitKey : splitKeys) {
1066 builder.addSplitKeys(ByteString.copyFrom(splitKey));
1067 }
1068 }
1069 return builder.build();
1070 }
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080 public static ModifyTableRequest buildModifyTableRequest(
1081 final TableName tableName, final HTableDescriptor hTableDesc) {
1082 ModifyTableRequest.Builder builder = ModifyTableRequest.newBuilder();
1083 builder.setTableName(ProtobufUtil.toProtoTableName((tableName)));
1084 builder.setTableSchema(hTableDesc.convert());
1085 return builder.build();
1086 }
1087
1088
1089
1090
1091
1092
1093
1094 public static GetSchemaAlterStatusRequest buildGetSchemaAlterStatusRequest(
1095 final TableName tableName) {
1096 GetSchemaAlterStatusRequest.Builder builder = GetSchemaAlterStatusRequest.newBuilder();
1097 builder.setTableName(ProtobufUtil.toProtoTableName((tableName)));
1098 return builder.build();
1099 }
1100
1101
1102
1103
1104
1105
1106
1107 public static GetTableDescriptorsRequest buildGetTableDescriptorsRequest(
1108 final List<TableName> tableNames) {
1109 GetTableDescriptorsRequest.Builder builder = GetTableDescriptorsRequest.newBuilder();
1110 if (tableNames != null) {
1111 for (TableName tableName : tableNames) {
1112 builder.addTableNames(ProtobufUtil.toProtoTableName(tableName));
1113 }
1114 }
1115 return builder.build();
1116 }
1117
1118
1119
1120
1121
1122
1123
1124 public static GetTableDescriptorsRequest buildGetTableDescriptorsRequest(
1125 final TableName tableName) {
1126 return GetTableDescriptorsRequest.newBuilder()
1127 .addTableNames(ProtobufUtil.toProtoTableName(tableName))
1128 .build();
1129 }
1130
1131
1132
1133
1134
1135
1136 public static IsMasterRunningRequest buildIsMasterRunningRequest() {
1137 return IsMasterRunningRequest.newBuilder().build();
1138 }
1139
1140
1141
1142
1143
1144
1145 public static BalanceRequest buildBalanceRequest() {
1146 return BalanceRequest.newBuilder().build();
1147 }
1148
1149
1150
1151
1152
1153
1154
1155
1156 public static SetBalancerRunningRequest buildSetBalancerRunningRequest(boolean on, boolean synchronous) {
1157 return SetBalancerRunningRequest.newBuilder().setOn(on).setSynchronous(synchronous).build();
1158 }
1159
1160
1161
1162
1163
1164
1165 public static GetClusterStatusRequest buildGetClusterStatusRequest() {
1166 return GetClusterStatusRequest.newBuilder().build();
1167 }
1168
1169
1170
1171
1172
1173 public static CatalogScanRequest buildCatalogScanRequest() {
1174 return CatalogScanRequest.newBuilder().build();
1175 }
1176
1177
1178
1179
1180
1181 public static EnableCatalogJanitorRequest buildEnableCatalogJanitorRequest(boolean enable) {
1182 return EnableCatalogJanitorRequest.newBuilder().setEnable(enable).build();
1183 }
1184
1185
1186
1187
1188
1189 public static IsCatalogJanitorEnabledRequest buildIsCatalogJanitorEnabledRequest() {
1190 return IsCatalogJanitorEnabledRequest.newBuilder().build();
1191 }
1192
1193
1194
1195
1196
1197
1198 public static GetLastFlushedSequenceIdRequest buildGetLastFlushedSequenceIdRequest(
1199 byte[] regionName) {
1200 return GetLastFlushedSequenceIdRequest.newBuilder().setRegionName(
1201 ByteString.copyFrom(regionName)).build();
1202 }
1203
1204
1205
1206
1207
1208
1209
1210
1211 public static AccessControlProtos.GrantRequest buildGrantRequest(
1212 String username, AccessControlProtos.Permission.Action... actions) {
1213 AccessControlProtos.Permission.Builder ret =
1214 AccessControlProtos.Permission.newBuilder();
1215 AccessControlProtos.GlobalPermission.Builder permissionBuilder =
1216 AccessControlProtos.GlobalPermission.newBuilder();
1217 for (AccessControlProtos.Permission.Action a : actions) {
1218 permissionBuilder.addAction(a);
1219 }
1220 ret.setType(AccessControlProtos.Permission.Type.Global)
1221 .setGlobalPermission(permissionBuilder);
1222 return AccessControlProtos.GrantRequest.newBuilder()
1223 .setUserPermission(
1224 AccessControlProtos.UserPermission.newBuilder()
1225 .setUser(ByteString.copyFromUtf8(username))
1226 .setPermission(ret)
1227 ).build();
1228 }
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240 public static AccessControlProtos.GrantRequest buildGrantRequest(
1241 String username, TableName tableName, byte[] family, byte[] qualifier,
1242 AccessControlProtos.Permission.Action... actions) {
1243 AccessControlProtos.Permission.Builder ret =
1244 AccessControlProtos.Permission.newBuilder();
1245 AccessControlProtos.TablePermission.Builder permissionBuilder =
1246 AccessControlProtos.TablePermission.newBuilder();
1247 for (AccessControlProtos.Permission.Action a : actions) {
1248 permissionBuilder.addAction(a);
1249 }
1250 if (tableName == null) {
1251 throw new NullPointerException("TableName cannot be null");
1252 }
1253 permissionBuilder.setTableName(ProtobufUtil.toProtoTableName(tableName));
1254
1255 if (family != null) {
1256 permissionBuilder.setFamily(ByteString.copyFrom(family));
1257 }
1258 if (qualifier != null) {
1259 permissionBuilder.setQualifier(ByteString.copyFrom(qualifier));
1260 }
1261 ret.setType(AccessControlProtos.Permission.Type.Table)
1262 .setTablePermission(permissionBuilder);
1263 return AccessControlProtos.GrantRequest.newBuilder()
1264 .setUserPermission(
1265 AccessControlProtos.UserPermission.newBuilder()
1266 .setUser(ByteString.copyFromUtf8(username))
1267 .setPermission(ret)
1268 ).build();
1269 }
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279 public static AccessControlProtos.GrantRequest buildGrantRequest(
1280 String username, String namespace,
1281 AccessControlProtos.Permission.Action... actions) {
1282 AccessControlProtos.Permission.Builder ret =
1283 AccessControlProtos.Permission.newBuilder();
1284 AccessControlProtos.NamespacePermission.Builder permissionBuilder =
1285 AccessControlProtos.NamespacePermission.newBuilder();
1286 for (AccessControlProtos.Permission.Action a : actions) {
1287 permissionBuilder.addAction(a);
1288 }
1289 if (namespace != null) {
1290 permissionBuilder.setNamespaceName(ByteString.copyFromUtf8(namespace));
1291 }
1292 ret.setType(AccessControlProtos.Permission.Type.Namespace)
1293 .setNamespacePermission(permissionBuilder);
1294 return AccessControlProtos.GrantRequest.newBuilder()
1295 .setUserPermission(
1296 AccessControlProtos.UserPermission.newBuilder()
1297 .setUser(ByteString.copyFromUtf8(username))
1298 .setPermission(ret)
1299 ).build();
1300 }
1301
1302
1303
1304
1305
1306
1307
1308
1309 public static AccessControlProtos.RevokeRequest buildRevokeRequest(
1310 String username, AccessControlProtos.Permission.Action... actions) {
1311 AccessControlProtos.Permission.Builder ret =
1312 AccessControlProtos.Permission.newBuilder();
1313 AccessControlProtos.GlobalPermission.Builder permissionBuilder =
1314 AccessControlProtos.GlobalPermission.newBuilder();
1315 for (AccessControlProtos.Permission.Action a : actions) {
1316 permissionBuilder.addAction(a);
1317 }
1318 ret.setType(AccessControlProtos.Permission.Type.Global)
1319 .setGlobalPermission(permissionBuilder);
1320 return AccessControlProtos.RevokeRequest.newBuilder()
1321 .setUserPermission(
1322 AccessControlProtos.UserPermission.newBuilder()
1323 .setUser(ByteString.copyFromUtf8(username))
1324 .setPermission(ret)
1325 ).build();
1326 }
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338 public static AccessControlProtos.RevokeRequest buildRevokeRequest(
1339 String username, TableName tableName, byte[] family, byte[] qualifier,
1340 AccessControlProtos.Permission.Action... actions) {
1341 AccessControlProtos.Permission.Builder ret =
1342 AccessControlProtos.Permission.newBuilder();
1343 AccessControlProtos.TablePermission.Builder permissionBuilder =
1344 AccessControlProtos.TablePermission.newBuilder();
1345 for (AccessControlProtos.Permission.Action a : actions) {
1346 permissionBuilder.addAction(a);
1347 }
1348 if (tableName != null) {
1349 permissionBuilder.setTableName(ProtobufUtil.toProtoTableName(tableName));
1350 }
1351 if (family != null) {
1352 permissionBuilder.setFamily(ByteString.copyFrom(family));
1353 }
1354 if (qualifier != null) {
1355 permissionBuilder.setQualifier(ByteString.copyFrom(qualifier));
1356 }
1357 ret.setType(AccessControlProtos.Permission.Type.Table)
1358 .setTablePermission(permissionBuilder);
1359 return AccessControlProtos.RevokeRequest.newBuilder()
1360 .setUserPermission(
1361 AccessControlProtos.UserPermission.newBuilder()
1362 .setUser(ByteString.copyFromUtf8(username))
1363 .setPermission(ret)
1364 ).build();
1365 }
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375 public static AccessControlProtos.RevokeRequest buildRevokeRequest(
1376 String username, String namespace,
1377 AccessControlProtos.Permission.Action... actions) {
1378 AccessControlProtos.Permission.Builder ret =
1379 AccessControlProtos.Permission.newBuilder();
1380 AccessControlProtos.NamespacePermission.Builder permissionBuilder =
1381 AccessControlProtos.NamespacePermission.newBuilder();
1382 for (AccessControlProtos.Permission.Action a : actions) {
1383 permissionBuilder.addAction(a);
1384 }
1385 if (namespace != null) {
1386 permissionBuilder.setNamespaceName(ByteString.copyFromUtf8(namespace));
1387 }
1388 ret.setType(AccessControlProtos.Permission.Type.Namespace)
1389 .setNamespacePermission(permissionBuilder);
1390 return AccessControlProtos.RevokeRequest.newBuilder()
1391 .setUserPermission(
1392 AccessControlProtos.UserPermission.newBuilder()
1393 .setUser(ByteString.copyFromUtf8(username))
1394 .setPermission(ret)
1395 ).build();
1396 }
1397
1398
1399
1400
1401 private static RegionOpenInfo buildRegionOpenInfo(
1402 final HRegionInfo region, final int versionOfOfflineNode,
1403 final List<ServerName> favoredNodes) {
1404 RegionOpenInfo.Builder builder = RegionOpenInfo.newBuilder();
1405 builder.setRegion(HRegionInfo.convert(region));
1406 if (versionOfOfflineNode >= 0) {
1407 builder.setVersionOfOfflineNode(versionOfOfflineNode);
1408 }
1409 if (favoredNodes != null) {
1410 for (ServerName server : favoredNodes) {
1411 builder.addFavoredNodes(ProtobufUtil.toServerName(server));
1412 }
1413 }
1414 return builder.build();
1415 }
1416 }