[
https://issues.apache.org/jira/browse/GUACAMOLE-942?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Mike Jumper updated GUACAMOLE-942:
----------------------------------
Description:
The content of [{{getActiveConnections()}} within
{{AbstractGuacamoleTunnelService}}|https://github.com/apache/guacamole-client/blob/ae4361ab70dae4829b08f34a80b08fac885703ba/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/tunnel/AbstractGuacamoleTunnelService.java#L623]
currently does the following:
# Check if there are zero active connections. If there aren't any, just return
an empty set.
# Produce the set of connection identifiers associated with all active
connections. {color:red}<-- race condition{color}
# Retrieve the subset of those connection identifiers that are actually
readable.
There is a race condition here, as the set of active connections is a live,
concurrently-modifiable map. If there are active connections at the beginning,
but all of those connections disconnect prior to producing the set of
connection identifiers, then the set of identifiers will be empty. When this
empty set is passed to the {{selectReadable()}} query that follows, an internal
error will result:
{code:none}
17:02:02.435 [http-nio-8080-exec-3] ERROR o.a.g.rest.RESTExceptionMapper -
Unexpected internal error:
### Error querying database. Cause:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in
your SQL syntax; check the manual that corresponds to your MariaDB server
version for the right syntax to use near 'AND
(
guacamole_connection_permission.entity_id = 7
' at line 19
### The error may exist in
org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT guacamole_connection.connection_id,
guacamole_connection.connection_name, parent_id, protocol, max_connections,
max_connections_per_user, proxy_hostname, proxy_port, proxy_encryption_method,
connection_weight, failover_only, MAX(start_date) AS last_active FROM
guacamole_connection JOIN guacamole_connection_permission ON
guacamole_connection_permission.connection_id =
guacamole_connection.connection_id LEFT JOIN guacamole_connection_history ON
guacamole_connection_history.connection_id = guacamole_connection.connection_id
WHERE guacamole_connection.connection_id IN AND (
guacamole_connection_permission.entity_id = ? ) AND permission = 'READ' GROUP
BY guacamole_connection.connection_id; SELECT primary_connection_id,
guacamole_sharing_profile.sharing_profile_id FROM guacamole_sharing_profile
JOIN guacamole_sharing_profile_permission ON
guacamole_sharing_profile_permission.sharing_profile_id =
guacamole_sharing_profile.sharing_profile_id WHERE primary_connection_id IN AND
( entity_id = ? ) AND permission = 'READ'; SELECT
guacamole_connection_attribute.connection_id, attribute_name, attribute_value
FROM guacamole_connection_attribute JOIN guacamole_connection_permission ON
guacamole_connection_permission.connection_id =
guacamole_connection_attribute.connection_id WHERE
guacamole_connection_attribute.connection_id IN AND ( entity_id = ? ) AND
permission = 'READ';
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have
an error in your SQL syntax; check the manual that corresponds to your MariaDB
server version for the right syntax to use near 'AND
(
guacamole_connection_permission.entity_id = 7
' at line 19
{code}
Though the above has been reported several times as a possible cause of
failures to connect to remote desktops, this error does not actually result in
connection failure. Its association with connection failures is a red herring,
and [it has been confirmed that intentionally causing this error will not
result in an otherwise functional connection
failing|https://issues.apache.org/jira/browse/GUACAMOLE-942?focusedCommentId=17150530&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-17150530].
It is simply more likely for this error to occur if connections are failing on
their own.
was:
After logging in and selecting an RDP connection, the connection fails with:
"The remote desktop server is currently not unreachable."...
The catalona.out log shows the following error:
{code:none}
17:02:02.435 [http-nio-8080-exec-3] ERROR o.a.g.rest.RESTExceptionMapper -
Unexpected internal error:
### Error querying database. Cause:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in
your SQL syntax; check the manual that corresponds to your MariaDB server
version for the right syntax to use near 'AND
(
guacamole_connection_permission.entity_id = 7
' at line 19
### The error may exist in
org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT guacamole_connection.connection_id,
guacamole_connection.connection_name, parent_id, protocol, max_connections,
max_connections_per_user, proxy_hostname, proxy_port, proxy_encryption_method,
connection_weight, failover_only, MAX(start_date) AS last_active FROM
guacamole_connection JOIN guacamole_connection_permission ON
guacamole_connection_permission.connection_id =
guacamole_connection.connection_id LEFT JOIN guacamole_connection_history ON
guacamole_connection_history.connection_id = guacamole_connection.connection_id
WHERE guacamole_connection.connection_id IN AND (
guacamole_connection_permission.entity_id = ? ) AND permission = 'READ' GROUP
BY guacamole_connection.connection_id; SELECT primary_connection_id,
guacamole_sharing_profile.sharing_profile_id FROM guacamole_sharing_profile
JOIN guacamole_sharing_profile_permission ON
guacamole_sharing_profile_permission.sharing_profile_id =
guacamole_sharing_profile.sharing_profile_id WHERE primary_connection_id IN AND
( entity_id = ? ) AND permission = 'READ'; SELECT
guacamole_connection_attribute.connection_id, attribute_name, attribute_value
FROM guacamole_connection_attribute JOIN guacamole_connection_permission ON
guacamole_connection_permission.connection_id =
guacamole_connection_attribute.connection_id WHERE
guacamole_connection_attribute.connection_id IN AND ( entity_id = ? ) AND
permission = 'READ';
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have
an error in your SQL syntax; check the manual that corresponds to your MariaDB
server version for the right syntax to use near 'AND
(
guacamole_connection_permission.entity_id = 7
' at line 19
{code}
> Query may fail if all connections disconnect while listing active connections
> -----------------------------------------------------------------------------
>
> Key: GUACAMOLE-942
> URL: https://issues.apache.org/jira/browse/GUACAMOLE-942
> Project: Guacamole
> Issue Type: Bug
> Components: guacamole-auth-jdbc
> Affects Versions: 1.1.0
> Reporter: Stefan Bluhm
> Assignee: Mike Jumper
> Priority: Minor
> Attachments: catalina.zip
>
>
> The content of [{{getActiveConnections()}} within
> {{AbstractGuacamoleTunnelService}}|https://github.com/apache/guacamole-client/blob/ae4361ab70dae4829b08f34a80b08fac885703ba/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/tunnel/AbstractGuacamoleTunnelService.java#L623]
> currently does the following:
> # Check if there are zero active connections. If there aren't any, just
> return an empty set.
> # Produce the set of connection identifiers associated with all active
> connections. {color:red}<-- race condition{color}
> # Retrieve the subset of those connection identifiers that are actually
> readable.
> There is a race condition here, as the set of active connections is a live,
> concurrently-modifiable map. If there are active connections at the
> beginning, but all of those connections disconnect prior to producing the set
> of connection identifiers, then the set of identifiers will be empty. When
> this empty set is passed to the {{selectReadable()}} query that follows, an
> internal error will result:
> {code:none}
> 17:02:02.435 [http-nio-8080-exec-3] ERROR o.a.g.rest.RESTExceptionMapper -
> Unexpected internal error:
> ### Error querying database. Cause:
> com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error
> in your SQL syntax; check the manual that corresponds to your MariaDB server
> version for the right syntax to use near 'AND
> (
> guacamole_connection_permission.entity_id = 7
> ' at line 19
> ### The error may exist in
> org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml
> ### The error may involve defaultParameterMap
> ### The error occurred while setting parameters
> ### SQL: SELECT guacamole_connection.connection_id,
> guacamole_connection.connection_name, parent_id, protocol, max_connections,
> max_connections_per_user, proxy_hostname, proxy_port,
> proxy_encryption_method, connection_weight, failover_only, MAX(start_date) AS
> last_active FROM guacamole_connection JOIN guacamole_connection_permission ON
> guacamole_connection_permission.connection_id =
> guacamole_connection.connection_id LEFT JOIN guacamole_connection_history ON
> guacamole_connection_history.connection_id =
> guacamole_connection.connection_id WHERE guacamole_connection.connection_id
> IN AND ( guacamole_connection_permission.entity_id = ? ) AND permission =
> 'READ' GROUP BY guacamole_connection.connection_id; SELECT
> primary_connection_id, guacamole_sharing_profile.sharing_profile_id FROM
> guacamole_sharing_profile JOIN guacamole_sharing_profile_permission ON
> guacamole_sharing_profile_permission.sharing_profile_id =
> guacamole_sharing_profile.sharing_profile_id WHERE primary_connection_id IN
> AND ( entity_id = ? ) AND permission = 'READ'; SELECT
> guacamole_connection_attribute.connection_id, attribute_name, attribute_value
> FROM guacamole_connection_attribute JOIN guacamole_connection_permission ON
> guacamole_connection_permission.connection_id =
> guacamole_connection_attribute.connection_id WHERE
> guacamole_connection_attribute.connection_id IN AND ( entity_id = ? ) AND
> permission = 'READ';
> ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You
> have an error in your SQL syntax; check the manual that corresponds to your
> MariaDB server version for the right syntax to use near 'AND
> (
> guacamole_connection_permission.entity_id = 7
> ' at line 19
> {code}
> Though the above has been reported several times as a possible cause of
> failures to connect to remote desktops, this error does not actually result
> in connection failure. Its association with connection failures is a red
> herring, and [it has been confirmed that intentionally causing this error
> will not result in an otherwise functional connection
> failing|https://issues.apache.org/jira/browse/GUACAMOLE-942?focusedCommentId=17150530&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-17150530].
> It is simply more likely for this error to occur if connections are failing
> on their own.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)