-
Notifications
You must be signed in to change notification settings - Fork 588
HDDS-12561. Reclaimable Rename entry filter for reclaiming renaming entries #8054
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…napshots Change-Id: If1a980e5550dda6775c3af53b14a1eab71206a43
Change-Id: Ia8cd0c367e54c978d7534e7bd3702803c8cdf38e
…ntries Change-Id: Id17a31bcb09f676c120652502fb2fc897973821e
Change-Id: I772783d23bf250ca6d468bf6326a09a49c614eb9
Change-Id: I0a0c2a198870d1254c42fd0d7dcaa0b7b7346ae8
Change-Id: I1c1ad2f536ead10a92caa7eec0b8d891289a0257
Change-Id: Ib70ac6c3feade6dc3c24b34c537aa551bbf31062
Change-Id: I0257e9e9100b2e810cca27450f0ada3aec617914
Change-Id: I5b4eedefd85881933572df1a6c8b2960a2cc9278
Change-Id: I6a5e9ab92c10164288c090a8b748383a9430ee69
| import org.rocksdb.RocksDBException; | ||
|
|
||
| /** | ||
| * Test class for ReclaimableDirFilter. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: ReclaimableRenameEntryFilter not ReclaimableDirFilter.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
...c/test/java/org/apache/hadoop/ozone/om/snapshot/filter/TestReclaimableRenameEntryFilter.java
Outdated
Show resolved
Hide resolved
Change-Id: I411b2d0a6f3fa0551ec2f306317440f8ed7387c0
Change-Id: Ie7575e9b7ccb1eb9c2b6d875e9d88e4005d12026
Change-Id: I53fa063a7268e23870b3a7a6851e9920b81ed241
Change-Id: I298fc6d96335b5cb9c79f46901f0d89dc2829362
Change-Id: I9c80b73b6b72d7214edb3e92ae32799a4308f223
Change-Id: I20a877c63a968d9bf912e12cfd10c7aebc7a25bb
Change-Id: I7f5ab7eccbade1f71515e86c9667ab9c1948189e
Change-Id: I62416787dbc587f393f795766d555ea536b8cda5 # Conflicts: # hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/snapshot/TestMultiSnapshotLocks.java
Change-Id: I64e291f29c19d5c36bc9a5ef3fcf7f416a1149fa
Change-Id: I3c25eaaad8d8471c96f80113f136d628fa1389c8
| } | ||
|
|
||
| @SafeVarargs | ||
| private final boolean isRenameEntryReclaimable(Table.KeyValue<String, String> renameEntry, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just to have an understanding on this. Are we just checking if the renamed entry is in the previous snapshot's keyTable and dirTable? Should the check be separate of keys and directories?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We are checking if a rename entry points to an object in the previous snapshot. Since objectId is unique in the system the entry would be either in the directoryTable or fileTable or keyTable
| String value = UUID.randomUUID().toString(); | ||
| Table<String, OmKeyInfo> keyTable = getMockedTable(ImmutableMap.of(value, mock(OmKeyInfo.class))); | ||
| Table<String, OmDirectoryInfo> directoryTable = getFailingMockedTable(); | ||
| testReclaimableRenameEntryFilter(volume, bucket, index, value, keyTable, directoryTable, index == 0); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm trying to understand these test suites. What does index here mean and why should it be this condition?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should only be able to reclaim the entry if the snapshot is the first snapshot in the chain.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
also reclaimable if no snapshot at all? index = Math.min(index, actualNumberOfSnapshots);
Change-Id: I4e57e43596a9d90ecb2dad62883b746d8cdf992e
…ne/om/snapshot/filter/TestAbstractReclaimableFilter.java Co-authored-by: Doroszlai, Attila <[email protected]>
Change-Id: I7114755259f35362cc7a5db527663e39e38c8b7a
Change-Id: Ife615fc19c66ec5db1558d8ea930cc45f65f41b6
Change-Id: If5159bfd6cb61e3c8ab00e8322de290d27d41940
Change-Id: I18a97d75efb94cb2aec91fbdb1aef57ff11fb1a7
…ne/om/snapshot/filter/ReclaimableFilter.java Co-authored-by: Doroszlai, Attila <[email protected]>
Change-Id: I864704aa4ef0140eb2d3005795cfeb89c721246d
Change-Id: If60fe12bf3a5bc111c62bc86889027fe291c8baa
Change-Id: I443fd757524cfcd35780f06631f06112e33b0f04
Change-Id: Ic1c1920826f5462cb38d36075cffa498814c96c7
Change-Id: Ie1c9dfa79bde12aba9d8e8cec647025f074a414a
Change-Id: Iaae2379e6289e88abc90771f2af932574d25a1c8 # Conflicts: # hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmMetadataManagerImpl.java
|
Please wait for clean CI run in fork before marking ready for review. |
Change-Id: I91138a5797daa758479c188127c66f6bd6d39ee4
Change-Id: I89c1cfe51ac0810127bc80e0ad9ee2dfcdd2dda6
|
@aswinshakil @hemantk-12 Can we go ahead and merge this change? |
| /** | ||
| * Given renameKey, return the volume, bucket and objectID from the key. | ||
| */ | ||
| String[] splitRenameKey(String renameKey); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we're getting into the habit of creating helper methods inside OMMetadataManager that are unrelated to OMMetadataManager internals. IMO it (and others) should go into a utility class, like SnapshotUtil
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
good point
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should not do it as part of a util function as this is completely dependent on how the metadata has been layed out. Rather having it in the snapshotUtil is a bad idea as we are mixing up metadata layout internal stuff outside of this metdata layer.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@jojochuang I don't like the whole idea of Snapshots using MetadataManager directly, right now all of our code is tightly coupled with metadatamanager. Like other flows snapshots are supposed to use KeyManager & BucketManager etc. These set of patches would cleanup these shortcomings in our implementation. I @prashantpogde & @hemantk-12 had discussed this and aligned to eventually get there. If we start using MetadataManager we are completely defeating the purpose of higher level abstractions.
| public class ReclaimableRenameEntryFilter extends ReclaimableFilter<String> { | ||
|
|
||
| public ReclaimableRenameEntryFilter(OzoneManager ozoneManager, | ||
| OmSnapshotManager omSnapshotManager, SnapshotChainManager snapshotChainManager, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
extra indentation. our checkstyle rule allow this?
|
|
||
| @Override | ||
| protected String getVolumeName(Table.KeyValue<String, String> keyValue) throws IOException { | ||
| return getKeyManager().getMetadataManager().splitRenameKey(keyValue.getKey())[0]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
IMO it should be just
| return getKeyManager().getMetadataManager().splitRenameKey(keyValue.getKey())[0]; | |
| return SnapshotUtil.splitRenameKey(keyValue.getKey())[0]; |
| if (previousTable != null) { | ||
| String prevDbKey = renameEntry.getValue(); | ||
| WithObjectID withObjectID = previousTable.getIfExist(prevDbKey); | ||
| if (withObjectID != null) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if the rename entry is found in any of the previous tables, return false because it cannot be reclaimed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yeah we cannot delete the rename entry
| index = Math.min(index, actualNumberOfSnapshots); | ||
| String value = UUID.randomUUID().toString(); | ||
| Table<String, OmKeyInfo> keyTable = getMockedTable(ImmutableMap.of(value, mock(OmKeyInfo.class))); | ||
| Table<String, OmDirectoryInfo> directoryTable = getFailingMockedTable(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why make directory table throw exception?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We want to ensure keyTable if the entry exists in the keyTable then it shouldn't even call directory table existence just checking if it existed in keyTable then it shouldn't go to directory table
| String value = UUID.randomUUID().toString(); | ||
| Table<String, OmKeyInfo> keyTable = getMockedTable(Collections.emptyMap()); | ||
| Table<String, OmDirectoryInfo> directoryTable = getFailingMockedTable(); | ||
| testReclaimableRenameEntryFilter(volume, bucket, index, value, keyTable, directoryTable, true); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
so always reclaimable if the key is not in the snapshot (key table is empty)?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yeah
| String value = UUID.randomUUID().toString(); | ||
| Table<String, OmKeyInfo> keyTable = getMockedTable(ImmutableMap.of(value, mock(OmKeyInfo.class))); | ||
| Table<String, OmDirectoryInfo> directoryTable = getFailingMockedTable(); | ||
| testReclaimableRenameEntryFilter(volume, bucket, index, value, keyTable, directoryTable, index == 0); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
also reclaimable if no snapshot at all? index = Math.min(index, actualNumberOfSnapshots);
| String value = UUID.randomUUID().toString(); | ||
| Table<String, OmKeyInfo> keyTable = getMockedTable(Collections.emptyMap()); | ||
| Table<String, OmDirectoryInfo> directoryTable = getMockedTable(Collections.emptyMap()); | ||
| testReclaimableRenameEntryFilter(volume, bucket, index, value, keyTable, directoryTable, true); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
always reclaimable if both key table and directory table are empty in a FSO bucket.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yeah
| String value = UUID.randomUUID().toString(); | ||
| Table<String, OmKeyInfo> keyTable = getMockedTable(ImmutableMap.of(value, mock(OmKeyInfo.class))); | ||
| Table<String, OmDirectoryInfo> directoryTable = getMockedTable(Collections.emptyMap()); | ||
| testReclaimableRenameEntryFilter(volume, bucket, index, value, keyTable, directoryTable, index == 0); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
reclaimable if key is in the key table and its the first snapshot (or there's no snapshot) in a FSO bucket.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yeah since there is no previous snapshot
| String value = UUID.randomUUID().toString(); | ||
| Table<String, OmKeyInfo> keyTable = getMockedTable(Collections.emptyMap()); | ||
| Table<String, OmDirectoryInfo> directoryTable = getMockedTable(ImmutableMap.of(value, mock(OmDirectoryInfo.class))); | ||
| testReclaimableRenameEntryFilter(volume, bucket, index, value, keyTable, directoryTable, index == 0); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
reclaimable if key is in the key table or directory table and its the first snapshot (or there's no snapshot) in a FSO bucket.
| } | ||
|
|
||
| @Override | ||
| protected Boolean isReclaimable(Table.KeyValue<String, String> renameEntry) throws IOException { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
a comment explaining how it works would be idea.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
| Boolean expectedValue) | ||
| throws IOException { | ||
| List<SnapshotInfo> snapshotInfos = getLastSnapshotInfos(volume, bucket, 1, index); | ||
| SnapshotInfo prevSnapshotInfo = snapshotInfos.get(0); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
look at just one nearest previous snapshot.
Could you explain why just look at one snapshot?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We just have to look if a key corresponding to the object is present in the previous snapshot or not. That is what the rename table tracks. It just keeps a note of the reference of the object in the previous snapshot's keyTable/fileTable/directoryTable. If the entry doesn't exist then we can very well delete this entry
|
|
||
| @Override | ||
| protected Boolean isReclaimable(Table.KeyValue<String, String> renameEntry) throws IOException { | ||
| ReferenceCounted<OmSnapshot> previousSnapshot = getPreviousOmSnapshot(0); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is the index always supposed to be 0 ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yeah. There is going to be only 1 snapshot in the previous snapshot chain.
|
Change-Id: Iee91900723476e99f37f850ebda289acb6971187
|
If there are no more review comments. Can we merge this @jojochuang ? |
jojochuang
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
let's get it merged and proceed with the next batch of PRs.
|
thank you for reviewing the PR @hemantk-12 , @jojochuang @aswinshakil @smengcl |
…239-container-reconciliation Commits: 113 commits 8ceb5c3 Revert "HDDS-11232. Spare InfoBucket RPC call for the FileSystem#getFileStatus calls for the general case. (apache#6988)" (apache#8358) 8ecf4a8 HDDS-12993. Use DatanodeID in ReconNodeManager. (apache#8456) 3e09a11 HDDS-13024. HTTP connect to 0.0.0.0 failed (apache#8439) c3cb14f HDDS-12914. Bump awssdk to 2.31.40, test ResumableFileDownload (apache#8455) c6b47e9 HDDS-4677. Document Ozone Ports and Connection End Points (apache#8226) ae0d757 HDDS-13044. Remove DatanodeDetails#getUuid usages from hdds-common/client/container-service (apache#8462) 2bf3f16 HDDS-12568. Implement MiniOzoneCluster.Service for Recon (apache#8452) e59d251 HDDS-13046. Add .vscode to .gitignore (apache#8461) 50e6d61 HDDS-13022. Split up exclusive size tracking for key and directory cleanup in SnapshotInfo (apache#8433) 6db647d HDDS-12966. DBDefinitionFactory should not throw InvalidArnException (apache#8454) fe2875c HDDS-12948. [Snapshot] Increase `ozone.om.fs.snapshot.max.limit` default value to 10k (apache#8376) 215bdc2 HDDS-11904. Fix HealthyPipelineSafeModeRule logic. (apache#8386) dba7557 HDDS-12989. Throw CodecException for the Codec byte[] methods (apache#8444) d9c73f0 HDDS-11298. Support owner field in the S3 listBuckets request (apache#8315) 7a5129d HDDS-12810. Check and reserve space atomically in VolumeChoosingPolicy (apache#8360) d51ccf7 HDDS-13016. Add a getAllNodeCount() method to NodeManager. (apache#8445) 8b27fb9 HDDS-12299. Merge OzoneAclConfig into OmConfig (apache#8383) 96f4f79 HDDS-12501. Remove OMKeyInfo from SST files in backup directory. (apache#8214) 8adb500 HDDS-13021. Make callId unique for each request in AbstractKeyDeletingService (apache#8432) faeadd6 HDDS-13000. [Snapshot] listSnapshotDiffJobs throws NPE. (apache#8418) 7c957cc HDDS-11954. List keys command gets wrong info from BasicOmKeyInfo (apache#8401) 0697383 HDDS-13027. Workaround for GitHub connection failures (apache#8443) 0d5f933 HDDS-12919. Remove redundant FileLock from ChunkWrite (apache#8435) 395892a HDDS-13012. [Snapshot] Add audit logs for listSnapshotDiffJobs, snapshotDiff and cancelSnapshotDiff. (apache#8425) d92f0ed HDDS-12653. Add option in `ozone debug log container list` to filter by Health State (apache#8415) 78f8a02 HDDS-12645. Improve output of `ozone debug replicas chunk-info` (apache#8146) f32470c HDDS-12995. Split ListOptions for better reuse (apache#8413) cdd1b13 HDDS-13019. Bump jline to 3.30.0 (apache#8428) 1651408 HDDS-13018. Bump common-custom-user-data-maven-extension to 2.0.2 (apache#8429) 8f6222e HDDS-12949. Cleanup SCMSafeModeManager (apache#8390) adb385f HDDS-13002. Use DatanodeID in ContainerBalancerTask (apache#8421) 2b2a796 HDDS-12969. Use DatanodeID in XceiverClientGrpc (apache#8430) 3c0bafa HDDS-13001. Use DatanodeID in SCMBlockDeletingService. (apache#8420) 8448bc2 HDDS-12187. Use hadoop-dependency-client as parent, not dependency (apache#8416) 582fd03 HDDS-13015. Bump zstd-jni to 1.5.7-3 (apache#8426) ec12f98 HDDS-12970. Use DatanodeID in Pipeline (apache#8414) 3f48a18 HDDS-12179. Improve Container Log to also capture the Volume Information (apache#7858) 034b497 HDDS-12964. Add minimum required version of Docker Compose to RunningViaDocker page (apache#8385) c0a6b42 HDDS-12947. Add CodecException (apache#8411) 70949c5 HDDS-11603. Reclaimable Key Filter for Snapshots garbage reclaimation (apache#8392) 08283f3 HDDS-12087. TransactionToDNCommitMap too large causes GC to pause for a long time (apache#8347) f47df78 HDDS-12958. [Snapshot] Add ACL check regression tests for snapshot operations. (apache#8419) 1cc8445 HDDS-12207. Unify output of ozone debug replicas verify checks (apache#8248) f087d0b HDDS-12994. Use DatanodeID in ReconSCMDBDefinition. (apache#8417) d6a7723 HDDS-12776. ozone debug CLI command to list all Duplicate open containers (apache#8409) c78aeb0 HDDS-12951. EC: Log when falling back to reconstruction read (apache#8408) 412f22d HDDS-12959. Eliminate hdds-hadoop-dependency-server (apache#8384) df701dc HDDS-12996. Workaround for Docker Compose concurrent map writes (apache#8412) e6daae4 HDDS-12972. Use DatanodeID in ContainerReplica. (apache#8396) c1103ae HDDS-12877. Support StorageClass field in the S3 HeadObject request (apache#8351) 4135384 HDDS-12973. Add javadoc for CompactionNode() and make getCompactionNodeGraph return ConcurrentMap (apache#8395) 4f2e13c HDDS-12954. Do not throw IOException for checksum. (apache#8387) 49b8fbd HDDS-12971. Use DatanodeID in Node2PipelineMap (apache#8403) d2da18f HDDS-12346. Reduce code duplication among TestNSSummaryTask classes (apache#8287) 82b73e3 HDDS-11856. Set DN state machine thread priority higher than command handler thread. (apache#8253) d4f2734 HDDS-12689. Import BOM for AWS SDK, declare dependencies (apache#8406) 4775e76 HDDS-12975. Fix percentage of blocks deleted in grafana dashboard (apache#8398) ac0d696 HDDS-12968. [Recon] Fix column visibility issue in Derby during schema upgrade finalization. (apache#8393) e71dcf6 HDDS-11981. Add annotation for registering feature validator based on a generic version (apache#7603) 254297c HDDS-12562. Reclaimable Directory entry filter for reclaiming deleted directory entries (apache#8055) 4f467c8 HDDS-12978. Remove TestMultipartObjectGet (apache#8400) a99f207 HDDS-12967. Skip CommonChunkManagerTestCases.testFinishWrite if fuser cannot be started (apache#8389) d29d76b HDDS-12697. Ozone debug CLI to display details of a single container (apache#8264) 1d1bc88 HDDS-12974. Docker could not parse extra host IP (apache#8397) 7e675d7 HDDS-12053. Make print-log-dag command run locally and offline (apache#8016) d3faab3 HDDS-12561. Reclaimable Rename entry filter for reclaiming renaming entries (apache#8054) af1f98c HDDS-10822. Tool to omit raft log in OM. (apache#8154) 3201ca4 HDDS-12952. Make OmSnapshotManager#snapshotLimitCheck thread-safe and consistent (apache#8381) 522c88d HDDS-12963. Clean up io.grpc dependencies (apache#8382) fa8bd9d HDDS-12916. Support ETag in listObjects response (apache#8356) fdc77db HDDS-12300. Merge OmUpgradeConfig into OmConfig (apache#8378) 623e144 HDDS-12956. Bump vite to 4.5.14 (apache#8375) 8c8eaf1 HDDS-12944. Reduce timeout for integration check (apache#8374) 40d2e00 HDDS-11141. Avoid log flood due due pipeline close in XceiverServerRatis (apache#8325) 9fe1dba HDDS-12942. Init layout version config should not be public (apache#8373) 452e7aa HDDS-12596. OM fs snapshot max limit is not enforced (apache#8377) 8b095d5 HDDS-12795. Rename heartbeat and first election configuration name (apache#8249) bee8164 HDDS-12920. Configure log4j to gzip rolled over service log files (apache#8357) e16a50f HDDS-12934. Split submodule for Freon. (apache#8367) b1e9511 HDDS-12925. Update datanode volume used space on container deletion (apache#8364) 440bc82 Revert "HDDS-12596. OM fs snapshot max limit is not enforced (apache#8157)" f345492 HDDS-12596. OM fs snapshot max limit is not enforced (apache#8157) ee7b1dc HDDS-12901. Introduce EventExecutorMetrics instead of setting the metrics props unsafely (apache#8371) 810e148 HDDS-12939. Remove UnknownPipelineStateException. (apache#8372) 560fcdf HDDS-12728. Add Ozone 2.0.0 to compatibility acceptance tests (apache#8361) 5815a47 HDDS-12933. Remove the table names declared in OmMetadataManagerImpl (apache#8370) ee32fa5 HDDS-12560. Reclaimable Filter for Snaphost Garbage Collections (apache#8053) 45374ea HDDS-12932. Rewrite OMDBDefinition (apache#8362) 5cb6dd8 HDDS-12575. Set default JUnit5 timeout via property (apache#8348) 8efc0cd HDDS-11633. Delete message body too large, causing SCM to fail writing raft log (apache#8354) ac9d9fd HDDS-12915. Intermittent failure in testCreatePipelineThrowErrorWithDataNodeLimit (apache#8359) 86039e8 HDDS-12848. Create new submodule for ozone admin (apache#8292) 2d0f8cb HDDS-12833. Remove the CodecRegistry field from DBStoreBuilder (apache#8327) c71b393 HDDS-12921. UnusedPrivateField violations in tests (apache#8353) 9f3dd01 HDDS-12917. cp: option '--update' doesn't allow an argument (apache#8346) a14b395 HDDS-12922. Use OMDBDefinition in GeneratorOm and FSORepairTool (apache#8355) c8a98d6 HDDS-12892. OM Tagging Request incorrectly sets full path as key name for FSO (apache#8345) ade69e3 HDDS-12649. Include name of volume or bucket in length validation error (apache#8322) c68308d HDDS-12599. Create an ozone debug CLI command to list all the containers based on final state (apache#8282) 319d5a4 HDDS-12773. bad substitution in bats test (apache#8290) 6f5e02a HDDS-12900. (addendum: fix pmd) Use OMDBDefinition in OmMetadataManagerImpl (apache#8337) 2a7000d HDDS-12900. Use OMDBDefinition in OmMetadataManagerImpl (apache#8337) 9c0c66c HDDS-12915. Mark testCreatePipelineThrowErrorWithDataNodeLimit as flaky a73e052 HDDS-12907. Enable FieldDeclarationsShouldBeAtStartOfClass PMD rule (apache#8344) d083f82 HDDS-12905. Move field declarations to start of class in ozone-common (apache#8342) 3f90e1c HDDS-12906. Move field declarations to start of class in ozone-manager module (apache#8343) 403fb97 HDDS-12878. Move field declarations to start of class in tests (apache#8308) 63d5c73 HDDS-12912. Remove deprecated `PipelineManager#closePipeline(Pipeline, boolean)` (apache#8340) cf1fb88 HDDS-12902. Shutdown executor in CloseContainerCommandHandler and ECReconstructionCoordinator (apache#8341) 825ba02 HDDS-9585. Improve import/export log in ContainerLogger (apache#8330) b70d35a HDDS-12889. Enable AppendCharacterWithChar PMD rule (apache#8324) cd308ea HDDS-12904. Move field declarations to start of class in other hdds modules (apache#8336) 4905286 HDDS-12899. Move field declarations to start of class in hdds-server-scm (apache#8332) Conflicts: hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/utils/ContainerLogger.java hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerReplica.java hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/container/ReconcileSubcommand.java hadoop-ozone/recon-codegen/src/main/java/org/apache/ozone/recon/schema/ContainerSchemaDefinition.java
…g renaming entries (apache#8054) Change-Id: I84c1be708f3589ad2d975292757093f00d81d030
What changes were proposed in this pull request?
Currently rename entries are never reclaimed and these entries can be reclaimed on snapshot deep cleaning by just peeking into the previous snapshot if the object exists either in the directoryTable/FileTable/KeyTable. While performing this operation we should ensure read locks are taken on the previous snapshot and the previous snapshot is not deleted. As part of this patch we implement ReclaimableRenameEntryFilter which extends abstract class ReclaimableFilter and check whether this rename entry corresponding to the object exists in the previous snapshot.
What is the link to the Apache JIRA
https://issues.apache.org/jira/browse/HDDS-12561
How was this patch tested?
Unit tests