Revision 506e8448bee9cbd7996222e20033bcdb55a59ea6 authored by Maysam Yabandeh on 26 April 2019, 01:14:10 UTC, committed by Facebook Github Bot on 26 April 2019, 01:17:22 UTC
Summary:
Part of compaction cpu goes to processing snapshot list, the larger the list the bigger the overhead. Although the lifetime of most of the snapshots is much shorter than the lifetime of compactions, the compaction conservatively operates on the list of snapshots that it initially obtained. This patch allows the snapshot list to be updated via a callback if the compaction is taking long. This should let the compaction to continue more efficiently with much smaller snapshot list.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/5099

Differential Revision: D15086710

Pulled By: maysamyabandeh

fbshipit-source-id: 7649f56c3b6b2fb334962048150142a3bf9c1a12
1 parent 6eb317b
Raw File
coverage_test.sh
#!/usr/bin/env bash
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.

# Exit on error.
set -e

if [ -n "$USE_CLANG" ]; then
  echo "Error: Coverage test is supported only for gcc."
  exit 1
fi

ROOT=".."
# Fetch right version of gcov
if [ -d /mnt/gvfs/third-party -a -z "$CXX" ]; then
  source $ROOT/build_tools/fbcode_config.sh
  GCOV=$GCC_BASE/bin/gcov
else
  GCOV=$(which gcov)
fi

COVERAGE_DIR="$PWD/COVERAGE_REPORT"
mkdir -p $COVERAGE_DIR

# Find all gcno files to generate the coverage report

GCNO_FILES=`find $ROOT -name "*.gcno"`
$GCOV --preserve-paths --relative-only --no-output $GCNO_FILES 2>/dev/null |
  # Parse the raw gcov report to more human readable form.
  python $ROOT/coverage/parse_gcov_output.py |
  # Write the output to both stdout and report file.
  tee $COVERAGE_DIR/coverage_report_all.txt &&
echo -e "Generated coverage report for all files: $COVERAGE_DIR/coverage_report_all.txt\n"

# TODO: we also need to get the files of the latest commits.
# Get the most recently committed files.
LATEST_FILES=`
  git show --pretty="format:" --name-only HEAD |
  grep -v "^$" |
  paste -s -d,`
RECENT_REPORT=$COVERAGE_DIR/coverage_report_recent.txt

echo -e "Recently updated files: $LATEST_FILES\n" > $RECENT_REPORT
$GCOV --preserve-paths --relative-only --no-output $GCNO_FILES 2>/dev/null |
  python $ROOT/coverage/parse_gcov_output.py -interested-files $LATEST_FILES |
  tee -a $RECENT_REPORT &&
echo -e "Generated coverage report for recently updated files: $RECENT_REPORT\n"

# Unless otherwise specified, we'll not generate html report by default
if [ -z "$HTML" ]; then
  exit 0
fi

# Generate the html report. If we cannot find lcov in this machine, we'll simply
# skip this step.
echo "Generating the html coverage report..."

LCOV=$(which lcov || true 2>/dev/null)
if [ -z $LCOV ]
then
  echo "Skip: Cannot find lcov to generate the html report."
  exit 0
fi

LCOV_VERSION=$(lcov -v | grep 1.1 || true)
if [ $LCOV_VERSION ]
then
  echo "Not supported lcov version. Expect lcov 1.1."
  exit 0
fi

(cd $ROOT; lcov --no-external \
     --capture  \
     --directory $PWD \
     --gcov-tool $GCOV \
     --output-file $COVERAGE_DIR/coverage.info)

genhtml $COVERAGE_DIR/coverage.info -o $COVERAGE_DIR

echo "HTML Coverage report is generated in $COVERAGE_DIR"
back to top