Parcourir la source

corrected and optimized cql_dump in kea-admin.in

Andrei Pavel il y a 9 ans
Parent
commit
ab934d8b9b
1 fichiers modifiés avec 22 ajouts et 32 suppressions
  1. 22 32
      src/bin/admin/kea-admin.in

+ 22 - 32
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