[
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: [email protected]
For additional commands, e-mail: [email protected]