You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by da...@apache.org on 2016/01/22 18:14:31 UTC
[1/3] incubator-kudu git commit: KUDU-1290. Fix CHECK failures when
some CPUs are disabled
Repository: incubator-kudu
Updated Branches:
refs/heads/master 3d4e0ce8a -> a65bbcc8e
KUDU-1290. Fix CHECK failures when some CPUs are disabled
This adds a new function base::MaxCPUID() which uses
/sys/devices/system/cpu/present to determine which CPUs are present on the
system. This is an alternative to base::NumCPUs() which doesn't count any CPUs
which have been administratively disabled.
The few places where we use CPU ID to index into a collection are changed
to use this new API.
I verified that, if I disabled one of my CPUs, the master crashed a few minutes
after startup without the patch. With the patch, it seems stable.
Change-Id: I7959e87aba4a694b60ee36adddfd32fef631d8aa
Reviewed-on: http://gerrit.cloudera.org:8080/1864
Reviewed-by: Adar Dembo <ad...@cloudera.com>
Tested-by: Internal Jenkins
Project: http://git-wip-us.apache.org/repos/asf/incubator-kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-kudu/commit/02df1660
Tree: http://git-wip-us.apache.org/repos/asf/incubator-kudu/tree/02df1660
Diff: http://git-wip-us.apache.org/repos/asf/incubator-kudu/diff/02df1660
Branch: refs/heads/master
Commit: 02df16604babe92d030c9b930e73bc7c1dfac1fa
Parents: 3d4e0ce
Author: Todd Lipcon <to...@apache.org>
Authored: Thu Jan 21 13:44:12 2016 -0800
Committer: Todd Lipcon <to...@apache.org>
Committed: Fri Jan 22 04:39:46 2016 +0000
----------------------------------------------------------------------
src/kudu/cfile/bloomfile.cc | 2 +-
src/kudu/gutil/sysinfo.cc | 75 +++++++++++++++++++++++++++++++++-------
src/kudu/gutil/sysinfo.h | 10 ++++++
src/kudu/util/locks.h | 2 +-
4 files changed, 74 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/02df1660/src/kudu/cfile/bloomfile.cc
----------------------------------------------------------------------
diff --git a/src/kudu/cfile/bloomfile.cc b/src/kudu/cfile/bloomfile.cc
index 6d2dcf0..b3059bc 100644
--- a/src/kudu/cfile/bloomfile.cc
+++ b/src/kudu/cfile/bloomfile.cc
@@ -194,7 +194,7 @@ Status BloomFileReader::InitOnce() {
// Ugly hack: create a per-cpu iterator.
// Instead this should be threadlocal, or allow us to just
// stack-allocate these things more smartly!
- int n_cpus = base::NumCPUs();
+ int n_cpus = base::MaxCPUIndex() + 1;
for (int i = 0; i < n_cpus; i++) {
index_iters_.push_back(
IndexTreeIterator::Create(reader_.get(), validx_root));
http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/02df1660/src/kudu/gutil/sysinfo.cc
----------------------------------------------------------------------
diff --git a/src/kudu/gutil/sysinfo.cc b/src/kudu/gutil/sysinfo.cc
index a222fbb..73afa27 100644
--- a/src/kudu/gutil/sysinfo.cc
+++ b/src/kudu/gutil/sysinfo.cc
@@ -53,8 +53,9 @@
#include <shlwapi.h> // for SHGetValueA()
#include <tlhelp32.h> // for Module32First()
#endif
-#include "kudu/gutil/sysinfo.h"
#include "kudu/gutil/dynamic_annotations.h" // for RunningOnValgrind
+#include "kudu/gutil/macros.h"
+#include "kudu/gutil/sysinfo.h"
#include "kudu/gutil/walltime.h"
#include <glog/logging.h>
@@ -73,6 +74,7 @@ namespace base {
static double cpuinfo_cycles_per_second = 1.0; // 0.0 might be dangerous
static int cpuinfo_num_cpus = 1; // Conservative guess
+static int cpuinfo_max_cpu_index = -1;
void SleepForNanoseconds(int64_t nanoseconds) {
// Sleep for nanosecond duration
@@ -103,25 +105,59 @@ static int64 EstimateCyclesPerSecond(const int estimate_time_ms) {
// ReadIntFromFile is only called on linux and cygwin platforms.
#if defined(__linux__) || defined(__CYGWIN__) || defined(__CYGWIN32__)
-// Helper function for reading an int from a file. Returns true if successful
-// and the memory location pointed to by value is set to the value read.
-static bool ReadIntFromFile(const char *file, int *value) {
+
+// Slurp a file with a single read() call into 'buf'. This is only safe to use on small
+// files in places like /proc where we are guaranteed not to get a partial read.
+// Any remaining bytes in the buffer are zeroed.
+//
+// 'buflen' must be more than large enough to hold the whole file, or else this will
+// issue a FATAL error.
+static bool SlurpSmallTextFile(const char* file, char* buf, int buflen) {
bool ret = false;
int fd = open(file, O_RDONLY);
if (fd == -1) return ret;
- char line[1024];
- char* err;
- memset(line, '\0', sizeof(line));
- if (read(fd, line, sizeof(line) - 1) != -1) {
- const int temp_value = strtol(line, &err, 10);
- if (line[0] != '\0' && (*err == '\n' || *err == '\0')) {
- *value = temp_value;
- ret = true;
- }
+
+ memset(buf, '\0', buflen);
+ int n = read(fd, buf, buflen - 1);
+ CHECK_NE(n, buflen - 1) << "buffer of len " << buflen << " not large enough to store "
+ << "contents of " << file;
+ if (n > 0) {
+ ret = true;
}
+
close(fd);
return ret;
}
+
+// Helper function for reading an int from a file. Returns true if successful
+// and the memory location pointed to by value is set to the value read.
+static bool ReadIntFromFile(const char *file, int *value) {
+ char line[1024];
+ if (!SlurpSmallTextFile(file, line, arraysize(line))) {
+ return false;
+ }
+ char* err;
+ const int temp_value = strtol(line, &err, 10);
+ if (line[0] != '\0' && (*err == '\n' || *err == '\0')) {
+ *value = temp_value;
+ return true;
+ }
+ return false;
+}
+
+static int ReadMaxCPUIndex() {
+ char buf[1024];
+ CHECK(SlurpSmallTextFile("/sys/devices/system/cpu/present", buf, arraysize(buf)));
+ // 'buf' should contain a string like '0-7'.
+ CHECK_EQ(0, memcmp(buf, "0-", 2)) << "bad list of possible CPUs: " << buf;
+
+ char* max_cpu_str = &buf[2];
+ char* err;
+ int val = strtol(max_cpu_str, &err, 10);
+ CHECK(*err == '\n' || *err == '\0') << "unable to parse max CPU index from: " << buf;
+ return val;
+}
+
#endif
// WARNING: logging calls back to InitializeSystemInfo() so it must
@@ -268,6 +304,7 @@ static void InitializeSystemInfo() {
if (num_cpus > 0) {
cpuinfo_num_cpus = num_cpus;
}
+ cpuinfo_max_cpu_index = ReadMaxCPUIndex();
#elif defined __FreeBSD__
// For this sysctl to work, the machine must be configured without
@@ -346,6 +383,13 @@ static void InitializeSystemInfo() {
// Generic cycles per second counter
cpuinfo_cycles_per_second = EstimateCyclesPerSecond(1000);
#endif
+
+ // On platforms where we can't determine the max CPU index, just use the
+ // number of CPUs. This might break if CPUs are taken offline, but
+ // better than a wild guess.
+ if (cpuinfo_max_cpu_index < 0) {
+ cpuinfo_max_cpu_index = cpuinfo_num_cpus - 1;
+ }
}
double CyclesPerSecond(void) {
@@ -358,4 +402,9 @@ int NumCPUs(void) {
return cpuinfo_num_cpus;
}
+int MaxCPUIndex(void) {
+ InitializeSystemInfo();
+ return cpuinfo_max_cpu_index;
+}
+
} // namespace base
http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/02df1660/src/kudu/gutil/sysinfo.h
----------------------------------------------------------------------
diff --git a/src/kudu/gutil/sysinfo.h b/src/kudu/gutil/sysinfo.h
index 2ff7d1e..ec3abe7 100644
--- a/src/kudu/gutil/sysinfo.h
+++ b/src/kudu/gutil/sysinfo.h
@@ -33,8 +33,18 @@
namespace base {
+// Return the number of online CPUs. This is computed and cached the first time this or
+// NumCPUs() is called, so does not reflect any CPUs enabled or disabled at a later
+// point in time.
+//
+// Note that, if not all CPUs are online, this may return a value lower than the maximum
+// value of sched_getcpu().
extern int NumCPUs();
+// Return the maximum CPU index that may be returned by sched_getcpu(). For example, on
+// an 8-core machine, this will return '7' even if some of the CPUs have been disabled.
+extern int MaxCPUIndex();
+
void SleepForNanoseconds(int64_t nanoseconds);
void SleepForMilliseconds(int64_t milliseconds);
http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/02df1660/src/kudu/util/locks.h
----------------------------------------------------------------------
diff --git a/src/kudu/util/locks.h b/src/kudu/util/locks.h
index 769143f..7bbd8e8 100644
--- a/src/kudu/util/locks.h
+++ b/src/kudu/util/locks.h
@@ -159,7 +159,7 @@ class percpu_rwlock {
public:
percpu_rwlock() {
errno = 0;
- n_cpus_ = base::NumCPUs();
+ n_cpus_ = base::MaxCPUIndex() + 1;
CHECK_EQ(errno, 0) << ErrnoToString(errno);
CHECK_GT(n_cpus_, 0);
locks_ = new padded_lock[n_cpus_];
[2/3] incubator-kudu git commit: Update installation docs for C++11
requirement
Posted by da...@apache.org.
Update installation docs for C++11 requirement
Change-Id: Iced437f3cfcc1878fc119865b2f1c379e215c63f
Reviewed-on: http://gerrit.cloudera.org:8080/1862
Reviewed-by: Adar Dembo <ad...@cloudera.com>
Tested-by: Internal Jenkins
Project: http://git-wip-us.apache.org/repos/asf/incubator-kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-kudu/commit/353b5ec4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-kudu/tree/353b5ec4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-kudu/diff/353b5ec4
Branch: refs/heads/master
Commit: 353b5ec48e0ac44b7c5e1a3f6d4e281eeb22a02e
Parents: 02df166
Author: Dan Burkert <da...@cloudera.com>
Authored: Thu Jan 21 13:21:38 2016 -0800
Committer: Dan Burkert <da...@cloudera.com>
Committed: Fri Jan 22 17:12:46 2016 +0000
----------------------------------------------------------------------
docs/installation.adoc | 33 +++++++++++++++++++++++++++------
docs/support/scripts/Gemfile | 2 +-
docs/troubleshooting.adoc | 4 ++--
3 files changed, 30 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/353b5ec4/docs/installation.adoc
----------------------------------------------------------------------
diff --git a/docs/installation.adoc b/docs/installation.adoc
index a6a2388..3bf43c4 100644
--- a/docs/installation.adoc
+++ b/docs/installation.adoc
@@ -197,12 +197,16 @@ need, you can build Kudu from source. You can build from source on any supported
.Known Build Issues
====
* It is not possible to build Kudu on Microsoft Windows.
-* Do not build Kudu using `gcc` 4.6. It is known to cause runtime and test failures.
+* A C++11 capable compiler (GCC 4.8+) is required.
====
[[rhel_from_source]]
=== RHEL or CentOS
-. Install the prerequisite libraries, if they are not installed:
+RHEL or CentOS 6.6 or later is required to build Kudu from source. The Red Hat
+Developer Toolset is required in order to have access to a C++11 capable
+compiler.
+
+. Install the prerequisite libraries, if they are not installed.
+
----
$ sudo yum install gcc gcc-c++ autoconf automake libtool \
@@ -210,6 +214,16 @@ $ sudo yum install gcc gcc-c++ autoconf automake libtool \
cyrus-sasl-plain patch pkgconfig make rsync vim-common gdb
----
+. Install the Red Hat Developer Toolset.
++
+----
+$ DTLS_RPM=rhscl-devtoolset-3-epel-6-x86_64.noarch.rpm
+$ DTLS_RPM_URL=https://www.softwarecollections.org/en/scls/rhscl/devtoolset-3/epel-6-x86_64/download/${DTLS_RPM}
+$ wget ${DTLS_RPM_URL} -O ${DTLS_RPM}
+$ sudo yum install -y scl-utils ${DTLS_RPM}
+$ sudo yum install -y devtoolset-3-toolchain
+----
+
. Optional: Install the `asciidoctor` gem if you plan to build documentation.
+
----
@@ -228,7 +242,7 @@ $ cd kudu
+
[source,bash]
----
-$ thirdparty/build-if-necessary.sh
+$ build-support/enable_devtoolset.sh thirdparty/build-if-necessary.sh
----
. Build Kudu, using the utilities installed in the previous step. Choose a build
@@ -241,7 +255,8 @@ the `make install` step. The default value is `/usr/local/`.
----
mkdir -p build
cd build
-../thirdparty/installed/bin/cmake \
+../build-support/enable_devtoolset.sh \
+ ../thirdparty/installed/bin/cmake \
-DCMAKE_BUILD_TYPE=release \
-DCMAKE_INSTALL_PREFIX=/opt/kudu \
..
@@ -276,11 +291,17 @@ automated deployment scenario. It skips the steps marked *Optional* above.
sudo yum -y install gcc gcc-c++ autoconf automake libtool \
boost-static boost-devel openssl-devel cyrus-sasl-devel \
cyrus-sasl-plain patch pkgconfig make rsync vim-common gdb
+DTLS_RPM=rhscl-devtoolset-3-epel-6-x86_64.noarch.rpm
+DTLS_RPM_URL=https://www.softwarecollections.org/en/scls/rhscl/devtoolset-3/epel-6-x86_64/download/${DTLS_RPM}
+wget ${DTLS_RPM_URL} -O ${DTLS_RPM}
+sudo yum install -y scl-utils ${DTLS_RPM}
+sudo yum install -y devtoolset-3-toolchain
cd kudu
-thirdparty/build-if-necessary.sh
+build-support/enable_devtoolset.sh thirdparty/build-if-necessary.sh
mkdir -p build
cd build
-../thirdparty/installed/bin/cmake \
+../build-support/enable_devtoolset.sh \
+ ../thirdparty/installed/bin/cmake \
-DCMAKE_BUILD_TYPE=release \
..
make -j4
http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/353b5ec4/docs/support/scripts/Gemfile
----------------------------------------------------------------------
diff --git a/docs/support/scripts/Gemfile b/docs/support/scripts/Gemfile
index c001789..cc67e62 100644
--- a/docs/support/scripts/Gemfile
+++ b/docs/support/scripts/Gemfile
@@ -1,6 +1,6 @@
source 'https://rubygems.org'
-# We need to use versions that can run on Centos 6, which ships Ruby 1.8.7.
+# We need to use versions that can run on CentOS 6, which ships Ruby 1.8.7.
gem 'thread_safe'
gem 'redcarpet', '~> 2.3.0'
gem 'jekyll', '~> 1.5.1'
http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/353b5ec4/docs/troubleshooting.adoc
----------------------------------------------------------------------
diff --git a/docs/troubleshooting.adoc b/docs/troubleshooting.adoc
index 88d5be4..23d0267 100644
--- a/docs/troubleshooting.adoc
+++ b/docs/troubleshooting.adoc
@@ -95,7 +95,7 @@ To install NTP, use the appropriate command for your operating system:
|===
| OS | Command
| Debian/Ubuntu | `sudo apt-get install ntp`
-| RHEL/Centos | `sudo yum install ntp`
+| RHEL/CentOS | `sudo yum install ntp`
|===
If NTP is installed but not running, start it using one of these commands:
@@ -103,7 +103,7 @@ If NTP is installed but not running, start it using one of these commands:
|===
| OS | Command
| Debian/Ubuntu | `sudo service ntp restart`
-| RHEL/Centos | `sudo /etc/init.d/ntpd restart`
+| RHEL/CentOS | `sudo /etc/init.d/ntpd restart`
|===
TIP: NTP requires a network connection and may take a few minutes to synchronize the clock.
[3/3] incubator-kudu git commit: Add from-source installation
instructions for SLES 12
Posted by da...@apache.org.
Add from-source installation instructions for SLES 12
Change-Id: I664fd72f0dfdc6801012ee0d9f972cc05679cbd5
Reviewed-on: http://gerrit.cloudera.org:8080/1863
Reviewed-by: Adar Dembo <ad...@cloudera.com>
Tested-by: Internal Jenkins
Project: http://git-wip-us.apache.org/repos/asf/incubator-kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-kudu/commit/a65bbcc8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-kudu/tree/a65bbcc8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-kudu/diff/a65bbcc8
Branch: refs/heads/master
Commit: a65bbcc8e939ae48e5f8b3aa7bde9a46169a874c
Parents: 353b5ec
Author: Dan Burkert <da...@cloudera.com>
Authored: Thu Jan 21 13:43:20 2016 -0800
Committer: Dan Burkert <da...@cloudera.com>
Committed: Fri Jan 22 17:12:51 2016 +0000
----------------------------------------------------------------------
docs/installation.adoc | 117 +++++++++++++++++++++++++++++++++++++++++---
1 file changed, 109 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/a65bbcc8/docs/installation.adoc
----------------------------------------------------------------------
diff --git a/docs/installation.adoc b/docs/installation.adoc
index 3bf43c4..a93f834 100644
--- a/docs/installation.adoc
+++ b/docs/installation.adoc
@@ -46,7 +46,7 @@ three tablet servers is necessary.
.Operating System Requirements
Linux::
- - RHEL 6 or Ubuntu 14.04 Trusty.
+ - RHEL 6, Ubuntu 14.04 Trusty, or SLES 12.
- A kernel and fileystem that support _hole punching_. Hole punching is the use of the
`fallocate(2)` system call with the `FALLOC_FL_PUNCH_HOLE` option set. See
link:troubleshooting.html#req_hole_punching[troubleshooting hole punching] for more
@@ -82,6 +82,8 @@ You can install Kudu using packages managed by the operating system.
NOTE: For later versions of Ubuntu, the Ubuntu Trusty packages are reported to install, though they have not been extensively tested.
+NOTE: packages are not yet provided for SLES.
+
=== Install On RHEL Hosts
. Download and configure the Kudu repositories for your operating system, or manually
@@ -234,7 +236,7 @@ $ sudo gem install asciidoctor
+
[source,bash]
----
-$ git clone http://github.com/cloudera/kudu
+$ git clone https://github.com/cloudera/kudu
$ cd kudu
----
@@ -312,7 +314,7 @@ make install
[[ubuntu_from_source]]
=== Ubuntu or Debian
-. Install the prerequisite libraries, if they are not installed:
+. Install the prerequisite libraries, if they are not installed.
+
----
$ sudo apt-get install git autoconf automake libboost-thread-dev \
@@ -330,7 +332,7 @@ $ sudo apt-get install asciidoctor xsltproc
+
[source,bash]
----
-$ git clone http://github.com/cloudera/kudu
+$ git clone https://github.com/cloudera/kudu
$ cd kudu
----
@@ -386,7 +388,7 @@ the steps marked *Optional* above.
sudo apt-get -y install git autoconf automake libboost-thread-dev \
libboost-system-dev curl gcc g++ libssl-dev libsasl2-dev libsasl2-modules \
libtool ntp patch pkg-config make rsync unzip vim-common gdb python
-git clone http://github.com/cloudera/kudu
+git clone https://github.com/cloudera/kudu
cd kudu
thirdparty/build-if-necessary.sh
mkdir -p build
@@ -399,6 +401,105 @@ make install
----
====
+[[sles_from_source]]
+=== SUSE Linux Enterprise Server
+Building Kudu on SLES requires building Boost from source, since SLES does not
+have system packages containing Boost static libraries. Boost may be built
+anywhere, provided that the `BOOST_ROOT` environment variable is set to the
+location while invoking CMake to build Kudu. In the instructions below, Boost is
+built alongside Kudu.
+
+. Install the prerequisite libraries, if they are not installed.
++
+----
+$ sudo zypper install autoconf automake curl cyrus-sasl-devel gcc gcc-c++ \
+ gdb git libtool make ntp openssl-devel patch pkg-config python rsync unzip vim
+----
+
+. Install Boost.
++
+----
+wget https://downloads.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
+tar xzf boost_1_59_0.tar.gz
+pushd boost_1_59_0
+./bootstrap.sh
+./b2 --with-system --with-threads
+export BOOST_ROOT=$(pwd)
+popd
+----
+
+. Clone the Git repository and change to the new `kudu` directory.
++
+[source,bash]
+----
+$ git clone https://github.com/cloudera/kudu
+$ cd kudu
+----
+
+. Build any missing third-party requirements using the `build-if-necessary.sh` script.
++
+[source,bash]
+----
+$ thirdparty/build-if-necessary.sh
+----
+
+. Build Kudu, using the utilities installed in the previous step. Choose a build
+directory for the intermediate output, which can be anywhere in your filesystem
+except for the `kudu` directory itself. Edit the install prefix to the location
+where you would like the Kudu binaries, libraries, and headers installed during
+the `make install` step. The default value is `/usr/local/`.
++
+[source,bash]
+----
+mkdir -p build
+cd build
+BOOST_ROOT=../../boost_1_59_0 \
+ ../thirdparty/installed/bin/cmake \
+ -DCMAKE_BUILD_TYPE=release \
+ -DCMAKE_INSTALL_PREFIX=/opt/kudu \
+ ..
+make -j4
+----
+[[build_install_kudu]]
+. Optional: Install Kudu binaries, libraries, and headers.
+If you do not specify a `DESTDIR`, `/usr/local/` is the default.
++
+[source,bash]
+----
+sudo make DESTDIR=/opt/kudu install
+----
+
+.SLES Build Script
+====
+This script provides an overview of the procedure to build Kudu on SLES, and
+can be used as the basis for an automated deployment scenario.
+
+[source,bash]
+----
+#!/bin/bash
+
+sudo zypper install autoconf automake curl cyrus-sasl-devel gcc gcc-c++ \
+ gdb git libtool make ntp openssl-devel patch pkg-config python rsync unzip vim
+wget https://downloads.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
+tar xzf boost_1_59_0.tar.gz
+pushd boost_1_59_0
+./bootstrap.sh
+./b2 --with-system --with-threads
+popd
+git clone https://github.com/cloudera/kudu
+cd kudu
+thirdparty/build-if-necessary.sh
+mkdir -p build
+cd build
+BOOST_ROOT=../../boost_1_59_0 \
+ ../thirdparty/installed/bin/cmake \
+ -DCMAKE_BUILD_TYPE=release \
+ ..
+make -j4
+make install
+----
+====
+
[[osx_from_source]]
=== OS X
The Xcode toolchain is necessary for compiling Kudu. Use `xcode-select --install`
@@ -414,7 +515,7 @@ See link:https://issues.cloudera.org/browse/KUDU-1219[OS X Limitations & Known I
for more information.
====
-. Install the prerequisite libraries, if they are not installed:
+. Install the prerequisite libraries, if they are not installed.
+
----
$ brew install autoconf automake cmake libtool pkg-config boost pstree
@@ -431,7 +532,7 @@ $ brew link -f openssl
+
[source,bash]
----
-$ git clone http://github.com/cloudera/kudu
+$ git clone https://github.com/cloudera/kudu
$ cd kudu
----
@@ -465,7 +566,7 @@ are installed.
brew install autoconf automake cmake libtool pkg-config boost pstree
brew install openssl
brew link -f openssl
-git clone http://github.com/cloudera/kudu
+git clone https://github.com/cloudera/kudu
cd kudu
thirdparty/build-if-necessary.sh
mkdir -p build