I finally received an explanation from support on what seems to be going on here:
With a distributed query like
select count(*) from sysmaster@dummy:systables;
This is a server-side issue with Connection Manager involved for distributed query, the coordinator (local) server needs to pre-determine the server 'dummy' in the query is the LOCAL server or a REMOTE server. If it's a remote server then the coordinator creates a connection to the remote server, otherwise no connection is needed.
Only two cases here, 'dummy' is either a remote server or the local server. If it's a remote server, (like we run it on the SDS), then local server will create a connection to 'dummy', and CM re-routes the connection to the primary, it's a remote server to SDS, just like a normal DISTRIBUTED query.
If we run the distributed query on the primary, 'dummy' is not defined in the CM system, the coordinator server looks up 'dummy' by name, and cannot find that name in system, the coordinator treats it as a 'remote' server and creates a connection to the 'dummy' host/port, then CM re-routes the connection to the primary self, that causes -908. If the coordinator server looks up 'dummy' by host/ip, then the server knows 'dummy' is the same as oltp1, it points to primary self, then no connection to create. In this case Connection Manager is not involved since no connection is created.
Distributed query does not work if the coordinator tries to connect to itself, underline I-STAR transaction design does not support that, we need to pre-determine server 'dummy' is local or remote
Support provided a kludgy patch that works around the behavior by setting a flag in SQL_DEF_CTRL.
------------------------------
TOM GIRSCH
------------------------------