You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "Josh Elser (JIRA)" <ji...@apache.org> on 2018/07/11 19:15:02 UTC
[jira] [Updated] (PHOENIX-4809) connectionQueue never cleared in
ConnectionQueryServicesImpl when lease renewal is disabled/unsupported
[ https://issues.apache.org/jira/browse/PHOENIX-4809?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Josh Elser updated PHOENIX-4809:
--------------------------------
Summary: connectionQueue never cleared in ConnectionQueryServicesImpl when lease renewal is disabled/unsupported (was: connectionQueue never cleared in ConnectionQueryServicesImpl)
> connectionQueue never cleared in ConnectionQueryServicesImpl when lease renewal is disabled/unsupported
> -------------------------------------------------------------------------------------------------------
>
> Key: PHOENIX-4809
> URL: https://issues.apache.org/jira/browse/PHOENIX-4809
> Project: Phoenix
> Issue Type: Bug
> Reporter: Josh Elser
> Assignee: Josh Elser
> Priority: Major
> Fix For: 4.15.0, 5.1.0
>
>
> When we create a new {{PhoenixConnection}}, we update {{connectionQueues}} in CQSI:
> {code:java}
> @Override
> public void addConnection(PhoenixConnection connection) throws SQLException {
> connectionQueues.get(getQueueIndex(connection)).add(new WeakReference<PhoenixConnection>(connection));
> if (returnSequenceValues) {
> synchronized (connectionCountLock) {
> connectionCount++;
> }
> }
> }{code}
> We use connectionQueues to determine what needs lease renewal done.
> However, when the user closes a connection, this datastructure is never cleaned up.
> {code:java}
> @Override
> public void removeConnection(PhoenixConnection connection) throws SQLException {
> if (returnSequenceValues) {
> ConcurrentMap<SequenceKey,Sequence> formerSequenceMap = null;
> synchronized (connectionCountLock) {
> if (--connectionCount <= 0) {
> if (!this.sequenceMap.isEmpty()) {
> formerSequenceMap = this.sequenceMap;
> this.sequenceMap = Maps.newConcurrentMap();
> }
> }
> if (connectionCount < 0) {
> connectionCount = 0;
> }
> }
> // Since we're using the former sequenceMap, we can do this outside
> // the lock.
> if (formerSequenceMap != null) {
> // When there are no more connections, attempt to return any sequences
> returnAllSequences(formerSequenceMap);
> }
> } else if (shouldThrottleNumConnections){ //still need to decrement connection count
> synchronized (connectionCountLock) {
> if (connectionCount > 0) {
> --connectionCount;
> }
> }
> }
> }{code}
> Running a test now, but seems to be the case on master.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)