SQOOP-2787: MySql import and export fails with 5.1 server and 5.1.17+ drivers
(Sowmya Ramesh via Venkat Ranganathan)
diff --git a/src/java/org/apache/sqoop/SqoopOptions.java b/src/java/org/apache/sqoop/SqoopOptions.java
index db92b30..4d30007 100644
--- a/src/java/org/apache/sqoop/SqoopOptions.java
+++ b/src/java/org/apache/sqoop/SqoopOptions.java
@@ -231,6 +231,7 @@
private boolean areInputDelimsManuallySet;
private Configuration conf;
+ private String toolName;
public static final int DEFAULT_NUM_MAPPERS = 4;
@@ -2595,4 +2596,12 @@
public void setCustomToolOptions(Map<String, String> customToolOptions) {
this.customToolOptions = customToolOptions;
}
+
+ public String getToolName() {
+ return this.toolName;
+ }
+
+ public void setToolName(String toolName) {
+ this.toolName = toolName;
+ }
}
diff --git a/src/java/org/apache/sqoop/manager/MySQLManager.java b/src/java/org/apache/sqoop/manager/MySQLManager.java
index e1d5a36..3c2276f 100644
--- a/src/java/org/apache/sqoop/manager/MySQLManager.java
+++ b/src/java/org/apache/sqoop/manager/MySQLManager.java
@@ -59,6 +59,8 @@
// set to true after we warn the user that we can use direct fastpath.
private static boolean warningPrinted = false;
+ private static final String EXPORT_OPERATION = "export";
+
public MySQLManager(final SqoopOptions opts) {
super(DRIVER_CLASS, opts);
}
@@ -67,7 +69,14 @@
protected void initOptionDefaults() {
if (options.getFetchSize() == null) {
LOG.info("Preparing to use a MySQL streaming resultset.");
- options.setFetchSize(Integer.MIN_VALUE);
+ String operation = options.getToolName();
+ if (StringUtils.isNotBlank(operation) && operation.equalsIgnoreCase(EXPORT_OPERATION)) {
+ // Set fetch size to zero for export operation, see SQOOP-2787 for more details. Setting fetchsize to 0
+ // would not overwhelm the JVM as the queries during export are primarily metadata queries
+ options.setFetchSize(0);
+ } else {
+ options.setFetchSize(Integer.MIN_VALUE);
+ }
} else if (
!options.getFetchSize().equals(Integer.MIN_VALUE)
&& !options.getFetchSize().equals(0)) {
diff --git a/src/java/org/apache/sqoop/tool/BaseSqoopTool.java b/src/java/org/apache/sqoop/tool/BaseSqoopTool.java
index a7f6aec..9c810a9 100644
--- a/src/java/org/apache/sqoop/tool/BaseSqoopTool.java
+++ b/src/java/org/apache/sqoop/tool/BaseSqoopTool.java
@@ -253,6 +253,8 @@
*/
protected boolean init(SqoopOptions sqoopOpts) {
// Get the connection to the database.
+ // Set the tool name in sqoop options
+ sqoopOpts.setToolName(getToolName());
try {
JobData data = new JobData(sqoopOpts, this);
this.manager = new ConnFactory(sqoopOpts.getConf()).getManager(data);