[ 
https://issues.apache.org/jira/browse/HDDS-5359?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

ASF GitHub Bot updated HDDS-5359:
---------------------------------
    Labels: pull-request-available  (was: )

> Incorrect BLOCKCOUNT and BYTESUSED in container DB
> --------------------------------------------------
>
>                 Key: HDDS-5359
>                 URL: https://issues.apache.org/jira/browse/HDDS-5359
>             Project: Apache Ozone
>          Issue Type: Bug
>            Reporter: Sammi Chen
>            Assignee: Hanisha Koneru
>            Priority: Major
>              Labels: pull-request-available
>         Attachments: negative.txt
>
>
> Here are default column family data of two different container replicas,
> "#BCSID" -> 1354765
> "#BLOCKCOUNT" -> -21
> "#BYTESUSED" -> 0
> "#PENDINGDELETEBLOCKCOUNT" -> 78
> "#delTX" -> 1141106
> "#BCSID" -> 1895040
> "#BLOCKCOUNT" -> -5
> "#BYTESUSED" -> 0
> "#PENDINGDELETEBLOCKCOUNT" -> 106
> "#delTX" -> 1146817
>  
> Update: 
> The BlockCount is incremented only when the Stream is closed and not when the 
> BlockID is added to the DB. If the OutputStream was not closed properly or 
> if, for any reason, the client starts writing to a new pipeline before the 
> full block is written, it could lead to a Block being present in the 
> container but the key_count (BlockCount) not being incremented for it. When a 
> block is deleted from a container, the blockCount is also decremented. But if 
> the blockCount is wrong to start with, it could lead to a negative value.
> When a block is deleted, usedBytes is decrement in memory first after 
> deleting a chunk. And even if the chunkFile does not exist (already deleted), 
> the usedBytes is decremented. This could lead to usedBytes being decremented 
> multiple times for the same chunk and causing the total usedBytes metadata in 
> the DB to become negative. Once all the chunks in all the blocks in that 
> iteration of BlockDeletingService task are deleted, only then is the 
> usedBytes updated in containerDB by taking the in-memory value. This Jira 
> proposes to first update the DB with correct usedBytes (calculated from the 
> BlockInfo after all chunks are deleted) and then update the in-memory 
> metadata. This is the update sequence logic followed for all other state 
> updates. 
> Also, when a chunk is overwritten, then it is assumed that the size of the 
> chunk remains the same. But it’s possible to overwrite more data into the 
> chunk than originally present. In this case, the used_bytes should be updated 
> with difference in the chunkSizes. (Adding this as a TODO).



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

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

Reply via email to