[
https://issues.apache.org/jira/browse/ASTERIXDB-1690?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15966619#comment-15966619
]
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)