
= Compiling

This document explains how to compile Sqoop.

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


== Build Dependencies

Compiling Sqoop requires the following tools:

* Apache ant (1.9.7) or Gradle (3.5.1)
* Java JDK 1.8

Additionally, building the documentation requires these tools:

* asciidoc
* make
* python 2.5+
* xmlto
* tar
* gzip

Furthermore, Sqoop's build can be instrumented with the following:

* findbugs (1.3.9) for code quality checks
* cobertura (1.9.4.1) for code coverage
* checkstyle (5.x) for code style checks

== The Basics

Sqoop is compiled with ant. Type +ant -p+ to see the list of available targets.

Type +ant+ to compile all java sources. You can then run Sqoop with +bin/sqoop+.

If you want to build everything (including the documentation), type
+ant package+ or +./gradlew package+. This will appear in the
+build/sqoop-(version)/+ directory.

This version of Sqoop is built against Hadoop 0.23 available from Apache
maven repository by default. These dependencies are obtained via IVY which
downloads the necessary binaries.

== Testing Sqoop

Sqoop has three main test categories: unit, third party and Amazon S3 tests.

Sqoop unit tests can be run with +ant test+. This command
will run all the "basic" checks against an in-memory database, HSQLDB.

Sqoop's third party tests are compatibility tests that check its ability to work with
several third-party databases. To enable these tests, you will need to install
and configure the databases or run them in Docker containers, and download the JDBC drivers for each one.

Sqoop's Amazon S3 test suite tests the "RDBMS to Amazon S3" use case with an in-memory database, HSQLDB.
To enable these tests, you will need to have either permanent or temporary Amazon S3 security credentials.

=== Third party tests

==== Installing the necessary databases

===== MySQL

Install MySQL server and client 5.0. Download MySQL Connector/J 5.0.8 for
JDBC. Instructions for configuring the MySQL database are in MySQLAuthTest
and DirectMySQLTest.

Use the following system properties to configure connection to the MySQL host used for testing:
sqoop.test.mysql.connectstring.host_url, sqoop.test.mysql.databasename, sqoop.test.mysql.username and
sqoop.test.mysql.password.
Specify these properties on the command line or via the build.properties file. For example:

sqoop.test.mysql.connectstring.host_url=jdbc:mysql://host.example.com/
sqoop.test.mysql.databasename=MYDB
sqoop.test.mysql.username=MYUSR
sqoop.test.mysql.password=MYPWD

If not specified, the default value used for this property is:
jdbc:mysql://localhost/

===== Oracle

Install Oracle Enterprise Edition 10.2.0+. Instructions for configuring the
database are in OracleManagerTest. Download the ojdbc6_g jar.

If running the tests against Oracle XE (Express Edition) - a lot of them will
fail as it does not include the partitioning feature.

Use the following system properties to configure connection to the Oracle host used for testing:
sqoop.test.oracle.connectstring, sqoop.test.oracle.username and  sqoop.test.oracle.password.
Specify these properties on the command line or via the build.properties file. For example:

sqoop.test.oracle.connectstring=jdbc:oracle:thin:@//host.example.com/xe
sqoop.test.oracle.username=MYUSR
sqoop.test.oracle.password=MYPWD

If not specified, the default value used for this property is:
jdbc:oracle:thin:@//localhost/xe

Users sqooptest and sqooptest2 should be created prior to running the tests.
SQL script is available in src/test/oraoop/create_users.sql

===== PostgreSQL

Install PostgreSQL 8.3.9. Download the postgresql 8.4 jdbc driver. Instructions
for configuring the database are in PostgresqlTest.

Use the following system properties to configure connection to the PostgreSQL host used for testing:
sqoop.test.postgresql.connectstring.host_url, sqoop.test.postgresql.database, sqoop.test.postgresql.username and
sqoop.test.postgresql.password.
Specify this property on the
command line or via the build.properties file. For example:

sqoop.test.postgresql.connectstring.host_url=jdbc:postgresql://sqoop-dbs.sf.cloudera.com/
sqoop.test.postgresql.database=MYDB
sqoop.test.postgresql.username=MYUSR
sqoop.test.postgresql.password=MYPWD

If not specified, the default value used for this property is:
jdbc:postgresql://localhost/

===== SQL Server

Install SQL Server Express 2012 and create a database instance and
download the appropriate JDBC driver. Instructions for configuring the
database can be found in SQLServerManagerImportManualTest.

Use the following system properties to configure connection to the SQL Server host used for testing:
sqoop.test.sqlserver.connectstring.host_url, sqoop.test.sqlserver.database, sqoop.test.sqlserver.username and
sqoop.test.sqlserver.password.
the URL for the SQL Server host used for testing. Specify this property on the
command line or via the build.properties file. For example:

sqoop.test.sqlserver.connectstring.host_url=jdbc:sqlserver://sqlserverhost:1433
sqoop.test.sqlserver.database=MYDB
ms.sqlserver.username=MYUSR
ms.sqlserver.password=MYPWD

If not specified, the default value used for this property is:
jdbc:sqlserver://sqlserverhost:1433

This can be useful if you have the hostname sqlserverhost mapped to the IP
address of the SQL Server instance.

===== Cubrid

Install Cubrid 9.2.2.0003 and create a database instance and download the
appropriate JDBC driver. Instructions for configuring the database are in
CubridAuthTest, CubridCompatTest, CubridManagerImportTest
and CubridManagerExportTest.

Use the following system properties to configure connection to the Cubrid host used for testing:
sqoop.test.cubrid.connectstring.host_url, sqoop.test.cubrid.connectstring.database,
sqoop.test.cubrid.connectstring.username and sqoop.test.cubrid.connectstring.password.
Specify this property on the command
line or via the build.properties file. For example:

sqoop.test.cubrid.connectstring.host_url=jdbc:cubrid:localhost
sqoop.test.cubrid.connectstring.database=MYDB
sqoop.test.cubrid.connectstring.username=MYUSR
sqoop.test.cubrid.connectstring.password=MYPWD

If not specified, the default value used for this property is:
jdbc:cubrid:localhost

===== DB2

Install DB2 9.74 Express C and download the appropriate JDBC driver.
Instructions for configuring the server can be found in
DB2ManagerImportManualTest.

Use the following system properties to configure connection to the DB2 host used for testing:
sqoop.test.db2.connectstring.host_url, sqoop.test.db2.connectstring.database, sqoop.test.db2.connectstring.username and
sqoop.test.db2.connectstring.password.
Specify this property on
the command line or via build.properties file. For example:

sqoop.test.db2.connectstring.host_url=jdbc:db2://db2host:50000
sqoop.test.db2.connectstring.database=MYDB
sqoop.test.db2.connectstring.username=MYUSR
sqoop.test.db2.connectstring.password=MYPWD

If not specified, the default value used for this property is:
jdbc:db2://db2host:50000

This can be useful if you have the hostname db2host mapped to the IP
address of the DB2 Server instance.

==== Running the Third-party Tests on native database servers

After the third-party databases are installed and configured, run:

++++
ant test -Dthirdparty=true -Dsqoop.thirdparty.lib.dir=/path/to/jdbc/drivers/
./gradlew -Dsqoop.thirdparty.lib.dir=/relative/path/to/jdbc/drivers/ thirdPartyTest
++++

This command will run all thirdparty tests except some DB2 tests.
To run these DB2 test, specify the property "manual" instead of "thirdparty"
as follows:

++++
ant test -Dmanual=true -Dsqoop.thirdparty.lib.dir=/path/to/jdbc/drivers/
./gradlew -Dsqoop.thirdparty.lib.dir=/relative/path/to/jdbc/drivers/ manualTest
++++

Note that +sqoop.thirdparty.lib.dir+ can also be specified in
+build.properties+.

==== Setting up and executing third-party tests with databases running in Docker containers

The easiest way to run the Sqoop third party test pack is to start all the necessary database servers in Docker containers. This eliminates the need of installing and setting up 6 different RDBMSs on the development machines and provides a clean database environment every time the tests are executed.

===== Installing docker

The first step is to install a recent version (1.13.0+) of Docker and Docker Compose on your development machine. Please refer to the Docker documentation for the installation instructions for your OS environment:

https://docs.docker.com/engine/installation/
https://docs.docker.com/compose/install/

===== Downloading docker images

MySQL, PostgreSQL, MSSQL, DB2 and Cubrid images are freely available on Docker Hub so they will be pulled automatically by the startup command specified below however the Oracle EE image has to be built manually. Please refer to the README.md file on the below Github project for building instructions:

https://github.com/oracle/docker-images/tree/master/OracleDatabase

Please note that Sqoop third party tests require Oracle Enterprise Edition and the startup command assumes version 12.2.0.1.

===== Starting the Docker containers

A startup script has been added to the Sqoop project to make the Docker container initialization easier:

----
<sqoop_workspace>/src/scripts/thirdpartytest/start-thirdpartytest-db-containers.sh
----

If it is executed without parameters it starts the following services:

.Third party test DB docker services
[width="40%",frame="topbot",options="header"]
|======================
|Service name    |Database version
|+mysql+         |MySql 5.7.19
|+postgresql+    |PostgreSQL 9.6.4
|+mssql+         |MSSQL 14.0.1000.169 Developer Edition
|+cubrid+        |Cubrid 10.0
|+oracle+        |Oracle EE 12.2.0.1
|+db2+           |DB2 Express Edition 10.5.0.5-3.10.0
|======================

The script starts up all the services by default but you can override this behavior by specifying the service names in the parameter list. For example if you want to start up mysql and postgresql services only you can execute the script like this:

----
<sqoop_workspace>/src/scripts/thirdpartytest/start-thirdpartytest-db-containers.sh mysql postgresql
----

After the startup script is executed the containers need some time to initialize the databases. You can follow the status of the containers using the docker ps command. If a service is properly initialized you will see a healthy status in the output of the docker ps command. For example the below output means that Cubrid is started up successfully and it is ready to be used but DB2 is still starting up:

----
61c4ef871cbb        cubrid/cubrid:10.0                    "/entrypoint.sh"         43 seconds ago      Up 38 seconds (healthy)            0.0.0.0:33000->33000/tcp           sqoop_cubrid_container
158e5421d134        ibmcom/db2express-c:10.5.0.5-3.10.0   "/home/db2inst1/db..."   43 seconds ago      Up 40 seconds (health: starting)   22/tcp, 0.0.0.0:50000->50000/tcp   sqoop_db2_container
----

Most of the containers need less than 1 minute to start up but DB2 needs ~5 minutes and Oracle needs ~15 minutes. The Docker images need ~17GB free disk space and Docker requires ~5GB of memory to start all of them at the same time.

===== Stopping the Docker containers

You can stop and remove the Docker containers using the following command:

----
<sqoop_workspace>/src/scripts/thirdpartytest/stop-thirdpartytest-db-containers.sh
----

===== Running the third party tests using docker containers

You can execute the third party tests against the DBs running in Docker containers using the following command (replace <path_to_thirdparty_lib_directory> with the path you have the necessary JDBC drivers):

----
ant clean test -Dthirdparty=true -Dsqoop.thirdparty.lib.dir=<path_to_thirdparty_lib_directory> -Dsqoop.test.mysql.connectstring.host_url=jdbc:mysql://127.0.0.1:3306/ -Dsqoop.test.mysql.databasename=sqoop -Dsqoop.test.mysql.password=Sqoop12345 -Dsqoop.test.mysql.username=sqoop -Dsqoop.test.oracle.connectstring=jdbc:oracle:thin:@//localhost:1521/sqoop -Dsqoop.test.oracle.username=SYSTEM -Dsqoop.test.oracle.password=Sqoop12345 -Dsqoop.test.postgresql.connectstring.host_url=jdbc:postgresql://localhost/ -Dsqoop.test.postgresql.database=sqoop -Dsqoop.test.postgresql.username=sqoop -Dsqoop.test.postgresql.password=Sqoop12345 -Dsqoop.test.cubrid.connectstring.host_url=jdbc:cubrid:localhost:33000 -Dsqoop.test.cubrid.connectstring.username=sqoop -Dsqoop.test.cubrid.connectstring.database=sqoop -Dsqoop.test.cubrid.connectstring.password=Sqoop12345 -Dmapred.child.java.opts="\-Djava.security.egd=file:/dev/../dev/urandom" -Dtest.timeout=10000000 -Dsqoop.test.sqlserver.connectstring.host_url=jdbc:sqlserver://localhost:1433 -Dsqoop.test.sqlserver.database=master -Dms.sqlserver.username=sa -Dms.sqlserver.password=Sqoop12345 -Dsqoop.test.db2.connectstring.host_url=jdbc:db2://localhost:50000 -Dsqoop.test.db2.connectstring.database=SQOOP -Dsqoop.test.db2.connectstring.username=DB2INST1 -Dsqoop.test.db2.connectstring.password=Sqoop12345
----

Please note that even if you do not need to install RDBMSs to run Sqoop third party tests against the Docker containers you still need to install the following tools:

* mysqldump
* mysqlimport
* psql

=== Amazon S3 tests

To enable Amazon S3 tests you need to have Amazon S3 security credentials. To pass these credentials to Sqoop during
test execution you need to have a generator command that writes Amazon S3 credentials to the first
line of standard output in the following order: access key, secret key and session token (the latter one only in case
of temporary credentials) having them separated by spaces.

You can then pass the bucket URL and the generator command to the tests via system properties as follows:

++++
ant clean test -Ds3.bucket.url=<your-bucket-url> -Ds3.generator.command=<your-credential-generator-command>
or
./gradlew test -Ds3.bucket.url=<your-bucket-url> -Ds3.generator.command=<your-credential-generator-command>
++++


== Code Quality Analysis

We have three tools which can be used to analyze Sqoop's code quality.

=== Findbugs

Findbugs detects common errors in programming. New patches should not
trigger additional warnings in Findbugs.

Install findbugs (1.3.9) according to its instructions. To use it,
run:

++++
ant findbugs -Dfindbugs.home=/path/to/findbugs/
or
./gradlew findbugsMain
++++

A report will be generated in +build/findbugs/+

=== Code Coverage reports

For ant Cobertura runs code coverage checks. It instruments the build and
checks that each line and conditional expression is evaluated along
all possible paths.

Install Cobertura according to its instructions. Then run a test with:

++++
ant clean
ant cobertura -Dcobertura.home=/path/to/cobertura
ant cobertura -Dcobertura.home=/path/to/cobertura \
    -Dthirdparty=true -Dsqoop.thirdparty.lib.dir=/path/to/thirdparty

For Gradle we run Jacoco for code coverage checks. You can create single reports or composite reports,
where you can check the combined coverage of unit and thirdparty tests.

./gradlew clean
./gradlew test
./gradlew jacocoTestReport

./gradlew -Dsqoop.thirdparty.lib.dir=<path_to_thirdparty_lib_directory> thirdPartyTest
./gradlew jacocoThirdPartyReport

or generate the composite report after running test and thirdPartyTest
./gradlew jacocoCompositeReport
++++

(You'll need to run the cobertura target twice; once against the regular
test targets, and once against the thirdparty targets.)

When complete, the report will be placed in +build/cobertura/+

New patches should come with sufficient tests for their functionality
as well as their error recovery code paths. Cobertura can help assess
whether your tests are thorough enough, or where gaps lie.

=== Checkstyle

Checkstyle enforces our style guide. There are currently a very small
number of violations of this style in the source code, but hopefully this
will remain the case. New code should not trigger additional checkstyle
warnings.

Checkstyle does not need to be installed manually; it will be retrieved via
Ivy when necessary.

To run checkstyle, execute:

++++
ant checkstyle
./gradlew checkStyleMain
++++

A report will be generated as +build/checkstyle-errors.html+


== Deploying to Maven

To use Sqoop as a dependency in other projects, you can pull Sqoop into your
dependency management system through Maven.

To install Sqoop in your local +.m2+ cache, run:

++++
ant mvn-install
./gradlew publishToMavenLocal
++++

This will install a pom and the Sqoop jar.

To deploy Sqoop to a public repository, use:

++++
ant mvn-deploy
./gradlew publishSqoopPublicationToCloudera.snapshot.repoRepository
./gradlew -DmvnRepo=x publishSqoopPublicationToCloudera.x.repoRepository
++++

By default, this deploys to repository.cloudera.com. You can choose
the complete URL to deploy to with the +mvn.deploy.url+ property.
By default, this deploys to the "snapshots" repository. To deploy to
"staging" or "releases" on repository.cloudera.com, set the
+mvn.repo+ property accordingly.

== Releasing Sqoop

To build a full release of Sqoop, run +ant release -Dversion=(somever)+.
This will build a binary release tarball and the web-based documentation
as well as run a release audit which flags any source files which may
be missing license headers.

(The release audit can be run standalone with the +ant releaseaudit+ (+./gradlew rat+)
target.)

You must set the +version+ property explicitly; you cannot release a
snapshot. To simultaneously deploy this to a maven repository, include
the +mvn-install+ or +mvn-deploy+ targets as well.


== Using Eclipse

Running +ant eclipse+ will generate +.project+ and +.classpath+ files that
will allow you to edit Sqoop sources in Eclipse with all the library
dependencies correctly resolved. To compile the jars, you should still
use ant.

== Building the documentation

Building the documentation requires that you have toxml installed.
Also, one needs to set the XML_CATALOG_FILES environment variable.

++++
export XML_CATALOG_FILES=/usr/local/etc/xml/catalog
ant docs
++++

== Other important Gradle commands

+ Generate gradle wrapper (to ensure you are using the correct, compatible version of gradle) by running +./gradlew wrapper+
+ ./gradlew tasks to list all top-level gradle tasks or run ./gradlew tasks --all to show all tasks and subtasks
+ ./gradlew compileJava to compile the main Java source
+ ./gradlew -Dsqoop.thirdparty.lib.dir=<relative_path_to_thirdparty_lib_directory> -Dsqoop.test.mysql.connectstring.host_url=jdbc:mysql://127.0.0.1:3306/ -Dsqoop.test.mysql.databasename=sqoop -Dsqoop.test.mysql.password=Sqoop12345 -Dsqoop.test.mysql.username=sqoop -Dsqoop.test.oracle.connectstring=jdbc:oracle:thin:@//localhost:1521/sqoop -Dsqoop.test.oracle.username=SYSTEM -Dsqoop.test.oracle.password=Sqoop12345 -Dsqoop.test.postgresql.connectstring.host_url=jdbc:postgresql://localhost/ -Dsqoop.test.postgresql.database=sqoop -Dsqoop.test.postgresql.username=sqoop -Dsqoop.test.postgresql.password=Sqoop12345 -Dsqoop.test.cubrid.connectstring.host_url=jdbc:cubrid:localhost:33000 -Dsqoop.test.cubrid.connectstring.username=sqoop -Dsqoop.test.cubrid.connectstring.database=sqoop -Dsqoop.test.cubrid.connectstring.password=Sqoop12345 -Dmapred.child.java.opts="\-Djava.security.egd=file:/dev/../dev/urandom" -Dtest.timeout=10000000 -Dsqoop.test.sqlserver.connectstring.host_url=jdbc:sqlserver://localhost:1433 -Dsqoop.test.sqlserver.database=master -Dms.sqlserver.username=sa -Dms.sqlserver.password=Sqoop12345 -Dsqoop.test.db2.connectstring.host_url=jdbc:db2://localhost:50000 -Dsqoop.test.db2.connectstring.database=SQOOP -Dsqoop.test.db2.connectstring.username=DB2INST1 -Dsqoop.test.db2.connectstring.password=Sqoop12345 thirdPartyTest
+ ./gradlew test --debug-jvm : to run remote debug on port 5005
+ ./gradlew -Dtest.single=ClassName*Test test or ./gradlew tests --tests
+ To refresh dependencies for a build ./gradlew build --refresh-dependencies
+ For skipping a single test or a set of tests ./gradle build -x test
+ To run a single test class use --tests ClassName*Test or -DtestType.single=ClassName*Test (use with test, thirdPartyTest or manualTest)
+ To get a dependency tree: ./gradlew dependencyInsight --configuration optionalConfiguration --dependency searchedForDependency
+ For a list of the dependencies of the selected project, broken down by configuration run: ./gradlew dependencies