Skip to content

Commit

Permalink
Add -key option/Make filename optional in ccm json
Browse files Browse the repository at this point in the history
- Add support -key option to specify keys to be included to json command.
- Make filename optional for json command (output to stdout if no
  filename is specified).
- Add some useful prints for json command in sstabledump mode.
  • Loading branch information
matope committed Apr 6, 2016
1 parent 23ec675 commit 257493d
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 21 deletions.
34 changes: 18 additions & 16 deletions ccmlib/cmds/node_cmds.py
Original file line number Diff line number Diff line change
Expand Up @@ -460,37 +460,39 @@ def get_parser(self):
help="The keyspace to use [use all keyspaces by default]")
parser.add_option('-c', '--column-families', type="string", dest="cfs", default=None,
help="Comma separated list of column families to use (requires -k to be set)")
parser.add_option('--key', type="string", action="append", dest="keys", default=None,
help="The key to include (you may specify multiple --key)")
parser.add_option('-e', '--enumerate-keys', action="store_true", dest="enumerate_keys",
help="Only enumerate keys (i.e, call sstable2keys)", default=False)
return parser

def validate(self, parser, options, args):
Cmd.validate(self, parser, options, args, node_name=True, load_cluster=True)
self.keyspace = options.keyspace
if len(args) < 2:
print_("You must specify an output file.")
parser.print_help()
exit(1)
if self.keyspace is None:
print_("You must specify a keyspace.")
parser.print_help()
exit(1)
self.outfile = args[-1]
self.outfile = args[-1] if len(args) >= 2 else None
self.column_families = options.cfs.split(',') if options.cfs else None

def run(self):
try:
with open(self.outfile, 'w') as f:
if self.node.has_cmd('sstable2json'):
self.node.run_sstable2json(keyspace=self.keyspace,
out_file=f,
column_families=self.column_families,
enumerate_keys=self.options.enumerate_keys)
elif self.node.has_cmd('sstabledump'):
self.node.run_sstabledump(keyspace=self.keyspace,
output_file=f,
column_families=self.column_families,
enumerate_keys=self.options.enumerate_keys)
f = sys.stdout
if self.outfile is not None:
f = open(self.outfile, 'w')
if self.node.has_cmd('sstable2json'):
self.node.run_sstable2json(keyspace=self.keyspace,
out_file=f,
column_families=self.column_families,
keys=self.options.keys,
enumerate_keys=self.options.enumerate_keys)
elif self.node.has_cmd('sstabledump'):
self.node.run_sstabledump(keyspace=self.keyspace,
output_file=f,
column_families=self.column_families,
keys=self.options.keys,
enumerate_keys=self.options.enumerate_keys)
except common.ArgumentError as e:
print_(e, file=sys.stderr)

Expand Down
17 changes: 12 additions & 5 deletions ccmlib/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -886,7 +886,7 @@ def clear(self, clear_all=False, only_data=False):
if not os.path.exists(dir):
os.mkdir(dir)

def run_sstable2json(self, out_file=None, keyspace=None, datafiles=None, column_families=None, enumerate_keys=False):
def run_sstable2json(self, out_file=None, keyspace=None, datafiles=None, column_families=None, keys=None, enumerate_keys=False):
print_("running")
if out_file is None:
out_file = sys.stdout
Expand All @@ -899,6 +899,9 @@ def run_sstable2json(self, out_file=None, keyspace=None, datafiles=None, column_
args = [sstable2json, sstablefile]
if enumerate_keys:
args = args + ["-e"]
if keys is not None:
for key in keys:
args = args + ["-k", key]
subprocess.call(args, env=env, stdout=out_file)
print_("")

Expand Down Expand Up @@ -960,18 +963,22 @@ def run_sstablemetadata(self, output_file=None, datafiles=None, keyspace=None, c
if output_file is None:
return results

def run_sstabledump(self, output_file=None, datafiles=None, keyspace=None, column_families=None, enumerate_keys=False):
def run_sstabledump(self, output_file=None, datafiles=None, keyspace=None, column_families=None, keys=None, enumerate_keys=False):
cdir = self.get_install_dir()
sstabledump = common.join_bin(cdir, os.path.join('tools', 'bin'), 'sstabledump')
env = self.get_env()
sstablefiles = self.__gather_sstables(datafiles=datafiles, keyspace=keyspace, columnfamilies=column_families)
results = []

print_(sstablefiles)
for sstable in sstablefiles:
print_("-- {0} -----".format(os.path.basename(sstable)))
cmd = [sstabledump, sstable]
if enumerate_keys:
cmd = [sstabledump, '-e', sstable]
else:
cmd = [sstabledump, sstable]
cmd.append('-e')
if keys is not None:
for key in keys:
cmd = cmd + ["-k", key]
if output_file is None:
p = subprocess.Popen(cmd, stderr=subprocess.PIPE, stdout=subprocess.PIPE, env=env)
(out, err) = p.communicate()
Expand Down

0 comments on commit 257493d

Please sign in to comment.