Files
impala/shell/packaging/make_python_package.sh
jasonmfehr f2f6b4b580 IMPALA-11375 Impala shell outputs details of each RPC
When the Impala shell is using the hs2 protocol, it makes multiple RPCs
to the Impala daemon.  These calls pass Thrift objects back and forth.
This change adds the '--show_rpc' which outputs the details of the RPCs
to stdout and the '--rpc_file' flag which outputs the RPC details to the
specified file path.

RPC details include:
- operation name
- request attempt count
- Impala session/query ids (if applicable)
- call duration
- call status (success/failure)
- request Thrift objects
- response Thrift objects

Certain information is not included in the RPC details:
- Thrift object attributes named 'secret' or 'password'
  are redacted.
- Thrift objects with a type of TRowSet or TGetRuntimeProfileResp
  are not include as the information contained within them is
  already available in the standard output from the Impala shell.

Testing:
- Added new tests in the end-to-end test suite.

Change-Id: I36f8dbc96726aa2a573133acbe8a558299381f8b
Reviewed-on: http://gerrit.cloudera.org:8080/19388
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2023-01-12 23:31:14 +00:00

95 lines
3.5 KiB
Bash
Executable File

#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------
# This script is invoked during the Impala build process, and creates
# a distributable python package of the Impala shell. The resulting
# archive will be saved to:
#
# ${DIST_DIR}/impala_shell-<version>.tar.gz
#
# Until the thrift-generated python files in ${IMPALA_HOME}/shell/gen-py
# have been created by the build process, this script will not work.
# It also relies upon the impala_build_version.py file created by the
# parent packaging script, ${IMPALA_HOME}/shell/make_shell_tarball.sh,
# which needs to be run before this script will work.
#
# After those files exist, however, this script can be run again at will.
set -eu -o pipefail
WORKING_DIR="$(cd "$(dirname "$0")" ; pwd -P )"
SHELL_HOME="${IMPALA_HOME}"/shell
STAGING_DIR="${WORKING_DIR}"/staging
DIST_DIR="${DIST_DIR:-$SHELL_HOME/dist}"
PACKAGE_DIR="${STAGING_DIR}"/impala_shell_package
MODULE_LIB_DIR="${PACKAGE_DIR}"/impala_shell
NO_CLEAN_DIST="${NO_CLEAN_DIST:-}"
THRIFT_GEN_PY_DIR=${SHELL_HOME}/gen-py
assemble_package_files() {
mkdir -p "${MODULE_LIB_DIR}"
cp -r "${THRIFT_GEN_PY_DIR}"/* "${MODULE_LIB_DIR}"
cp "${WORKING_DIR}/__init__.py" "${MODULE_LIB_DIR}"
cp "${SHELL_HOME}/compatibility.py" "${MODULE_LIB_DIR}"
cp "${SHELL_HOME}/impala_shell.py" "${MODULE_LIB_DIR}"
cp "${SHELL_HOME}/impala_client.py" "${MODULE_LIB_DIR}"
cp "${SHELL_HOME}/option_parser.py" "${MODULE_LIB_DIR}"
cp "${SHELL_HOME}/shell_output.py" "${MODULE_LIB_DIR}"
cp "${SHELL_HOME}/impala_shell_config_defaults.py" "${MODULE_LIB_DIR}"
cp "${SHELL_HOME}/TSSLSocketWithWildcardSAN.py" "${MODULE_LIB_DIR}"
cp "${SHELL_HOME}/ImpalaHttpClient.py" "${MODULE_LIB_DIR}"
cp "${SHELL_HOME}/shell_exceptions.py" "${MODULE_LIB_DIR}"
cp "${SHELL_HOME}/cookie_util.py" "${MODULE_LIB_DIR}"
cp "${SHELL_HOME}/value_converter.py" "${MODULE_LIB_DIR}"
cp "${SHELL_HOME}/thrift_printer.py" "${MODULE_LIB_DIR}"
cp "${SHELL_HOME}/packaging/README.md" "${PACKAGE_DIR}"
cp "${SHELL_HOME}/packaging/MANIFEST.in" "${PACKAGE_DIR}"
cp "${SHELL_HOME}/packaging/requirements.txt" "${PACKAGE_DIR}"
cp "${SHELL_HOME}/packaging/setup.py" "${PACKAGE_DIR}"
cp "${IMPALA_HOME}/LICENSE.txt" "${PACKAGE_DIR}"
}
create_distributable_python_package() {
# Generate a new python package tarball in ${DIST_DIR}
if [[ "${NO_CLEAN_DIST}" != "true" ]]; then
rm -rf "${DIST_DIR}"
fi
mkdir -p "${DIST_DIR}"
pushd "${PACKAGE_DIR}"
echo "Building package..."
PACKAGE_TYPE="${PACKAGE_TYPE:-}" OFFICIAL="${OFFICIAL:-}" \
python setup.py sdist --dist-dir "${DIST_DIR}"
popd
if [[ "${NO_CLEAN_DIST}" != "true" ]]; then
rm -rf "${STAGING_DIR}"
fi
}
assemble_package_files
create_distributable_python_package