[ https://issues.apache.org/jira/browse/HADOOP-18740?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17728320#comment-17728320 ]
ASF GitHub Bot commented on HADOOP-18740: ----------------------------------------- steveloughran commented on code in PR #5675: URL: https://github.com/apache/hadoop/pull/5675#discussion_r1213038983 ########## hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/impl/prefetch/SingleFilePerBlockCache.java: ########## @@ -310,7 +333,12 @@ public void close() throws IOException { int numFilesDeleted = 0; for (Entry entry : blocks.values()) { - entry.takeLock(Entry.LockType.WRITE); + boolean lockAcquired = entry.takeLock(Entry.LockType.WRITE, 5, TimeUnit.SECONDS); Review Comment: pull the number into a constant. Know that I automatically -1 all inline constants in production code and save time all round. ########## hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/impl/prefetch/SingleFilePerBlockCache.java: ########## @@ -127,11 +128,33 @@ void takeLock(LockType lockType) { */ void releaseLock(LockType lockType) { if (LockType.READ == lockType) { - this.lock.readLock().unlock(); + lock.readLock().unlock(); } else if (LockType.WRITE == lockType) { - this.lock.writeLock().unlock(); + lock.writeLock().unlock(); } } + + /** + * Try to take the read or write lock within the given timeout. + * + * @param lockType type of the lock. + * @param timeout the time to wait for the given lock. + * @param unit the time unit of the timeout argument. + * @return true if the lock of the given lock type was acquired. + */ + boolean takeLock(LockType lockType, long timeout, TimeUnit unit) { Review Comment: should this and the others be private? you don't want other classes playing with your lock code... > s3a prefetch cache blocks should be accessed by RW locks > -------------------------------------------------------- > > Key: HADOOP-18740 > URL: https://issues.apache.org/jira/browse/HADOOP-18740 > Project: Hadoop Common > Issue Type: Sub-task > Reporter: Viraj Jasani > Assignee: Viraj Jasani > Priority: Major > Labels: pull-request-available > > In order to implement LRU or LFU based cache removal policies for s3a > prefetched cache blocks, it is important for all cache reader threads to > acquire read lock and similarly cache file removal mechanism (fs close or > cache eviction) to acquire write lock before accessing the files. > As we maintain the block entries in an in-memory map, we should be able to > introduce read-write lock per cache file entry, we don't need coarse-grained > lock shared by all entries. > > This is a prerequisite to HADOOP-18291. -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-issues-h...@hadoop.apache.org