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

翟玉勇 updated KAFKA-7442:
-----------------------
    Description: 
when resize OffsetIndex or TimeIndex,We should force unmap mmap for linux 
platform. Rather than waiting fullgc to unmap MappedByteBuffer object

{code}
def resize(newSize: Int) {
    inLock(lock) {
      val raf = new RandomAccessFile(_file, "rw")
      val roundedNewSize = roundDownToExactMultiple(newSize, entrySize)
      val position = mmap.position

      /* Windows won't let us modify the file length while the file is mmapped 
:-( */
      if(Os.isWindows)
        forceUnmap(mmap)
      try {
        raf.setLength(roundedNewSize)
        mmap = raf.getChannel().map(FileChannel.MapMode.READ_WRITE, 0, 
roundedNewSize)
        _maxEntries = mmap.limit / entrySize
        mmap.position(position)
      } finally {
        CoreUtils.swallow(raf.close())
      }
    }
  }
{code}

  was:
when resize OffsetIndex or TimeIndex,We should force unmap mmap for linux 
platform

{code}
def resize(newSize: Int) {
    inLock(lock) {
      val raf = new RandomAccessFile(_file, "rw")
      val roundedNewSize = roundDownToExactMultiple(newSize, entrySize)
      val position = mmap.position

      /* Windows won't let us modify the file length while the file is mmapped 
:-( */
      if(Os.isWindows)
        forceUnmap(mmap)
      try {
        raf.setLength(roundedNewSize)
        mmap = raf.getChannel().map(FileChannel.MapMode.READ_WRITE, 0, 
roundedNewSize)
        _maxEntries = mmap.limit / entrySize
        mmap.position(position)
      } finally {
        CoreUtils.swallow(raf.close())
      }
    }
  }
{code}


> forceUnmap mmap on linux
> ------------------------
>
>                 Key: KAFKA-7442
>                 URL: https://issues.apache.org/jira/browse/KAFKA-7442
>             Project: Kafka
>          Issue Type: Improvement
>          Components: log
>    Affects Versions: 0.10.1.1
>            Reporter: 翟玉勇
>            Priority: Minor
>
> when resize OffsetIndex or TimeIndex,We should force unmap mmap for linux 
> platform. Rather than waiting fullgc to unmap MappedByteBuffer object
> {code}
> def resize(newSize: Int) {
>     inLock(lock) {
>       val raf = new RandomAccessFile(_file, "rw")
>       val roundedNewSize = roundDownToExactMultiple(newSize, entrySize)
>       val position = mmap.position
>       /* Windows won't let us modify the file length while the file is 
> mmapped :-( */
>       if(Os.isWindows)
>         forceUnmap(mmap)
>       try {
>         raf.setLength(roundedNewSize)
>         mmap = raf.getChannel().map(FileChannel.MapMode.READ_WRITE, 0, 
> roundedNewSize)
>         _maxEntries = mmap.limit / entrySize
>         mmap.position(position)
>       } finally {
>         CoreUtils.swallow(raf.close())
>       }
>     }
>   }
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to