This is an automated email from the ASF dual-hosted git repository.

kturner pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/accumulo.git

commit 8456f0597bf81d2b79537066a6f050614a7411b7
Merge: 27b2113ab7 c679b04313
Author: Keith Turner <ktur...@apache.org>
AuthorDate: Tue Jul 18 12:08:22 2023 -0400

    Merge remote-tracking branch 'upstream/2.1'

 .../core/metadata/schema/TabletsMetadata.java      |  6 ++-
 .../accumulo/core/util/ConfigurationImpl.java      | 24 +++++------
 .../accumulo/core/util/ConfigurationImplTest.java  | 49 ++++++++++++++++++++++
 .../accumulo/server/ServiceEnvironmentImpl.java    | 13 ++++--
 .../server/ServiceEnvironmentImplTest.java         | 43 +++++++++----------
 .../apache/accumulo/tserver/tablet/Scanner.java    | 27 ++++++------
 .../org/apache/accumulo/tserver/tablet/Tablet.java |  9 ++--
 .../apache/accumulo/tserver/tablet/TabletBase.java |  9 ++--
 8 files changed, 120 insertions(+), 60 deletions(-)

diff --cc 
core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletsMetadata.java
index 7b1a61a8d6,600e889f5e..f431cb052c
--- 
a/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletsMetadata.java
+++ 
b/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletsMetadata.java
@@@ -574,10 -537,14 +574,14 @@@ public class TabletsMetadata implement
        case IMMEDIATE:
          ZooReader zooReader = ctx.getZooReader();
          try {
-           byte[] bytes = zooReader.getData(zkRoot + RootTable.ZROOT_TABLET);
+           var path = zkRoot + RootTable.ZROOT_TABLET;
+           // attempt (see ZOOKEEPER-1675) to ensure the latest root table 
metadata is read from
+           // zookeeper
+           zooReader.sync(path);
+           byte[] bytes = zooReader.getData(path);
            return new RootTabletMetadata(new String(bytes, 
UTF_8)).toTabletMetadata();
          } catch (InterruptedException | KeeperException e) {
 -          throw new RuntimeException(e);
 +          throw new IllegalStateException(e);
          }
        default:
          throw new IllegalArgumentException("Unknown consistency level " + 
readConsistency);
diff --cc 
server/base/src/main/java/org/apache/accumulo/server/ServiceEnvironmentImpl.java
index 9181f8350d,0f68a11d48..46c6fdb7bd
--- 
a/server/base/src/main/java/org/apache/accumulo/server/ServiceEnvironmentImpl.java
+++ 
b/server/base/src/main/java/org/apache/accumulo/server/ServiceEnvironmentImpl.java
@@@ -18,8 -18,8 +18,7 @@@
   */
  package org.apache.accumulo.server;
  
- import java.util.Map;
- import java.util.concurrent.ConcurrentHashMap;
 -import java.io.IOException;
+ import java.util.concurrent.TimeUnit;
  
  import org.apache.accumulo.core.classloader.ClassLoaderUtil;
  import org.apache.accumulo.core.client.TableNotFoundException;
diff --cc 
server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Scanner.java
index 5092984d92,311492b822..0e02ffce3f
--- 
a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Scanner.java
+++ 
b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Scanner.java
@@@ -148,19 -147,23 +147,23 @@@ public class Scanner 
        sawException = true;
        throw re;
      } finally {
-       // code in finally block because always want
-       // to return datafiles, even when exception is thrown
-       if (dataSource != null && !scanParams.isIsolated()) {
-         dataSource.close(false);
-       } else if (dataSource != null) {
-         dataSource.detachFileManager();
-       }
+       try {
+         // code in finally block because always want
 -        // to return mapfiles, even when exception is thrown
++        // to return datafiles, even when exception is thrown
+         if (dataSource != null) {
+           if (sawException || !scanParams.isIsolated()) {
+             dataSource.close(sawException);
+           } else {
+             dataSource.detachFileManager();
+           }
+         }
  
-       if (results != null && results.getResults() != null) {
-         tablet.updateQueryStats(results.getResults().size(), 
results.getNumBytes());
+         if (results != null && results.getResults() != null) {
+           tablet.updateQueryStats(results.getResults().size(), 
results.getNumBytes());
+         }
+       } finally {
+         scannerSemaphore.release();
        }
- 
-       scannerSemaphore.release();
      }
    }
  
diff --cc 
server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java
index 2d910585c1,251d9df30b..8f3b5d8157
--- 
a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java
+++ 
b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java
@@@ -440,13 -456,13 +441,13 @@@ public class Tablet extends TabletBase 
      try {
        SortedKeyValueIterator<Key,Value> iter = new 
SourceSwitchingIterator(dataSource);
        checker.check(iter);
-     } catch (IOException ioe) {
-       dataSource.close(true);
-       throw ioe;
+     } catch (IOException | RuntimeException e) {
+       sawException = true;
+       throw e;
      } finally {
        // code in finally block because always want
 -      // to return mapfiles, even when exception is thrown
 +      // to return data files, even when exception is thrown
-       dataSource.close(false);
+       dataSource.close(sawException);
      }
    }
  
diff --cc 
server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/TabletBase.java
index c203f41cf1,12890106d4..dd23c5a12b
--- 
a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/TabletBase.java
+++ 
b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/TabletBase.java
@@@ -210,13 -208,13 +211,13 @@@ public abstract class TabletBase 
        this.server.getScanMetrics().incrementLookupCount(1);
        result = lookup(iter, ranges, results, scanParams, maxResultSize);
        return result;
-     } catch (IOException ioe) {
-       dataSource.close(true);
-       throw ioe;
+     } catch (IOException | RuntimeException e) {
+       sawException = true;
+       throw e;
      } finally {
        // code in finally block because always want
 -      // to return mapfiles, even when exception is thrown
 +      // to return data files, even when exception is thrown
-       dataSource.close(false);
+       dataSource.close(sawException);
  
        synchronized (this) {
          queryResultCount.addAndGet(results.size());

Reply via email to