[
https://issues.apache.org/jira/browse/HDFS-7056?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14254369#comment-14254369
]
Konstantin Shvachko commented on HDFS-7056:
-------------------------------------------
??calling the first argument "target" rather than "src"? "src" and "dst" make
sense for rename??
This is traditional. If you check {{ClientProtocol}} you should see all methods
there use {{src}} to identify the file name parameter. Including {{create}},
{{append}}, {{complete}}, {{setReplication}}, etc. One can interpret it as a
*source path for the operation*, rather than as an opposite to *destination*.
Do you really want to make an exclusion for {{truncate}} and call it {{target}}?
??I would still like to see these functions return an enum ... people will
assume that if it returns false, the operation failed.??
I see some issues with that:
- In java failure of an operation is signalled by throwing an exception. This
is how most of our APIs do and should work.
- {{delete()}} according to the documentation "returns true only if the
existing file or directory was actually removed".
- mkdirs() in fact always returns true as per NameNode implementation. Could
have been of void type.
- {{boolean truncate()}} is modelled after {{boolean recoverLease()}}. Both
return true if the file is known to be closed upon return from the method.
If you feel strong about returning enum, which I am not, we can create a new
jira to change both return values. It will break wire compatibility for
recoverLease() though.
??calling this bytesToRemove rather than lastBlockDelta???
Sure.
??{{recoveryBlock}} seems like a very generic name for this.??
Makes sense. How about {{truncateBlock}}?
??There isn't any default given here for newBlockId, so what's going to happen
in a mixed-version scenario???
Very good point! Thanks. We should add an explicit default value and treat it
under the assumption that old DNs cannot do truncate recovery.
??Can we have an accessor for this in ReplicaUnderRecovery? I see this pattern
in a lot of places.??
I found only one occurence of this - the one you identified. There are other
places that compare block Ids, but they are applied to Blocks rather than
ReplicaUnderRecovery.
??This code writes out all of the fields in truncateBlock: blockId, numBytes,
generationStamp. But we only care about blockId and generationStamp, right???
In fact, all three fields are needed. We need to know newLength when we restart
truncate recovery after reading edits.
Basically, with copy-on-truncate we need two blocks the old one with the old
length and the new with the new length. Before snapshots we needed only the new
length and the gen stamp, because there was no replica copy. We had only the
newLength as a field back then. truncateBlock was added to support snapshots.
??Missing braces around "if".??
Will fix.
??INodeFile: can these changes be split out into a separate patch???
What do you mean?
INodeFile, AbstractINodeDiffList, and the other snapshot stuff are an intrinsic
part of this implementation of the snapshot support for truncate. This is the
separate jira. And that is why we keep it in two separate patches: one in
HDFS-3071 and another one here.
We will incorporate your suggestions shortly.
> Snapshot support for truncate
> -----------------------------
>
> Key: HDFS-7056
> URL: https://issues.apache.org/jira/browse/HDFS-7056
> Project: Hadoop HDFS
> Issue Type: Sub-task
> Components: namenode
> Affects Versions: 3.0.0
> Reporter: Konstantin Shvachko
> Assignee: Plamen Jeliazkov
> Attachments: HDFS-3107-HDFS-7056-combined.patch,
> HDFS-3107-HDFS-7056-combined.patch, HDFS-3107-HDFS-7056-combined.patch,
> HDFS-3107-HDFS-7056-combined.patch, HDFS-3107-HDFS-7056-combined.patch,
> HDFS-3107-HDFS-7056-combined.patch, HDFS-3107-HDFS-7056-combined.patch,
> HDFS-3107-HDFS-7056-combined.patch, HDFS-3107-HDFS-7056-combined.patch,
> HDFS-7056.patch, HDFS-7056.patch, HDFS-7056.patch, HDFS-7056.patch,
> HDFS-7056.patch, HDFS-7056.patch, HDFS-7056.patch, HDFS-7056.patch,
> HDFSSnapshotWithTruncateDesign.docx
>
>
> Implementation of truncate in HDFS-3107 does not allow truncating files which
> are in a snapshot. It is desirable to be able to truncate and still keep the
> old file state of the file in the snapshot.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)