You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2008/08/30 01:58:10 UTC
svn commit: r690429 - in /hadoop/hbase/trunk: CHANGES.txt
src/examples/thrift/DemoClient.py
Author: stack
Date: Fri Aug 29 16:58:10 2008
New Revision: 690429
URL: http://svn.apache.org/viewvc?rev=690429&view=rev
Log:
HBASE-836 Update thrift examples to work with changed IDL (HBASE-697)
Modified:
hadoop/hbase/trunk/CHANGES.txt
hadoop/hbase/trunk/src/examples/thrift/DemoClient.py
Modified: hadoop/hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/CHANGES.txt?rev=690429&r1=690428&r2=690429&view=diff
==============================================================================
--- hadoop/hbase/trunk/CHANGES.txt (original)
+++ hadoop/hbase/trunk/CHANGES.txt Fri Aug 29 16:58:10 2008
@@ -45,6 +45,8 @@
HBASE-826 Delete table followed by recreation results in honked table
HBASE-834 'Major' compactions and upper bound on files we compact at any
one time (Billy Pearson via Stack)
+ HBASE-836 Update thrift examples to work with changed IDL (HBASE-697)
+ (Toby White via Stack)
IMPROVEMENTS
HBASE-801 When a table haven't disable, shell could response in a "user
Modified: hadoop/hbase/trunk/src/examples/thrift/DemoClient.py
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/examples/thrift/DemoClient.py?rev=690429&r1=690428&r2=690429&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/examples/thrift/DemoClient.py (original)
+++ hadoop/hbase/trunk/src/examples/thrift/DemoClient.py Fri Aug 29 16:58:10 2008
@@ -19,23 +19,30 @@
'''
# Instructions:
# 1. Run Thrift to generate python module HBase
-# thrift -py ../../../src/java/org/apache/hadoop/hbase/thrift/Hbase.thrift
-# 2. Rename gen-py folder to gen_py or just copy gen-py/HBase module into your project tree and change import string
+# thrift --gen py ../../../src/java/org/apache/hadoop/hbase/thrift/Hbase.thrift
+# 2. Copy gen-py/HBase module into your project tree and change import string
# Contributed by: Ivan Begtin (ibegtin@gmail.com, ibegtin@enotpoiskun.ru)
+import sys
+import time
from thrift import Thrift
from thrift.transport import TSocket, TTransport
from thrift.protocol import TBinaryProtocol
-from gen_py.Hbase import *
+from Hbase import ttypes
+from Hbase.Hbase import Client, ColumnDescriptor, Mutation
-def printRow(row, values):
- print "row: %s, cols: " %(row)
- for key in values.keys():
- print '\t%s => %s' %(key, values[key])
-
-def printEntry(entry):
- printRow(entry.row, entry.columns)
+def printVersions(row, versions):
+ print "row: " + row + ", values: ",
+ for cell in versions:
+ print cell.value + "; ",
+ print
+
+def printRow(entry):
+ print "row: " + entry.row + ", cols",
+ for k in sorted(entry.columns):
+ print k + " => " + entry.columns[k].value,
+ print
# Make socket
@@ -48,7 +55,7 @@
protocol = TBinaryProtocol.TBinaryProtocol(transport)
# Create a client to use the protocol encoder
-client = Hbase.Client(protocol)
+client = Client(protocol)
# Connect!
transport.open()
@@ -62,19 +69,25 @@
for table in client.getTableNames():
print " found: %s" %(table)
if table == t:
+ print " disabling table: %s" %(t)
+ if client.isTableEnabled(table):
+ client.disableTable(table)
print " deleting table: %s" %(t)
client.deleteTable(table)
columns = []
-col = Hbase.ColumnDescriptor()
+col = ColumnDescriptor()
col.name = 'entry:'
col.maxVersions = 10
columns.append(col)
-col = Hbase.ColumnDescriptor()
+col = ColumnDescriptor()
col.name = 'unused:'
columns.append(col)
-client.createTable(t, columns)
+try:
+ client.createTable(t, columns)
+except AlreadyExists, ae:
+ print "WARN: " + ae.message
cols = client.getColumnDescriptors(t)
for col_name in cols.keys():
@@ -87,97 +100,108 @@
valid = "foo-\xE7\x94\x9F\xE3\x83\x93\xE3\x83\xBC\xE3\x83\xAB";
# non-utf8 is fine for data
-client.put(t, "foo", "entry:foo", invalid)
+mutations = [Mutation({"column":"entry:foo", "value":invalid})]
+client.mutateRow(t, "foo", mutations)
# try empty strings
-client.put(t, "", "entry:", "");
+mutations = [Mutation({"column":"entry:", "value":""})]
+client.mutateRow(t, "foo", mutations)
# this row name is valid utf8
-client.put(t, valid, "entry:foo", valid)
+mutations = [Mutation({"column":"entry:foo", "value":valid})]
+client.mutateRow(t, "foo", mutations)
# non-utf8 is not allowed in row names
try:
- client.put(t, invalid, "entry:foo", invalid)
+ mutations = [Mutation({"column":"entry:foo", "value":invalid})]
+ client.mutateRow(t, invalid, mutations)
except ttypes.IOError, e:
print 'expected exception: %s' %(e.message)
# Run a scanner on the rows we just created
print "Starting scanner..."
-scanner = client.scannerOpen(t, "", ["entry:"])
+scanner = client.scannerOpen(t, "", ["entry::"])
try:
while 1:
- printEntry(client.scannerGet(scanner))
+ printRow(client.scannerGet(scanner))
except ttypes.NotFound, e:
print "Scanner finished"
-
#
# Run some operations on a bunch of rows.
#
for e in range(100, 0, -1):
- # format row keys as "00000" to "00100"
+ # format row keys as "00000" to "00100"
row = "%0.5d" % (e)
- client.put(t, row, "unused:", "DELETE_ME");
- printRow(row, client.getRow(t, row));
+ mutations = [Mutation({"column":"unused:", "value":"DELETE_ME"})]
+ client.mutateRow(t, row, mutations)
+ printRow(client.getRow(t, row))
client.deleteAllRow(t, row)
-
- client.put(t, row, "entry:num", "0")
- client.put(t, row, "entry:foo", "FOO")
- printRow(row, client.getRow(t, row));
+
+ mutations = [Mutation({"column":"entry:num", "value":"0"}),
+ Mutation({"column":"entry:foo", "value":"FOO"})]
+ client.mutateRow(t, row, mutations)
+ printRow(client.getRow(t, row));
mutations = []
- m = Hbase.Mutation()
+ m = Mutation()
m.column = "entry:foo"
m.isDelete = 1
mutations.append(m)
- m = Hbase.Mutation()
+ m = Mutation()
m.column = "entry:num"
m.value = "-1"
mutations.append(m)
client.mutateRow(t, row, mutations)
- printRow(row, client.getRow(t, row));
+ printRow(client.getRow(t, row));
- client.put(t, row, "entry:num", str(e))
- client.put(t, row, "entry:sqr", str((e*e)))
- printRow(row, client.getRow(t, row));
+ mutations = [Mutation({"column":"entry:num", "value":str(e)}),
+ Mutation({"column":"entry:sqr", "value":str(e*e)})]
+ client.mutateRow(t, row, mutations)
+ printRow(client.getRow(t, row));
+
+ time.sleep(0.05)
mutations = []
- m = Hbase.Mutation()
+ m = Mutation()
m.column = "entry:num"
m.value = "-999"
mutations.append(m)
- m = Hbase.Mutation()
+ m = Mutation()
m.column = "entry:sqr"
m.isDelete = 1
mutations.append(m)
client.mutateRowTs(t, row, mutations, 1) # shouldn't override latest
- printRow(row, client.getRow(t, row))
+ printRow(client.getRow(t, row))
versions = client.getVer(t, row, "entry:num", 10)
- print "row: %s, values: " %(row)
- for v in versions:
- print "\t%s;" %(v)
-
- print ""
+ printVersions(row, versions)
+ if len(versions) != 4:
+ print("FATAL: wrong # of versions")
+ sys.exit(-1)
try:
client.get(t, row, "entry:foo")
- raise "shouldn't get here!"
- except ttypes.NotFound, e:
+ print("FATAL: shouldn't get here")
+ sys.exit(-1)
+ except ttypes.NotFound:
pass
- print ""
+ print
-
-columns = client.getColumnDescriptors(t)
+columnNames = []
+for col2 in client.getColumnDescriptors(t):
+ print "column name is "+col2.name
+ print col2
+ columnNames.append(col2.name+":")
print "Starting scanner..."
-scanner = client.scannerOpenWithStop(t, "00020", "00040", columns)
+scanner = client.scannerOpenWithStop(t, "00020", "00040", columnNames)
try:
while 1:
- printEntry(client.scannerGet(scanner))
-except ttypes.NotFound, e:
+ printRow(client.scannerGet(scanner))
+except ttypes.NotFound:
client.scannerClose(scanner)
print "Scanner finished"