On 7 feb 2014, at 13:27, Alan Bateman <alan.bate...@oracle.com> wrote:
> On 07/02/2014 12:07, Staffan Larsen wrote: >> Instrumentation agents that want to instrument >> FileInputStream/FileOutputStream to see which files are being accessed do >> not currently have access to the file system path of the stream. This is >> because the path is never stored in the stream class, only the file >> descriptor is. (This is also true for RandomAccessFile and FileChannel). >> >> An agent could instrument the respective constructors to store the path. The >> problem is where to store it. To add a field, the instrumentation agent >> needs to change the schema of the class. This is not possible at runtime but >> can be done at class-loading time. However for a j.l.instrument agent these >> classes are already defined when the agent is first called. For a native >> JVMTI agent the problem becomes parsing and modifying byte codes in a native >> agent which is error prone and requires a lot of code to maintain. >> >> If instead the stream classes were modified to store a reference to the >> path, it would be readily available for agents at a minimum of cost to the >> libraries. This is what this patch does. FileInputStream, FileOutputStream, >> RandomAccessFile and FileChannelImpl are modified to record the path they >> operate on in a private field. There are no accessors added to retrieve the >> path - it is purely stored for instrumentation purposes. The path is >> intentionally not resolved to be an absolute path since that would >> potentially add unwanted overhead. If a stream is created from a file >> descriptor, no path will be stored. >> >> The overhead for this path will be keeping the path String alive for a >> longer period of time. I hope this will not cause any problems. >> >> A consumer of this feature will be Java Flight Recorder, but the >> implementation is usable by other agents as well. >> >> webrev: http://cr.openjdk.java.net/~sla/8033917/webrev.00/ >> bug: https://bugs.openjdk.java.net/browse/JDK-8033917 >> > I have reservations about doing this as hints of code making use of private > fields which isn't good. > > For the comments in FileInputStream and other then it might be best to keep > the line lengths consistent with the existing code if you can (it makes > future side-by-side reviews a bit easier too). I’ve updated the comments to have shorter lines and javadoc style comments. > In WindowsChannelFactory then you've re-order and expand imports. The > ordering of the import groups in this area has been Java SE, JDK-specific and > then finally the JDK-internal. It's not a big deal of course. Personally I > prefer the original static imports but I know some people don’t. I’ve reverted to the original order, and only expanded the non-static imports. (The danger of IDEs). Updated webrev here: http://cr.openjdk.java.net/~sla/8033917/webrev.01/ Thanks, /Staffan