diff --git a/hbase-checkstyle/src/main/resources/hbase/checkstyle-suppressions.xml b/hbase-checkstyle/src/main/resources/hbase/checkstyle-suppressions.xml
index 5546e03aa3a..77eefc2b445 100644
--- a/hbase-checkstyle/src/main/resources/hbase/checkstyle-suppressions.xml
+++ b/hbase-checkstyle/src/main/resources/hbase/checkstyle-suppressions.xml
@@ -42,4 +42,5 @@
+
diff --git a/hbase-examples/src/main/java/org/apache/hadoop/hbase/thrift/DemoClient.java b/hbase-examples/src/main/java/org/apache/hadoop/hbase/thrift/DemoClient.java
index 07486bfaf0c..cb3e930b6a0 100644
--- a/hbase-examples/src/main/java/org/apache/hadoop/hbase/thrift/DemoClient.java
+++ b/hbase-examples/src/main/java/org/apache/hadoop/hbase/thrift/DemoClient.java
@@ -55,60 +55,60 @@ import org.apache.yetus.audience.InterfaceAudience;
@InterfaceAudience.Private
public class DemoClient {
- static protected int port;
- static protected String host;
- CharsetDecoder decoder = null;
+ static protected int port;
+ static protected String host;
+ CharsetDecoder decoder = null;
- private static boolean secure = false;
- private static String serverPrincipal = "hbase";
+ private static boolean secure = false;
+ private static String serverPrincipal = "hbase";
- public static void main(String[] args) throws Exception {
+ public static void main(String[] args) throws Exception {
+ if (args.length < 2 || args.length > 4 || (args.length > 2 && !isBoolean(args[2]))) {
+ System.out.println("Invalid arguments!");
+ System.out.println("Usage: DemoClient host port [secure=false [server-principal=hbase] ]");
- if (args.length < 2 || args.length > 4 || (args.length > 2 && !isBoolean(args[2]))) {
-
- System.out.println("Invalid arguments!");
- System.out.println("Usage: DemoClient host port [secure=false [server-principal=hbase] ]");
-
- System.exit(-1);
- }
-
- port = Integer.parseInt(args[1]);
- host = args[0];
- if (args.length > 2) {
- secure = Boolean.parseBoolean(args[2]);
- }
-
- if (args.length == 4) {
- serverPrincipal = args[3];
- }
-
- final DemoClient client = new DemoClient();
- Subject.doAs(getSubject(),
- new PrivilegedExceptionAction() {
- @Override
- public Void run() throws Exception {
- client.run();
- return null;
- }
- });
+ System.exit(-1);
}
- private static boolean isBoolean(String s){
- return Boolean.TRUE.toString().equalsIgnoreCase(s) || Boolean.FALSE.toString().equalsIgnoreCase(s);
+ port = Integer.parseInt(args[1]);
+ host = args[0];
+
+ if (args.length > 2) {
+ secure = Boolean.parseBoolean(args[2]);
}
- DemoClient() {
- decoder = Charset.forName("UTF-8").newDecoder();
+ if (args.length == 4) {
+ serverPrincipal = args[3];
}
- // Helper to translate byte[]'s to UTF8 strings
- private String utf8(byte[] buf) {
- try {
- return decoder.decode(ByteBuffer.wrap(buf)).toString();
- } catch (CharacterCodingException e) {
- return "[INVALID UTF-8]";
+ final DemoClient client = new DemoClient();
+ Subject.doAs(getSubject(),
+ new PrivilegedExceptionAction() {
+ @Override
+ public Void run() throws Exception {
+ client.run();
+ return null;
}
+ });
+ }
+
+ private static boolean isBoolean(String s){
+ return Boolean.TRUE.toString().equalsIgnoreCase(s) ||
+ Boolean.FALSE.toString().equalsIgnoreCase(s);
+ }
+
+ DemoClient() {
+ decoder = Charset.forName("UTF-8").newDecoder();
+ }
+
+ // Helper to translate byte[]'s to UTF8 strings
+ private String utf8(byte[] buf) {
+ try {
+ return decoder.decode(ByteBuffer.wrap(buf)).toString();
+ } catch (CharacterCodingException e) {
+ return "[INVALID UTF-8]";
}
+ }
// Helper to translate strings to UTF8 bytes
private byte[] bytes(String s) {
@@ -120,271 +120,289 @@ public class DemoClient {
}
}
- private void run() throws Exception {
- TTransport transport = new TSocket(host, port);
- if (secure) {
- Map saslProperties = new HashMap<>();
- saslProperties.put(Sasl.QOP, "auth-conf,auth-int,auth");
- /**
- * The Thrift server the DemoClient is trying to connect to
- * must have a matching principal, and support authentication.
- *
- * The HBase cluster must be secure, allow proxy user.
- */
- transport = new TSaslClientTransport("GSSAPI", null,
- serverPrincipal, // Thrift server user name, should be an authorized proxy user.
- host, // Thrift server domain
- saslProperties, null, transport);
+ private void run() throws Exception {
+ TTransport transport = new TSocket(host, port);
+ if (secure) {
+ Map saslProperties = new HashMap<>();
+ saslProperties.put(Sasl.QOP, "auth-conf,auth-int,auth");
+ /*
+ * The Thrift server the DemoClient is trying to connect to
+ * must have a matching principal, and support authentication.
+ *
+ * The HBase cluster must be secure, allow proxy user.
+ */
+ transport = new TSaslClientTransport("GSSAPI", null,
+ serverPrincipal, // Thrift server user name, should be an authorized proxy user.
+ host, // Thrift server domain
+ saslProperties, null, transport);
+ }
+
+ transport.open();
+
+ TProtocol protocol = new TBinaryProtocol(transport, true, true);
+ Hbase.Client client = new Hbase.Client(protocol);
+
+ byte[] t = bytes("demo_table");
+
+ // Scan all tables, look for the demo table and delete it.
+ System.out.println("scanning tables...");
+
+ for (ByteBuffer name : client.getTableNames()) {
+ System.out.println(" found: " + utf8(name.array()));
+
+ if (utf8(name.array()).equals(utf8(t))) {
+ if (client.isTableEnabled(name)) {
+ System.out.println(" disabling table: " + utf8(name.array()));
+ client.disableTable(name);
}
- transport.open();
+ System.out.println(" deleting table: " + utf8(name.array()));
+ client.deleteTable(name);
+ }
+ }
- TProtocol protocol = new TBinaryProtocol(transport, true, true);
- Hbase.Client client = new Hbase.Client(protocol);
+ // Create the demo table with two column families, entry: and unused:
+ ArrayList columns = new ArrayList<>(2);
+ ColumnDescriptor col;
+ col = new ColumnDescriptor();
+ col.name = ByteBuffer.wrap(bytes("entry:"));
+ col.timeToLive = Integer.MAX_VALUE;
+ col.maxVersions = 10;
+ columns.add(col);
+ col = new ColumnDescriptor();
+ col.name = ByteBuffer.wrap(bytes("unused:"));
+ col.timeToLive = Integer.MAX_VALUE;
+ columns.add(col);
- byte[] t = bytes("demo_table");
+ System.out.println("creating table: " + utf8(t));
- //
- // Scan all tables, look for the demo table and delete it.
- //
- System.out.println("scanning tables...");
- for (ByteBuffer name : client.getTableNames()) {
- System.out.println(" found: " + utf8(name.array()));
- if (utf8(name.array()).equals(utf8(t))) {
- if (client.isTableEnabled(name)) {
- System.out.println(" disabling table: " + utf8(name.array()));
- client.disableTable(name);
- }
- System.out.println(" deleting table: " + utf8(name.array()));
- client.deleteTable(name);
- }
- }
+ try {
+ client.createTable(ByteBuffer.wrap(t), columns);
+ } catch (AlreadyExists ae) {
+ System.out.println("WARN: " + ae.message);
+ }
- //
- // Create the demo table with two column families, entry: and unused:
- //
- ArrayList columns = new ArrayList<>(2);
- ColumnDescriptor col;
- col = new ColumnDescriptor();
- col.name = ByteBuffer.wrap(bytes("entry:"));
- col.timeToLive = Integer.MAX_VALUE;
- col.maxVersions = 10;
- columns.add(col);
- col = new ColumnDescriptor();
- col.name = ByteBuffer.wrap(bytes("unused:"));
- col.timeToLive = Integer.MAX_VALUE;
- columns.add(col);
+ System.out.println("column families in " + utf8(t) + ": ");
+ Map columnMap = client.getColumnDescriptors(ByteBuffer.wrap(t));
- System.out.println("creating table: " + utf8(t));
- try {
- client.createTable(ByteBuffer.wrap(t), columns);
- } catch (AlreadyExists ae) {
- System.out.println("WARN: " + ae.message);
- }
+ for (ColumnDescriptor col2 : columnMap.values()) {
+ System.out.println(" column: " + utf8(col2.name.array()) + ", maxVer: " + col2.maxVersions);
+ }
- System.out.println("column families in " + utf8(t) + ": ");
- Map columnMap = client.getColumnDescriptors(ByteBuffer.wrap(t));
- for (ColumnDescriptor col2 : columnMap.values()) {
- System.out.println(" column: " + utf8(col2.name.array()) + ", maxVer: " + Integer.toString(col2.maxVersions));
- }
+ Map dummyAttributes = null;
+ boolean writeToWal = false;
- Map dummyAttributes = null;
- boolean writeToWal = false;
-
- //
- // Test UTF-8 handling
- //
- byte[] invalid = {(byte) 'f', (byte) 'o', (byte) 'o', (byte) '-',
+ // Test UTF-8 handling
+ byte[] invalid = {(byte) 'f', (byte) 'o', (byte) 'o', (byte) '-',
(byte) 0xfc, (byte) 0xa1, (byte) 0xa1, (byte) 0xa1, (byte) 0xa1};
- byte[] valid = {(byte) 'f', (byte) 'o', (byte) 'o', (byte) '-',
+ byte[] valid = {(byte) 'f', (byte) 'o', (byte) 'o', (byte) '-',
(byte) 0xE7, (byte) 0x94, (byte) 0x9F, (byte) 0xE3, (byte) 0x83,
(byte) 0x93, (byte) 0xE3, (byte) 0x83, (byte) 0xBC, (byte) 0xE3,
(byte) 0x83, (byte) 0xAB};
- ArrayList mutations;
- // non-utf8 is fine for data
- mutations = new ArrayList<>(1);
- mutations.add(new Mutation(false, ByteBuffer.wrap(bytes("entry:foo")),
+ ArrayList mutations;
+ // non-utf8 is fine for data
+ mutations = new ArrayList<>(1);
+ mutations.add(new Mutation(false, ByteBuffer.wrap(bytes("entry:foo")),
ByteBuffer.wrap(invalid), writeToWal));
- client.mutateRow(ByteBuffer.wrap(t), ByteBuffer.wrap(bytes("foo")),
+ client.mutateRow(ByteBuffer.wrap(t), ByteBuffer.wrap(bytes("foo")),
mutations, dummyAttributes);
+ // this row name is valid utf8
+ mutations = new ArrayList<>(1);
+ mutations.add(new Mutation(false, ByteBuffer.wrap(bytes("entry:foo")),
+ ByteBuffer.wrap(valid), writeToWal));
+ client.mutateRow(ByteBuffer.wrap(t), ByteBuffer.wrap(valid), mutations, dummyAttributes);
- // this row name is valid utf8
- mutations = new ArrayList<>(1);
- mutations.add(new Mutation(false, ByteBuffer.wrap(bytes("entry:foo")), ByteBuffer.wrap(valid), writeToWal));
- client.mutateRow(ByteBuffer.wrap(t), ByteBuffer.wrap(valid), mutations, dummyAttributes);
+ // non-utf8 is now allowed in row names because HBase stores values as binary
+ mutations = new ArrayList<>(1);
+ mutations.add(new Mutation(false, ByteBuffer.wrap(bytes("entry:foo")),
+ ByteBuffer.wrap(invalid), writeToWal));
+ client.mutateRow(ByteBuffer.wrap(t), ByteBuffer.wrap(invalid), mutations, dummyAttributes);
- // non-utf8 is now allowed in row names because HBase stores values as binary
+ // Run a scanner on the rows we just created
+ ArrayList columnNames = new ArrayList<>();
+ columnNames.add(ByteBuffer.wrap(bytes("entry:")));
- mutations = new ArrayList<>(1);
- mutations.add(new Mutation(false, ByteBuffer.wrap(bytes("entry:foo")), ByteBuffer.wrap(invalid), writeToWal));
- client.mutateRow(ByteBuffer.wrap(t), ByteBuffer.wrap(invalid), mutations, dummyAttributes);
+ System.out.println("Starting scanner...");
+ int scanner = client.scannerOpen(ByteBuffer.wrap(t), ByteBuffer.wrap(bytes("")), columnNames,
+ dummyAttributes);
+ while (true) {
+ List entry = client.scannerGet(scanner);
- // Run a scanner on the rows we just created
- ArrayList columnNames = new ArrayList<>();
- columnNames.add(ByteBuffer.wrap(bytes("entry:")));
+ if (entry.isEmpty()) {
+ break;
+ }
- System.out.println("Starting scanner...");
- int scanner = client.scannerOpen(ByteBuffer.wrap(t), ByteBuffer.wrap(bytes("")), columnNames, dummyAttributes);
-
- while (true) {
- List entry = client.scannerGet(scanner);
- if (entry.isEmpty()) {
- break;
- }
- printRow(entry);
- }
-
- //
- // Run some operations on a bunch of rows
- //
- for (int i = 100; i >= 0; --i) {
- // format row keys as "00000" to "00100"
- NumberFormat nf = NumberFormat.getInstance();
- nf.setMinimumIntegerDigits(5);
- nf.setGroupingUsed(false);
- byte[] row = bytes(nf.format(i));
-
- mutations = new ArrayList<>(1);
- mutations.add(new Mutation(false, ByteBuffer.wrap(bytes("unused:")), ByteBuffer.wrap(bytes("DELETE_ME")), writeToWal));
- client.mutateRow(ByteBuffer.wrap(t), ByteBuffer.wrap(row), mutations, dummyAttributes);
- printRow(client.getRow(ByteBuffer.wrap(t), ByteBuffer.wrap(row), dummyAttributes));
- client.deleteAllRow(ByteBuffer.wrap(t), ByteBuffer.wrap(row), dummyAttributes);
-
- // sleep to force later timestamp
- try {
- Thread.sleep(50);
- } catch (InterruptedException e) {
- // no-op
- }
-
- mutations = new ArrayList<>(2);
- mutations.add(new Mutation(false, ByteBuffer.wrap(bytes("entry:num")), ByteBuffer.wrap(bytes("0")), writeToWal));
- mutations.add(new Mutation(false, ByteBuffer.wrap(bytes("entry:foo")), ByteBuffer.wrap(bytes("FOO")), writeToWal));
- client.mutateRow(ByteBuffer.wrap(t), ByteBuffer.wrap(row), mutations, dummyAttributes);
- printRow(client.getRow(ByteBuffer.wrap(t), ByteBuffer.wrap(row), dummyAttributes));
-
- Mutation m;
- mutations = new ArrayList<>(2);
- m = new Mutation();
- m.column = ByteBuffer.wrap(bytes("entry:foo"));
- m.isDelete = true;
- mutations.add(m);
- m = new Mutation();
- m.column = ByteBuffer.wrap(bytes("entry:num"));
- m.value = ByteBuffer.wrap(bytes("-1"));
- mutations.add(m);
- client.mutateRow(ByteBuffer.wrap(t), ByteBuffer.wrap(row), mutations, dummyAttributes);
- printRow(client.getRow(ByteBuffer.wrap(t), ByteBuffer.wrap(row), dummyAttributes));
-
- mutations = new ArrayList<>();
- mutations.add(new Mutation(false, ByteBuffer.wrap(bytes("entry:num")), ByteBuffer.wrap(bytes(Integer.toString(i))), writeToWal));
- mutations.add(new Mutation(false, ByteBuffer.wrap(bytes("entry:sqr")), ByteBuffer.wrap(bytes(Integer.toString(i * i))), writeToWal));
- client.mutateRow(ByteBuffer.wrap(t), ByteBuffer.wrap(row), mutations, dummyAttributes);
- printRow(client.getRow(ByteBuffer.wrap(t), ByteBuffer.wrap(row), dummyAttributes));
-
- // sleep to force later timestamp
- try {
- Thread.sleep(50);
- } catch (InterruptedException e) {
- // no-op
- }
-
- mutations.clear();
- m = new Mutation();
- m.column = ByteBuffer.wrap(bytes("entry:num"));
- m.value= ByteBuffer.wrap(bytes("-999"));
- mutations.add(m);
- m = new Mutation();
- m.column = ByteBuffer.wrap(bytes("entry:sqr"));
- m.isDelete = true;
- client.mutateRowTs(ByteBuffer.wrap(t), ByteBuffer.wrap(row), mutations, 1, dummyAttributes); // shouldn't override latest
- printRow(client.getRow(ByteBuffer.wrap(t), ByteBuffer.wrap(row), dummyAttributes));
-
- List versions = client.getVer(ByteBuffer.wrap(t), ByteBuffer.wrap(row), ByteBuffer.wrap(bytes("entry:num")), 10, dummyAttributes);
- printVersions(ByteBuffer.wrap(row), versions);
- if (versions.isEmpty()) {
- System.out.println("FATAL: wrong # of versions");
- System.exit(-1);
- }
-
- List result = client.get(ByteBuffer.wrap(t), ByteBuffer.wrap(row), ByteBuffer.wrap(bytes("entry:foo")), dummyAttributes);
- if (!result.isEmpty()) {
- System.out.println("FATAL: shouldn't get here");
- System.exit(-1);
- }
-
- System.out.println("");
- }
-
- // scan all rows/columnNames
-
- columnNames.clear();
- for (ColumnDescriptor col2 : client.getColumnDescriptors(ByteBuffer.wrap(t)).values()) {
- System.out.println("column with name: " + new String(col2.name.array()));
- System.out.println(col2.toString());
-
- columnNames.add(col2.name);
- }
-
- System.out.println("Starting scanner...");
- scanner = client.scannerOpenWithStop(ByteBuffer.wrap(t), ByteBuffer.wrap(bytes("00020")), ByteBuffer.wrap(bytes("00040")), columnNames, dummyAttributes);
-
- while (true) {
- List entry = client.scannerGet(scanner);
- if (entry.isEmpty()) {
- System.out.println("Scanner finished");
- break;
- }
- printRow(entry);
- }
-
- transport.close();
+ printRow(entry);
}
- private void printVersions(ByteBuffer row, List versions) {
- StringBuilder rowStr = new StringBuilder();
- for (TCell cell : versions) {
- rowStr.append(utf8(cell.value.array()));
- rowStr.append("; ");
- }
- System.out.println("row: " + utf8(row.array()) + ", values: " + rowStr);
+ // Run some operations on a bunch of rows
+ for (int i = 100; i >= 0; --i) {
+ // format row keys as "00000" to "00100"
+ NumberFormat nf = NumberFormat.getInstance();
+ nf.setMinimumIntegerDigits(5);
+ nf.setGroupingUsed(false);
+ byte[] row = bytes(nf.format(i));
+
+ mutations = new ArrayList<>(1);
+ mutations.add(new Mutation(false, ByteBuffer.wrap(bytes("unused:")),
+ ByteBuffer.wrap(bytes("DELETE_ME")), writeToWal));
+ client.mutateRow(ByteBuffer.wrap(t), ByteBuffer.wrap(row), mutations, dummyAttributes);
+ printRow(client.getRow(ByteBuffer.wrap(t), ByteBuffer.wrap(row), dummyAttributes));
+ client.deleteAllRow(ByteBuffer.wrap(t), ByteBuffer.wrap(row), dummyAttributes);
+
+ // sleep to force later timestamp
+ try {
+ Thread.sleep(50);
+ } catch (InterruptedException e) {
+ // no-op
+ }
+
+ mutations = new ArrayList<>(2);
+ mutations.add(new Mutation(false, ByteBuffer.wrap(bytes("entry:num")),
+ ByteBuffer.wrap(bytes("0")), writeToWal));
+ mutations.add(new Mutation(false, ByteBuffer.wrap(bytes("entry:foo")),
+ ByteBuffer.wrap(bytes("FOO")), writeToWal));
+ client.mutateRow(ByteBuffer.wrap(t), ByteBuffer.wrap(row), mutations, dummyAttributes);
+ printRow(client.getRow(ByteBuffer.wrap(t), ByteBuffer.wrap(row), dummyAttributes));
+
+ Mutation m;
+ mutations = new ArrayList<>(2);
+ m = new Mutation();
+ m.column = ByteBuffer.wrap(bytes("entry:foo"));
+ m.isDelete = true;
+ mutations.add(m);
+ m = new Mutation();
+ m.column = ByteBuffer.wrap(bytes("entry:num"));
+ m.value = ByteBuffer.wrap(bytes("-1"));
+ mutations.add(m);
+ client.mutateRow(ByteBuffer.wrap(t), ByteBuffer.wrap(row), mutations, dummyAttributes);
+ printRow(client.getRow(ByteBuffer.wrap(t), ByteBuffer.wrap(row), dummyAttributes));
+
+ mutations = new ArrayList<>();
+ mutations.add(new Mutation(false, ByteBuffer.wrap(bytes("entry:num")),
+ ByteBuffer.wrap(bytes(Integer.toString(i))), writeToWal));
+ mutations.add(new Mutation(false, ByteBuffer.wrap(bytes("entry:sqr")),
+ ByteBuffer.wrap(bytes(Integer.toString(i * i))), writeToWal));
+ client.mutateRow(ByteBuffer.wrap(t), ByteBuffer.wrap(row), mutations, dummyAttributes);
+ printRow(client.getRow(ByteBuffer.wrap(t), ByteBuffer.wrap(row), dummyAttributes));
+
+ // sleep to force later timestamp
+ try {
+ Thread.sleep(50);
+ } catch (InterruptedException e) {
+ // no-op
+ }
+
+ mutations.clear();
+ m = new Mutation();
+ m.column = ByteBuffer.wrap(bytes("entry:num"));
+ m.value= ByteBuffer.wrap(bytes("-999"));
+ mutations.add(m);
+ m = new Mutation();
+ m.column = ByteBuffer.wrap(bytes("entry:sqr"));
+ m.isDelete = true;
+ client.mutateRowTs(ByteBuffer.wrap(t), ByteBuffer.wrap(row), mutations, 1,
+ dummyAttributes); // shouldn't override latest
+ printRow(client.getRow(ByteBuffer.wrap(t), ByteBuffer.wrap(row), dummyAttributes));
+
+ List versions = client.getVer(ByteBuffer.wrap(t), ByteBuffer.wrap(row),
+ ByteBuffer.wrap(bytes("entry:num")), 10, dummyAttributes);
+ printVersions(ByteBuffer.wrap(row), versions);
+
+ if (versions.isEmpty()) {
+ System.out.println("FATAL: wrong # of versions");
+ System.exit(-1);
+ }
+
+ List result = client.get(ByteBuffer.wrap(t), ByteBuffer.wrap(row),
+ ByteBuffer.wrap(bytes("entry:foo")), dummyAttributes);
+
+ if (!result.isEmpty()) {
+ System.out.println("FATAL: shouldn't get here");
+ System.exit(-1);
+ }
+
+ System.out.println("");
}
- private void printRow(TRowResult rowResult) {
- // copy values into a TreeMap to get them in sorted order
+ // scan all rows/columnNames
+ columnNames.clear();
- TreeMap sorted = new TreeMap<>();
- for (Map.Entry column : rowResult.columns.entrySet()) {
- sorted.put(utf8(column.getKey().array()), column.getValue());
- }
+ for (ColumnDescriptor col2 : client.getColumnDescriptors(ByteBuffer.wrap(t)).values()) {
+ System.out.println("column with name: " + new String(col2.name.array()));
+ System.out.println(col2.toString());
- StringBuilder rowStr = new StringBuilder();
- for (SortedMap.Entry entry : sorted.entrySet()) {
- rowStr.append(entry.getKey());
- rowStr.append(" => ");
- rowStr.append(utf8(entry.getValue().value.array()));
- rowStr.append("; ");
- }
- System.out.println("row: " + utf8(rowResult.row.array()) + ", cols: " + rowStr);
+ columnNames.add(col2.name);
}
- private void printRow(List rows) {
- for (TRowResult rowResult : rows) {
- printRow(rowResult);
- }
+ System.out.println("Starting scanner...");
+ scanner = client.scannerOpenWithStop(ByteBuffer.wrap(t), ByteBuffer.wrap(bytes("00020")),
+ ByteBuffer.wrap(bytes("00040")), columnNames, dummyAttributes);
+
+ while (true) {
+ List entry = client.scannerGet(scanner);
+
+ if (entry.isEmpty()) {
+ System.out.println("Scanner finished");
+ break;
+ }
+
+ printRow(entry);
}
- static Subject getSubject() throws Exception {
- if (!secure) return new Subject();
+ transport.close();
+ }
- /*
- * To authenticate the DemoClient, kinit should be invoked ahead.
- * Here we try to get the Kerberos credential from the ticket cache.
- */
- LoginContext context = new LoginContext("", new Subject(), null,
+ private void printVersions(ByteBuffer row, List versions) {
+ StringBuilder rowStr = new StringBuilder();
+
+ for (TCell cell : versions) {
+ rowStr.append(utf8(cell.value.array()));
+ rowStr.append("; ");
+ }
+
+ System.out.println("row: " + utf8(row.array()) + ", values: " + rowStr);
+ }
+
+ private void printRow(TRowResult rowResult) {
+ // copy values into a TreeMap to get them in sorted order
+ TreeMap sorted = new TreeMap<>();
+
+ for (Map.Entry column : rowResult.columns.entrySet()) {
+ sorted.put(utf8(column.getKey().array()), column.getValue());
+ }
+
+ StringBuilder rowStr = new StringBuilder();
+
+ for (SortedMap.Entry entry : sorted.entrySet()) {
+ rowStr.append(entry.getKey());
+ rowStr.append(" => ");
+ rowStr.append(utf8(entry.getValue().value.array()));
+ rowStr.append("; ");
+ }
+
+ System.out.println("row: " + utf8(rowResult.row.array()) + ", cols: " + rowStr);
+ }
+
+ private void printRow(List rows) {
+ for (TRowResult rowResult : rows) {
+ printRow(rowResult);
+ }
+ }
+
+ static Subject getSubject() throws Exception {
+ if (!secure) {
+ return new Subject();
+ }
+
+ /*
+ * To authenticate the DemoClient, kinit should be invoked ahead.
+ * Here we try to get the Kerberos credential from the ticket cache.
+ */
+ LoginContext context = new LoginContext("", new Subject(), null,
new Configuration() {
@Override
public AppConfigurationEntry[] getAppConfigurationEntry(String name) {
@@ -397,9 +415,11 @@ public class DemoClient {
options.put("refreshKrb5Config", "true");
options.put("isInitiator", "true");
String ticketCache = System.getenv("KRB5CCNAME");
+
if (ticketCache != null) {
options.put("ticketCache", ticketCache);
}
+
options.put("debug", "true");
return new AppConfigurationEntry[]{
@@ -408,7 +428,8 @@ public class DemoClient {
options)};
}
});
- context.login();
- return context.getSubject();
- }
+
+ context.login();
+ return context.getSubject();
+ }
}