blob: 8451f17ccbd2d1f2c51d3288a8e17e4f83ca8c77 [file] [log] [blame]
#!/usr/bin/env 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.
personality_plugins "all"
function personality_globals
{
#shellcheck disable=SC2034
PATCH_BRANCH_DEFAULT=master
#shellcheck disable=SC2034
JIRA_ISSUE_RE='^HBASE-[0-9]+$'
#shellcheck disable=SC2034
GITHUB_REPO="apache/hbase"
#shellcheck disable=SC2034
HOW_TO_CONTRIBUTE=""
# All supported Hadoop versions that we want to test the compilation with
HBASE_HADOOP_VERSIONS="2.4.1 2.5.2 2.6.0"
# Override the maven options
MAVEN_OPTS="${MAVEN_OPTS:-"-Xmx3100M"}"
}
function personality_modules
{
local repostatus=$1
local testtype=$2
local extra=""
yetus_debug "Personality: ${repostatus} ${testtype}"
clear_personality_queue
extra="-DHBasePatchProcess"
if [[ ${repostatus} == branch
&& ${testtype} == mvninstall ]];then
personality_enqueue_module . ${extra}
return
fi
if [[ ${testtype} = findbugs ]]; then
for module in ${CHANGED_MODULES}; do
# skip findbugs on hbase-shell
if [[ ${module} == hbase-shell ]]; then
continue
else
# shellcheck disable=SC2086
personality_enqueue_module ${module} ${extra}
fi
done
return
fi
for module in ${CHANGED_MODULES}; do
# shellcheck disable=SC2086
personality_enqueue_module ${module} ${extra}
done
}
###################################################
add_test_type hadoopcheck
function hadoopcheck_filefilter
{
local filename=$1
if [[ ${filename} =~ \.java$ ]]; then
add_test hadoopcheck
fi
}
function hadoopcheck_rebuild
{
local repostatus=$1
local hadoopver
local logfile
local count
local result=0
if [[ "${repostatus}" = branch ]]; then
return 0
fi
big_console_header "Compiling against various Hadoop versions"
export MAVEN_OPTS="${MAVEN_OPTS}"
for hadoopver in ${HBASE_HADOOP_VERSIONS}; do
logfile="${PATCH_DIR}/patch-javac-${hadoopver}.txt"
echo_and_redirect "${logfile}" \
"${MAVEN}" clean install \
-DskipTests -DHBasePatchProcess \
-Dhadoop-two.version="${hadoopver}"
count=$(${GREP} -c ERROR "${logfile}")
if [[ ${count} -gt 0 ]]; then
add_vote_table -1 hadoopcheck "Patch causes ${count} errors with Hadoop v${hadoopver}."
((result=result+1))
fi
done
if [[ ${result} -gt 0 ]]; then
return 1
fi
add_vote_table +1 hadoopcheck "Patch does not cause any errors with Hadoop ${HBASE_HADOOP_VERSIONS}."
return 0
}
######################################
add_test_type hbaseprotoc
function hbaseprotoc_filefilter
{
local filename=$1
if [[ ${filename} =~ \.proto$ ]]; then
add_test hbaseprotoc
fi
}
function hbaseprotoc_rebuild
{
local i=0
local fn
local module
local logfile
local count
local result
if [[ "${repostatus}" = branch ]]; then
return 0
fi
verify_needed_test hbaseprotoc
if [[ $? == 0 ]]; then
return 0
fi
big_console_header "Patch HBase protoc plugin"
start_clock
personality_modules patch hbaseprotoc
modules_workers patch hbaseprotoc compile -DskipTests -Pcompile-protobuf -X -DHBasePatchProcess
# shellcheck disable=SC2153
until [[ $i -eq ${#MODULE[@]} ]]; do
if [[ ${MODULE_STATUS[${i}]} == -1 ]]; then
((result=result+1))
((i=i+1))
continue
fi
module=${MODULE[$i]}
fn=$(module_file_fragment "${module}")
logfile="${PATCH_DIR}/patch-hbaseprotoc-${fn}.txt"
count=$(${GREP} -c ERROR "${logfile}")
if [[ ${count} -gt 0 ]]; then
module_status ${i} -1 "patch-hbaseprotoc-${fn}.txt" "Patch generated "\
"${count} new protoc errors in ${module}."
((result=result+1))
fi
((i=i+1))
done
modules_messages patch hbaseprotoc true
if [[ ${result} -gt 0 ]]; then
return 1
fi
return 0
}
######################################
add_test_type hbaseanti
function hbaseanti_filefilter
{
local filename=$1
if [[ ${filename} =~ \.java$ ]]; then
add_test hbaseanti
fi
}
function hbaseanti_patchfile
{
local patchfile=$1
local warnings
local result
verify_needed_test hbaseanti
if [[ $? == 0 ]]; then
return 0
fi
big_console_header "Checking for known anti-patterns"
start_clock
warnings=$(${GREP} 'new TreeMap<byte.*()' "${patchfile}")
if [[ ${warnings} -gt 0 ]]; then
add_vote_table -1 hbaseanti "" "The patch appears to have anti-pattern where BYTES_COMPARATOR was omitted: ${warnings}."
((result=result+1))
fi
warnings=$(${GREP} 'import org.apache.hadoop.classification' "${patchfile}")
if [[ ${warnings} -gt 0 ]]; then
add_vote_table -1 hbaseanti "" "The patch appears use Hadoop classification instead of HBase: ${warnings}."
((result=result+1))
fi
if [[ ${result} -gt 0 ]]; then
return 1
fi
add_vote_table +1 hbaseanti "" "Patch does not have any anti-patterns."
return 0
}