[ 
https://issues.apache.org/jira/browse/PHOENIX-901?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

James Taylor updated PHOENIX-901:
---------------------------------

    Attachment: phoenix_4.patch

One last tweak to set initialized variable in last finally block to prevent 
return of uninitialized ConnectionQueryService.

> 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, 
> phoenix_4.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)

Reply via email to