[ 
https://issues.apache.org/jira/browse/ASTERIXDB-1690?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15966618#comment-15966618
 ] 

ASF subversion and git services commented on ASTERIXDB-1690:
------------------------------------------------------------

Commit e81f197e8c86049dd0213434b3023e2bede51ef1 in asterixdb's branch 
refs/heads/master from [~idleft]
[ https://git-wip-us.apache.org/repos/asf?p=asterixdb.git;h=e81f197 ]

Fix ASTERIXDB-1690

Fix the deadlock problem ASTERIXDB-1690 in FileSystemWatcher

Change-Id: Iad358fdeeb47f5d5884fed8806a234f8b3196bec
Reviewed-on: https://asterix-gerrit.ics.uci.edu/1393
Integration-Tests: Jenkins <[email protected]>
Tested-by: Jenkins <[email protected]>
BAD: Jenkins <[email protected]>
Reviewed-by: abdullah alamoudi <[email protected]>


> FileSystemWatcher.close() is blocked by FileSystemWatcher.take() when 
> monitoring directory.
> -------------------------------------------------------------------------------------------
>
>                 Key: ASTERIXDB-1690
>                 URL: https://issues.apache.org/jira/browse/ASTERIXDB-1690
>             Project: Apache AsterixDB
>          Issue Type: Bug
>          Components: Feeds
>            Reporter: Xikui Wang
>            Assignee: Xikui Wang
>
> When create feed for directory monitoring, disconnect feed can be blocked by 
> the FileSystemWatcher. When FileSystemWatcher is waiting for new files, the 
> whole object is locked by current thread. So when another thread trying to 
> close the watcher, it will be blocked. Here is the take() method from 
> FileSystemWatcher: 
> {noformat}
>  public synchronized File take() throws IOException {
>         File next = poll();
>         if (next != null) {
>             return next;
>         }
>         if (done || !isFeed) {
>             return null;
>         }
>         // No file was found, wait for the filesystem to push events
>         WatchKey key = null;
>         lock.lock();
>         try {
>             while (!it.hasNext()) {
>                 try {
>                     key = watcher.take();
>                 } catch (InterruptedException x) {
>                     if (LOGGER.isEnabledFor(Level.WARN)) {
>                         LOGGER.warn("Feed Closed");
>                     }
>                     if (watcher == null) {
>                         return null;
>                     }
>                     continue;
>                 } catch (ClosedWatchServiceException e) {
>                     if (LOGGER.isEnabledFor(Level.WARN)) {
>                         LOGGER.warn("The watcher has exited");
>                     }
>                     if (watcher == null) {
>                         return null;
>                     }
>                     continue;
>                 }
>                 handleEvents(key);
>                 if (endOfEvents(key)) {
>                     return null;
>                 }
>             }
>         } finally {
>             lock.unlock();
>         }
>         // files were found, re-create the iterator and move it one step
>         return it.next();
>     }
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to