[
https://issues.apache.org/jira/browse/PHOENIX-901?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
James Taylor updated PHOENIX-901:
---------------------------------
Attachment: phoenix_3.patch
Left off a return stmt.
> 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
> Attachments: phoenix.patch, phoenix_2.patch, phoenix_3.patch
>
>
> 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)