HBASE-26921 Rewrite the counting cells part in TestMultiVersions (#4316)
[hbase.git] / hbase-examples / src / main / ruby / DemoClient.rb
blobd30d89ba6e2d5f6b141418799df6bbcba140ae32
1 #!/usr/bin/ruby
4 # Licensed to the Apache Software Foundation (ASF) under one
5 # or more contributor license agreements.  See the NOTICE file
6 # distributed with this work for additional information
7 # regarding copyright ownership.  The ASF licenses this file
8 # to you under the Apache License, Version 2.0 (the
9 # "License"); you may not use this file except in compliance
10 # with the License.  You may obtain a copy of the License at
12 #     http://www.apache.org/licenses/LICENSE-2.0
14 # Unless required by applicable law or agreed to in writing, software
15 # distributed under the License is distributed on an "AS IS" BASIS,
16 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 # See the License for the specific language governing permissions and
18 # limitations under the License.
20 # Instructions: 
21 # Modify the import string below to point to {$THRIFT_HOME}/lib/rb/lib.
23 # You will need to modify this import string:
24 # TODO: fix rb/php/py examples to actually work, similar to HBASE-3630.
25 $:.push('~/Thrift/thrift-20080411p1/lib/rb/lib')
26 $:.push('./gen-rb')
28 require 'thrift'
30 require 'Hbase'
32 def printRow(rowresult)
33   print "row: #{rowresult.row}, cols: "
34   rowresult.columns.sort.each do |k,v|
35     print "#{k} => #{v.value}; "
36   end
37   puts ""
38 end
40 host = "localhost"
41 port = 9090
43 if ARGV.length > 0
44   host = ARGV[0]
45 end
46 if ARGV.length > 1
47   port = ARGV[1]
48 end
50 transport = Thrift::BufferedTransport.new(Thrift::Socket.new(host, port))
51 protocol = Thrift::BinaryProtocol.new(transport)
52 client = Apache::Hadoop::Hbase::Thrift::Hbase::Client.new(protocol)
54 transport.open()
56 t = "demo_table"
59 # Scan all tables, look for the demo table and delete it.
61 puts "scanning tables..."
62 client.getTableNames().sort.each do |name|
63   puts "  found: #{name}"
64   if (name == t)
65     if (client.isTableEnabled(name))
66       puts "    disabling table: #{name}"
67       client.disableTable(name)
68     end
69     puts "    deleting table: #{name}" 
70     client.deleteTable(name)
71   end
72 end
75 # Create the demo table with two column families, entry: and unused:
77 columns = []
78 col = Apache::Hadoop::Hbase::Thrift::ColumnDescriptor.new
79 col.name = "entry:"
80 col.maxVersions = 10
81 columns << col;
82 col = Apache::Hadoop::Hbase::Thrift::ColumnDescriptor.new
83 col.name = "unused:"
84 columns << col;
86 puts "creating table: #{t}"
87 begin
88   client.createTable(t, columns)
89 rescue Apache::Hadoop::Hbase::Thrift::AlreadyExists => ae
90   puts "WARN: #{ae.message}"
91 end
93 puts "column families in #{t}: "
94 client.getColumnDescriptors(t).sort.each do |key, col|
95   puts "  column: #{col.name}, maxVer: #{col.maxVersions}"
96 end
98 dummy_attributes = {}
101 # Test UTF-8 handling
103 invalid = "foo-\xfc\xa1\xa1\xa1\xa1\xa1"
104 valid = "foo-\xE7\x94\x9F\xE3\x83\x93\xE3\x83\xBC\xE3\x83\xAB";
106 # non-utf8 is fine for data
107 mutations = []
108 m = Apache::Hadoop::Hbase::Thrift::Mutation.new
109 m.column = "entry:foo"
110 m.value = invalid
111 mutations << m
112 client.mutateRow(t, "foo", mutations, dummy_attributes)
114 # try empty strings
115 mutations = []
116 m = Apache::Hadoop::Hbase::Thrift::Mutation.new
117 m.column = "entry:"
118 m.value = ""
119 mutations << m
120 client.mutateRow(t, "", mutations, dummy_attributes)
122 # this row name is valid utf8
123 mutations = []
124 m = Apache::Hadoop::Hbase::Thrift::Mutation.new
125 m.column = "entry:foo"
126 m.value = valid
127 mutations << m
128 client.mutateRow(t, valid, mutations, dummy_attributes)
130 # non-utf8 is not allowed in row names
131 begin
132   mutations = []
133   m = Apache::Hadoop::Hbase::Thrift::Mutation.new
134   m.column = "entry:foo"
135   m.value = invalid
136   mutations << m
137   client.mutateRow(t, invalid, mutations, dummy_attributes)
138   raise "shouldn't get here!"
139 rescue Apache::Hadoop::Hbase::Thrift::IOError => e
140   puts "expected error: #{e.message}"
143 # Run a scanner on the rows we just created
144 puts "Starting scanner..."
145 scanner = client.scannerOpen(t, "", ["entry:"], dummy_attributes)
146 begin
147   while (true) 
148     printRow(client.scannerGet(scanner))
149   end
150 rescue Apache::Hadoop::Hbase::Thrift::NotFound => nf
151   client.scannerClose(scanner)
152   puts "Scanner finished"
156 # Run some operations on a bunch of rows.
158 (0..100).to_a.reverse.each do |e|
159   # format row keys as "00000" to "00100"
160   row = format("%0.5d", e)
162   mutations = []
163   m = Apache::Hadoop::Hbase::Thrift::Mutation.new
164   m.column = "unused:"
165   m.value = "DELETE_ME"
166   mutations << m
167   client.mutateRow(t, row, mutations, dummy_attributes)
168   printRow(client.getRow(t, row, dummy_attributes))
169   client.deleteAllRow(t, row, dummy_attributes)
171   mutations = []
172   m = Apache::Hadoop::Hbase::Thrift::Mutation.new
173   m.column = "entry:num"
174   m.value = "0"
175   mutations << m
176   m = Apache::Hadoop::Hbase::Thrift::Mutation.new
177   m.column = "entry:foo"
178   m.value = "FOO"
179   mutations << m
180   client.mutateRow(t, row, mutations, dummy_attributes)
181   printRow(client.getRow(t, row, dummy_attributes))
183   mutations = []
184   m = Apache::Hadoop::Hbase::Thrift::Mutation.new
185   m.column = "entry:foo"
186   m.isDelete = 1
187   mutations << m
188   m = Apache::Hadoop::Hbase::Thrift::Mutation.new
189   m.column = "entry:num"
190   m.value = "-1"
191   mutations << m
192   client.mutateRow(t, row, mutations, dummy_attributes)
193   printRow(client.getRow(t, row, dummy_attributes));
195   mutations = []
196   m = Apache::Hadoop::Hbase::Thrift::Mutation.new
197   m.column = "entry:num"
198   m.value = e.to_s
199   mutations << m
200   m = Apache::Hadoop::Hbase::Thrift::Mutation.new
201   m.column = "entry:sqr"
202   m.value = (e*e).to_s
203   mutations << m
204   client.mutateRow(t, row, mutations, dummy_attributes, dummy_attributes)
205   printRow(client.getRow(t, row, dummy_attributes))
206   
207   mutations = []
208   m = Apache::Hadoop::Hbase::Thrift::Mutation.new
209   m.column = "entry:num"
210   m.value = "-999"
211   mutations << m
212   m = Apache::Hadoop::Hbase::Thrift::Mutation.new
213   m.column = "entry:sqr"
214   m.isDelete = 1
215   mutations << m
216   client.mutateRowTs(t, row, mutations, 1, dummy_attributes) # shouldn't override latest
217   printRow(client.getRow(t, row, dummy_attributes, dummy_attributes));
219   versions = client.getVer(t, row, "entry:num", 10, dummy_attributes)
220   print "row: #{row}, values: "
221   versions.each do |v|
222     print "#{v.value}; "
223   end
224   puts ""    
225   
226   begin
227     client.get(t, row, "entry:foo", dummy_attributes)
228     raise "shouldn't get here!"
229   rescue Apache::Hadoop::Hbase::Thrift::NotFound => nf
230     # blank
231   end
233   puts ""
234 end 
236 columns = []
237 client.getColumnDescriptors(t).each do |col, desc|
238   puts "column with name: #{desc.name}"
239   columns << desc.name + ":"
242 puts "Starting scanner..."
243 scanner = client.scannerOpenWithStop(t, "00020", "00040", columns, dummy_attributes)
244 begin
245   while (true) 
246     printRow(client.scannerGet(scanner, dummy_attributes))
247   end
248 rescue Apache::Hadoop::Hbase::Thrift::NotFound => nf
249   client.scannerClose(scanner)
250   puts "Scanner finished"
252   
253 transport.close()