This is an automated email from the ASF dual-hosted git repository.
ddanielr 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 fd3e837033 Replace ReferenceDirectory with static named constructor
(#4741)
fd3e837033 is described below
commit fd3e83703371ec2a8fde7942f9b194f8aa912dca
Author: John K <[email protected]>
AuthorDate: Thu Jul 25 17:07:04 2024 -0400
Replace ReferenceDirectory with static named constructor (#4741)
- Delete ReferenceDirectory class. It is only being used
in GarbageCollectionAlgorithm, GCRun, and GarbageCollectionTest.
- Replace ReferenceDirectory functionality with addition of
forDirectory named static constructor in ReferenceFile.
Migrate necessary components from ReferenceDirectory class to
forDirectory constructor, including DirCol validation and
boolean isDirectory = true.
- Replace references to ReferenceDirectory with components
migrated to ReferenceFile, including forDirectory
constructor.
- Delete recast variable dirReference in GarbageCollectionAlgorithm,
which is no longer necessary now that all references use Reference
interface.
- Finalize isDirectory boolean in ReferenceFile. To support this,
modify ReferenceFile constructor to add isDirectory boolean to
signature. With this change, update references to this constructor
in other methods/classes.
---
.../accumulo/core/gc/ReferenceDirectory.java | 56 ----------------------
.../org/apache/accumulo/core/gc/ReferenceFile.java | 17 +++++--
.../accumulo/server/gc/AllVolumesDirectory.java | 2 +-
.../main/java/org/apache/accumulo/gc/GCRun.java | 3 +-
.../accumulo/gc/GarbageCollectionAlgorithm.java | 6 +--
.../apache/accumulo/gc/GarbageCollectionTest.java | 3 +-
6 files changed, 18 insertions(+), 69 deletions(-)
diff --git
a/core/src/main/java/org/apache/accumulo/core/gc/ReferenceDirectory.java
b/core/src/main/java/org/apache/accumulo/core/gc/ReferenceDirectory.java
deleted file mode 100644
index 5491020aa4..0000000000
--- a/core/src/main/java/org/apache/accumulo/core/gc/ReferenceDirectory.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.accumulo.core.gc;
-
-import org.apache.accumulo.core.data.TableId;
-import org.apache.accumulo.core.metadata.schema.MetadataSchema;
-
-/**
- * A GC reference to a Tablet directory, like t-0003.
- */
-public class ReferenceDirectory extends ReferenceFile {
- private final String tabletDir; // t-0003
-
- public ReferenceDirectory(TableId tableId, String dirName) {
- super(tableId, dirName, false);
- MetadataSchema.TabletsSection.ServerColumnFamily.validateDirCol(dirName);
- this.tabletDir = dirName;
- }
-
- @Override
- public boolean isDirectory() {
- return true;
- }
-
- public String getTabletDir() {
- return tabletDir;
- }
-
- /**
- * A Tablet directory should have a metadata entry equal to the dirName.
- */
- @Override
- public String getMetadataEntry() {
- if (!tabletDir.equals(metadataEntry)) {
- throw new IllegalStateException(
- "Tablet dir " + tabletDir + " is not equal to metadataEntry: " +
metadataEntry);
- }
- return metadataEntry;
- }
-}
diff --git a/core/src/main/java/org/apache/accumulo/core/gc/ReferenceFile.java
b/core/src/main/java/org/apache/accumulo/core/gc/ReferenceFile.java
index b9eece90d5..8a2b63cfcb 100644
--- a/core/src/main/java/org/apache/accumulo/core/gc/ReferenceFile.java
+++ b/core/src/main/java/org/apache/accumulo/core/gc/ReferenceFile.java
@@ -21,6 +21,7 @@ package org.apache.accumulo.core.gc;
import java.util.Objects;
import org.apache.accumulo.core.data.TableId;
+import org.apache.accumulo.core.metadata.schema.MetadataSchema;
/**
* A GC reference used for streaming and delete markers. This type is a file.
Subclass is a
@@ -30,27 +31,35 @@ public class ReferenceFile implements Reference,
Comparable<ReferenceFile> {
// parts of an absolute URI, like "hdfs://1.2.3.4/accumulo/tables/2a/t-0003"
public final TableId tableId; // 2a
public final boolean isScan;
+ public final boolean isDirectory;
// the exact string that is stored in the metadata
protected final String metadataEntry;
- protected ReferenceFile(TableId tableId, String metadataEntry, boolean
isScan) {
+ protected ReferenceFile(TableId tableId, String metadataEntry, boolean
isScan,
+ boolean isDirectory) {
this.tableId = Objects.requireNonNull(tableId);
this.metadataEntry = Objects.requireNonNull(metadataEntry);
this.isScan = isScan;
+ this.isDirectory = isDirectory;
}
public static ReferenceFile forFile(TableId tableId, String metadataEntry) {
- return new ReferenceFile(tableId, metadataEntry, false);
+ return new ReferenceFile(tableId, metadataEntry, false, false);
}
public static ReferenceFile forScan(TableId tableId, String metadataEntry) {
- return new ReferenceFile(tableId, metadataEntry, true);
+ return new ReferenceFile(tableId, metadataEntry, true, false);
+ }
+
+ public static ReferenceFile forDirectory(TableId tableId, String dirName) {
+ MetadataSchema.TabletsSection.ServerColumnFamily.validateDirCol(dirName);
+ return new ReferenceFile(tableId, dirName, false, true);
}
@Override
public boolean isDirectory() {
- return false;
+ return isDirectory;
}
@Override
diff --git
a/server/base/src/main/java/org/apache/accumulo/server/gc/AllVolumesDirectory.java
b/server/base/src/main/java/org/apache/accumulo/server/gc/AllVolumesDirectory.java
index aff8dd5d03..d13b3ec89f 100644
---
a/server/base/src/main/java/org/apache/accumulo/server/gc/AllVolumesDirectory.java
+++
b/server/base/src/main/java/org/apache/accumulo/server/gc/AllVolumesDirectory.java
@@ -32,7 +32,7 @@ import org.apache.hadoop.fs.Path;
public class AllVolumesDirectory extends ReferenceFile {
public AllVolumesDirectory(TableId tableId, String dirName) {
- super(tableId, getDeleteTabletOnAllVolumesUri(tableId, dirName), false);
+ super(tableId, getDeleteTabletOnAllVolumesUri(tableId, dirName), false,
false);
}
private static String getDeleteTabletOnAllVolumesUri(TableId tableId, String
dirName) {
diff --git a/server/gc/src/main/java/org/apache/accumulo/gc/GCRun.java
b/server/gc/src/main/java/org/apache/accumulo/gc/GCRun.java
index cd1753b67f..a4b328438f 100644
--- a/server/gc/src/main/java/org/apache/accumulo/gc/GCRun.java
+++ b/server/gc/src/main/java/org/apache/accumulo/gc/GCRun.java
@@ -51,7 +51,6 @@ import org.apache.accumulo.core.data.TableId;
import org.apache.accumulo.core.fate.zookeeper.ZooReader;
import org.apache.accumulo.core.gc.GcCandidate;
import org.apache.accumulo.core.gc.Reference;
-import org.apache.accumulo.core.gc.ReferenceDirectory;
import org.apache.accumulo.core.gc.ReferenceFile;
import org.apache.accumulo.core.manager.state.tables.TableState;
import org.apache.accumulo.core.metadata.MetadataTable;
@@ -215,7 +214,7 @@ public class GCRun implements GarbageCollectionEnvironment {
// if dirName is populated, then we have a tablet directory aka srv:dir
if (tm.getDirName() != null) {
// add the tablet directory to the stream
- var tabletDir = new ReferenceDirectory(tableId, tm.getDirName());
+ var tabletDir = ReferenceFile.forDirectory(tableId, tm.getDirName());
fileStream = Stream.concat(fileStream, Stream.of(tabletDir));
}
return fileStream;
diff --git
a/server/gc/src/main/java/org/apache/accumulo/gc/GarbageCollectionAlgorithm.java
b/server/gc/src/main/java/org/apache/accumulo/gc/GarbageCollectionAlgorithm.java
index 6800b9a84d..419d10728f 100644
---
a/server/gc/src/main/java/org/apache/accumulo/gc/GarbageCollectionAlgorithm.java
+++
b/server/gc/src/main/java/org/apache/accumulo/gc/GarbageCollectionAlgorithm.java
@@ -40,7 +40,6 @@ import org.apache.accumulo.core.client.TableNotFoundException;
import org.apache.accumulo.core.data.TableId;
import org.apache.accumulo.core.gc.GcCandidate;
import org.apache.accumulo.core.gc.Reference;
-import org.apache.accumulo.core.gc.ReferenceDirectory;
import org.apache.accumulo.core.metadata.schema.Ample.GcCandidateType;
import
org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ServerColumnFamily;
import org.apache.accumulo.core.trace.TraceUtil;
@@ -153,10 +152,9 @@ public class GarbageCollectionAlgorithm {
tableIdsSeen.add(ref.getTableId());
if (ref.isDirectory()) {
- var dirReference = (ReferenceDirectory) ref;
- ServerColumnFamily.validateDirCol(dirReference.getTabletDir());
+ ServerColumnFamily.validateDirCol(ref.getMetadataEntry());
- String dir = "/" + dirReference.tableId + "/" +
dirReference.getTabletDir();
+ String dir = "/" + ref.getTableId() + "/" + ref.getMetadataEntry();
dir = makeRelative(dir, 2);
diff --git
a/server/gc/src/test/java/org/apache/accumulo/gc/GarbageCollectionTest.java
b/server/gc/src/test/java/org/apache/accumulo/gc/GarbageCollectionTest.java
index 8e9a2d1e07..74b6318029 100644
--- a/server/gc/src/test/java/org/apache/accumulo/gc/GarbageCollectionTest.java
+++ b/server/gc/src/test/java/org/apache/accumulo/gc/GarbageCollectionTest.java
@@ -41,7 +41,6 @@ import org.apache.accumulo.core.client.TableNotFoundException;
import org.apache.accumulo.core.data.TableId;
import org.apache.accumulo.core.gc.GcCandidate;
import org.apache.accumulo.core.gc.Reference;
-import org.apache.accumulo.core.gc.ReferenceDirectory;
import org.apache.accumulo.core.gc.ReferenceFile;
import org.apache.accumulo.core.manager.state.tables.TableState;
import org.apache.accumulo.core.metadata.MetadataTable;
@@ -161,7 +160,7 @@ public class GarbageCollectionTest {
public void addDirReference(String tableId, String endRow, String dir) {
TableId tid = TableId.of(tableId);
- references.put(tableId + ":" + endRow, new ReferenceDirectory(tid, dir));
+ references.put(tableId + ":" + endRow, ReferenceFile.forDirectory(tid,
dir));
tableIds.add(tid);
}