WatchService
Wolfgang Baltes
wolfgang.baltes at laposte.net
Thu Dec 16 10:17:23 PST 2010
On 2010-12-16 06:48, Alan Bateman wrote:
>
> wolfgang.baltes wrote:
>>
>> Hi,
>>
>> I have started to use the WatchService and would like to get
>> confirmation for some of my observations. At least one of them is not
>> in agreement with the documentation.
>>
>> My system is Windows 7 Ultimate 64bit with JDK7-b121 32bit and using
>> Eclipse 3.61 32bit as the development platform. I am writing a piece
>> of code that watches one or several directories recursively or not
>> for file additions and deletions.
>>
>> My observations are for a directory tree where all
>> directories/subdirectories are being watched. I use Windows Explorer
>> to copy files and directory trees into this directory tree and to
>> delete them.
>>
>> 1 - If I delete a file at any level in the tree, then I get the
>> ENTRY_DELETE event for the file and an ENTRY_MODIFIED event for its
>> parent directory. - This should be normal.
>>
>> 2 - If I delete a subdirectory that contains files but no further
>> subdirectories, then I receive an ENTRY_DELETE event for the
>> subdirectory and an ENTRY_MODIFIED event for its parent directory. In
>> addition - and only sometimes - I also receieve ENTRY_DELETE events
>> for the files within the subdirectory. - I assume that this is
>> normal, although I don't understand the random behavior of getting or
>> not getting events regarding the files.
>>
>> 3 - If I try to delete a subdirectory tree - that is a subdirectory
>> with nested directories - then Windows Explorer does not let me
>> delete the tree. The WatchService seems to block this. I can however,
>> delete this tree by starting at the bottom (leaf) directories and
>> delete them one at a time. This corresponds essentially to the
>> scenario described in 2. - This may be normal, but is certainly not
>> convenient. Is this a Windows feature?
>>
>> 4 - Contrary to the documentation (tutorial on WatchService), the
>> WatchKey remains valid (isValid()) after deletion of the associated
>> directory. That is, the expression (dir.notExists() &&
>> key.isValid()), where key is the WatchKey associated with dir is
>> true. The first part of the expression confirms that dir is deleted,
>> and the second part should be false if the key is automatically
>> cancelled. - I don' think this is normal at all!
>>
>> Thanks for any comments you may have,
>>
> For item 3, yes, unfortunately if you are watching a directory then
> Windows prevents you deleting or moving the directory's parent. It's
> not a problem deleting the directory that is being watched, it's the
> parent that is the issue. We have a bug tracking it:
> http://bugs.sun.com/view_bug.do?bug_id=6972833
>
> but I don't think there is anything we can do because it seems to be a
> Windows limitation.
>
> I'm interested if you can create a test case to demonstrate item 4.
> When a watched directory is deleted then we get a notification from
> Windows (via a completion port) and that causes the key to be
> invalidated. We have various test cases for this and I'm not aware of
> any issues.
>
> -Alan
>
>
Thanks, Alan for the quick reply.
I am happy to see that my observations were correct, at least 1 to 3,
with 4 needing to be confirmed. I will spend some time on it today to
make a small program that displays the behavior. My application is an
OSGi bundle which requires quite some heavy lifting for such a small thing.
Wolfgang.
More information about the nio-dev
mailing list