mirror of
https://github.com/apache/sqoop.git
synced 2025-05-17 01:11:07 +08:00
SQOOP-1075: Sqoop2: Persist Framework metadata version in repository
(Raghav Kumar Gautam via Jarek Jarcec Cecho)
This commit is contained in:
parent
69ecc93d4a
commit
a7d9b1b338
@ -184,7 +184,8 @@ private MConnector connector(long id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private MFramework framework() {
|
private MFramework framework() {
|
||||||
MFramework framework = new MFramework(new MConnectionForms(null), new LinkedList<MJobForms>());
|
MFramework framework = new MFramework(new MConnectionForms(null),
|
||||||
|
new LinkedList<MJobForms>(), "1");
|
||||||
framework.setPersistenceId(1);
|
framework.setPersistenceId(1);
|
||||||
return framework;
|
return framework;
|
||||||
}
|
}
|
||||||
|
@ -75,6 +75,7 @@ public JSONObject extract(boolean skipSensitive) {
|
|||||||
|
|
||||||
JSONObject result = new JSONObject();
|
JSONObject result = new JSONObject();
|
||||||
result.put(ID, framework.getPersistenceId());
|
result.put(ID, framework.getPersistenceId());
|
||||||
|
result.put(FRAMEWORK_VERSION, framework.getVersion());
|
||||||
result.put(CON_FORMS, conForms);
|
result.put(CON_FORMS, conForms);
|
||||||
result.put(JOB_FORMS, jobForms);
|
result.put(JOB_FORMS, jobForms);
|
||||||
result.put(RESOURCES, extractResourceBundle(bundle));
|
result.put(RESOURCES, extractResourceBundle(bundle));
|
||||||
@ -85,6 +86,7 @@ public JSONObject extract(boolean skipSensitive) {
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public void restore(JSONObject jsonObject) {
|
public void restore(JSONObject jsonObject) {
|
||||||
long id = (Long) jsonObject.get(ID);
|
long id = (Long) jsonObject.get(ID);
|
||||||
|
String frameworkVersion = (String) jsonObject.get(FRAMEWORK_VERSION);
|
||||||
|
|
||||||
List<MForm> connForms = restoreForms((JSONArray) jsonObject.get(CON_FORMS));
|
List<MForm> connForms = restoreForms((JSONArray) jsonObject.get(CON_FORMS));
|
||||||
|
|
||||||
@ -101,7 +103,8 @@ public void restore(JSONObject jsonObject) {
|
|||||||
jobs.add(new MJobForms(type, job));
|
jobs.add(new MJobForms(type, job));
|
||||||
}
|
}
|
||||||
|
|
||||||
framework = new MFramework(new MConnectionForms(connForms), jobs);
|
framework = new MFramework(new MConnectionForms(connForms), jobs,
|
||||||
|
frameworkVersion);
|
||||||
framework.setPersistenceId(id);
|
framework.setPersistenceId(id);
|
||||||
|
|
||||||
bundle = restoreResourceBundle((JSONObject) jsonObject.get(RESOURCES));
|
bundle = restoreResourceBundle((JSONObject) jsonObject.get(RESOURCES));
|
||||||
|
@ -44,6 +44,7 @@ public final class FormSerialization {
|
|||||||
public static final String ID = "id";
|
public static final String ID = "id";
|
||||||
public static final String NAME = "name";
|
public static final String NAME = "name";
|
||||||
public static final String VERSION = "version";
|
public static final String VERSION = "version";
|
||||||
|
public static final String FRAMEWORK_VERSION = "framework-version";
|
||||||
public static final String CLASS = "class";
|
public static final String CLASS = "class";
|
||||||
public static final String CREATED = "created";
|
public static final String CREATED = "created";
|
||||||
public static final String UPDATED = "updated";
|
public static final String UPDATED = "updated";
|
||||||
|
@ -30,11 +30,10 @@ public final class MConnector extends MFramework {
|
|||||||
|
|
||||||
private final String uniqueName;
|
private final String uniqueName;
|
||||||
private final String className;
|
private final String className;
|
||||||
private final String version;
|
|
||||||
|
|
||||||
public MConnector(String uniqueName, String className, String version,
|
public MConnector(String uniqueName, String className, String version,
|
||||||
MConnectionForms connectionForms, List<MJobForms> jobForms) {
|
MConnectionForms connectionForms, List<MJobForms> jobForms) {
|
||||||
super(connectionForms, jobForms);
|
super(connectionForms, jobForms, version);
|
||||||
|
|
||||||
if (uniqueName == null || className == null) {
|
if (uniqueName == null || className == null) {
|
||||||
throw new NullPointerException();
|
throw new NullPointerException();
|
||||||
@ -42,7 +41,6 @@ public MConnector(String uniqueName, String className, String version,
|
|||||||
|
|
||||||
this.uniqueName = uniqueName;
|
this.uniqueName = uniqueName;
|
||||||
this.className = className;
|
this.className = className;
|
||||||
this.version = version;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUniqueName() {
|
public String getUniqueName() {
|
||||||
@ -53,10 +51,6 @@ public String getClassName() {
|
|||||||
return className;
|
return className;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getVersion() {
|
|
||||||
return version;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
StringBuilder sb = new StringBuilder("connector-");
|
StringBuilder sb = new StringBuilder("connector-");
|
||||||
|
@ -32,8 +32,11 @@ public class MFramework extends MPersistableEntity implements MClonable {
|
|||||||
|
|
||||||
private final MConnectionForms connectionForms;
|
private final MConnectionForms connectionForms;
|
||||||
private final Map<MJob.Type, MJobForms> jobs;
|
private final Map<MJob.Type, MJobForms> jobs;
|
||||||
|
String version;
|
||||||
|
|
||||||
public MFramework(MConnectionForms connectionForms, List<MJobForms> jobForms) {
|
public MFramework(MConnectionForms connectionForms, List<MJobForms> jobForms,
|
||||||
|
String version) {
|
||||||
|
this.version = version;
|
||||||
this.connectionForms = connectionForms;
|
this.connectionForms = connectionForms;
|
||||||
this.jobs = new HashMap<MJob.Type, MJobForms>();
|
this.jobs = new HashMap<MJob.Type, MJobForms>();
|
||||||
|
|
||||||
@ -52,6 +55,7 @@ public MFramework(MConnectionForms connectionForms, List<MJobForms> jobForms) {
|
|||||||
public String toString() {
|
public String toString() {
|
||||||
StringBuilder sb = new StringBuilder("framework-");
|
StringBuilder sb = new StringBuilder("framework-");
|
||||||
sb.append(getPersistenceId()).append(":");
|
sb.append(getPersistenceId()).append(":");
|
||||||
|
sb.append("version = " + version);
|
||||||
sb.append(", ").append(connectionForms.toString());
|
sb.append(", ").append(connectionForms.toString());
|
||||||
for(MJobForms entry: jobs.values()) {
|
for(MJobForms entry: jobs.values()) {
|
||||||
sb.append(entry.toString());
|
sb.append(entry.toString());
|
||||||
@ -71,7 +75,9 @@ public boolean equals(Object other) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
MFramework mo = (MFramework) other;
|
MFramework mo = (MFramework) other;
|
||||||
return connectionForms.equals(mo.connectionForms) && jobs.equals(mo.jobs);
|
return version.equals(mo.getVersion()) &&
|
||||||
|
connectionForms.equals(mo.connectionForms) &&
|
||||||
|
jobs.equals(mo.jobs);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -81,7 +87,7 @@ public int hashCode() {
|
|||||||
for(MJobForms entry: jobs.values()) {
|
for(MJobForms entry: jobs.values()) {
|
||||||
result = 31 * result + entry.hashCode();
|
result = 31 * result + entry.hashCode();
|
||||||
}
|
}
|
||||||
|
result = 31 * result + version.hashCode();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,9 +114,19 @@ public MFramework clone(boolean cloneWithValue) {
|
|||||||
copyJobForms.add(entry.clone(cloneWithValue));
|
copyJobForms.add(entry.clone(cloneWithValue));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
MFramework copy = new MFramework(this.getConnectionForms().clone(cloneWithValue), copyJobForms);
|
MFramework copy = new MFramework(this.getConnectionForms().clone(cloneWithValue),
|
||||||
|
copyJobForms, this.version);
|
||||||
copy.setPersistenceId(this.getPersistenceId());
|
copy.setPersistenceId(this.getPersistenceId());
|
||||||
return copy;
|
return copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getVersion() {
|
||||||
|
return version;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setVersion(String version) {
|
||||||
|
this.version = version;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ public static MConnector getConnector(String name) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static MFramework getFramework() {
|
public static MFramework getFramework() {
|
||||||
return new MFramework(getConnectionForms(), getAllJobForms());
|
return new MFramework(getConnectionForms(), getAllJobForms(), "1");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static MConnection getConnection(String name) {
|
public static MConnection getConnection(String name) {
|
||||||
|
@ -37,7 +37,7 @@ public void testFailureOnDuplicateJobTypes() {
|
|||||||
jobForms.add(new MJobForms(MJob.Type.IMPORT, new ArrayList<MForm>()));
|
jobForms.add(new MJobForms(MJob.Type.IMPORT, new ArrayList<MForm>()));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
new MFramework(connectionForms, jobForms);
|
new MFramework(connectionForms, jobForms, "1");
|
||||||
fail("We we're expecting exception for invalid usage");
|
fail("We we're expecting exception for invalid usage");
|
||||||
} catch(Exception ex) {
|
} catch(Exception ex) {
|
||||||
// Expected case
|
// Expected case
|
||||||
|
@ -111,6 +111,8 @@ public static void setInstance(FrameworkManager newInstance) {
|
|||||||
*/
|
*/
|
||||||
private static final boolean DEFAULT_AUTO_UPGRADE = false;
|
private static final boolean DEFAULT_AUTO_UPGRADE = false;
|
||||||
|
|
||||||
|
public static final String CURRENT_FRAMEWORK_VERSION = "1";
|
||||||
|
|
||||||
public Class getJobConfigurationClass(MJob.Type jobType) {
|
public Class getJobConfigurationClass(MJob.Type jobType) {
|
||||||
switch (jobType) {
|
switch (jobType) {
|
||||||
case IMPORT:
|
case IMPORT:
|
||||||
@ -134,7 +136,8 @@ public FrameworkManager() {
|
|||||||
FormUtils.toForms(getJobConfigurationClass(MJob.Type.IMPORT))));
|
FormUtils.toForms(getJobConfigurationClass(MJob.Type.IMPORT))));
|
||||||
jobForms.add(new MJobForms(MJob.Type.EXPORT,
|
jobForms.add(new MJobForms(MJob.Type.EXPORT,
|
||||||
FormUtils.toForms(getJobConfigurationClass(MJob.Type.EXPORT))));
|
FormUtils.toForms(getJobConfigurationClass(MJob.Type.EXPORT))));
|
||||||
mFramework = new MFramework(connectionForms, jobForms);
|
mFramework = new MFramework(connectionForms, jobForms,
|
||||||
|
CURRENT_FRAMEWORK_VERSION);
|
||||||
|
|
||||||
// Build validator
|
// Build validator
|
||||||
validator = new FrameworkValidator();
|
validator = new FrameworkValidator();
|
||||||
|
@ -924,7 +924,7 @@ public void testFrameworkUpgradeHandlerUpdateJobError() {
|
|||||||
doNothing().when(repoHandler).updateFramework(any(MFramework.class), any(Connection.class));
|
doNothing().when(repoHandler).updateFramework(any(MFramework.class), any(Connection.class));
|
||||||
doReturn(true).when(repoHandler).existsConnection(anyLong(), any(Connection.class));
|
doReturn(true).when(repoHandler).existsConnection(anyLong(), any(Connection.class));
|
||||||
doReturn(true).when(repoHandler).existsJob(anyLong(), any(Connection.class));
|
doReturn(true).when(repoHandler).existsJob(anyLong(), any(Connection.class));
|
||||||
doNothing().when(repoHandler).updateConnection(any(MConnection.class), any(Connection.class));;
|
doNothing().when(repoHandler).updateConnection(any(MConnection.class), any(Connection.class));
|
||||||
|
|
||||||
SqoopException exception = new SqoopException(RepositoryError.JDBCREPO_0000,
|
SqoopException exception = new SqoopException(RepositoryError.JDBCREPO_0000,
|
||||||
"update job error.");
|
"update job error.");
|
||||||
@ -969,13 +969,14 @@ private MFramework framework() {
|
|||||||
jobForms.add(new MJobForms(MJob.Type.IMPORT, FormUtils.toForms(ImportJobConfiguration.class)));
|
jobForms.add(new MJobForms(MJob.Type.IMPORT, FormUtils.toForms(ImportJobConfiguration.class)));
|
||||||
|
|
||||||
MFramework framework = new MFramework(new MConnectionForms(new LinkedList<MForm>()),
|
MFramework framework = new MFramework(new MConnectionForms(new LinkedList<MForm>()),
|
||||||
jobForms);
|
jobForms, FrameworkManager.CURRENT_FRAMEWORK_VERSION);
|
||||||
framework.setPersistenceId(1);
|
framework.setPersistenceId(1);
|
||||||
return framework;
|
return framework;
|
||||||
}
|
}
|
||||||
|
|
||||||
private MFramework anotherFramework() {
|
private MFramework anotherFramework() {
|
||||||
MFramework framework = new MFramework(null, new LinkedList<MJobForms>());
|
MFramework framework = new MFramework(null, new LinkedList<MJobForms>(),
|
||||||
|
FrameworkManager.CURRENT_FRAMEWORK_VERSION);
|
||||||
framework.setPersistenceId(1);
|
framework.setPersistenceId(1);
|
||||||
return framework;
|
return framework;
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,8 @@ public final class DerbyRepoConstants {
|
|||||||
|
|
||||||
public static final String SYSKEY_VERSION = "version";
|
public static final String SYSKEY_VERSION = "version";
|
||||||
|
|
||||||
|
public static final String SYSKEY_FRAMEWORK_VERSION = "framework.version";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Expected version of the repository structures.
|
* Expected version of the repository structures.
|
||||||
*
|
*
|
||||||
|
@ -178,6 +178,7 @@ public enum DerbyRepoError implements ErrorCode {
|
|||||||
/** Can't enable/disable job **/
|
/** Can't enable/disable job **/
|
||||||
DERBYREPO_0043("Can't enable/disable job"),
|
DERBYREPO_0043("Can't enable/disable job"),
|
||||||
|
|
||||||
|
DERBYREPO_0044("Update of framework failed"),
|
||||||
;
|
;
|
||||||
|
|
||||||
private final String message;
|
private final String message;
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.apache.sqoop.common.SqoopException;
|
import org.apache.sqoop.common.SqoopException;
|
||||||
|
import org.apache.sqoop.framework.FrameworkManager;
|
||||||
import org.apache.sqoop.model.MBooleanInput;
|
import org.apache.sqoop.model.MBooleanInput;
|
||||||
import org.apache.sqoop.model.MConnection;
|
import org.apache.sqoop.model.MConnection;
|
||||||
import org.apache.sqoop.model.MConnectionForms;
|
import org.apache.sqoop.model.MConnectionForms;
|
||||||
@ -308,6 +309,59 @@ public int detectVersion(Connection conn) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detect version of the framework
|
||||||
|
*
|
||||||
|
* @param conn Connection to metadata repository
|
||||||
|
* @return Version of the MFramework
|
||||||
|
*/
|
||||||
|
private String detectFrameworkVersion (Connection conn) {
|
||||||
|
ResultSet rs = null;
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
try {
|
||||||
|
stmt = conn.prepareStatement(DerbySchemaQuery.STMT_SELECT_SYSTEM);
|
||||||
|
stmt.setString(1, DerbyRepoConstants.SYSKEY_FRAMEWORK_VERSION);
|
||||||
|
rs = stmt.executeQuery();
|
||||||
|
if(!rs.next()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return rs.getString(1);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LOG.info("Can't fetch framework version.", e);
|
||||||
|
return null;
|
||||||
|
} finally {
|
||||||
|
closeResultSets(rs);
|
||||||
|
closeStatements(stmt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create or update framework version
|
||||||
|
* @param conn Connection to the metadata repository
|
||||||
|
* @param mFramework
|
||||||
|
*/
|
||||||
|
private void createOrUpdateFrameworkVersion(Connection conn,
|
||||||
|
MFramework mFramework) {
|
||||||
|
ResultSet rs = null;
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
try {
|
||||||
|
stmt = conn.prepareStatement(STMT_DELETE_SYSTEM);
|
||||||
|
stmt.setString(1, DerbyRepoConstants.SYSKEY_FRAMEWORK_VERSION);
|
||||||
|
stmt.executeUpdate();
|
||||||
|
closeStatements(stmt);
|
||||||
|
|
||||||
|
stmt = conn.prepareStatement(STMT_INSERT_SYSTEM);
|
||||||
|
stmt.setString(1, DerbyRepoConstants.SYSKEY_FRAMEWORK_VERSION);
|
||||||
|
stmt.setString(2, mFramework.getVersion());
|
||||||
|
stmt.executeUpdate();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
logException(e);
|
||||||
|
throw new SqoopException(DerbyRepoError.DERBYREPO_0044, e);
|
||||||
|
} finally {
|
||||||
|
closeResultSets(rs);
|
||||||
|
closeStatements(stmt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
@ -466,6 +520,7 @@ public void registerFramework(MFramework mf, Connection conn) {
|
|||||||
} finally {
|
} finally {
|
||||||
closeStatements(baseFormStmt, baseInputStmt);
|
closeStatements(baseFormStmt, baseInputStmt);
|
||||||
}
|
}
|
||||||
|
createOrUpdateFrameworkVersion(conn, mf);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -493,7 +548,7 @@ public MFramework findFramework(Connection conn) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mf = new MFramework(new MConnectionForms(connectionForms),
|
mf = new MFramework(new MConnectionForms(connectionForms),
|
||||||
convertToJobList(jobForms));
|
convertToJobList(jobForms), detectFrameworkVersion(conn));
|
||||||
|
|
||||||
// We're using hardcoded value for framework metadata as they are
|
// We're using hardcoded value for framework metadata as they are
|
||||||
// represented as NULL in the database.
|
// represented as NULL in the database.
|
||||||
@ -846,10 +901,11 @@ public void updateFramework(MFramework mFramework, Connection conn) {
|
|||||||
|
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
logException(e, mFramework);
|
logException(e, mFramework);
|
||||||
throw new SqoopException(DerbyRepoError.DERBYREPO_0038, e);
|
throw new SqoopException(DerbyRepoError.DERBYREPO_0044, e);
|
||||||
} finally {
|
} finally {
|
||||||
closeStatements(deleteForm, deleteInput);
|
closeStatements(deleteForm, deleteInput);
|
||||||
}
|
}
|
||||||
|
createOrUpdateFrameworkVersion(conn, mFramework);
|
||||||
insertFormsForFramework(mFramework, conn);
|
insertFormsForFramework(mFramework, conn);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1975,6 +2031,9 @@ private void createInputValues(String query,
|
|||||||
* @param resultSets Result sets to close
|
* @param resultSets Result sets to close
|
||||||
*/
|
*/
|
||||||
private void closeResultSets(ResultSet ... resultSets) {
|
private void closeResultSets(ResultSet ... resultSets) {
|
||||||
|
if(resultSets == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
for (ResultSet rs : resultSets) {
|
for (ResultSet rs : resultSets) {
|
||||||
if(rs != null) {
|
if(rs != null) {
|
||||||
try {
|
try {
|
||||||
@ -1994,6 +2053,9 @@ private void closeResultSets(ResultSet ... resultSets) {
|
|||||||
* @param stmts Statements to close
|
* @param stmts Statements to close
|
||||||
*/
|
*/
|
||||||
private void closeStatements(Statement... stmts) {
|
private void closeStatements(Statement... stmts) {
|
||||||
|
if(stmts == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
for (Statement stmt : stmts) {
|
for (Statement stmt : stmts) {
|
||||||
if(stmt != null) {
|
if(stmt != null) {
|
||||||
try {
|
try {
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
package org.apache.sqoop.repository.derby;
|
package org.apache.sqoop.repository.derby;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
import org.apache.sqoop.framework.FrameworkManager;
|
||||||
import org.apache.sqoop.model.MConnection;
|
import org.apache.sqoop.model.MConnection;
|
||||||
import org.apache.sqoop.model.MConnectionForms;
|
import org.apache.sqoop.model.MConnectionForms;
|
||||||
import org.apache.sqoop.model.MConnector;
|
import org.apache.sqoop.model.MConnector;
|
||||||
@ -102,6 +103,8 @@ protected void createSchema() throws Exception {
|
|||||||
runQuery(QUERY_UPGRADE_TABLE_SQ_CONNECTION_ADD_COLUMN_ENABLED);
|
runQuery(QUERY_UPGRADE_TABLE_SQ_CONNECTION_ADD_COLUMN_ENABLED);
|
||||||
runQuery(QUERY_UPGRADE_TABLE_SQ_JOB_ADD_COLUMN_ENABLED);
|
runQuery(QUERY_UPGRADE_TABLE_SQ_JOB_ADD_COLUMN_ENABLED);
|
||||||
runQuery("INSERT INTO SQOOP.SQ_SYSTEM(SQM_KEY, SQM_VALUE) VALUES('version', '2')");
|
runQuery("INSERT INTO SQOOP.SQ_SYSTEM(SQM_KEY, SQM_VALUE) VALUES('version', '2')");
|
||||||
|
runQuery("INSERT INTO SQOOP.SQ_SYSTEM(SQM_KEY, SQM_VALUE) " +
|
||||||
|
"VALUES('framework.version', '1')");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -303,7 +306,8 @@ protected MConnector getConnector() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected MFramework getFramework() {
|
protected MFramework getFramework() {
|
||||||
return new MFramework(getConnectionForms(), getJobForms());
|
return new MFramework(getConnectionForms(), getJobForms(),
|
||||||
|
FrameworkManager.CURRENT_FRAMEWORK_VERSION);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void fillConnection(MConnection connection) {
|
protected void fillConnection(MConnection connection) {
|
||||||
|
@ -17,8 +17,13 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.sqoop.repository.derby;
|
package org.apache.sqoop.repository.derby;
|
||||||
|
|
||||||
|
import org.apache.sqoop.framework.FrameworkManager;
|
||||||
import org.apache.sqoop.model.MFramework;
|
import org.apache.sqoop.model.MFramework;
|
||||||
|
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test framework methods on Derby repository.
|
* Test framework methods on Derby repository.
|
||||||
*/
|
*/
|
||||||
@ -71,5 +76,55 @@ public void testRegisterConnector() throws Exception {
|
|||||||
MFramework retrieved = handler.findFramework(getDerbyConnection());
|
MFramework retrieved = handler.findFramework(getDerbyConnection());
|
||||||
assertNotNull(retrieved);
|
assertNotNull(retrieved);
|
||||||
assertEquals(framework, retrieved);
|
assertEquals(framework, retrieved);
|
||||||
|
assertEquals(framework.getVersion(), retrieved.getVersion());
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getFrameworkVersion() throws Exception {
|
||||||
|
final String frameworkVersionQuery =
|
||||||
|
"SELECT SQM_VALUE FROM SQOOP.SQ_SYSTEM WHERE SQM_KEY=?";
|
||||||
|
String retVal = null;
|
||||||
|
PreparedStatement preparedStmt = null;
|
||||||
|
ResultSet resultSet = null;
|
||||||
|
try {
|
||||||
|
preparedStmt =
|
||||||
|
getDerbyConnection().prepareStatement(frameworkVersionQuery);
|
||||||
|
preparedStmt.setString(1, DerbyRepoConstants.SYSKEY_FRAMEWORK_VERSION);
|
||||||
|
resultSet = preparedStmt.executeQuery();
|
||||||
|
if(resultSet.next())
|
||||||
|
retVal = resultSet.getString(1);
|
||||||
|
return retVal;
|
||||||
|
} finally {
|
||||||
|
if(preparedStmt !=null) {
|
||||||
|
try {
|
||||||
|
preparedStmt.close();
|
||||||
|
} catch(SQLException e) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(resultSet != null) {
|
||||||
|
try {
|
||||||
|
resultSet.close();
|
||||||
|
} catch(SQLException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testFrameworkVersion() throws Exception {
|
||||||
|
handler.registerFramework(getFramework(), getDerbyConnection());
|
||||||
|
|
||||||
|
final String lowerVersion = Integer.toString(
|
||||||
|
Integer.parseInt(FrameworkManager.CURRENT_FRAMEWORK_VERSION) - 1);
|
||||||
|
assertEquals(FrameworkManager.CURRENT_FRAMEWORK_VERSION, getFrameworkVersion());
|
||||||
|
runQuery("UPDATE SQOOP.SQ_SYSTEM SET SQM_VALUE='" + lowerVersion +
|
||||||
|
"' WHERE SQM_KEY = '" + DerbyRepoConstants.SYSKEY_FRAMEWORK_VERSION + "'");
|
||||||
|
assertEquals(lowerVersion, getFrameworkVersion());
|
||||||
|
|
||||||
|
MFramework framework = getFramework();
|
||||||
|
handler.updateFramework(framework, getDerbyConnection());
|
||||||
|
|
||||||
|
assertEquals(FrameworkManager.CURRENT_FRAMEWORK_VERSION, framework.getVersion());
|
||||||
|
|
||||||
|
assertEquals(FrameworkManager.CURRENT_FRAMEWORK_VERSION, getFrameworkVersion());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user