[GitHub] [hadoop] steveloughran commented on a diff in pull request #5675: HADOOP-18740. S3A prefetch cache blocks should be accessed by RW locks
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... -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org - To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-issues-h...@hadoop.apache.org
[GitHub] [hadoop] steveloughran commented on a diff in pull request #5675: HADOOP-18740. S3A prefetch cache blocks should be accessed by RW locks
steveloughran commented on code in PR #5675: URL: https://github.com/apache/hadoop/pull/5675#discussion_r1211811893 ## hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/impl/prefetch/SingleFilePerBlockCache.java: ## @@ -99,6 +106,32 @@ public String toString() { "([%03d] %s: size = %d, checksum = %d)", blockNumber, path, size, checksum); } + +/** + * Take the read or write lock. + * + * @param lockType type of the lock. + */ +void takeLock(LockType lockType) { + if (LockType.READ == lockType) { +this.lock.readLock().lock(); Review Comment: remove the `this.` ## hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/impl/prefetch/SingleFilePerBlockCache.java: ## @@ -99,6 +106,32 @@ public String toString() { "([%03d] %s: size = %d, checksum = %d)", blockNumber, path, size, checksum); } + +/** + * Take the read or write lock. + * + * @param lockType type of the lock. + */ +void takeLock(LockType lockType) { + if (LockType.READ == lockType) { +this.lock.readLock().lock(); + } else if (LockType.WRITE == lockType) { +this.lock.writeLock().lock(); + } +} + +/** + * Release the read or write lock. + * + * @param lockType type of the lock. + */ +void releaseLock(LockType lockType) { + if (LockType.READ == lockType) { +this.lock.readLock().unlock(); Review Comment: remove the `this.` ## hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/impl/prefetch/SingleFilePerBlockCache.java: ## @@ -268,12 +310,15 @@ public void close() throws IOException { int numFilesDeleted = 0; for (Entry entry : blocks.values()) { + entry.takeLock(Entry.LockType.WRITE); Review Comment: should we be acquiring locks in close()? good: no race condition in close bad) the usual also, L303: should closed be atomic? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org - To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-issues-h...@hadoop.apache.org