From: Andrei Pavel Date: Thu, 23 Jun 2016 08:30:21 +0000 (+0300) Subject: corrected and optimized cql_dump in kea-admin.in X-Git-Tag: trac4283_base~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ab934d8b9bf1f071640fcd5552163d910fc086ab;p=thirdparty%2Fkea.git corrected and optimized cql_dump in kea-admin.in --- diff --git a/src/bin/admin/kea-admin.in b/src/bin/admin/kea-admin.in index 153252e6df..60bf797b8d 100644 --- a/src/bin/admin/kea-admin.in +++ b/src/bin/admin/kea-admin.in @@ -366,9 +366,6 @@ get_dump_query() { pgsql) invoke="select * from" ;; - cql) - invoke="select * from" - ;; *) log_error "unsupported backend ${backend}" usage @@ -474,49 +471,42 @@ pgsql_dump() { } cql_dump() { - - # get the correct dump query - version=`cql_version` - retcode=$? - if [ $retcode -ne 0 ] - then - log_error "lease-dump: cql_version failed, exit code $retcode" - exit 1; - fi - - # Fetch the correct SQL text. Note this function will exit - # if it fails. - - select_where_clause="" + # Get the query appropriate to lease version. Explicitly specify all columns + # so that they are returned in expected order. if [ $dump_type -eq 4 ]; then - dump_qry="SELECT address,hwaddr,client_id,valid_lifetime,expire,subnet_id,fqdn_fwd,fqdn_rev,hostname,state FROM lease4" - select_where_clause=" WHERE address = 0" # invalid address + dump_query="SELECT address,hwaddr,client_id,valid_lifetime,expire,subnet_id,fqdn_fwd,fqdn_rev,hostname,state FROM lease4" elif [ $dump_type -eq 6 ]; then - dump_qry="SELECT address,duid,valid_lifetime,expire,subnet_id,pref_lifetime,lease_type,iaid,prefix_len,fqdn_fwd,fqdn_rev,hostname,hwaddr,hwtype,hwaddr_source,state FROM lease6" - select_where_clause=" WHERE address = '::'" # invalid address + dump_query="SELECT address,duid,valid_lifetime,expire,subnet_id,pref_lifetime,lease_type,iaid,prefix_len,fqdn_fwd,fqdn_rev,hostname,hwaddr,hwtype,hwaddr_source,state FROM lease6" + else + log_error "lease-dump: lease type ( -4 or -6 ) needs to be specified" + usage + exit 1 fi - # Make sure they specified a file + # Check if file was specified. if [ "$dump_file" = "" ]; then - log_error "you must specify an output file for lease-dump" + log_error "lease-dump: output file needs to be specified with -o" usage exit 1 fi - # If output file exists, notify user, allow them a chance to bail + # If output file exists, notify user, allow them a chance to bail. check_file_overwrite $dump_file - cql_execute "${dump_qry}${select_where_clause}" | head -n 2 | tail -n 1 | sed -e 's/\s*//g' | sed -e 's/|/,/g' > $dump_file - if [ $? -ne 0 ]; then - log_error "lease-dump: cql_execute failed, exit code $retcode"; + # Run query, check for failure. + result=`cql_execute "$dump_query"` + return_code=$? + if [ $return_code -ne 0 ]; then + log_error "lease-dump: cql_execute failed, exit code $return_code"; exit 1 fi - cql_execute "${dump_qry}" | tail -n +4 | head -n -2 | sed -e 's/\s*//g' | sed -e 's/|/,/g' | sort -r >> $dump_file - if [ $? -ne 0 ]; then - log_error "lease-dump: cql_execute failed, exit code $retcode"; - exit 1 - fi + # Parse and display header. + echo "$result" | head -n 2 | tail -n 1 | sed -e 's/\s*//g' | sed -e 's/|/,/g' > $dump_file + + # Parse and display contents - done separately from header to allow sorting + # by address. + echo "$result" | tail -n +4 | head -n -2 | sed -e 's/\s*//g' | sed -e 's/|/,/g' | sort -r >> $dump_file echo lease$dump_type successfully dumped to $dump_file exit 0