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)