This is an automated email from the ASF dual-hosted git repository.
kturner pushed a commit to branch 2.1
in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/2.1 by this push:
new 5370513fb5 closes reader deep copies outside of lock in FileManager
(#5015)
5370513fb5 is described below
commit 5370513fb586415e7c121adff8cfa31a8d0d4c72
Author: Keith Turner <[email protected]>
AuthorDate: Mon Oct 28 17:22:28 2024 -0400
closes reader deep copies outside of lock in FileManager (#5015)
FileManager has a goal of doing all I/O outside of locks in its code to
avoid one scan blocking another w/ I/O related to opening and closing
files. The code violated this goal when closing deep copies on an
rfile and did this inside a lock. This change moves the close outside
of the lock.
---
.../org/apache/accumulo/server/fs/FileManager.java | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git
a/server/base/src/main/java/org/apache/accumulo/server/fs/FileManager.java
b/server/base/src/main/java/org/apache/accumulo/server/fs/FileManager.java
index adceeeb1c0..b2f9daeccd 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/fs/FileManager.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/fs/FileManager.java
@@ -349,6 +349,15 @@ public class FileManager {
boolean sawIOException) {
// put files in openFiles
+ for (FileSKVIterator reader : readers) {
+ try {
+ reader.closeDeepCopies();
+ } catch (IOException e) {
+ log.warn("{}", e.getMessage(), e);
+ sawIOException = true;
+ }
+ }
+
synchronized (this) {
// check that readers were actually reserved ... want to make sure a
thread does
@@ -357,15 +366,6 @@ public class FileManager {
throw new IllegalArgumentException("Asked to release readers that were
never reserved ");
}
- for (FileSKVIterator reader : readers) {
- try {
- reader.closeDeepCopies();
- } catch (IOException e) {
- log.warn("{}", e.getMessage(), e);
- sawIOException = true;
- }
- }
-
for (FileSKVIterator reader : readers) {
String fileName = reservedReaders.remove(reader);
if (!sawIOException) {