Chu Cheng Li created HDDS-17465:
-----------------------------------

             Summary: Recon keeps the old container mappings of an overwritten 
key
                 Key: HDDS-17465
                 URL: https://issues.apache.org/jira/browse/HDDS-17465
             Project: Apache Ozone
          Issue Type: Bug
          Components: Ozone Recon
            Reporter: Chu Cheng Li
            Assignee: Chu Cheng Li


h3. Problem
* For an UPDATE event (a key overwrite), {{ContainerKeyMapperHelper#process}} 
deletes the old container mappings of {{getOldValue().getKeyName()}}. This is 
the key name or the file name.
* {{containerKeyTable}} and {{keyContainerTable}} use the OM DB key, for 
example {{/vol/bucket/key}} or {{/volumeId/bucketId/parentId/file}}. Thus, the 
delete finds nothing.
* The old mappings stay, and the key counts of the old containers stay too 
high. A replay of 100K OM transactions on a 1.25M-key OM DB left 24,959 stale 
container-key rows. A replay of 1M transactions on a 100M-key OM DB left 
230,478.

h3. Changes
* {{ContainerKeyMapperHelper}}:
** An UPDATE deletes the old mappings by the OM DB key of the event.
** The put step adds a mapping again when an earlier event in the same batch 
deleted it. The Recon DB keeps this mapping until the batch is written. Without 
this step, an update that keeps a block in the same container loses its 
mapping. An update of metadata only, for example of ACLs, has the same problem.
** The delete step skips the mappings that an earlier event in the same batch 
deleted. Thus, when one batch overwrites a key two times, the count of the old 
container goes down one time.
** The deleted mappings of a batch are in a {{HashSet}}, not an {{ArrayList}}, 
because the put and delete steps look them up.

h3. Tests
* An overwrite that moves a key from containers 1 and 2 to containers 2 and 3 
removes the key from container 1 only. The key counts of the three containers 
are correct.
* Two overwrites of a key in one batch, from container 1 to 2 and then to 3, 
decrease the count of container 1 one time.
* Both tests run for an FSO file and an OBS key.

Found in a comparison of the incremental results of Recon with a rebuild of the 
final OM DB.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to