db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Julius Stroffek <Julius.Strof...@Sun.COM>
Subject DERBY-1434 - Client can send incorrect database name to server after having made multiple connections to different databases.
Date Thu, 05 Oct 2006 15:16:04 GMT
Hi All,

I spend some time analyzing the communication protocol to find out 
something related to solution of DERBY-1434. Because I'm not familiar 
with the Derby communication protocol yet, I would like to get some advice.

When client creates multiple connections to different databases (through 
the JDBC driver), the DRDA protocol 'always' (I'm not sure if always but 
i have not found any situation when it does not) sends the same 
PKGNAMCSN block as the one used for a first created connection.

The reason of this behaviour is in a creation of the Section object in 
SectionManager using it's method 'getDynamicSection'. It creates the 
section by calling the

getSection(freeSections[Non]Hold_, packageNameWith[No]Hold__, 
cursorNamePrefixWith[No]Hold__, resultSetHoldability)

which later calls the init method of the Section class with the 
parameter isGenerated = false. Due to this the buffer which is used to 
store the PKGNAMCSN is initialized to the value stored in 
Agent.SectionManager.holdPKGNAMCBytes - this field is declared static so 
the value is shared among all created connections. The reusing of the 
value from the buffer is probably only a performance improvement and if 
the value in a Section object (created with isGenerated = false) is not 
initialized it is generated on demand and also stored to 
SectionManager.holdPKGNAMCBytes.

I would suggest removing the static modifier from the fields 
noHoldPKGNAMCBytes and holdPKGNAMCBytes of the 
org.apache.derby.client.am.SectionManager class. Each Connection objects 
holds its own Agent object which holds its own SectionManager object. 
Thus, the PKGNAMCSN blocks will be generated once for each Connection 
object. Is this right?

However, the description of DRDA protocol looks like a PKGNAMCSN block 
is important to identify the correct server's sql executional package 
(I'm not an expert, it's only my opinion). How it is possible that 
sending a wrong PKGNAMCSN does not affect the database behavior? In the 
demonstration program on JIRA both connections connect to the same 
server instance. Might connecting these connections to different 
machines (or only server instances) lead to improper behavior? Why 
requests with the wrong PKGNAMCSN still work? I'll try two different 
machines tomorrow (approx. in 16 hours) and let you know.

Regards

Julius Stroffek


Mime
View raw message