You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by td...@apache.org on 2016/12/23 01:27:39 UTC
[05/42] phoenix git commit: TTL on UPGRADE_LOCK cell causes upgrade
to fail
TTL on UPGRADE_LOCK cell causes upgrade to fail
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/8a231a94
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/8a231a94
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/8a231a94
Branch: refs/heads/encodecolumns2
Commit: 8a231a94ceb07f8b3967a15bde07b694a92ae58e
Parents: 96b6554
Author: Samarth <sa...@salesforce.com>
Authored: Mon Dec 12 12:01:38 2016 -0800
Committer: Samarth <sa...@salesforce.com>
Committed: Mon Dec 12 12:01:38 2016 -0800
----------------------------------------------------------------------
.../phoenix/query/ConnectionQueryServicesImpl.java | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/phoenix/blob/8a231a94/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 9bc088d..c8d42d9 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
@@ -2997,8 +2997,20 @@ public class ConnectionQueryServicesImpl extends DelegateQueryServices implement
Put put = new Put(rowToLock);
put.add(family, qualifier, newValue);
boolean acquired = sysMutexTable.checkAndPut(rowToLock, family, qualifier, oldValue, put);
- if (!acquired) { throw new UpgradeInProgressException(getVersion(currentServerSideTableTimestamp),
- getVersion(MIN_SYSTEM_TABLE_TIMESTAMP)); }
+ if (!acquired) {
+ /*
+ * Because of TTL on the SYSTEM_MUTEX_FAMILY, it is very much possible that the cell
+ * has gone away. So we need to retry with an old value of null. Note there is a small
+ * race condition here that between the two checkAndPut calls, it is possible that another
+ * request would have set the value back to UPGRADE_MUTEX_UNLOCKED. In that scenario this
+ * following checkAndPut would still return false even though the lock was available.
+ */
+ acquired = sysMutexTable.checkAndPut(rowToLock, family, qualifier, null, put);
+ if (!acquired) {
+ throw new UpgradeInProgressException(getVersion(currentServerSideTableTimestamp),
+ getVersion(MIN_SYSTEM_TABLE_TIMESTAMP));
+ }
+ }
return true;
}
}