You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "Ankit Singhal (JIRA)" <ji...@apache.org> on 2018/07/11 21:10:00 UTC
[jira] [Commented] (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:comment-tabpanel&focusedCommentId=16540666#comment-16540666 ]
Ankit Singhal commented on PHOENIX-4809:
----------------------------------------
+1 [~elserj], Thanks for the test as well :)
> 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
>
> Attachments: PHOENIX-4809.001.patch
>
>
> 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)