You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by sa...@apache.org on 2016/11/04 22:13:47 UTC
[20/50] [abbrv] phoenix git commit: PHOENIX-3424 Backward
compatibility failure: 4.8 -> 4.9 upgrade
PHOENIX-3424 Backward compatibility failure: 4.8 -> 4.9 upgrade
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/377ef938
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/377ef938
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/377ef938
Branch: refs/heads/encodecolumns2
Commit: 377ef938c52d020837b10ba2a2afef0b03b56c1c
Parents: 3c80432
Author: James Taylor <ja...@apache.org>
Authored: Sun Oct 30 08:32:14 2016 -0700
Committer: James Taylor <ja...@apache.org>
Committed: Sun Oct 30 08:35:22 2016 -0700
----------------------------------------------------------------------
.../query/ConnectionQueryServicesImpl.java | 68 ++++++++++++--------
1 file changed, 42 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/phoenix/blob/377ef938/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java b/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java
index 62ee2bf..ff4e404 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java
@@ -25,6 +25,7 @@ import static org.apache.phoenix.coprocessor.MetaDataProtocol.PHOENIX_MAJOR_VERS
import static org.apache.phoenix.coprocessor.MetaDataProtocol.PHOENIX_MINOR_VERSION;
import static org.apache.phoenix.coprocessor.MetaDataProtocol.PHOENIX_PATCH_NUMBER;
import static org.apache.phoenix.coprocessor.MetaDataProtocol.getVersion;
+import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SYSTEM_CATALOG_NAME;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SYSTEM_CATALOG_NAME_BYTES;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SYSTEM_STATS_NAME;
import static org.apache.phoenix.query.QueryServicesOptions.DEFAULT_DROP_METADATA;
@@ -37,6 +38,7 @@ import static org.apache.phoenix.util.UpgradeUtil.upgradeTo4_5_0;
import java.io.IOException;
import java.lang.ref.WeakReference;
+import java.sql.PreparedStatement;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
@@ -194,7 +196,6 @@ import org.apache.phoenix.util.ByteUtil;
import org.apache.phoenix.util.Closeables;
import org.apache.phoenix.util.ConfigUtil;
import org.apache.phoenix.util.JDBCUtil;
-import org.apache.phoenix.util.KeyValueUtil;
import org.apache.phoenix.util.MetaDataUtil;
import org.apache.phoenix.util.PhoenixContextExecutor;
import org.apache.phoenix.util.PhoenixRuntime;
@@ -2271,30 +2272,44 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement
}
- private void removeNotNullConstraint(String schemaName, String tableName, long timestamp, String columnName) throws SQLException {
- try (HTableInterface htable = this.getTable(SYSTEM_CATALOG_NAME_BYTES)) {
- byte[] tableRowKey = SchemaUtil.getTableKey(null, schemaName, tableName);
- Put tableHeader = new Put(tableRowKey);
- tableHeader.add(KeyValueUtil.newKeyValue(tableRowKey,
- QueryConstants.DEFAULT_COLUMN_FAMILY_BYTES,
- QueryConstants.EMPTY_COLUMN_BYTES,
- timestamp,
- QueryConstants.EMPTY_COLUMN_VALUE_BYTES));
- byte[] columnRowKey = SchemaUtil.getColumnKey(null, schemaName, tableName, columnName, null);
- Put tableColumn = new Put(columnRowKey);
- tableColumn.add(KeyValueUtil.newKeyValue(columnRowKey,
- QueryConstants.DEFAULT_COLUMN_FAMILY_BYTES,
- PhoenixDatabaseMetaData.NULLABLE_BYTES,
- timestamp,
- PInteger.INSTANCE.toBytes(ResultSetMetaData.columnNullable)));
- List<Mutation> mutations = Lists.<Mutation>newArrayList(tableHeader, tableColumn);
- htable.batch(mutations, new Object[mutations.size()]);
- } catch (IOException e) {
- throw new SQLException(e);
- } catch (InterruptedException e) {
- Thread.currentThread().isInterrupted();
- throw new SQLExceptionInfo.Builder(SQLExceptionCode.INTERRUPTED_EXCEPTION).setRootCause(e).build().buildException();
+ private PhoenixConnection removeNotNullConstraint(PhoenixConnection oldMetaConnection, String schemaName, String tableName, long timestamp, String columnName) throws SQLException {
+ Properties props = PropertiesUtil.deepCopy(oldMetaConnection.getClientInfo());
+ props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(timestamp));
+ // Cannot go through DriverManager or you end up in an infinite loop because it'll call init again
+ PhoenixConnection metaConnection = new PhoenixConnection(oldMetaConnection, this, props);
+ SQLException sqlE = null;
+ try {
+ String dml = "UPSERT INTO " + SYSTEM_CATALOG_NAME + " (" + PhoenixDatabaseMetaData.TENANT_ID + ","
+ + PhoenixDatabaseMetaData.TABLE_SCHEM + "," + PhoenixDatabaseMetaData.TABLE_NAME + ","
+ + PhoenixDatabaseMetaData.COLUMN_NAME + ","
+ + PhoenixDatabaseMetaData.NULLABLE + ") VALUES (null, ?, ?, ?, ?)";
+ PreparedStatement stmt = metaConnection.prepareStatement(dml);
+ stmt.setString(1, schemaName);
+ stmt.setString(2, tableName);
+ stmt.setString(3, columnName);
+ stmt.setInt(4, ResultSetMetaData.columnNullable);
+ stmt.executeUpdate();
+ metaConnection.commit();
+ } catch (NewerTableAlreadyExistsException e) {
+ logger.warn("Table already modified at this timestamp, so assuming column already nullable: " + columnName);
+ } catch (SQLException e) {
+ logger.warn("Add column failed due to:" + e);
+ sqlE = e;
+ } finally {
+ try {
+ oldMetaConnection.close();
+ } catch (SQLException e) {
+ if (sqlE != null) {
+ sqlE.setNextException(e);
+ } else {
+ sqlE = e;
+ }
+ }
+ if (sqlE != null) {
+ throw sqlE;
+ }
}
+ return metaConnection;
}
/**
* This closes the passed connection.
@@ -2748,7 +2763,8 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement
if (currentServerSideTableTimeStamp < MetaDataProtocol.MIN_SYSTEM_TABLE_TIMESTAMP_4_9_0) {
// The COLUMN_FAMILY column should be nullable as we create a row in it without
// any column family to mark when guideposts were last collected.
- removeNotNullConstraint(PhoenixDatabaseMetaData.SYSTEM_SCHEMA_NAME,
+ metaConnection = removeNotNullConstraint(metaConnection,
+ PhoenixDatabaseMetaData.SYSTEM_SCHEMA_NAME,
PhoenixDatabaseMetaData.SYSTEM_STATS_TABLE,
MetaDataProtocol.MIN_SYSTEM_TABLE_TIMESTAMP_4_9_0,
PhoenixDatabaseMetaData.COLUMN_FAMILY);
@@ -4101,4 +4117,4 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement
public boolean isUpgradeRequired() {
return upgradeRequired.get();
}
-}
+}
\ No newline at end of file