[
https://issues.apache.org/jira/browse/PHOENIX-1674?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15014999#comment-15014999
]
ASF GitHub Bot commented on PHOENIX-1674:
-----------------------------------------
Github user samarthjain commented on a diff in the pull request:
https://github.com/apache/phoenix/pull/130#discussion_r45427160
--- Diff:
phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java ---
@@ -415,24 +425,47 @@ private long getClientTimeStamp() {
long clientTimeStamp = scn == null ? HConstants.LATEST_TIMESTAMP :
scn;
return clientTimeStamp;
}
-
+
+ private long getCurrentScn() {
+ Long scn = connection.getSCN();
+ long currentScn = scn == null ? HConstants.LATEST_TIMESTAMP : scn;
+ return currentScn;
+ }
+
private MetaDataMutationResult updateCache(PName tenantId, String
schemaName, String tableName,
- boolean alwaysHitServer) throws SQLException { // TODO: pass
byte[] herez
- long clientTimeStamp = getClientTimeStamp();
+ boolean alwaysHitServer, Long resolvedTimestamp) throws
SQLException { // TODO: pass byte[] herez
boolean systemTable = SYSTEM_CATALOG_SCHEMA.equals(schemaName);
// System tables must always have a null tenantId
tenantId = systemTable ? null : tenantId;
PTable table = null;
+ PTableRef tableRef = null;
String fullTableName = SchemaUtil.getTableName(schemaName,
tableName);
long tableTimestamp = HConstants.LATEST_TIMESTAMP;
+ long tableResolvedTimestamp = HConstants.LATEST_TIMESTAMP;
try {
- table = connection.getTable(new PTableKey(tenantId,
fullTableName));
+ tableRef = connection.getTableRef(new PTableKey(tenantId,
fullTableName));
+ table = tableRef.getTable();
tableTimestamp = table.getTimeStamp();
+ tableResolvedTimestamp = tableRef.getResolvedTimeStamp();
} catch (TableNotFoundException e) {
}
- // Don't bother with server call: we can't possibly find a newer
table
- if (table != null && !alwaysHitServer && (systemTable ||
tableTimestamp == clientTimeStamp - 1)) {
- return new
MetaDataMutationResult(MutationCode.TABLE_ALREADY_EXISTS,QueryConstants.UNSET_TIMESTAMP,table);
+
+ boolean defaultTransactional =
connection.getQueryServices().getProps().getBoolean(
+
QueryServices.DEFAULT_TRANSACTIONAL_ATTRIB,
+
QueryServicesOptions.DEFAULT_TRANSACTIONAL);
+ // start a txn if all table are transactional by default or if we
found the table in the cache and it is transactional
+ // TODO if system tables become transactional remove the check
+ boolean isTransactional = defaultTransactional || (table!=null &&
table.isTransactional());
+ if (!systemTable && isTransactional &&
!connection.getMutationState().isTransactionStarted()) {
+ connection.getMutationState().startTransaction();
--- End diff --
Question for my understanding - what is the purpose of starting a
transaction when updating the metadatacache. Is there a code path which leads
to updateCache and the table involved isn't already part of a transaction?
> Snapshot isolation transaction support through Tephra
> -----------------------------------------------------
>
> Key: PHOENIX-1674
> URL: https://issues.apache.org/jira/browse/PHOENIX-1674
> Project: Phoenix
> Issue Type: Improvement
> Reporter: James Taylor
> Labels: SFDC
>
> Tephra (http://tephra.io/ and https://github.com/caskdata/tephra) is one
> option for getting transaction support in Phoenix. Let's use this JIRA to
> discuss the way in which this could be integrated along with the pros and
> cons.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)