-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Description
In systems where the kernel is compiled with option CONFIG_STRICT_DEVMEM, mmap is limited to 1MB: https://stackoverflow.com/questions/8213671/mmap-operation-not-permitted.
The marshalling framework uses mmap with the maximum available size, raising IOException:
bibliome-java-utils/src/main/java/fr/inra/maiage/bibliome/util/marshall/Unmarshaller.java
Lines 150 to 159 in f9b16d9
| public ByteBuffer getBuffer(long position) { | |
| try { | |
| long absPosition = startPosition + position; | |
| long size = Math.min(channel.size() - absPosition, Integer.MAX_VALUE); | |
| return channel.map(MapMode.READ_ONLY, absPosition, size); | |
| } | |
| catch (IOException e) { | |
| throw new RuntimeException(e); | |
| } | |
| } |
Solution 1: tell users to recompile kernel. Not always possible.
Solution 2: mmap 1MB only. Problem is that the unmarshalled object might be larger than 1MB.
Solution 3: create a ByteBuffer based on 1MB mmap, but closes and reopens the mmap as needed.