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