James Taylor created PHOENIX-901: ------------------------------------ Summary: Ensure ConnectionQueryServices only initialized once Key: PHOENIX-901 URL: https://issues.apache.org/jira/browse/PHOENIX-901 Project: Phoenix Issue Type: Bug Reporter: James Taylor Assignee: James Taylor
We should call connectionQueryServices#init in the else block of this code: {code} @Override protected ConnectionQueryServices getConnectionQueryServices(String url, Properties info) throws SQLException { checkClosed(); ConnectionInfo connInfo = ConnectionInfo.create(url); ConnectionInfo normalizedConnInfo = connInfo.normalize(getQueryServices().getProps()); ConnectionQueryServices connectionQueryServices = connectionQueryServicesMap.get(normalizedConnInfo); if (connectionQueryServices == null) { if (normalizedConnInfo.isConnectionless()) { connectionQueryServices = new ConnectionlessQueryServicesImpl(getQueryServices()); } else { connectionQueryServices = new ConnectionQueryServicesImpl(getQueryServices(), normalizedConnInfo); } connectionQueryServices.init(url, info); ConnectionQueryServices prevValue = connectionQueryServicesMap.putIfAbsent(normalizedConnInfo, connectionQueryServices); if (prevValue != null) { connectionQueryServices = prevValue; } } return connectionQueryServices; } {code} like this instead: {code} @Override protected ConnectionQueryServices getConnectionQueryServices(String url, Properties info) throws SQLException { checkClosed(); ConnectionInfo connInfo = ConnectionInfo.create(url); ConnectionInfo normalizedConnInfo = connInfo.normalize(getQueryServices().getProps()); ConnectionQueryServices connectionQueryServices = connectionQueryServicesMap.get(normalizedConnInfo); if (connectionQueryServices == null) { if (normalizedConnInfo.isConnectionless()) { connectionQueryServices = new ConnectionlessQueryServicesImpl(getQueryServices()); } else { connectionQueryServices = new ConnectionQueryServicesImpl(getQueryServices(), normalizedConnInfo); } ConnectionQueryServices prevValue = connectionQueryServicesMap.putIfAbsent(normalizedConnInfo, connectionQueryServices); if (prevValue != null) { connectionQueryServices = prevValue; } else { connectionQueryServices.init(url, info); } } return connectionQueryServices; } {code} This has the potential to open multiple HConnections, but it's unclear if this causes harm, as the same, original ConnectionQueryService is returned and used. -- This message was sent by Atlassian JIRA (v6.2#6252)