/*
 * 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.
 */


CentOS 6.5 build

Install Prerequisites
---------------------
0) Install development tools
    $>yum groupinstall 'Development Tools'

1) CMAKE 3.0
    $> yum install cmake3

2.1) Download protobuf 2.5 from :
    http://rpm.pbone.net/index.php3/stat/4/idpl/23552166/dir/centos_6/com/protobuf-2.5.0-16.1.x86_64.rpm.html
    http://rpm.pbone.net/index.php3/stat/4/idpl/23552167/dir/centos_6/com/protobuf-compiler-2.5.0-16.1.x86_64.rpm.html
    http://rpm.pbone.net/index.php3/stat/4/idpl/23552169/dir/centos_6/com/protobuf-devel-2.5.0-16.1.x86_64.rpm.html

2.2) Install Protobufs
    $> sudo yum install protobuf
    $> sudo yum install protobuf-compiler
    $> sudo yum install protobuf-devel

3)
3.1) Install Zookeeper prerequisites
    - autoconf 2.59 or greater (should be installed with dev tools)
    - cppunit 1.10.x or higher

3.1.1) install cppuint
    $> sudo yum install cppunit
    $> sudo yum install cppunit-devel

3.2) Download Zookeeper from :
    - https://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/
    - untar and then follow instructions in ZOOKEEPER_DIR/src/c/README to build and install the client libs

3.3) run autoreconf
    $> autoreconf -if

3.4) Build Zookeeper libs
    $> ./configure --enable-debug --with-syncapi --enable-static --enable-shared
    $> make && sudo make install

4) Install boost. The minimum version required is 1.53, which will probably have to be built from source

    # Remove any previous boost
    $> sudo yum -y erase boost

    # fetch the boost source rpm and create binary rpms
    $> wget ftp://ftp.icm.edu.pl/vol/rzm2/linux-fedora-secondary/development/rawhide/source/SRPMS/b/boost-1.53.0-6.fc19.src.rpm
    $> rpmbuild --rebuild boost-1.53.0-6.fc19.src.rpm

    #install the binary rpms
    #(Note: the "rpm" utility does not clean up old versions very well.)
    $> sudo yum -y install ~/rpmbuild/RPMS/x86_64/*
OR
    # Build boost for Drill using instruction from readme.boost.
    # Uncomment set(Boost_NAMESPACE drill_boost) line in client/CMakeLists.txt
OR 
    Download and build using boost build. 
    See this link for how to build: http://www.boost.org/doc/libs/1_53_0/more/getting_started/unix-variants.html#prepare-to-use-a-boost-library-binary 
    After building boost the hard way, you will need to do some symlinks for compatibility:
    cd /usr/lib
    ln -svf libboost_regex.so libboost_regex-mt.so
    ln -svf libboost_system.so libboost_system-mt.so
    ln -svf libboost_filesystem.so libboost_filesystem-mt.so
    ln -svf libboost_date_time.so libboost_date_time-mt.so
    ln -svf libboost_regex.a libboost_regex-mt.a
    ln -svf libboost_system.a libboost_system-mt.a
    ln -svf libboost_filesystem.a libboost_filesystem-mt.a
    ln -svf libboost_date_time.a libboost_date_time-mt.a

5) Install or  build Cyrus SASL 
   To Install 
       yum install cyrus-sasl-devel cyrus-sasl-gssapi
   libs are installed in /usr/lib64/sasl2
   includes are installed in /usr/include

   To build your own 
   See readme.sasl for instructions

6) Install OpenSSL
   yum install openssl-devel openssl


(Optional) Refresh protobuf source files
----------------------------------------
When changes have been introduced to the protocol module, you might need to refresh the protobuf C++ source files too.
    $> cd DRILL_DIR/contrib/native/client
    $> mkdir build
    $> cd build && cmake3 -G "Unix Makefiles" ..
    $> make cpProtobufs

Open a pull request with the changes to DRILL_DIR/contrib/native/client/src/protobuf

Build drill client
-------------------
    $> cd DRILL_DIR/contrib/native/client
    $> mkdir build
    $> cd build && cmake3 -G "Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug ..
    $> make

Test
----
Run query submitter from the command line
    $> querySubmitter query='SELECT * FROM cp.`employee.json` LIMIT 20' type=sql connectStr=local=10.250.0.146:31010 api=async logLevel=trace user=yourUserName password=yourPassWord

Valgrind
--------
Examples to run Valgrind and see the log in Valkyrie
    $> valgrind --leak-check=yes --xml=yes --xml-file=qs-vg-log-a.xml querySubmitter query='SELECT * FROM cp.`employee.json` LIMIT 20' type=sql connectStr=local=10.250.0.146:31010 api=async logLevel=trace
    $> valkyrie -l qs-vg-log-a.xml


