[
https://issues.jboss.org/browse/JBIDE-22426?page=com.atlassian.jira.plugi...
]
Viacheslav Kabanovich commented on JBIDE-22426:
-----------------------------------------------
[~adietish], please consider
https://github.com/jbosstools/jbosstools-openshift/pull/1185
- prevention of possible unwanted connect() in isConnected(). The hole was not a big one -
for the very first access to the connection, but still it might make the start of Deploy
image wizard from Docker explorer behave not as planned (separate Sign In dialog instead
of Sign In page in the wizard).
Connection: authorization strategy is always overwritten (in the
client) upon #isConnected
-------------------------------------------------------------------------------------------
Key: JBIDE-22426
URL:
https://issues.jboss.org/browse/JBIDE-22426
Project: Tools (JBoss Tools)
Issue Type: Bug
Components: openshift
Affects Versions: 4.4.0.Alpha3
Reporter: Andre Dietisheim
Assignee: Andre Dietisheim
Labels: connection, openshift_v3
Fix For: 4.4.0.Alpha3
The current implementation of Connection#isConnected() will always overwrite the
authorization strategy in the client that it is using. This seems wrong given that
#getResources, #createResource, #updateResource (and other methods) also set it but check
if it already exists beforehand. Making sure that they dont overwrite an existing
strategy.
{code:title=Connection#isConnected}
public boolean isConnected(IProgressMonitor monitor) {
client.setAuthorizationStrategy(getAuthorizationStrategy());
try {
{code}
{code:title=Connection#createResource}
public <T extends IResource> T createResource(T resource) {
try {
if(client.getAuthorizationStrategy() == null) {
client.setAuthorizationStrategy(getAuthorizationStrategy());
}
return client.create(resource);
{code}
A very likely side-effect of this is in Connection#ownsResource which compares clients
(the one in the connection and the one attached to the given resource. The 2 clients are
compared with the authorization strategy:
{code:title=com.openshift.internal.restclient.DefaultClient#equals}
@Override
public boolean equals(Object obj) {
...
return ObjectUtils.equals(strategy, other.strategy);
{code}
the lookup for a connection for a given resource in
ConnectionRegistryUtils#safeGetConnectionFor will therefore fail after a
Connection#isConnected:
{code:title=ConnectionsRegistryUtil#safeGetConnectionFor(IResource)}
public static Connection safeGetConnectionFor(IResource resource) {
Collection<Connection> all =
ConnectionsRegistrySingleton.getInstance().getAll(Connection.class);
for (Connection connection : all) {
if(connection.ownsResource(resource)) {
return connection;
}
}
return null;
}
{code}
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)