[ 
https://issues.apache.org/jira/browse/HADOOP-13914?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15895426#comment-15895426
 ] 

Mingliang Liu commented on HADOOP-13914:
----------------------------------------

Thanks [~fabbri], this is really good improvement. I like the design & patch. 
Glad we stay with the "improved approach" from v0 wip patch (aka _Treat 
isEmptyDirectory as ephemeral_ in the initial doc).

Some comments:
# In {{DynamoDBMetadataStore#get()}}, we should check 
{{wantEmptyDirectoryFlag}} value. One candidate place is L337 {{if (meta != 
null) {}}
# {code:title=DirListingMetadata.java}
115       /**
116        * Is the underlying directory known to be empty?
117        * @return FALSE if directory is known to have a child entry, TRUE if
118        * directory is known to be empty, UNKNOWN otherwise.
119        */
120       public Tristate isEmpty() {
121         if (getListing().isEmpty()) {
122           if (isAuthoritative()) {
123             return Tristate.TRUE;
124           } else {
125             // This listing is empty, but may not be full list of 
underlying dir.
126             return Tristate.UNKNOWN;
127           }
128         } else { // not empty listing
129           // There exists at least one child, dir not empty.
130           return Tristate.FALSE;
131         }
132       }
{code}
The {{isAuthoritative}} is false and we have children, we confidently trust the 
child's existence though it's not authoritative (fully cached). Seems 
reasonable.
# {code:title=DynamoDBMetadataStore}
325             meta = new PathMetadata(new FileStatus(0, true, 1, 0, 0, 0, 
null,
326                 username, null, path));
{code}
a util makeFileStatus()...? I have a gut feeling - we'll reuse this.
# {code:title= MetadataStoreTestBase#testGetEmptyDir()}
368         // 3. Check that either (a) the MS doesn't track whether or not it 
is
369         // empty (which is allowed), or (b) the MS knows the dir is empty.
370         if (!allowMissing() || meta != null) {
371           assertNotNull("Get found dir", meta);
372           assertNotEquals("Dir is empty or unknown", Tristate.FALSE,
373               meta.isEmptyDirectory());
374         }
{code}
To simplify the if clause as {{if (!allowMissing()) {}}. I'd prefer error 
message be something clearer: "Get should find meta for path" / "Dir should be 
empty or unknown" Anyway it's nit. Other test methods as well.

> s3guard: improve S3AFileStatus#isEmptyDirectory handling
> --------------------------------------------------------
>
>                 Key: HADOOP-13914
>                 URL: https://issues.apache.org/jira/browse/HADOOP-13914
>             Project: Hadoop Common
>          Issue Type: Sub-task
>          Components: fs/s3
>    Affects Versions: HADOOP-13345
>            Reporter: Aaron Fabbri
>            Assignee: Aaron Fabbri
>         Attachments: HADOOP-13914-HADOOP-13345.000.patch, 
> HADOOP-13914-HADOOP-13345.002.patch, HADOOP-13914-HADOOP-13345.003.patch, 
> HADOOP-13914-HADOOP-13345.004.patch, HADOOP-13914-HADOOP-13345.005.patch, 
> s3guard-empty-dirs.md, test-only-HADOOP-13914.patch
>
>
> As discussed in HADOOP-13449, proper support for the isEmptyDirectory() flag 
> stored in S3AFileStatus is missing from DynamoDBMetadataStore.
> The approach taken by LocalMetadataStore is not suitable for the DynamoDB 
> implementation, and also sacrifices good code separation to minimize 
> S3AFileSystem changes pre-merge to trunk.
> I will attach a design doc that attempts to clearly explain the problem and 
> preferred solution.  I suggest we do this work after merging the HADOOP-13345 
> branch to trunk, but am open to suggestions.
> I can also attach a patch of a integration test that exercises the missing 
> case and demonstrates a failure with DynamoDBMetadataStore.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

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

Reply via email to