Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 2 May 2018 01:27:12 +0000 (UTC)
From:      "Vanilla I. Shu" <vanilla@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r468809 - in head/databases: . foundationdb foundationdb/files
Message-ID:  <201805020127.w421RCWu084853@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: vanilla
Date: Wed May  2 01:27:12 2018
New Revision: 468809
URL: https://svnweb.freebsd.org/changeset/ports/468809

Log:
  Add foundationdb, yet another distributed database from apple.

Added:
  head/databases/foundationdb/
  head/databases/foundationdb/Makefile   (contents, props changed)
  head/databases/foundationdb/distinfo   (contents, props changed)
  head/databases/foundationdb/files/
  head/databases/foundationdb/files/foundationdb.in   (contents, props changed)
  head/databases/foundationdb/files/patch-FDBLibTLS_local.mk   (contents, props changed)
  head/databases/foundationdb/files/patch-Makefile   (contents, props changed)
  head/databases/foundationdb/files/patch-build_link-wrapper.sh   (contents, props changed)
  head/databases/foundationdb/files/patch-fdbbackup_local.mk   (contents, props changed)
  head/databases/foundationdb/files/patch-fdbcli_local.mk   (contents, props changed)
  head/databases/foundationdb/files/patch-fdbclient_MultiVersionAssignmentVars.h   (contents, props changed)
  head/databases/foundationdb/files/patch-fdbclient_NativeAPI.actor.cpp   (contents, props changed)
  head/databases/foundationdb/files/patch-fdbclient_local.mk   (contents, props changed)
  head/databases/foundationdb/files/patch-fdbmonitor_fdbmonitor.cpp   (contents, props changed)
  head/databases/foundationdb/files/patch-fdbmonitor_local.mk   (contents, props changed)
  head/databases/foundationdb/files/patch-fdbrpc_AsyncFileCached.actor.cpp   (contents, props changed)
  head/databases/foundationdb/files/patch-fdbrpc_AsyncFileCached.actor.h   (contents, props changed)
  head/databases/foundationdb/files/patch-fdbrpc_IAsyncFile.actor.cpp   (contents, props changed)
  head/databases/foundationdb/files/patch-fdbrpc_Platform.cpp   (contents, props changed)
  head/databases/foundationdb/files/patch-fdbrpc_local.mk   (contents, props changed)
  head/databases/foundationdb/files/patch-fdbserver_TLogServer.actor.cpp   (contents, props changed)
  head/databases/foundationdb/files/patch-fdbserver_VFSAsync.cpp   (contents, props changed)
  head/databases/foundationdb/files/patch-fdbserver_fdbserver.actor.cpp   (contents, props changed)
  head/databases/foundationdb/files/patch-fdbserver_local.mk   (contents, props changed)
  head/databases/foundationdb/files/patch-fdbserver_worker.actor.cpp   (contents, props changed)
  head/databases/foundationdb/files/patch-flow_Deque.h   (contents, props changed)
  head/databases/foundationdb/files/patch-flow_FastAlloc.cpp   (contents, props changed)
  head/databases/foundationdb/files/patch-flow_IThreadPool.cpp   (contents, props changed)
  head/databases/foundationdb/files/patch-flow_Net2.actor.cpp   (contents, props changed)
  head/databases/foundationdb/files/patch-flow_Platform.cpp   (contents, props changed)
  head/databases/foundationdb/files/patch-flow_Platform.h   (contents, props changed)
  head/databases/foundationdb/files/patch-flow_ThreadPrimitives.cpp   (contents, props changed)
  head/databases/foundationdb/files/patch-flow_ThreadPrimitives.h   (contents, props changed)
  head/databases/foundationdb/files/patch-flow_libs_system_src_error__code.cpp   (contents, props changed)
  head/databases/foundationdb/files/patch-flow_local.mk   (contents, props changed)
  head/databases/foundationdb/files/patch-foundationdb.conf   (contents, props changed)
  head/databases/foundationdb/pkg-descr   (contents, props changed)
  head/databases/foundationdb/pkg-plist   (contents, props changed)
Modified:
  head/databases/Makefile

Modified: head/databases/Makefile
==============================================================================
--- head/databases/Makefile	Wed May  2 01:24:27 2018	(r468808)
+++ head/databases/Makefile	Wed May  2 01:27:12 2018	(r468809)
@@ -76,6 +76,7 @@
     SUBDIR += firebird25-server
     SUBDIR += flamerobin
     SUBDIR += fortytwo-bdb
+    SUBDIR += foundationdb
     SUBDIR += fpc-dblib
     SUBDIR += fpc-fpindexer
     SUBDIR += fpc-gdbm

Added: head/databases/foundationdb/Makefile
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/Makefile	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,55 @@
+# Created by: vanilla@
+# $FreeBSD$
+
+PORTNAME=	foundationdb
+PORTVERSION=	5.1.7
+CATEGORIES=	databases
+
+MAINTAINER=	vanilla@FreeBSD.org
+COMMENT=	Distributed, transactional key-value store
+
+LICENSE=	APACHE20
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+ONLY_FOR_ARCHS=	amd64
+ONLY_FOR_ARCHS_REASON=	not yet ported to anything other than amd64
+
+BUILD_DEPENDS=	bash:shells/bash
+LIB_DEPENDS=	libboost_system.so:devel/boost-libs \
+		libeio.so:devel/libeio
+
+USES=		gmake mono python:build shebangfix
+USE_GITHUB=	yes
+GH_ACCOUNT=	apple
+USE_RC_SUBR=	foundationdb
+SHEBANG_FILES=	build/link-wrapper.sh bindings/c/generate_asm.py
+MAKE_ENV+=	PYTHON=${PYTHON_CMD}
+
+USERS=		${PORTNAME}
+GROUPS=		${PORTNAME}
+DBDIR?=		/var/db/foundationdb
+LOGDIR?=	/var/log/foundationdb
+
+PLIST_SUB+=	DB_USER=${USERS} \
+		DB_GROUP=${GROUPS} \
+		DB_DIR=${DBDIR} \
+		LOG_DIR=${LOGDIR}
+
+post-patch:
+	@${REINPLACE_CMD} -e 's|%%PREFIX%%|${PREFIX}|g' ${WRKSRC}/foundationdb.conf
+
+do-install:
+	${INSTALL_PROGRAM} ${WRKSRC}/bin/fdbbackup ${STAGEDIR}${PREFIX}/bin
+	${INSTALL_PROGRAM} ${WRKSRC}/bin/fdbcli ${STAGEDIR}${PREFIX}/bin
+	${LN} -sf ${PREFIX}/bin/fdbbackup ${STAGEDIR}${PREFIX}/bin/fdbrestore
+	${INSTALL_PROGRAM} ${WRKSRC}/bin/fdbmonitor ${STAGEDIR}${PREFIX}/sbin
+	${INSTALL_PROGRAM} ${WRKSRC}/bin/fdbserver ${STAGEDIR}${PREFIX}/sbin
+	@${MKDIR} ${STAGEDIR}${PREFIX}/lib/foundationdb
+	@${MKDIR} ${STAGEDIR}${PREFIX}/lib/foundationdb/backup_agent
+	${LN} -sf ${PREFIX}/bin/fdbbackup ${STAGEDIR}${PREFIX}/lib/foundationdb/backup_agent/backup_agent
+	@${MKDIR} ${STAGEDIR}${PREFIX}/etc/foundationdb
+	${INSTALL_DATA} ${WRKSRC}/foundationdb.conf ${STAGEDIR}${PREFIX}/etc/foundationdb/foundationdb.conf.sample
+	@${MKDIR} ${STAGEDIR}${DBDIR}
+	@${MKDIR} ${STAGEDIR}${LOGDIR}
+
+.include <bsd.port.mk>

Added: head/databases/foundationdb/distinfo
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/distinfo	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,3 @@
+TIMESTAMP = 1524403792
+SHA256 (apple-foundationdb-5.1.7_GH0.tar.gz) = 6dd8b391527fc8070c9714117e0ed2ced50d993b20d64f3f2981bf9ef8734870
+SIZE (apple-foundationdb-5.1.7_GH0.tar.gz) = 3982458

Added: head/databases/foundationdb/files/foundationdb.in
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/foundationdb.in	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,33 @@
+#!/bin/sh
+#
+# $FreeBSD$
+#
+
+# PROVIDE: founationdb
+# REQUIRE: LOGIN
+# BEFORE:  securelevel
+# KEYWORD: shutdown
+
+# Add the following line to /etc/rc.conf to enable `foundationdb':
+#
+#foundationdb_enable="YES"
+#
+# Define config file here to run with different config file:
+#
+#foundationdb_config="xxxxx"
+#
+
+. /etc/rc.subr
+
+name="foundationdb"
+rcvar="${name}_enable"
+trafficserver_enable=${trafficserver_enable:-"NO"}
+command=/usr/local/sbin/fdbmonitor
+pidfile="/var/run/fdbmonitor.pid"
+
+load_rc_config "$name"
+: ${foundationdb_enable="NO"}
+: ${foundationdb_config="%%PREFIX%%/etc/foundationdb/foundationdb.conf"}
+
+command_args="--conffile ${foundationdb_config} --lockfile ${pidfile} --daemonize"
+run_rc_command $1

Added: head/databases/foundationdb/files/patch-FDBLibTLS_local.mk
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/patch-FDBLibTLS_local.mk	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,12 @@
+--- FDBLibTLS/local.mk.orig	2018-04-19 02:55:50 UTC
++++ FDBLibTLS/local.mk
+@@ -1,6 +1,6 @@
+-FDBLibTLS_CFLAGS := -fPIC -I/usr/local/include -I$(BOOSTDIR)
+-FDBLibTLS_STATIC_LIBS := -ltls -lssl -lcrypto
+-FDBLibTLS_LDFLAGS := -L/usr/local/lib -static-libstdc++ -static-libgcc -lrt
++FDBLibTLS_CFLAGS := -fPIC -I/usr/local/include -I$(BOOSTDIR)/include
++FDBLibTLS_LIBS := -lssl -lcrypto
++FDBLibTLS_LDFLAGS := -lc++
+ FDBLibTLS_LDFLAGS += -Wl,-soname,FDBLibTLS.so -Wl,--version-script=FDBLibTLS/FDBLibTLS.map
+ 
+ # The plugin isn't a typical library, so it feels more sensible to have a copy

Added: head/databases/foundationdb/files/patch-Makefile
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/patch-Makefile	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,77 @@
+--- Makefile.orig	2018-04-19 02:55:50 UTC
++++ Makefile
+@@ -6,6 +6,8 @@ TOPDIR := $(shell pwd)
+ 
+ ifeq ($(ARCH),x86_64)
+   ARCH := x64
++else ifeq ($(ARCH),amd64)
++  ARCH := x64
+ else
+   $(error Not prepared to compile on $(ARCH))
+ endif
+@@ -15,7 +17,7 @@ ifeq ($(MONO),)
+   MONO := /usr/bin/mono
+ endif
+ 
+-MCS := $(shell which dmcs)
++MCS := $(shell which mcs)
+ ifeq ($(MCS),)
+   MCS := /usr/bin/dmcs
+ endif
+@@ -40,6 +42,15 @@ ifeq ($(PLATFORM),Linux)
+   DLEXT := so
+   java_DLEXT := so
+   TARGET_LIBC_VERSION ?= 2.11
++else ifeq ($(PLATFORM),FreeBSD)
++  PLATFORM := freebsd
++
++  CFLAGS += -DPREFIX=\"$(PREFIX)\" -DCONFDIR=\"$(PREFIX)/etc/foundationdb\"
++  CXXFLAGS += -std=c++11 -stdlib=libc++ -Wno-undefined-var-template -Wno-unknown-warning-option -msse4.2
++
++  BOOSTDIR ?= $(PREFIX)
++  DLEXT := so
++  java_DLEXT := so
+ else ifeq ($(PLATFORM),Darwin)
+   PLATFORM := osx
+ 
+@@ -92,7 +103,7 @@ STATIC_LIBS :=
+ VPATH += $(addprefix :,$(filter-out lib,$(patsubst -L%,%,$(filter -L%,$(LDFLAGS)))))
+ 
+ CS_PROJECTS := flow/actorcompiler flow/coveragetool fdbclient/vexillographer
+-CPP_PROJECTS := flow fdbrpc fdbclient fdbbackup fdbserver fdbcli bindings/c bindings/java fdbmonitor bindings/flow/tester bindings/flow FDBLibTLS
++CPP_PROJECTS := flow fdbrpc fdbclient fdbbackup fdbserver fdbcli bindings/c fdbmonitor bindings/flow/tester bindings/flow
+ OTHER_PROJECTS := bindings/python bindings/ruby bindings/go
+ 
+ CS_MK_GENERATED := $(CS_PROJECTS:=/generated.mk)
+@@ -101,7 +112,7 @@ CPP_MK_GENERATED := $(CPP_PROJECTS:=/gen
+ MK_GENERATED := $(CS_MK_GENERATED) $(CPP_MK_GENERATED)
+ 
+ # build/valgrind.mk needs to be included before any _MK_GENERATED (which in turn includes local.mk)
+-MK_INCLUDE := build/scver.mk build/valgrind.mk $(CS_MK_GENERATED) $(CPP_MK_GENERATED) $(OTHER_PROJECTS:=/include.mk) build/packages.mk
++MK_INCLUDE := $(CS_MK_GENERATED) $(CPP_MK_GENERATED)
+ 
+ ALL_MAKEFILES := Makefile $(MK_INCLUDE) $(patsubst %/generated.mk,%/local.mk,$(MK_GENERATED))
+ 
+@@ -111,7 +122,7 @@ TARGETS =
+ 
+ default: fdbserver fdbbackup fdbcli fdb_c fdb_python fdb_python_sdist
+ 
+-all: $(CS_PROJECTS) $(CPP_PROJECTS) $(OTHER_PROJECTS)
++all: $(CS_PROJECTS) $(CPP_PROJECTS)
+ 
+ # These are always defined and ready to use. Any target that uses them and needs them up to date
+ #  should depend on versions.target
+@@ -133,11 +144,11 @@ Makefiles: $(MK_GENERATED)
+ 
+ $(CS_MK_GENERATED): build/csprojtom4.py build/csproj.mk Makefile
+ 	@echo "Creating       $@"
+-	@python build/csprojtom4.py $(@D)/*.csproj | m4 -DGENDIR="$(@D)" -DGENNAME=`basename $(@D)/*.csproj .csproj` - build/csproj.mk > $(@D)/generated.mk
++	@$(PYTHON) build/csprojtom4.py $(@D)/*.csproj | m4 -DGENDIR="$(@D)" -DGENNAME=`basename $(@D)/*.csproj .csproj` - build/csproj.mk > $(@D)/generated.mk
+ 
+ $(CPP_MK_GENERATED): build/vcxprojtom4.py build/vcxproj.mk Makefile
+ 	@echo "Creating       $@"
+-	@python build/vcxprojtom4.py $(@D)/*.vcxproj | m4 -DGENDIR="$(@D)" -DGENNAME=`basename $(@D)/*.vcxproj .vcxproj` - build/vcxproj.mk > $(@D)/generated.mk
++	@$(PYTHON) build/vcxprojtom4.py $(@D)/*.vcxproj | m4 -DGENDIR="$(@D)" -DGENNAME=`basename $(@D)/*.vcxproj .vcxproj` - build/vcxproj.mk > $(@D)/generated.mk
+ 
+ DEPSDIR := .deps
+ OBJDIR := .objs

Added: head/databases/foundationdb/files/patch-build_link-wrapper.sh
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/patch-build_link-wrapper.sh	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,34 @@
+--- build/link-wrapper.sh.orig	2018-04-25 15:16:53 UTC
++++ build/link-wrapper.sh
+@@ -8,6 +8,9 @@ case $1 in
+ 
+ 	if [ "$1" = "DynamicLibrary" ]; then
+ 	    OPTIONS="-shared"
++	    if [ "$PLATFORM" = "freebsd" ]; then
++		OPTIONS="$OPTIONS -Wl,-z,noexecstack -Wl,-soname,$( basename $3 )"
++	    fi
+ 	    if [ "$PLATFORM" = "linux" ]; then
+ 		OPTIONS="$OPTIONS -Wl,-z,noexecstack -Wl,-soname,$( basename $3 )"
+ 	    fi
+@@ -43,6 +46,11 @@ case $1 in
+ 	    case $1 in
+ 		Application)
+ 		    case $PLATFORM in
++			freebsd)
++			    objcopy --only-keep-debug $3 $3.debug
++			    if [ -z "${NOSTRIP}" ]; then strip --strip-debug --strip-unneeded $3; fi
++			    objcopy --add-gnu-debuglink=$3.debug $3
++			    ;;
+ 			linux)
+ 			    objcopy --only-keep-debug $3 $3.debug
+ 			    if [ -z "${NOSTRIP}" ]; then strip --strip-debug --strip-unneeded $3; fi
+@@ -62,6 +70,9 @@ case $1 in
+ 		DynamicLibrary)
+ 		    cp $3 $3-debug
+ 		    case $PLATFORM in
++			freebsd)
++			    if [ -z "${NOSTRIP}" ]; then strip --strip-all $3; fi
++			    ;;
+ 			linux)
+ 			    if [ -z "${NOSTRIP}" ]; then strip --strip-all $3; fi
+ 			    ;;

Added: head/databases/foundationdb/files/patch-fdbbackup_local.mk
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/patch-fdbbackup_local.mk	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,11 @@
+--- fdbbackup/local.mk.orig	2018-04-19 02:55:50 UTC
++++ fdbbackup/local.mk
+@@ -34,6 +34,8 @@ ifeq ($(PLATFORM),linux)
+   # fdbbackup_STATIC_LIBS += -ltcmalloc -lunwind -lprofiler
+ else ifeq ($(PLATFORM),osx)
+   fdbbackup_LDFLAGS += -lc++
++else ifeq ($(PLATFORM),freebsd)
++  fdbbackup_LDFLAGS += -lc++ -lm -lexecinfo -lpthread -leio
+ endif
+ 
+ fdbbackup_GENERATED_SOURCES += versions.h

Added: head/databases/foundationdb/files/patch-fdbcli_local.mk
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/patch-fdbcli_local.mk	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,20 @@
+--- fdbcli/local.mk.orig	2018-04-19 02:55:50 UTC
++++ fdbcli/local.mk
+@@ -22,7 +22,7 @@
+ 
+ fdbcli_CFLAGS := $(fdbclient_CFLAGS)
+ fdbcli_LDFLAGS := $(fdbrpc_LDFLAGS)
+-fdbcli_LIBS := lib/libfdbclient.a lib/libfdbrpc.a lib/libflow.a -ldl
++fdbcli_LIBS := lib/libfdbclient.a lib/libfdbrpc.a lib/libflow.a
+ fdbcli_STATIC_LIBS :=
+ 
+ fdbcli_GENERATED_SOURCES += versions.h
+@@ -32,6 +32,8 @@ ifeq ($(PLATFORM),linux)
+   fdbcli_LIBS += -lpthread -lrt
+ else ifeq ($(PLATFORM),osx)
+   fdbcli_LDFLAGS += -lc++
++else ifeq ($(PLATFORM),freebsd)
++  fdbcli_LDFLAGS += -lc++ -lm -lpthread -leio -lexecinfo
+ endif
+ 
+ test_fdbcli_status: fdbcli

Added: head/databases/foundationdb/files/patch-fdbclient_MultiVersionAssignmentVars.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/patch-fdbclient_MultiVersionAssignmentVars.h	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,11 @@
+--- fdbclient/MultiVersionAssignmentVars.h.orig	2018-04-29 11:43:19 UTC
++++ fdbclient/MultiVersionAssignmentVars.h
+@@ -135,7 +135,7 @@ public:
+ 	~DLThreadSingleAssignmentVar() {
+ 		lock.assertNotEntered();
+ 		if(f) {
+-			ASSERT(futureRefCount == 1);
++			ASSERT_ABORT(futureRefCount == 1);
+ 			api->futureDestroy(f);
+ 		}
+ 	}

Added: head/databases/foundationdb/files/patch-fdbclient_NativeAPI.actor.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/patch-fdbclient_NativeAPI.actor.cpp	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,20 @@
+--- fdbclient/NativeAPI.actor.cpp.orig	2018-04-28 15:48:35 UTC
++++ fdbclient/NativeAPI.actor.cpp
+@@ -93,7 +93,7 @@ LocationInfo::~LocationInfo() {
+ 		for( auto const& alternative : getAlternatives() )
+ 			handles.push_back( alternative.v.getVersion.getEndpoint().token ); // must match above choice of UID
+ 		std::sort( handles.begin(), handles.end() );
+-		ASSERT( handles.size() );
++		ASSERT_ABORT( handles.size() );
+ 
+ 		auto it = cx->ssid_locationInfo.find( handles );
+ 		if( it != cx->ssid_locationInfo.end() )
+@@ -540,7 +540,7 @@ DatabaseContext::~DatabaseContext() {
+ 	monitorMasterProxiesInfoChange.cancel();
+ 	for(auto it = ssid_locationInfo.begin(); it != ssid_locationInfo.end(); it = ssid_locationInfo.erase(it))
+ 		it->second->notifyContextDestroyed();
+-	ASSERT( ssid_locationInfo.empty() );
++	ASSERT_ABORT( ssid_locationInfo.empty() );
+ 	locationCache.insert( allKeys, Reference<LocationInfo>() );
+ }
+ 

Added: head/databases/foundationdb/files/patch-fdbclient_local.mk
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/patch-fdbclient_local.mk	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,11 @@
+--- fdbclient/local.mk.orig	2018-04-26 06:55:09 UTC
++++ fdbclient/local.mk
+@@ -21,7 +21,7 @@
+ # -*- mode: makefile; -*-
+ 
+ fdbclient_CFLAGS := $(fdbrpc_CFLAGS)
+-
++fdbclient_LIBS := -lm -lc++ -lpthread -lexecinfo -leio
+ fdbclient_GENERATED_SOURCES += fdbclient/FDBOptions.g.h
+ 
+ fdbclient/FDBOptions.g.cpp: fdbclient/FDBOptions.g.h

Added: head/databases/foundationdb/files/patch-fdbmonitor_fdbmonitor.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/patch-fdbmonitor_fdbmonitor.cpp	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,165 @@
+--- fdbmonitor/fdbmonitor.cpp.orig	2018-04-19 02:55:50 UTC
++++ fdbmonitor/fdbmonitor.cpp
+@@ -35,6 +35,10 @@
+ #include <linux/limits.h>
+ #endif
+ 
++#ifdef __FreeBSD__
++#include <sys/event.h>
++#endif
++
+ #ifdef __APPLE__
+ #include <sys/event.h>
+ #include <mach/mach.h>
+@@ -72,7 +76,7 @@
+ 
+ #ifdef __linux__
+ typedef fd_set* fdb_fd_set;
+-#elif defined __APPLE__
++#elif defined(__APPLE__) || defined(__FreeBSD__)
+ typedef int fdb_fd_set;
+ #endif
+ 
+@@ -83,7 +87,7 @@ void monitor_fd( fdb_fd_set list, int fd
+ 	FD_SET( fd, list );
+ 	if ( fd > *maxfd )
+ 		*maxfd = fd;
+-#elif defined __APPLE__
++#elif defined(__APPLE__) || defined(__FreeBSD__)
+ 	/* ignore maxfd */
+ 	struct kevent ev;
+ 	EV_SET( &ev, fd, EVFILT_READ, EV_ADD, 0, 0, cmd );
+@@ -94,7 +98,7 @@ void monitor_fd( fdb_fd_set list, int fd
+ void unmonitor_fd( fdb_fd_set list, int fd ) {
+ #ifdef __linux__
+ 	FD_CLR( fd, list );
+-#elif defined __APPLE__
++#elif defined(__APPLE__) || defined(__FreeBSD__)
+ 	struct kevent ev;
+ 	EV_SET( &ev, fd, EVFILT_READ, EV_DELETE, 0, 0, NULL );
+ 	kevent( list, &ev, 1, NULL, 0, NULL ); // FIXME: check?
+@@ -188,7 +192,7 @@ const char* get_value_multi(const CSimpl
+ }
+ 
+ double timer() {
+-#if defined(__linux__)
++#if defined(__linux__) || defined(__FreeBSD__)
+ 	struct timespec ts;
+ 	clock_gettime(CLOCK_MONOTONIC, &ts);
+ 	return double(ts.tv_sec) + (ts.tv_nsec * 1e-9);
+@@ -822,7 +826,7 @@ void read_child_output( Command* cmd, in
+ 	}
+ }
+ 
+-#ifdef __APPLE__
++#if defined(__APPLE__) || defined(__FreeBSD__)
+ void watch_conf_dir( int kq, int* confd_fd, std::string confdir ) {
+ 	struct kevent ev;
+ 	std::string original = confdir;
+@@ -839,7 +843,7 @@ void watch_conf_dir( int kq, int* confd_
+ 		std::string child = confdir;
+ 
+ 		/* Find the nearest existing ancestor */
+-		while( (*confd_fd = open( confdir.c_str(), O_EVTONLY )) < 0 && errno == ENOENT ) {
++		while( (*confd_fd = open( confdir.c_str(), O_RDONLY )) < 0 && errno == ENOENT ) {
+ 			child = confdir;
+ 			confdir = parentDirectory(confdir);
+ 		}
+@@ -876,7 +880,7 @@ void watch_conf_file( int kq, int* conff
+ 	}
+ 
+ 	/* Open and watch */
+-	*conff_fd = open( confpath, O_EVTONLY );
++	*conff_fd = open( confpath, O_RDONLY );
+ 	if ( *conff_fd >= 0 ) {
+ 		EV_SET( &ev, *conff_fd, EVFILT_VNODE, EV_ADD | EV_CLEAR, NOTE_WRITE | NOTE_ATTRIB, 0, NULL );
+ 		kevent( kq, &ev, 1, NULL, 0, NULL );
+@@ -983,7 +987,7 @@ std::unordered_map<int, std::unordered_s
+ 
+ int main(int argc, char** argv) {
+ 	std::string lockfile = "/var/run/fdbmonitor.pid";
+-	std::string _confpath = "/etc/foundationdb/foundationdb.conf";
++	std::string _confpath = std::string(PREFIX) + "/etc/foundationdb/foundationdb.conf";
+ 
+ 	std::vector<const char *> additional_watch_paths;
+ 
+@@ -1065,7 +1069,7 @@ int main(int argc, char** argv) {
+ 	/* only linux needs this, but... */
+ 	int maxfd = 0;
+ 
+-#ifdef __linux__
++#if defined(__linux__)
+ 	fd_set rfds;
+ 	watched_fds = &rfds;
+ 
+@@ -1080,12 +1084,12 @@ int main(int argc, char** argv) {
+ 	CSimpleIniA* ini = NULL;
+ 
+ 	if (daemonize) {
+-#ifdef __APPLE__
++#if defined(__APPLE__) || defined(__FreeBSD__)
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+ #endif
+ 		if (daemon(0, 0)) {
+-#ifdef __APPLE__
++#if defined(__APPLE__) || defined(__FreeBSD__)
+ #pragma GCC diagnostic pop
+ #endif
+ 			log_err("daemon", errno, "Unable to daemonize");
+@@ -1138,12 +1142,12 @@ int main(int argc, char** argv) {
+ 	snprintf(pid_buf, sizeof(pid_buf), "%d\n", getpid());
+ 	ssize_t ign = write(lockfile_fd, pid_buf, strlen(pid_buf));
+ 
+-#ifdef __linux__
++#if defined(__linux__)
+ 	/* attempt to do clean shutdown and remove lockfile when killed */
+ 	signal(SIGHUP, signal_handler);
+ 	signal(SIGINT, signal_handler);
+ 	signal(SIGTERM, signal_handler);
+-#elif defined(__APPLE__)
++#elif defined(__APPLE__) || defined(__FreeBSD__)
+ 	int kq = kqueue();
+ 	if ( kq < 0 ) {
+ 		log_err( "kqueue", errno, "Unable to create kqueue" );
+@@ -1174,7 +1178,7 @@ int main(int argc, char** argv) {
+ 
+ #endif
+ 
+-#ifdef __linux__
++#if defined(__linux__)
+ 	signal(SIGCHLD, child_handler);
+ #endif
+ 
+@@ -1188,11 +1192,11 @@ int main(int argc, char** argv) {
+ 	/* normal will be restored in our main loop in the call to
+ 	   pselect, but none blocks all signals while processing events */
+ 	sigprocmask(SIG_SETMASK, &full_mask, &normal_mask);
+-#elif defined(__APPLE__)
++#elif defined(__APPLE__) || defined(__FreeBSD__)
+ 	sigprocmask(0, NULL, &normal_mask);
+ #endif
+ 
+-#ifdef __APPLE__
++#if defined(__APPLE__) || defined(__FreeBSD__)
+ 	struct stat st_buf;
+ 	struct timespec mtimespec;
+ 
+@@ -1251,7 +1255,7 @@ int main(int argc, char** argv) {
+ 
+ 			load_conf(confpath.c_str(), uid, gid, &normal_mask, &rfds, &maxfd);
+ 			reload_additional_watches = false;
+-#elif defined(__APPLE__)
++#elif defined(__APPLE__) || defined(__FreeBSD__)
+ 			load_conf( confpath.c_str(), uid, gid, &normal_mask, watched_fds, &maxfd );
+ 			watch_conf_file( kq, &conff_fd, confpath.c_str() );
+ 			watch_conf_dir( kq, &confd_fd, confdir );
+@@ -1289,7 +1293,7 @@ int main(int argc, char** argv) {
+ 		if(nfds == 0) {
+ 			reload = true;
+ 		}
+-#elif defined(__APPLE__)
++#elif defined(__APPLE__) || defined(__FreeBSD__)
+ 		int nev = 0;
+ 		if(timeout < 0) {
+ 			nev = kevent( kq, NULL, 0, &ev, 1, NULL );

Added: head/databases/foundationdb/files/patch-fdbmonitor_local.mk
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/patch-fdbmonitor_local.mk	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,11 @@
+--- fdbmonitor/local.mk.orig	2018-04-26 01:54:14 UTC
++++ fdbmonitor/local.mk
+@@ -27,6 +27,8 @@ ifeq ($(PLATFORM),linux)
+   fdbmonitor_LDFLAGS := -static-libstdc++ -static-libgcc -lrt
+ else ifeq ($(PLATFORM),osx)
+   fdbmonitor_LDFLAGS := -lc++
++else ifeq ($(PLATFORM),freebsd)
++  fdbmonitor_LDFLAGS := -lc++ -lm
+ endif
+ 
+ bin/fdbmonitor.debug: bin/fdbmonitor

Added: head/databases/foundationdb/files/patch-fdbrpc_AsyncFileCached.actor.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/patch-fdbrpc_AsyncFileCached.actor.cpp	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,20 @@
+--- fdbrpc/AsyncFileCached.actor.cpp.orig	2018-04-19 02:55:50 UTC
++++ fdbrpc/AsyncFileCached.actor.cpp
+@@ -31,7 +31,7 @@ EvictablePage::~EvictablePage() {
+ 		if (pageCache->pageSize == 4096)
+ 			FastAllocator<4096>::release(data);
+ 		else
+-			aligned_free(data);
++			free(data);
+ 	}
+ 	if (index > -1) {
+ 		pageCache->pages[index] = pageCache->pages.back();
+@@ -233,7 +233,7 @@ Future<Void> AsyncFileCached::quiesce() 
+ AsyncFileCached::~AsyncFileCached() {
+ 	while ( !pages.empty() ) {
+ 		auto ok = pages.begin()->second->evict();
+-		ASSERT( ok );
++		ASSERT_ABORT( ok );
+ 	}
+ 	openFiles.erase( filename );
+ }

Added: head/databases/foundationdb/files/patch-fdbrpc_AsyncFileCached.actor.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/patch-fdbrpc_AsyncFileCached.actor.h	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,11 @@
+--- fdbrpc/AsyncFileCached.actor.h.orig	2018-04-28 14:44:18 UTC
++++ fdbrpc/AsyncFileCached.actor.h
+@@ -450,7 +450,7 @@ struct AFCPage : public EvictablePage, p
+ 
+ 	virtual ~AFCPage() {
+ 		clearDirty();
+-		ASSERT( flushableIndex == -1 );
++		ASSERT_ABORT( flushableIndex == -1 );
+ 	}
+ 
+ 	void setDirty() {

Added: head/databases/foundationdb/files/patch-fdbrpc_IAsyncFile.actor.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/patch-fdbrpc_IAsyncFile.actor.cpp	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,11 @@
+--- fdbrpc/IAsyncFile.actor.cpp.orig	2018-04-25 15:06:34 UTC
++++ fdbrpc/IAsyncFile.actor.cpp
+@@ -42,7 +42,7 @@ ACTOR static Future<Void> zeroRangeHelpe
+ 		Void _ = wait( yield() );
+ 	}
+ 
+-	aligned_free(zeros);
++	free(zeros);
+ 	return Void();
+ }
+ 

Added: head/databases/foundationdb/files/patch-fdbrpc_Platform.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/patch-fdbrpc_Platform.cpp	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,22 @@
+--- fdbrpc/Platform.cpp.orig	2018-04-19 02:55:50 UTC
++++ fdbrpc/Platform.cpp
+@@ -87,7 +87,7 @@ int eraseDirectoryRecursive(std::string 
+ 	__eraseDirectoryRecurseiveCount = 0;
+ #ifdef _WIN32
+ 	system( ("rd /s /q \"" + dir + "\"").c_str() );
+-#elif defined(__linux__) || defined(__APPLE__)
++#elif defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
+ 	int error =
+ 		nftw(dir.c_str(),
+ 			[](const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf) -> int {
+@@ -122,8 +122,8 @@ std::string getDefaultConfigPath() {
+ 	return _filepath + "\\foundationdb";
+ #elif defined(__linux__)
+ 	return "/etc/foundationdb";
+-#elif defined(__APPLE__)
+-	return "/usr/local/etc/foundationdb";
++#elif defined(__APPLE__) || defined(__FreeBSD__)
++	return CONFDIR;
+ #else
+ 	#error Port me!
+ #endif

Added: head/databases/foundationdb/files/patch-fdbrpc_local.mk
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/patch-fdbrpc_local.mk	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,17 @@
+--- fdbrpc/local.mk.orig	2018-04-19 02:55:50 UTC
++++ fdbrpc/local.mk
+@@ -20,10 +20,11 @@
+ 
+ # -*- mode: makefile; -*-
+ 
+-fdbrpc_BUILD_SOURCES += fdbrpc/libeio/eio.c
++#fdbrpc_BUILD_SOURCES += fdbrpc/libeio/eio.c
+ 
+-fdbrpc_CFLAGS := -I$(BOOSTDIR) -I. -Ifdbrpc -Ifdbrpc/libeio -DUSE_UCONTEXT
+-fdbrpc_LDFLAGS :=
++fdbrpc_CFLAGS := -I$(BOOSTDIR)/include -I. -Ifdbrpc -Ifdbrpc/libeio -DUSE_UCONTEXT
++fdbrpc_LDFLAGS := -L$(BOOSTDIR)/lib
++fdbrpc_LIBS := -lm -lc++ -lpthread -leio
+ 
+ ifeq ($(PLATFORM),osx)
+   fdbrpc_CFLAGS += -fasynchronous-unwind-tables -fno-omit-frame-pointer

Added: head/databases/foundationdb/files/patch-fdbserver_TLogServer.actor.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/patch-fdbserver_TLogServer.actor.cpp	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,11 @@
+--- fdbserver/TLogServer.actor.cpp.orig	2018-04-28 15:41:40 UTC
++++ fdbserver/TLogServer.actor.cpp
+@@ -425,7 +425,7 @@ struct LogData : NonCopyable, public Ref
+ 		tLogData->bytesDurable += bytesInput.getValue() - bytesDurable.getValue();
+ 		TraceEvent("TLogBytesWhenRemoved", tli.id()).detail("sharedBytesInput", tLogData->bytesInput).detail("sharedBytesDurable", tLogData->bytesDurable).detail("localBytesInput", bytesInput.getValue()).detail("localBytesDurable", bytesDurable.getValue());
+ 
+-		ASSERT(tLogData->bytesDurable <= tLogData->bytesInput);
++		ASSERT_ABORT(tLogData->bytesDurable <= tLogData->bytesInput);
+ 		endRole(tli.id(), "TLog", "Error", true);
+ 
+ 		if(!tLogData->terminated) {

Added: head/databases/foundationdb/files/patch-fdbserver_VFSAsync.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/patch-fdbserver_VFSAsync.cpp	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,11 @@
+--- fdbserver/VFSAsync.cpp.orig	2018-04-28 14:51:27 UTC
++++ fdbserver/VFSAsync.cpp
+@@ -460,7 +460,7 @@ static int asyncDeviceCharacteristics(sq
+ 			//resulting in a locking error
+ 			auto itr = SharedMemoryInfo::table.find(filename);
+ 			if(itr != SharedMemoryInfo::table.end()) {
+-				ASSERT(itr->second.refcount == 0);
++				ASSERT_ABORT(itr->second.refcount == 0);
+ 				itr->second.cleanup();
+ 			}
+ 		}

Added: head/databases/foundationdb/files/patch-fdbserver_fdbserver.actor.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/patch-fdbserver_fdbserver.actor.cpp	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,37 @@
+--- fdbserver/fdbserver.actor.cpp.orig	2018-04-19 02:55:50 UTC
++++ fdbserver/fdbserver.actor.cpp
+@@ -59,7 +59,7 @@
+ #define BOOST_DATE_TIME_NO_LIB
+ #include <boost/interprocess/managed_shared_memory.hpp>
+ 
+-#ifdef  __linux__
++#if defined(__linux__) || defined(__FreeBSD__)
+ #include <execinfo.h>
+ #include <signal.h>
+ #ifdef ALLOC_INSTRUMENTATION
+@@ -72,6 +72,7 @@
+ #endif
+ 
+ #include "flow/SimpleOpt.h"
++#include <fstream>
+ 
+ enum {
+ 	OPT_CONNFILE, OPT_SEEDCONNFILE, OPT_SEEDCONNSTRING, OPT_ROLE, OPT_LISTEN, OPT_PUBLICADDR, OPT_DATAFOLDER, OPT_LOGFOLDER, OPT_PARENTPID, OPT_NEWCONSOLE, OPT_NOBOX, OPT_TESTFILE, OPT_RESTARTING, OPT_RANDOMSEED, OPT_KEY, OPT_MEMLIMIT, OPT_STORAGEMEMLIMIT, OPT_MACHINEID, OPT_DCID, OPT_MACHINE_CLASS, OPT_BUGGIFY, OPT_VERSION, OPT_CRASHONERROR, OPT_HELP, OPT_NETWORKIMPL, OPT_NOBUFSTDOUT, OPT_BUFSTDOUTERR, OPT_TRACECLOCK, OPT_NUMTESTERS, OPT_DEVHELP, OPT_ROLLSIZE, OPT_MAXLOGS, OPT_MAXLOGSSIZE, OPT_KNOB, OPT_TESTSERVERS, OPT_TEST_ON_SERVERS, OPT_METRICSCONNFILE, OPT_METRICSPREFIX,
+@@ -350,7 +351,7 @@ public:
+ 			throw platform_error();
+ 		}
+ 		permission.set_permissions( &sa );
+-#elif (defined(__linux__) || defined(__APPLE__))
++#elif (defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__))
+ 		// There is nothing to do here, since the default permissions are fine
+ #else
+ 		#error Port me!
+@@ -360,7 +361,7 @@ public:
+ 	virtual ~WorldReadablePermissions() {
+ #ifdef _WIN32
+ 		LocalFree( sa.lpSecurityDescriptor );
+-#elif (defined(__linux__) || defined(__APPLE__))
++#elif (defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__))
+ 		// There is nothing to do here, since the default permissions are fine
+ #else
+ 		#error Port me!

Added: head/databases/foundationdb/files/patch-fdbserver_local.mk
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/patch-fdbserver_local.mk	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,11 @@
+--- fdbserver/local.mk.orig	2018-04-19 02:55:50 UTC
++++ fdbserver/local.mk
+@@ -34,6 +34,8 @@ ifeq ($(PLATFORM),linux)
+   # fdbserver_STATIC_LIBS += -ltcmalloc -lunwind -lprofiler
+ else ifeq ($(PLATFORM),osx)
+   fdbserver_LDFLAGS += -lc++
++else ifeq ($(PLATFORM),freebsd)
++  fdbserver_LDFLAGS += -lc++ -lm -lpthread -lexecinfo -leio
+ endif
+ 
+ ifeq ($(WORKLOADS),false)

Added: head/databases/foundationdb/files/patch-fdbserver_worker.actor.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/patch-fdbserver_worker.actor.cpp	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,38 @@
+--- fdbserver/worker.actor.cpp.orig	2018-04-26 12:45:22 UTC
++++ fdbserver/worker.actor.cpp
+@@ -39,7 +39,7 @@
+ #include "fdbclient/ClientWorkerInterface.h"
+ #include "flow/Profiler.h"
+ 
+-#ifdef __linux__
++#if defined(__linux__) || defined(__FreeBSD__)
+ #ifdef USE_GPERFTOOLS
+ #include "gperftools/profiler.h"
+ #endif
+@@ -267,7 +267,7 @@ ACTOR Future<Void> registrationClient( R
+ 	}
+ }
+ 
+-#if defined(__linux__) && defined(USE_GPERFTOOLS)
++#if (defined(__linux__) || defined(__FreeBSD__)) && defined(USE_GPERFTOOLS)
+ //A set of threads that should be profiled
+ std::set<std::thread::id> profiledThreads;
+ 
+@@ -279,7 +279,7 @@ int filter_in_thread(void *arg) {
+ 
+ //Enables the calling thread to be profiled
+ void registerThreadForProfiling() {
+-#if defined(__linux__) && defined(USE_GPERFTOOLS)
++#if (defined(__linux__) || defined(__FreeBSD__)) && defined(USE_GPERFTOOLS)
+ 	//Not sure if this is actually needed, but a call to backtrace was advised here:
+ 	//http://groups.google.com/group/google-perftools/browse_thread/thread/0dfd74532e038eb8/2686d9f24ac4365f?pli=1
+ 	profiledThreads.insert(std::this_thread::get_id());
+@@ -293,7 +293,7 @@ void registerThreadForProfiling() {
+ void updateCpuProfiler(ProfilerRequest req) {
+ 	switch (req.type) {
+ 	case ProfilerRequest::Type::GPROF:
+-#if defined(__linux__) && defined(USE_GPERFTOOLS) && !defined(VALGRIND)
++#if (defined(__linux__) || defined(__FreeBSD__)) && defined(USE_GPERFTOOLS) && !defined(VALGRIND)
+ 		switch (req.action) {
+ 		case ProfilerRequest::Action::ENABLE: {
+ 			const char *path = (const char*)req.outputFile.begin();

Added: head/databases/foundationdb/files/patch-flow_Deque.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/patch-flow_Deque.h	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,23 @@
+--- flow/Deque.h.orig	2018-04-22 14:36:29 UTC
++++ flow/Deque.h
+@@ -166,7 +166,7 @@ private:
+ 			new (&newArr[i - begin]) T(std::move(arr[i&mask]));
+ 			arr[i&mask].~T();
+ 		}
+-		aligned_free(arr);
++		free(arr);
+ 		arr = newArr;
+ 		end -= begin;
+ 		begin = 0;
+@@ -177,8 +177,8 @@ private:
+ 		for (int i = begin; i != end; i++)
+ 			arr[i&mask].~T();
+ 		if(arr)
+-			aligned_free(arr);
++			free(arr);
+ 	}
+ };
+ 
+-#endif
+\ No newline at end of file
++#endif

Added: head/databases/foundationdb/files/patch-flow_FastAlloc.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/patch-flow_FastAlloc.cpp	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,12 @@
+--- flow/FastAlloc.cpp.orig	2018-04-22 14:45:22 UTC
++++ flow/FastAlloc.cpp
+@@ -51,6 +51,9 @@
+ #elif defined(__APPLE__)
+ #pragma message "init_priority is not supported on this platform; will this be a problem?"
+ #define INIT_SEG
++#elif defined(__FreeBSD__)
++#pragma message "init_priority is not supported on this platform; will this be a problem?"
++#define INIT_SEG
+ #else
+ #error Where am I?
+ #endif

Added: head/databases/foundationdb/files/patch-flow_IThreadPool.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/patch-flow_IThreadPool.cpp	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,11 @@
+--- flow/IThreadPool.cpp.orig	2018-04-28 14:40:31 UTC
++++ flow/IThreadPool.cpp
+@@ -35,7 +35,7 @@ class ThreadPool : public IThreadPool, p
+ 		Event stopped;
+ 		static thread_local IThreadPoolReceiver* threadUserObject;
+ 		explicit Thread(ThreadPool *pool, IThreadPoolReceiver *userObject) : pool(pool), userObject(userObject) {}
+-		~Thread() { ASSERT(!userObject); }
++		~Thread() { ASSERT_ABORT(!userObject); }
+ 
+ 		void run() {
+ 			deprioritizeThread();

Added: head/databases/foundationdb/files/patch-flow_Net2.actor.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/patch-flow_Net2.actor.cpp	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,21 @@
+--- flow/Net2.actor.cpp.orig	2018-04-19 02:55:50 UTC
++++ flow/Net2.actor.cpp
+@@ -56,7 +56,7 @@ uint64_t compatibleProtocolVersionMask =
+ uint64_t minValidProtocolVersion       = 0x0FDB00A200060001LL;
+ 
+ 
+-#if defined(__linux__)
++#if defined(__linux__) || defined(__FreeBSD__)
+ #include <execinfo.h>
+ 
+ volatile double net2liveness = 0;
+@@ -403,8 +403,7 @@ private:
+ 
+ 	void init() {
+ 		// Socket settings that have to be set after connect or accept succeeds
+-		boost::asio::socket_base::non_blocking_io nbio(true);
+-		socket.io_control(nbio);
++		socket.non_blocking(true);
+ 		socket.set_option(boost::asio::ip::tcp::no_delay(true));
+ 	}
+ 

Added: head/databases/foundationdb/files/patch-flow_Platform.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/databases/foundationdb/files/patch-flow_Platform.cpp	Wed May  2 01:27:12 2018	(r468809)
@@ -0,0 +1,304 @@
+--- flow/Platform.cpp.orig	2018-04-19 02:55:50 UTC
++++ flow/Platform.cpp
+@@ -71,6 +71,7 @@
+ 
+ #include <dirent.h>
+ #include <sys/time.h>
++#include <sys/user.h>
+ #include <sys/mman.h>
+ #include <unistd.h>
+ #include <ftw.h>
+@@ -119,6 +120,12 @@
+ #include <IOKit/IOBSD.h>
+ #endif
+ 
++#ifdef __FreeBSD__
++#include <sys/param.h>
++#include <sys/sysctl.h>
++#include <sys/cpuset.h>
++#include <sys/resource.h>
++#endif
+ #endif
+ 
+ std::string removeWhitespace(const std::string &t)
+@@ -198,7 +205,7 @@ double getProcessorTimeThread() {
+ 		throw platform_error();
+ 	}
+ 	return FiletimeAsInt64(ftKernel) / double(1e7) + FiletimeAsInt64(ftUser) / double(1e7);
+-#elif defined(__linux__)
++#elif defined(__linux__) || defined(__FreeBSD__)
+ 	return getProcessorTimeGeneric(RUSAGE_THREAD);
+ #elif defined(__APPLE__)
+ 	/* No RUSAGE_THREAD so we use the lower level interface */
+@@ -266,6 +273,14 @@ uint64_t getResidentMemoryUsage() {
+ 		throw platform_error();
+ 	}
+ 	return info.resident_size;
++#elif defined(__FreeBSD__)
++	struct rusage rusage;
++
++	if (getrusage(RUSAGE_SELF | RUSAGE_THREAD, &rusage) == 0) {
++		return rusage.ru_maxrss;
++	}
++
++	return 0;
+ #else
+ 	#warning getMemoryUsage unimplemented on this platform
+ 	return 0;
+@@ -304,7 +319,7 @@ uint64_t getMemoryUsage() {
+ 	}
+ 	return info.virtual_size;
+ #else
+-	#warning getMemoryUsage unimplemented on this platform
++	//#warning getMemoryUsage unimplemented on this platform
+ 	return 0;
+ #endif
+ }
+@@ -427,6 +442,24 @@ void getMachineRAMInfo(MachineRAMInfo& m
+ 	memInfo.total = pagesize * (vm_stat.free_count + vm_stat.active_count + vm_stat.inactive_count + vm_stat.wire_count);
+ 	memInfo.available = pagesize * vm_stat.free_count;
+ 	memInfo.committed = memInfo.total - memInfo.available;
++#elif defined(__FreeBSD__)
++	size_t len;
++	int pagesize = getpagesize(), free_pages;
++	u_long total;
++
++	len = sizeof(total);
++	if (sysctlbyname("hw.physmem", &total, &len, NULL, 0) == -1)
++		total = 0;
++
++	total = total / 1024;
++
++	len = sizeof(free_pages);
++	if((sysctlbyname("vm.stats.vm.v_free_count", &free_pages, &len, NULL, 0) == -1) || !len)
++		free_pages = 0;
++
++	memInfo.total = total;
++	memInfo.available = (pagesize / 1024) * free_pages;
++	memInfo.committed = memInfo.total - memInfo.available;
+ #else
+ 	#warning getMachineRAMInfo unimplemented on this platform
+ #endif
+@@ -435,7 +468,7 @@ void getMachineRAMInfo(MachineRAMInfo& m
+ void getDiskBytes(std::string const& directory, int64_t& free, int64_t& total) {
+ 	INJECT_FAULT( platform_error, "getDiskBytes" );
+ #if defined(__unixish__)
+-#ifdef __linux__
++#if defined(__linux__) || defined(__FreeBSD__)
+ 	struct statvfs buf;
+ 	if (statvfs(directory.c_str(), &buf)) {
+ 		TraceEvent(SevError, "GetDiskBytesStatvfsError").detail("Directory", directory).GetLastError();
+@@ -477,7 +510,7 @@ void getDiskBytes(std::string const& dir
+ #endif
+ }
+ 
+-#ifdef __unixish__
++#if defined(__linux__) || defined(__APPLE__)
+ const char* getInterfaceName(uint32_t _ip) {
+ 	INJECT_FAULT( platform_error, "getInterfaceName" );
+ 	static char iname[20];
+@@ -724,6 +757,30 @@ dev_t getDeviceId(std::string path) {
+ 
+ #endif
+ 
++#ifdef __FreeBSD__
++void getNetworkTraffic(uint32_t ip, uint64_t& bytesSent, uint64_t& bytesReceived,
++					   uint64_t& outSegs, uint64_t& retransSegs) {
++	bytesReceived = 0;
++	bytesSent = 0;
++	outSegs = 0;
++	retransSegs = 0;
++}
++
++void getMachineLoad(uint64_t& idleTime, uint64_t& totalTime) {
++	idleTime = 0;
++	totalTime = 0;
++}
++
++void getDiskStatistics(std::string const& directory, uint64_t& currentIOs, uint64_t& busyTicks, uint64_t& reads, uint64_t& writes, uint64_t& writeSectors, uint64_t& readSectors) {
++	currentIOs = 0;
++	busyTicks = 0;
++	writes = 0;
++	reads = 0;
++	writeSectors = 0;
++	readSectors = 0;
++}
++#endif
++
+ #ifdef __APPLE__
+ void getNetworkTraffic(uint32_t ip, uint64_t& bytesSent, uint64_t& bytesReceived,
+ 					   uint64_t& outSegs, uint64_t& retransSegs) {
+@@ -1247,7 +1304,7 @@ struct OffsetTimer {
+ 		return offset + count * secondsPerCount;
+ 	}
+ };
+-#elif defined(__linux__)
++#elif defined(__linux__) || defined(__FreeBSD__)
+ #define DOUBLETIME(ts) (double(ts.tv_sec) + (ts.tv_nsec * 1e-9))
+ #ifndef CLOCK_MONOTONIC_RAW
+ #define CLOCK_MONOTONIC_RAW 4 // Confirmed safe to do with glibc >= 2.11 and kernel >= 2.6.28. No promises with older glibc. Older kernel definitely breaks it.
+@@ -1312,7 +1369,7 @@ double timer() {
+ 	GetSystemTimeAsFileTime(&fileTime);
+ 	static_assert( sizeof(fileTime) == sizeof(uint64_t), "FILETIME size wrong" );
+ 	return (*(uint64_t*)&fileTime - FILETIME_C_EPOCH) * 100e-9;
+-#elif defined(__linux__)
++#elif defined(__linux__) || defined(__FreeBSD__)
+ 	struct timespec ts;
+ 	clock_gettime(CLOCK_REALTIME, &ts);
+ 	return double(ts.tv_sec) + (ts.tv_nsec * 1e-9);
+@@ -1332,7 +1389,7 @@ uint64_t timer_int() {
+ 	GetSystemTimeAsFileTime(&fileTime);
+ 	static_assert( sizeof(fileTime) == sizeof(uint64_t), "FILETIME size wrong" );
+ 	return (*(uint64_t*)&fileTime - FILETIME_C_EPOCH);
+-#elif defined(__linux__)
++#elif defined(__linux__) || defined(__FreeBSD__)
+ 	struct timespec ts;
+ 	clock_gettime(CLOCK_REALTIME, &ts);
+ 	return uint64_t(ts.tv_sec) * 1e9 + ts.tv_nsec;
+@@ -1481,7 +1538,7 @@ static void *allocateInternal(size_t len
+ 		flags |= MAP_HUGETLB;
+ 
+ 	return mmap(NULL, length, PROT_READ|PROT_WRITE, flags, -1, 0);
+-#elif defined(__APPLE__)
++#elif defined(__APPLE__) || defined(__FreeBSD__)
+ 	int flags = MAP_PRIVATE|MAP_ANON;
+ 
+ 	return mmap(NULL, length, PROT_READ|PROT_WRITE, flags, -1, 0);
+@@ -1555,6 +1612,11 @@ void setAffinity(int proc) {
+ 	CPU_ZERO(&set);
+ 	CPU_SET(proc, &set);
+ 	sched_setaffinity(0, sizeof(cpu_set_t), &set);
++#elif defined(__FreeBSD__)
++	cpuset_t set;
++	CPU_ZERO(&set);
++	CPU_SET(proc, &set);
++	cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, -1, sizeof(set), &set);
+ #endif
+ }
+ 
+@@ -1615,7 +1677,7 @@ void renameFile( std::string const& from
+ 		//renamedFile();
+ 		return;
+ 	}
+-#elif (defined(__linux__) || defined(__APPLE__))
++#elif (defined(__linux__) || defined(__APPLE__)) || defined(__FreeBSD__)
+ 	if (!rename( fromPath.c_str(), toPath.c_str() )) {
+ 		//FIXME: We cannot inject faults after renaming the file, because we could end up with two asyncFileNonDurable open for the same file
+ 		//renamedFile();

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201805020127.w421RCWu084853>