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
The following commit(s) were added to refs/heads/main by this push: new 2028745941 logs row ranges for files that have them (#3885) 2028745941 is described below commit 202874594185c7497960a43262b12d3ab9d78d7d Author: Keith Turner <ktur...@apache.org> AuthorDate: Tue Oct 24 20:50:18 2023 -0400 logs row ranges for files that have them (#3885) There was code that was logging only tablets file names. Now that files can have a row range, need to log the range if it exists. --- .../apache/accumulo/core/logging/TabletLogger.java | 16 +++++++++------- .../accumulo/core/metadata/AbstractTabletFile.java | 21 +++++++++++++++++++++ .../accumulo/core/metadata/CompactableFileImpl.java | 2 +- .../apache/accumulo/core/metadata/TabletFile.java | 5 +++++ .../accumulo/tserver/tablet/CompactableImpl.java | 15 ++++++++------- .../org/apache/accumulo/test/ComprehensiveIT.java | 1 - 6 files changed, 44 insertions(+), 16 deletions(-) diff --git a/core/src/main/java/org/apache/accumulo/core/logging/TabletLogger.java b/core/src/main/java/org/apache/accumulo/core/logging/TabletLogger.java index 100cc318cc..e632971cf5 100644 --- a/core/src/main/java/org/apache/accumulo/core/logging/TabletLogger.java +++ b/core/src/main/java/org/apache/accumulo/core/logging/TabletLogger.java @@ -28,6 +28,7 @@ import java.util.concurrent.TimeUnit; import org.apache.accumulo.core.client.admin.CompactionConfig; import org.apache.accumulo.core.client.admin.compaction.CompactableFile; import org.apache.accumulo.core.dataImpl.KeyExtent; +import org.apache.accumulo.core.metadata.CompactableFileImpl; import org.apache.accumulo.core.metadata.StoredTabletFile; import org.apache.accumulo.core.metadata.TServerInstance; import org.apache.accumulo.core.metadata.TabletFile; @@ -117,32 +118,33 @@ public class TabletLogger { * Lazily converts TableFile to file names. The lazy part is really important because when it is * not called with log.isDebugEnabled(). */ - private static Collection<String> asFileNames(Collection<CompactableFile> files) { - return Collections2.transform(files, CompactableFile::getFileName); + private static Collection<String> asMinimalString(Collection<CompactableFile> files) { + return Collections2.transform(files, + cf -> CompactableFileImpl.toStoredTabletFile(cf).toMinimalString()); } public static void selected(KeyExtent extent, CompactionKind kind, Collection<StoredTabletFile> inputs) { fileLog.trace("{} changed compaction selection set for {} new set {}", extent, kind, - Collections2.transform(inputs, StoredTabletFile::getFileName)); + Collections2.transform(inputs, StoredTabletFile::toMinimalString)); } public static void compacting(KeyExtent extent, CompactionJob job, CompactionConfig config) { if (fileLog.isDebugEnabled()) { if (config == null) { fileLog.debug("Compacting {} on {} for {} from {} size {}", extent, job.getExecutor(), - job.getKind(), asFileNames(job.getFiles()), getSize(job.getFiles())); + job.getKind(), asMinimalString(job.getFiles()), getSize(job.getFiles())); } else { fileLog.debug("Compacting {} on {} for {} from {} size {} config {}", extent, - job.getExecutor(), job.getKind(), asFileNames(job.getFiles()), getSize(job.getFiles()), - config); + job.getExecutor(), job.getKind(), asMinimalString(job.getFiles()), + getSize(job.getFiles()), config); } } } public static void compacted(KeyExtent extent, CompactionJob job, StoredTabletFile output) { fileLog.debug("Compacted {} for {} created {} from {}", extent, job.getKind(), output, - asFileNames(job.getFiles())); + asMinimalString(job.getFiles())); } public static void flushed(KeyExtent extent, Optional<StoredTabletFile> newDatafile) { diff --git a/core/src/main/java/org/apache/accumulo/core/metadata/AbstractTabletFile.java b/core/src/main/java/org/apache/accumulo/core/metadata/AbstractTabletFile.java index 0957c07a9d..ae0d46fbf2 100644 --- a/core/src/main/java/org/apache/accumulo/core/metadata/AbstractTabletFile.java +++ b/core/src/main/java/org/apache/accumulo/core/metadata/AbstractTabletFile.java @@ -20,6 +20,7 @@ package org.apache.accumulo.core.metadata; import java.util.Objects; +import org.apache.accumulo.core.data.ByteSequence; import org.apache.accumulo.core.data.Key; import org.apache.accumulo.core.data.Range; import org.apache.hadoop.fs.Path; @@ -82,4 +83,24 @@ public abstract class AbstractTabletFile<T extends AbstractTabletFile<T>> return row.length() > 0 && row.byteAt(row.length() - 1) == (byte) 0x00; } + private static String stripZeroTail(ByteSequence row) { + if (row.byteAt(row.length() - 1) == (byte) 0x00) { + return row.subSequence(0, row.length() - 1).toString(); + } + return row.toString(); + } + + @Override + public String toMinimalString() { + if (hasRange()) { + String startRow = + range.isInfiniteStartKey() ? "-inf" : stripZeroTail(range.getStartKey().getRowData()); + String endRow = + range.isInfiniteStopKey() ? "+inf" : stripZeroTail(range.getEndKey().getRowData()); + return getFileName() + " (" + startRow + "," + endRow + "]"; + } else { + return getFileName(); + } + } + } diff --git a/core/src/main/java/org/apache/accumulo/core/metadata/CompactableFileImpl.java b/core/src/main/java/org/apache/accumulo/core/metadata/CompactableFileImpl.java index 9944245f97..e3ff1a334a 100644 --- a/core/src/main/java/org/apache/accumulo/core/metadata/CompactableFileImpl.java +++ b/core/src/main/java/org/apache/accumulo/core/metadata/CompactableFileImpl.java @@ -89,6 +89,6 @@ public class CompactableFileImpl implements CompactableFile { @Override public String toString() { - return "[" + storedTabletFile.getFileName() + ", " + dataFileValue + "]"; + return "[" + storedTabletFile.toMinimalString() + ", " + dataFileValue + "]"; } } diff --git a/core/src/main/java/org/apache/accumulo/core/metadata/TabletFile.java b/core/src/main/java/org/apache/accumulo/core/metadata/TabletFile.java index b31b6926d3..8b90bd7880 100644 --- a/core/src/main/java/org/apache/accumulo/core/metadata/TabletFile.java +++ b/core/src/main/java/org/apache/accumulo/core/metadata/TabletFile.java @@ -52,4 +52,9 @@ public interface TabletFile { * */ boolean hasRange(); + + /** + * @return a string with the filename and row range if there is one. + */ + String toMinimalString(); } diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/CompactableImpl.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/CompactableImpl.java index 2d7da09b46..8fe91dab5b 100644 --- a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/CompactableImpl.java +++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/CompactableImpl.java @@ -202,7 +202,7 @@ public class CompactableImpl implements Compactable { this.selectStatus = FileSelectionStatus.RESERVED; log.debug("Selected compaction status initialized from external compactions {} {} {} {}", - getExtent(), selectStatus, initiallySelectedAll, asFileNames(selectedFiles)); + getExtent(), selectStatus, initiallySelectedAll, asMinimalString(selectedFiles)); } } @@ -261,7 +261,7 @@ public class CompactableImpl implements Compactable { selectedFiles.addAll(selected); initiallySelectedAll = allSelected; log.trace("Selected compaction status changed {} {} {} {}", getExtent(), selectStatus, - initiallySelectedAll, asFileNames(selectedFiles)); + initiallySelectedAll, asMinimalString(selectedFiles)); TabletLogger.selected(getExtent(), selectKind, selectedFiles); } @@ -407,7 +407,8 @@ public class CompactableImpl implements Compactable { if (selectKind == job.getKind()) { if (!selectedFiles.containsAll(jobFiles)) { log.trace("Ignoring {} compaction that does not contain selected files {} {} {}", - job.getKind(), getExtent(), asFileNames(selectedFiles), asFileNames(jobFiles)); + job.getKind(), getExtent(), asMinimalString(selectedFiles), + asMinimalString(jobFiles)); return false; } } else { @@ -417,7 +418,7 @@ public class CompactableImpl implements Compactable { } } else if (!Collections.disjoint(selectedFiles, jobFiles)) { log.trace("Ingoing compaction that overlaps with selected files {} {} {}", getExtent(), - job.getKind(), asFileNames(Sets.intersection(selectedFiles, jobFiles))); + job.getKind(), asMinimalString(Sets.intersection(selectedFiles, jobFiles))); return false; } break; @@ -486,7 +487,7 @@ public class CompactableImpl implements Compactable { selectedFiles.add(newFile.orElseThrow()); } log.trace("Compacted subset of selected files {} {} -> {}", getExtent(), - asFileNames(jobFiles), newFile.orElse(null)); + asMinimalString(jobFiles), newFile.orElse(null)); } else { log.debug("Canceled selected compaction completed {} but others still running ", getExtent()); @@ -874,8 +875,8 @@ public class CompactableImpl implements Compactable { } - static Collection<String> asFileNames(Set<StoredTabletFile> files) { - return Collections2.transform(files, StoredTabletFile::getFileName); + static Collection<String> asMinimalString(Set<StoredTabletFile> files) { + return Collections2.transform(files, StoredTabletFile::toMinimalString); } @Override diff --git a/test/src/main/java/org/apache/accumulo/test/ComprehensiveIT.java b/test/src/main/java/org/apache/accumulo/test/ComprehensiveIT.java index 4ea8843e00..c33c9f9133 100644 --- a/test/src/main/java/org/apache/accumulo/test/ComprehensiveIT.java +++ b/test/src/main/java/org/apache/accumulo/test/ComprehensiveIT.java @@ -176,7 +176,6 @@ public class ComprehensiveIT extends SharedMiniClusterBase { client.tableOperations().merge(table, null, null); assertEquals(Set.of(), new TreeSet<>(client.tableOperations().listSplits(table))); verifyData(client, table, AUTHORIZATIONS, expectedData); - } }