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

Andrew Wang commented on HDFS-5746:
-----------------------------------

Nice work here. I have a fair number of review comments, but most of it's nitty:

I didn't see anything named ShortCircuitSharedMemorySegment in the patch, 
should it be included?

SharedFileDescriptorFactory:
* Javadoc for SharedFileDescriptorFactory constructor
* {{rand()}} isn't reentrant, potentially making it unsafe for 
{{createDescriptor0}}. Should we use {{rand_r}} instead, or slap a synchronized 
on it?
* Also not sure why we concat two {{rand()}}. Seems like one should be enough 
with the collision detection code. 
* The {{open}} is done with mode {{0777}}, wouldn't {{0700}} be safer? I 
thought we were passing these over a domain socket, so we can keep the 
permissions locked up.
* Paranoia, should we do a check in CloseableReferenceCount#reference for 
overflow to the closed bit? I know we have 30 bits, but who knows.
* Unrelated nit: DomainSocket#write(byte[], int, int) {{boolean exec}} is 
indented wrong, mind fixing it?

DomainSocketWatcher:
* Class javadoc is c+p from {{DomainSocket}}, I think it should be updated for 
DSW. Some high-level description of how the nested classes fit together would 
be nice.
* Some Java-isms. {{Runnable}} is preferred over {{Thread}}. It's also weird 
that DSW is a {{Thread}} subclass and it calls {{start}} on itself. An inner 
class implementing Runnable would be more idiomatic.
* Explain use of {{loopSocks 0}} versus {{loopSocks 1}}? This is a crucial part 
of this class: we need to use a socketpair rather than a plain condition 
variable because of blocking on poll.
* "loopSocks" is also not a very descriptive name, maybe "wakeupPair" or 
"eventPair" instead?
* Can add a Precondition check to make sure the lock is held in checkNotClosed
* If we fail to kick, add and remove could block until the poll timeout.
* Should doc that we only support one Handler per fd, it overwrites on add. 
Maybe Precondition this instead if we don't want to overwrite, I can't tell 
from context here.
* Typo "loopSOcks" in log message
* The repeated calls to {{sendCallback}} are worrisome. For instance, a sock 
could be EOF and closed, be removed by the first sendCallback, and then if 
there's a pending toRemove for the sock, the second sendCallback aborts on the 
Precondition check.
* {{closeAll}} parameter in sendCallback is unused
* This comment probably means to refer to loopSocks:
{code}
    // Close shutdownSocketPair[0], so that shutdownSocketPair[1] gets an EOF
{code}
* This comment probably meant poll, not select:
{code}
          // were waiting in select().
{code}

TestDomainSocketWatcher:
* Why are two of the {{@Test}} in TestDomainSocketWatcher commented out?
* Timeouts seem kind of long, these should be super fast tests right?

> add ShortCircuitSharedMemorySegment
> -----------------------------------
>
>                 Key: HDFS-5746
>                 URL: https://issues.apache.org/jira/browse/HDFS-5746
>             Project: Hadoop HDFS
>          Issue Type: Sub-task
>          Components: datanode, hdfs-client
>            Reporter: Colin Patrick McCabe
>            Assignee: Colin Patrick McCabe
>             Fix For: 3.0.0
>
>         Attachments: HDFS-5746.001.patch
>
>
> Add ShortCircuitSharedMemorySegment, which will be used to communicate 
> information between the datanode and the client about whether a replica is 
> mlocked.



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to