You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ja...@apache.org on 2015/11/10 19:26:12 UTC
phoenix git commit: PHOENIX-2376 Set Tephra TTL based on HBase TTL
Repository: phoenix
Updated Branches:
refs/heads/txn b3bb20001 -> 59ba25a59
PHOENIX-2376 Set Tephra TTL based on HBase TTL
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/59ba25a5
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/59ba25a5
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/59ba25a5
Branch: refs/heads/txn
Commit: 59ba25a59b9e94fe09fd4c25351c9fee6473d304
Parents: b3bb200
Author: James Taylor <jt...@salesforce.com>
Authored: Mon Nov 9 21:03:17 2015 -0800
Committer: James Taylor <jt...@salesforce.com>
Committed: Mon Nov 9 21:03:17 2015 -0800
----------------------------------------------------------------------
.../org/apache/phoenix/tx/TransactionIT.java | 34 +++++--
.../apache/phoenix/execute/MutationState.java | 3 -
.../query/ConnectionQueryServicesImpl.java | 100 +++++++++++++------
.../apache/phoenix/schema/MetaDataClient.java | 15 ++-
.../org/apache/phoenix/schema/PTableImpl.java | 6 +-
5 files changed, 115 insertions(+), 43 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/phoenix/blob/59ba25a5/phoenix-core/src/it/java/org/apache/phoenix/tx/TransactionIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/tx/TransactionIT.java b/phoenix-core/src/it/java/org/apache/phoenix/tx/TransactionIT.java
index 974d104..be98b84 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/tx/TransactionIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/tx/TransactionIT.java
@@ -44,6 +44,7 @@ import org.junit.Test;
import com.google.common.collect.Lists;
+import co.cask.tephra.TxConstants;
import co.cask.tephra.hbase11.coprocessor.TransactionProcessor;
public class TransactionIT extends BaseHBaseManagedTimeIT {
@@ -350,27 +351,33 @@ public class TransactionIT extends BaseHBaseManagedTimeIT {
}
@Test
- public void testMaxVersions() throws Exception {
+ public void testProperties() throws Exception {
Connection conn = DriverManager.getConnection(getUrl());
- conn.createStatement().execute("CREATE TABLE NON_TX_TABLE1(k INTEGER PRIMARY KEY, a.v VARCHAR, b.v VARCHAR, c.v VARCHAR)");
- conn.createStatement().execute("CREATE INDEX idx1 ON NON_TX_TABLE1(a.v, b.v)");
- conn.createStatement().execute("CREATE INDEX idx2 ON NON_TX_TABLE1(c.v) INCLUDE (a.v, b.v)");
+ conn.createStatement().execute("CREATE TABLE NON_TX_TABLE1(k INTEGER PRIMARY KEY, a.v VARCHAR, b.v VARCHAR, c.v VARCHAR) TTL=1000");
+ conn.createStatement().execute("CREATE INDEX idx1 ON NON_TX_TABLE1(a.v, b.v) TTL=1000");
+ conn.createStatement().execute("CREATE INDEX idx2 ON NON_TX_TABLE1(c.v) INCLUDE (a.v, b.v) TTL=1000");
conn.createStatement().execute("ALTER TABLE NON_TX_TABLE1 SET TRANSACTIONAL=true");
HTableDescriptor desc = conn.unwrap(PhoenixConnection.class).getQueryServices().getTableDescriptor(Bytes.toBytes("NON_TX_TABLE1"));
for (HColumnDescriptor colDesc : desc.getFamilies()) {
assertEquals(QueryServicesOptions.DEFAULT_MAX_VERSIONS_TRANSACTIONAL, colDesc.getMaxVersions());
+ assertEquals(1000, colDesc.getTimeToLive());
+ assertEquals(1000, Integer.parseInt(colDesc.getValue(TxConstants.PROPERTY_TTL)));
}
desc = conn.unwrap(PhoenixConnection.class).getQueryServices().getTableDescriptor(Bytes.toBytes("IDX1"));
for (HColumnDescriptor colDesc : desc.getFamilies()) {
assertEquals(QueryServicesOptions.DEFAULT_MAX_VERSIONS_TRANSACTIONAL, colDesc.getMaxVersions());
+ assertEquals(1000, colDesc.getTimeToLive());
+ assertEquals(1000, Integer.parseInt(colDesc.getValue(TxConstants.PROPERTY_TTL)));
}
desc = conn.unwrap(PhoenixConnection.class).getQueryServices().getTableDescriptor(Bytes.toBytes("IDX2"));
for (HColumnDescriptor colDesc : desc.getFamilies()) {
assertEquals(QueryServicesOptions.DEFAULT_MAX_VERSIONS_TRANSACTIONAL, colDesc.getMaxVersions());
+ assertEquals(1000, colDesc.getTimeToLive());
+ assertEquals(1000, Integer.parseInt(colDesc.getValue(TxConstants.PROPERTY_TTL)));
}
conn.createStatement().execute("CREATE TABLE NON_TX_TABLE2(k INTEGER PRIMARY KEY, a.v VARCHAR, b.v VARCHAR, c.v VARCHAR)");
@@ -378,6 +385,15 @@ public class TransactionIT extends BaseHBaseManagedTimeIT {
desc = conn.unwrap(PhoenixConnection.class).getQueryServices().getTableDescriptor(Bytes.toBytes("NON_TX_TABLE2"));
for (HColumnDescriptor colDesc : desc.getFamilies()) {
assertEquals(10, colDesc.getMaxVersions());
+ assertEquals(HColumnDescriptor.DEFAULT_TTL, colDesc.getTimeToLive());
+ assertEquals(null, colDesc.getValue(TxConstants.PROPERTY_TTL));
+ }
+ conn.createStatement().execute("ALTER TABLE NON_TX_TABLE2 SET TTL=1000");
+ desc = conn.unwrap(PhoenixConnection.class).getQueryServices().getTableDescriptor(Bytes.toBytes("NON_TX_TABLE2"));
+ for (HColumnDescriptor colDesc : desc.getFamilies()) {
+ assertEquals(10, colDesc.getMaxVersions());
+ assertEquals(1000, colDesc.getTimeToLive());
+ assertEquals(1000, Integer.parseInt(colDesc.getValue(TxConstants.PROPERTY_TTL)));
}
conn.createStatement().execute("CREATE TABLE NON_TX_TABLE3(k INTEGER PRIMARY KEY, a.v VARCHAR, b.v VARCHAR, c.v VARCHAR)");
@@ -401,7 +417,13 @@ public class TransactionIT extends BaseHBaseManagedTimeIT {
} catch (SQLException e) {
assertEquals(SQLExceptionCode.TX_MAX_VERSIONS_MUST_BE_GREATER_THAN_ONE.getErrorCode(), e.getErrorCode());
}
- }
-
+ conn.createStatement().execute("CREATE TABLE TX_TABLE1(k INTEGER PRIMARY KEY, v VARCHAR) TTL=1000, TRANSACTIONAL=true");
+ desc = conn.unwrap(PhoenixConnection.class).getQueryServices().getTableDescriptor(Bytes.toBytes("TX_TABLE1"));
+ for (HColumnDescriptor colDesc : desc.getFamilies()) {
+ assertEquals(QueryServicesOptions.DEFAULT_MAX_VERSIONS_TRANSACTIONAL, colDesc.getMaxVersions());
+ assertEquals(HColumnDescriptor.DEFAULT_TTL, colDesc.getTimeToLive());
+ assertEquals(1000, Integer.parseInt(colDesc.getValue(TxConstants.PROPERTY_TTL)));
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/59ba25a5/phoenix-core/src/main/java/org/apache/phoenix/execute/MutationState.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/MutationState.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/MutationState.java
index ff9fa41..8b5bd14 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/execute/MutationState.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/MutationState.java
@@ -65,7 +65,6 @@ import org.apache.phoenix.query.QueryConstants;
import org.apache.phoenix.schema.IllegalDataException;
import org.apache.phoenix.schema.MetaDataClient;
import org.apache.phoenix.schema.PColumn;
-import org.apache.phoenix.schema.PName;
import org.apache.phoenix.schema.PRow;
import org.apache.phoenix.schema.PTable;
import org.apache.phoenix.schema.PTable.IndexType;
@@ -80,7 +79,6 @@ import org.apache.phoenix.util.IndexUtil;
import org.apache.phoenix.util.LogUtil;
import org.apache.phoenix.util.PhoenixRuntime;
import org.apache.phoenix.util.SQLCloseable;
-import org.apache.phoenix.util.ScanUtil;
import org.apache.phoenix.util.ServerUtil;
import org.apache.phoenix.util.TransactionUtil;
import org.slf4j.Logger;
@@ -124,7 +122,6 @@ public class MutationState implements SQLCloseable {
private int numRows = 0;
private boolean txStarted = false;
- private final ImmutableBytesPtr tempPtr = new ImmutableBytesPtr();
private final MutationMetricQueue mutationMetricQueue;
private ReadMetricQueue readMetricQueue;
http://git-wip-us.apache.org/repos/asf/phoenix/blob/59ba25a5/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 0ace121..fdea6f8 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
@@ -46,12 +46,6 @@ import java.util.concurrent.TimeoutException;
import javax.annotation.concurrent.GuardedBy;
-import co.cask.tephra.TransactionSystemClient;
-import co.cask.tephra.TxConstants;
-import co.cask.tephra.distributed.PooledClientProvider;
-import co.cask.tephra.distributed.TransactionServiceClient;
-import co.cask.tephra.hbase11.coprocessor.TransactionProcessor;
-
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HConstants;
@@ -179,7 +173,6 @@ import org.apache.twill.zookeeper.ZKClients;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.base.Stopwatch;
import com.google.common.base.Joiner;
import com.google.common.base.Throwables;
import com.google.common.cache.Cache;
@@ -189,6 +182,12 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
+import co.cask.tephra.TransactionSystemClient;
+import co.cask.tephra.TxConstants;
+import co.cask.tephra.distributed.PooledClientProvider;
+import co.cask.tephra.distributed.TransactionServiceClient;
+import co.cask.tephra.hbase11.coprocessor.TransactionProcessor;
+
public class ConnectionQueryServicesImpl extends DelegateQueryServices implements ConnectionQueryServices {
private static final Logger logger = LoggerFactory.getLogger(ConnectionQueryServicesImpl.class);
@@ -1658,7 +1657,6 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement
// When adding a column to a view, base physical table should only be modified when new column families are being added.
modifyHTable = canViewsAddNewCF && !existingColumnFamiliesForBaseTable(table.getPhysicalName()).containsAll(colFamiliesForPColumnsToBeAdded);
}
- boolean pollingNotNeeded = (!tableProps.isEmpty() && !existingColumnFamilies(table).containsAll(colFamiliesForPColumnsToBeAdded));
if (modifyHTable) {
sendHBaseMetaData(tableDescriptors, pollingNeeded);
}
@@ -1759,11 +1757,18 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement
if (index.getColumnFamilies().isEmpty()) {
byte[] dataFamilyName = SchemaUtil.getEmptyColumnFamily(table);
byte[] indexFamilyName = SchemaUtil.getEmptyColumnFamily(index);
- indexDescriptor.getFamily(indexFamilyName).setMaxVersions(tableDescriptor.getFamily(dataFamilyName).getMaxVersions());
+ HColumnDescriptor indexColDescriptor = indexDescriptor.getFamily(indexFamilyName);
+ HColumnDescriptor tableColDescriptor = tableDescriptor.getFamily(dataFamilyName);
+ indexColDescriptor.setMaxVersions(tableColDescriptor.getMaxVersions());
+ indexColDescriptor.setValue(TxConstants.PROPERTY_TTL, tableColDescriptor.getValue(TxConstants.PROPERTY_TTL));
} else {
for (PColumnFamily family : index.getColumnFamilies()) {
byte[] familyName = family.getName().getBytes();
indexDescriptor.getFamily(familyName).setMaxVersions(tableDescriptor.getFamily(familyName).getMaxVersions());
+ HColumnDescriptor indexColDescriptor = indexDescriptor.getFamily(familyName);
+ HColumnDescriptor tableColDescriptor = tableDescriptor.getFamily(familyName);
+ indexColDescriptor.setMaxVersions(tableColDescriptor.getMaxVersions());
+ indexColDescriptor.setValue(TxConstants.PROPERTY_TTL, tableColDescriptor.getValue(TxConstants.PROPERTY_TTL));
}
}
setTransactional(indexDescriptor, index.getType(), txValue, indexTableProps);
@@ -1802,13 +1807,18 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement
HTableDescriptor indexDescriptor) {
if (table.getColumnFamilies().isEmpty()) {
byte[] familyName = SchemaUtil.getEmptyColumnFamily(table);
- indexDescriptor.getFamily(familyName).setMaxVersions(tableDescriptor.getFamily(familyName).getMaxVersions());
+ HColumnDescriptor indexColDescriptor = indexDescriptor.getFamily(familyName);
+ HColumnDescriptor tableColDescriptor = tableDescriptor.getFamily(familyName);
+ indexColDescriptor.setMaxVersions(tableColDescriptor.getMaxVersions());
+ indexColDescriptor.setValue(TxConstants.PROPERTY_TTL, tableColDescriptor.getValue(TxConstants.PROPERTY_TTL));
} else {
for (PColumnFamily family : table.getColumnFamilies()) {
byte[] familyName = family.getName().getBytes();
- HColumnDescriptor colDescriptor = indexDescriptor.getFamily(familyName);
- if (colDescriptor != null) {
- colDescriptor.setMaxVersions(tableDescriptor.getFamily(familyName).getMaxVersions());
+ HColumnDescriptor indexColDescriptor = indexDescriptor.getFamily(familyName);
+ if (indexColDescriptor != null) {
+ HColumnDescriptor tableColDescriptor = tableDescriptor.getFamily(familyName);
+ indexColDescriptor.setMaxVersions(tableColDescriptor.getMaxVersions());
+ indexColDescriptor.setValue(TxConstants.PROPERTY_TTL, tableColDescriptor.getValue(TxConstants.PROPERTY_TTL));
}
}
}
@@ -1846,12 +1856,13 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement
private Pair<HTableDescriptor,HTableDescriptor> separateAndValidateProperties(PTable table, Map<String, List<Pair<String, Object>>> properties, Set<String> colFamiliesForPColumnsToBeAdded, List<Pair<byte[], Map<String, Object>>> families, Map<String, Object> tableProps) throws SQLException {
Map<String, Map<String, Object>> stmtFamiliesPropsMap = new HashMap<>(properties.size());
Map<String,Object> commonFamilyProps = new HashMap<>();
- boolean addingColumns = colFamiliesForPColumnsToBeAdded != null && colFamiliesForPColumnsToBeAdded.size() > 0;
+ boolean addingColumns = colFamiliesForPColumnsToBeAdded != null && !colFamiliesForPColumnsToBeAdded.isEmpty();
HashSet<String> existingColumnFamilies = existingColumnFamilies(table);
Map<String, Map<String, Object>> allFamiliesProps = new HashMap<>(existingColumnFamilies.size());
boolean isTransactional = table.isTransactional();
boolean willBeTransactional = false;
boolean isOrWillBeTransactional = isTransactional;
+ Integer newTTL = null;
for (String family : properties.keySet()) {
List<Pair<String, Object>> propsList = properties.get(family);
if (propsList != null && propsList.size() > 0) {
@@ -1877,6 +1888,7 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement
if (TableProperty.isPhoenixTableProperty(propName)) {
TableProperty.valueOf(propName).validate(true, !family.equals(QueryConstants.ALL_FAMILY_PROPERTIES_KEY), table.getType());
if (propName.equals(TTL)) {
+ newTTL = ((Number)prop.getSecond()).intValue();
// Even though TTL is really a HColumnProperty we treat it specially.
// We enforce that all column families have the same TTL.
commonFamilyProps.put(propName, prop.getSecond());
@@ -1997,13 +2009,22 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement
}
}
if (addingColumns) {
- // FIXME: we should be setting TTL on all table column families, not
- // just the ones being modified here (if TTL is being set).
// Make sure that all the CFs of the table have the same TTL as the empty CF.
- setTTLToEmptyCFTTL(allFamiliesProps, table, newTableDescriptor);
+ setTTLForNewCFs(allFamiliesProps, table, newTableDescriptor, newTTL);
+ }
+ // Set TTL on all table column families, even if they're not referenced here
+ if (newTTL != null) {
+ for (PColumnFamily family : table.getColumnFamilies()) {
+ if (!allFamiliesProps.containsKey(family.getName().getString())) {
+ Map<String,Object> familyProps = Maps.newHashMapWithExpectedSize(1);
+ familyProps.put(TTL, newTTL);
+ allFamiliesProps.put(family.getName().getString(), familyProps);
+ }
+ }
}
Integer defaultTxMaxVersions = null;
if (isOrWillBeTransactional) {
+ // Calculate default for max versions
Map<String, Object> emptyFamilyProps = allFamiliesProps.get(SchemaUtil.getEmptyColumnFamilyAsString(table));
if (emptyFamilyProps != null) {
defaultTxMaxVersions = (Integer)emptyFamilyProps.get(HConstants.VERSIONS);
@@ -2029,6 +2050,26 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement
}
}
}
+ // Set Tephra's TTL property based on HBase property if we're
+ // transitioning to become transactional or setting TTL on
+ // an already transactional table.
+ if (isOrWillBeTransactional) {
+ int ttl = getTTL(table, newTableDescriptor, newTTL);
+ if (ttl != HColumnDescriptor.DEFAULT_TTL) {
+ for (Map.Entry<String, Map<String, Object>> entry : allFamiliesProps.entrySet()) {
+ Map<String, Object> props = entry.getValue();
+ if (props == null) {
+ props = new HashMap<String, Object>();
+ }
+ props.put(TxConstants.PROPERTY_TTL, ttl);
+ // Remove HBase TTL if we're not transitioning an existing table to become transactional
+ // or if the existing transactional table wasn't originally non transactional.
+ if (!willBeTransactional && !Boolean.valueOf(newTableDescriptor.getValue(TxConstants.READ_NON_TX_DATA))) {
+ props.remove(TTL);
+ }
+ }
+ }
+ }
for (Entry<String, Map<String, Object>> entry : allFamiliesProps.entrySet()) {
Map<String,Object> familyProps = entry.getValue();
if (isOrWillBeTransactional) {
@@ -2088,20 +2129,23 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement
return cfNames;
}
- private int getTTLForEmptyCf(byte[] emptyCf, byte[] tableNameBytes, HTableDescriptor tableDescriptor) throws SQLException {
- if (tableDescriptor == null) {
- tableDescriptor = getTableDescriptor(tableNameBytes);
- }
- return tableDescriptor.getFamily(emptyCf).getTimeToLive();
+ private static int getTTL(PTable table, HTableDescriptor tableDesc, Integer newTTL) throws SQLException {
+ // If we're setting TTL now, then use that value. Otherwise, use empty column family value
+ int ttl = newTTL != null ? newTTL
+ : tableDesc.getFamily(SchemaUtil.getEmptyColumnFamily(table)).getTimeToLive();
+ return ttl;
}
- private void setTTLToEmptyCFTTL(Map<String, Map<String, Object>> familyProps, PTable table,
- HTableDescriptor tableDesc) throws SQLException {
+ private static void setTTLForNewCFs(Map<String, Map<String, Object>> familyProps, PTable table,
+ HTableDescriptor tableDesc, Integer newTTL) throws SQLException {
if (!familyProps.isEmpty()) {
- int emptyCFTTL = getTTLForEmptyCf(SchemaUtil.getEmptyColumnFamily(table), table.getPhysicalName().getBytes(), tableDesc);
- for (String family : familyProps.keySet()) {
- Map<String, Object> props = familyProps.get(family) != null ? familyProps.get(family) : new HashMap<String, Object>();
- props.put(TTL, emptyCFTTL);
+ int ttl = getTTL(table, tableDesc, newTTL);
+ for (Map.Entry<String, Map<String, Object>> entry : familyProps.entrySet()) {
+ Map<String, Object> props = entry.getValue();
+ if (props == null) {
+ props = new HashMap<String, Object>();
+ }
+ props.put(TTL, ttl);
}
}
}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/59ba25a5/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java b/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java
index 4020736..770fcc0 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java
@@ -194,8 +194,8 @@ import org.apache.phoenix.util.PhoenixRuntime;
import org.apache.phoenix.util.ReadOnlyProps;
import org.apache.phoenix.util.ScanUtil;
import org.apache.phoenix.util.SchemaUtil;
-import org.apache.phoenix.util.TransactionUtil;
import org.apache.phoenix.util.StringUtil;
+import org.apache.phoenix.util.TransactionUtil;
import org.apache.phoenix.util.UpgradeUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -208,6 +208,8 @@ import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.common.primitives.Ints;
+import co.cask.tephra.TxConstants;
+
public class MetaDataClient {
private static final Logger logger = LoggerFactory.getLogger(MetaDataClient.class);
@@ -1717,7 +1719,14 @@ public class MetaDataClient {
transactional = transactionalProp;
}
}
- tableProps.put(PhoenixDatabaseMetaData.TRANSACTIONAL, Boolean.valueOf(transactional));
+ tableProps.put(PhoenixDatabaseMetaData.TRANSACTIONAL, transactional);
+ if (transactional) {
+ // If TTL set, use Tephra TTL property name instead
+ Object ttl = commonFamilyProps.remove(HColumnDescriptor.TTL);
+ if (ttl != null) {
+ commonFamilyProps.put(TxConstants.PROPERTY_TTL, ttl);
+ }
+ }
boolean sharedTable = statement.getTableType() == PTableType.VIEW || indexId != null;
if (transactional) {
@@ -2786,7 +2795,7 @@ public class MetaDataClient {
}
// Only update client side cache if we aren't adding a PK column to a table with indexes or
- // transitioning a table from.
+ // transitioning a table from non transactional to transactional.
// We could update the cache manually then too, it'd just be a pain.
if (table.getIndexes().isEmpty() || (numPkColumnsAdded==0 && !nonTxToTx)) {
connection.addColumn(
http://git-wip-us.apache.org/repos/asf/phoenix/blob/59ba25a5/phoenix-core/src/main/java/org/apache/phoenix/schema/PTableImpl.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/schema/PTableImpl.java b/phoenix-core/src/main/java/org/apache/phoenix/schema/PTableImpl.java
index 7e0f5a7..0cef1a0 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/schema/PTableImpl.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/PTableImpl.java
@@ -31,8 +31,6 @@ import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
-import co.cask.tephra.TxConstants;
-
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.client.Delete;
@@ -79,6 +77,8 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.sun.istack.NotNull;
+import co.cask.tephra.TxConstants;
+
/**
*
* Base class for PTable implementors. Provides abstraction for
@@ -241,7 +241,7 @@ public class PTableImpl implements PTable {
sequenceNumber, table.getPKName(), table.getBucketNum(), columns, table.getParentSchemaName(), table.getParentTableName(),
table.getIndexes(), isImmutableRows, table.getPhysicalNames(), table.getDefaultFamilyName(), table.getViewStatement(),
isWalDisabled, isMultitenant, storeNulls, table.getViewType(), table.getViewIndexId(), table.getIndexType(), table.getTableStats(),
- table.getBaseColumnCount(), table.rowKeyOrderOptimizable(), table.isTransactional());
+ table.getBaseColumnCount(), table.rowKeyOrderOptimizable(), isTransactional);
}
public static PTableImpl makePTable(PTable table, PIndexState state) throws SQLException {