Commit 551ad1cf authored by Seppo Jaakola's avatar Seppo Jaakola

Merged FreeBSD compatibility changes (up to revision 3893 in lp:~codership/codership-mysql/5.5-23)

parent 7cf10ddf
...@@ -72,6 +72,9 @@ RelWithDebInfo ...@@ -72,6 +72,9 @@ RelWithDebInfo
.vimrc .vimrc
ac_available_languages_fragment ac_available_languages_fragment
BitKeeper/ BitKeeper/
build_debug
build_install
build_release
client/*.ds? client/*.ds?
client/completion_hash.cpp client/completion_hash.cpp
client/decimal.c client/decimal.c
......
...@@ -13,8 +13,30 @@ ...@@ -13,8 +13,30 @@
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
if(APPLE)
LIST(APPEND CMAKE_CXX_LINK_EXECUTABLE "dsymutil <TARGET>")
LIST(APPEND CMAKE_C_LINK_EXECUTABLE "dsymutil <TARGET>")
LIST(APPEND CMAKE_CXX_CREATE_SHARED_LIBRARY "dsymutil <TARGET>")
LIST(APPEND CMAKE_C_CREATE_SHARED_LIBRARY "dsymutil <TARGET>")
LIST(APPEND CMAKE_CXX_CREATE_SHARED_MODULE "dsymutil <TARGET>")
LIST(APPEND CMAKE_C_CREATE_SHARED_MODULE "dsymutil <TARGET>")
ENDIF()
GET_FILENAME_COMPONENT(MYSQL_CMAKE_SCRIPT_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) GET_FILENAME_COMPONENT(MYSQL_CMAKE_SCRIPT_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/cmake_parse_arguments.cmake) INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/cmake_parse_arguments.cmake)
MACRO (INSTALL_DSYM_DIRECTORIES targets)
IF(APPLE)
FOREACH(target ${targets})
GET_TARGET_PROPERTY(location ${target} LOCATION)
GET_TARGET_PROPERTY(type ${target} TYPE)
# It's a dirty hack, but cmake too stupid and mysql cmake files too buggy */
STRING(REPLACE "liblibmysql.dylib" "libmysqlclient.${SHARED_LIB_MAJOR_VERSION}.dylib" location ${location})
IF(type MATCHES "EXECUTABLE" OR type MATCHES "MODULE" OR type MATCHES "SHARED_LIBRARY")
INSTALL(DIRECTORY "${location}.dSYM" DESTINATION ${INSTALL_LOCATION} COMPONENT Debuginfo)
ENDIF()
ENDFOREACH()
ENDIF()
ENDMACRO()
FUNCTION (INSTALL_DEBUG_SYMBOLS) FUNCTION (INSTALL_DEBUG_SYMBOLS)
IF(MSVC) IF(MSVC)
...@@ -31,6 +53,7 @@ FUNCTION (INSTALL_DEBUG_SYMBOLS) ...@@ -31,6 +53,7 @@ FUNCTION (INSTALL_DEBUG_SYMBOLS)
MESSAGE(FATAL_ERROR "No INSTALL_LOCATION passed to INSTALL_DEBUG_SYMBOLS") MESSAGE(FATAL_ERROR "No INSTALL_LOCATION passed to INSTALL_DEBUG_SYMBOLS")
ENDIF() ENDIF()
SET(targets ${ARG_DEFAULT_ARGS}) SET(targets ${ARG_DEFAULT_ARGS})
FOREACH(target ${targets}) FOREACH(target ${targets})
GET_TARGET_PROPERTY(type ${target} TYPE) GET_TARGET_PROPERTY(type ${target} TYPE)
GET_TARGET_PROPERTY(location ${target} LOCATION) GET_TARGET_PROPERTY(location ${target} LOCATION)
...@@ -252,6 +275,7 @@ FUNCTION(MYSQL_INSTALL_TARGETS) ...@@ -252,6 +275,7 @@ FUNCTION(MYSQL_INSTALL_TARGETS)
INSTALL(TARGETS ${TARGETS} DESTINATION ${ARG_DESTINATION} ${COMP}) INSTALL(TARGETS ${TARGETS} DESTINATION ${ARG_DESTINATION} ${COMP})
INSTALL_DEBUG_SYMBOLS(${TARGETS} ${COMP} INSTALL_LOCATION ${ARG_DESTINATION}) INSTALL_DEBUG_SYMBOLS(${TARGETS} ${COMP} INSTALL_LOCATION ${ARG_DESTINATION})
INSTALL_DSYM_DIRECTORIES("${TARGETS}")
ENDFUNCTION() ENDFUNCTION()
......
...@@ -38,3 +38,6 @@ IF(CMAKE_SIZEOF_VOID_P EQUAL 4 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "i386") ...@@ -38,3 +38,6 @@ IF(CMAKE_SIZEOF_VOID_P EQUAL 4 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "i386")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=i686") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=i686")
SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -march=i686") SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -march=i686")
ENDIF() ENDIF()
SET(HAVE_SYS_TIMEB_H CACHE INTERNAL "")
...@@ -241,7 +241,8 @@ wsrep_recover_position() { ...@@ -241,7 +241,8 @@ wsrep_recover_position() {
if [ -z "$rp" ]; then if [ -z "$rp" ]; then
local skipped="$(grep WSREP $wr_logfile | grep 'skipping position recovery')" local skipped="$(grep WSREP $wr_logfile | grep 'skipping position recovery')"
if [ -z "$skipped" ]; then if [ -z "$skipped" ]; then
log_error "WSREP: Failed to recover position: " `cat $wr_logfile`; log_error "WSREP: Failed to recover position:
'`cat $wr_logfile`'"
ret=1 ret=1
else else
log_notice "WSREP: Position recovery skipped" log_notice "WSREP: Position recovery skipped"
...@@ -253,7 +254,7 @@ wsrep_recover_position() { ...@@ -253,7 +254,7 @@ wsrep_recover_position() {
wsrep_start_position_opt="--wsrep_start_position=$start_pos" wsrep_start_position_opt="--wsrep_start_position=$start_pos"
fi fi
rm $wr_logfile [ $ret -eq 0 ] && rm $wr_logfile
return $ret return $ret
} }
......
...@@ -20,6 +20,8 @@ ...@@ -20,6 +20,8 @@
RSYNC_PID= RSYNC_PID=
RSYNC_CONF= RSYNC_CONF=
OS=$(uname)
[ "$OS" == "Darwin" ] && export -n LD_LIBRARY_PATH
. $(dirname $0)/wsrep_sst_common . $(dirname $0)/wsrep_sst_common
...@@ -50,14 +52,32 @@ check_pid_and_port() ...@@ -50,14 +52,32 @@ check_pid_and_port()
local rsync_pid=$(cat $pid_file) local rsync_pid=$(cat $pid_file)
local rsync_port=$2 local rsync_port=$2
if [ "$OS" == "Darwin" -o "$OS" == "FreeBSD" ]; then
# no netstat --program(-p) option in Darwin and FreeBSD
check_pid $pid_file && \ check_pid $pid_file && \
netstat -anpt 2>/dev/null | \ lsof -i -Pn 2>/dev/null | \
grep "(LISTEN)" | grep ":$rsync_port" | grep -w '^rsync[[:space:]]\+'"$rsync_pid" >/dev/null
else
check_pid $pid_file && \
netstat -lnpt 2>/dev/null | \
grep LISTEN | grep \:$rsync_port | grep $rsync_pid/rsync >/dev/null grep LISTEN | grep \:$rsync_port | grep $rsync_pid/rsync >/dev/null
fi
} }
MAGIC_FILE="$WSREP_SST_OPT_DATA/rsync_sst_complete" MAGIC_FILE="$WSREP_SST_OPT_DATA/rsync_sst_complete"
rm -rf "$MAGIC_FILE" rm -rf "$MAGIC_FILE"
# Old filter - include everything except selected
# FILTER=(--exclude '*.err' --exclude '*.pid' --exclude '*.sock' \
# --exclude '*.conf' --exclude core --exclude 'galera.*' \
# --exclude grastate.txt --exclude '*.pem' \
# --exclude '*.[0-9][0-9][0-9][0-9][0-9][0-9]' --exclude '*.index')
# New filter - exclude everything except dirs (schemas) and innodb files
FILTER=(-f '- lost+found' -f '+ /ib_lru_dump' -f '+ /ibdata*' -f '+ /ib_logfile*' -f '+ */' -f '-! */*')
# Old versions of rsync have a bug transferring filter rules to daemon, so specify filter rules directly to daemon
FILTER_DAEMON="- lost+found + /ib_lru_dump + /ibdata* + ib_logfile* + */ -! */*"
if [ "$WSREP_SST_OPT_ROLE" = "donor" ] if [ "$WSREP_SST_OPT_ROLE" = "donor" ]
then then
...@@ -85,21 +105,12 @@ then ...@@ -85,21 +105,12 @@ then
sync sync
# Old filter - include everything except selected
# FILTER=(--exclude '*.err' --exclude '*.pid' --exclude '*.sock' \
# --exclude '*.conf' --exclude core --exclude 'galera.*' \
# --exclude grastate.txt --exclude '*.pem' \
# --exclude '*.[0-9][0-9][0-9][0-9][0-9][0-9]' --exclude '*.index')
# New filter - exclude everything except dirs (schemas) and innodb files
FILTER=(-f '- lost+found' -f '+ /ib_lru_dump' -f '+ /ibdata*' -f '+ /ib_logfile*' -f '+ */' -f '-! */*')
# first, the normal directories, so that we can detect incompatible protocol # first, the normal directories, so that we can detect incompatible protocol
RC=0 RC=0
rsync --archive --no-times --ignore-times --inplace --delete --quiet \ rsync --archive --no-times --ignore-times --inplace --delete --quiet \
--no-recursive --dirs \ --no-recursive --dirs \
$WHOLE_FILE_OPT "${FILTER[@]}" "$WSREP_SST_OPT_DATA/" \ $WHOLE_FILE_OPT "${FILTER[@]}" "$WSREP_SST_OPT_DATA/" \
rsync://$WSREP_SST_OPT_ADDR || RC=$? rsync://$WSREP_SST_OPT_ADDR-with_filter || RC=$?
[ $RC -ne 0 ] && wsrep_log_error "rsync returned code $RC:" [ $RC -ne 0 ] && wsrep_log_error "rsync returned code $RC:"
...@@ -122,9 +133,11 @@ then ...@@ -122,9 +133,11 @@ then
# then, we parallelize the transfer of database directories, use . so that pathconcatenation works # then, we parallelize the transfer of database directories, use . so that pathconcatenation works
pushd "$WSREP_SST_OPT_DATA" 1>/dev/null pushd "$WSREP_SST_OPT_DATA" 1>/dev/null
count=$(grep -c processor /proc/cpuinfo) count=1
[ "$OS" == "Linux" ] && count=$(grep -c processor /proc/cpuinfo)
[ "$OS" == "Darwin" -o "$OS" == "FreeBSD" ] && count=$(sysctl -n hw.ncpu)
find . -maxdepth 1 -mindepth 1 -type d -print0 | xargs -i -0 -P $count \ find . -maxdepth 1 -mindepth 1 -type d -print0 | xargs -I{} -0 -P $count \
rsync --archive --no-times --ignore-times --inplace --delete --quiet \ rsync --archive --no-times --ignore-times --inplace --delete --quiet \
$WHOLE_FILE_OPT "$WSREP_SST_OPT_DATA"/{}/ \ $WHOLE_FILE_OPT "$WSREP_SST_OPT_DATA"/{}/ \
rsync://$WSREP_SST_OPT_ADDR/{} || RC=$? rsync://$WSREP_SST_OPT_ADDR/{} || RC=$?
...@@ -151,7 +164,7 @@ then ...@@ -151,7 +164,7 @@ then
echo "continue" # now server can resume updating data echo "continue" # now server can resume updating data
echo "$STATE" > "$MAGIC_FILE" echo "$STATE" > "$MAGIC_FILE"
rsync -aqc "$MAGIC_FILE" rsync://$WSREP_SST_OPT_ADDR rsync --archive --quiet --checksum "$MAGIC_FILE" rsync://$WSREP_SST_OPT_ADDR
echo "done $STATE" echo "done $STATE"
...@@ -180,7 +193,7 @@ then ...@@ -180,7 +193,7 @@ then
fi fi
trap "exit 32" HUP PIPE trap "exit 32" HUP PIPE
trap "exit 3" INT TERM trap "exit 3" INT TERM ABRT
trap cleanup_joiner EXIT trap cleanup_joiner EXIT
MYUID=$(id -u) MYUID=$(id -u)
...@@ -190,6 +203,13 @@ then ...@@ -190,6 +203,13 @@ then
cat << EOF > "$RSYNC_CONF" cat << EOF > "$RSYNC_CONF"
pid file = $RSYNC_PID pid file = $RSYNC_PID
use chroot = no use chroot = no
[$MODULE-with_filter]
path = $WSREP_SST_OPT_DATA
read only = no
timeout = 300
uid = $MYUID
gid = $MYGID
filter = $FILTER_DAEMON
[$MODULE] [$MODULE]
path = $WSREP_SST_OPT_DATA path = $WSREP_SST_OPT_DATA
read only = no read only = no
......
This diff is collapsed.
...@@ -358,6 +358,8 @@ size_t guess_ip (char* buf, size_t buf_len) ...@@ -358,6 +358,8 @@ size_t guess_ip (char* buf, size_t buf_len)
#elif defined(__sun__) #elif defined(__sun__)
const char cmd[] = "/sbin/ifconfig -a | " const char cmd[] = "/sbin/ifconfig -a | "
"/usr/gnu/bin/grep -m1 -1 -E 'net[0-9]:' | tail -n 1 | awk '{ print $2 }'"; "/usr/gnu/bin/grep -m1 -1 -E 'net[0-9]:' | tail -n 1 | awk '{ print $2 }'";
#elif defined(__APPLE__) || defined(__FreeBSD__)
const char cmd[] = "route -nv get 8.8.8.8 | tail -n1 | awk '{print $5}'";
#else #else
char *cmd; char *cmd;
#error "OS not supported" #error "OS not supported"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment