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());