You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-dev@hadoop.apache.org by "Tsz Wo Nicholas Sze (JIRA)" <ji...@apache.org> on 2014/10/29 22:37:34 UTC

[jira] [Created] (HDFS-7308) DFSClient write packet size may > 64kB

Tsz Wo Nicholas Sze created HDFS-7308:
-----------------------------------------

             Summary: DFSClient write packet size may > 64kB
                 Key: HDFS-7308
                 URL: https://issues.apache.org/jira/browse/HDFS-7308
             Project: Hadoop HDFS
          Issue Type: Improvement
            Reporter: Tsz Wo Nicholas Sze
            Assignee: Tsz Wo Nicholas Sze
            Priority: Minor


In DFSOutputStream.computePacketChunkSize(..),
{code}
  private void computePacketChunkSize(int psize, int csize) {
    final int chunkSize = csize + getChecksumSize();
    chunksPerPacket = Math.max(psize/chunkSize, 1);
    packetSize = chunkSize*chunksPerPacket;
    if (DFSClient.LOG.isDebugEnabled()) {
      ...
    }
  }
{code}
We have the following
|| variables || usual values ||
| psize | dfsClient.getConf().writePacketSize = 64kB |
| csize | bytesPerChecksum = 512B |
| getChecksumSize(), i.e. CRC size | 32B |
| chunkSize = csize + getChecksumSize() | 544B (not a power of two) |
| psize/chunkSize | 120.47 |
| chunksPerPacket = max(psize/chunkSize, 1) | 120 |
| packetSize = chunkSize*chunksPerPacket (not including header) | 65280B |
| PacketHeader.PKT_MAX_HEADER_LEN | 33B |
| actual packet size | 65280 + 33 = *65313* < 65536 = 64k |
It is fortunate that the usual packet size = 65313 < 64k although the calculation above does not guarantee it always happens (e.g. if PKT_MAX_HEADER_LEN=257, then actual packet size=65537 > 64k.)  We should fix the computation in order to guarantee actual packet size < 64k.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)