<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.2"></a>
<span class="sourceLineNo">003</span> * contributor license agreements. See the NOTICE file distributed with<a name="line.3"></a>
<span class="sourceLineNo">004</span> * this work for additional information regarding copyright ownership.<a name="line.4"></a>
<span class="sourceLineNo">005</span> * The ASF licenses this file to You under the Apache license, Version 2.0<a name="line.5"></a>
<span class="sourceLineNo">006</span> * (the "License"); you may not use this file except in compliance with<a name="line.6"></a>
<span class="sourceLineNo">007</span> * the License. You may obtain a copy of the License at<a name="line.7"></a>
<span class="sourceLineNo">008</span> *<a name="line.8"></a>
<span class="sourceLineNo">009</span> *      http://www.apache.org/licenses/LICENSE-2.0<a name="line.9"></a>
<span class="sourceLineNo">010</span> *<a name="line.10"></a>
<span class="sourceLineNo">011</span> * Unless required by applicable law or agreed to in writing, software<a name="line.11"></a>
<span class="sourceLineNo">012</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.12"></a>
<span class="sourceLineNo">013</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.13"></a>
<span class="sourceLineNo">014</span> * See the license for the specific language governing permissions and<a name="line.14"></a>
<span class="sourceLineNo">015</span> * limitations under the license.<a name="line.15"></a>
<span class="sourceLineNo">016</span> */<a name="line.16"></a>
<span class="sourceLineNo">017</span>package org.apache.logging.log4j.core.appender;<a name="line.17"></a>
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span>import java.io.File;<a name="line.19"></a>
<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
<span class="sourceLineNo">021</span>import java.io.OutputStream;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.io.RandomAccessFile;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.io.Serializable;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.lang.reflect.Method;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import java.nio.ByteBuffer;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.nio.ByteOrder;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import java.nio.MappedByteBuffer;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import java.nio.channels.FileChannel;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.security.AccessController;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import java.security.PrivilegedActionException;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import java.security.PrivilegedExceptionAction;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import java.util.HashMap;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import java.util.Map;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import java.util.Objects;<a name="line.34"></a>
<span class="sourceLineNo">035</span><a name="line.35"></a>
<span class="sourceLineNo">036</span>import org.apache.logging.log4j.core.Layout;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import org.apache.logging.log4j.core.util.Closer;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import org.apache.logging.log4j.core.util.FileUtils;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import org.apache.logging.log4j.core.util.NullOutputStream;<a name="line.39"></a>
<span class="sourceLineNo">040</span><a name="line.40"></a>
<span class="sourceLineNo">041</span>//Lines too long...<a name="line.41"></a>
<span class="sourceLineNo">042</span>//CHECKSTYLE:OFF<a name="line.42"></a>
<span class="sourceLineNo">043</span>/**<a name="line.43"></a>
<span class="sourceLineNo">044</span> * Extends OutputStreamManager but instead of using a buffered output stream, this class maps a region of a file into<a name="line.44"></a>
<span class="sourceLineNo">045</span> * memory and writes to this memory region.<a name="line.45"></a>
<span class="sourceLineNo">046</span> * &lt;p&gt;<a name="line.46"></a>
<span class="sourceLineNo">047</span> *<a name="line.47"></a>
<span class="sourceLineNo">048</span> * @see &lt;a href="http://www.codeproject.com/Tips/683614/Things-to-Know-about-Memory-Mapped-File-in-Java"&gt;<a name="line.48"></a>
<span class="sourceLineNo">049</span> *      http://www.codeproject.com/Tips/683614/Things-to-Know-about-Memory-Mapped-File-in-Java&lt;/a&gt;<a name="line.49"></a>
<span class="sourceLineNo">050</span> * @see &lt;a href="http://bugs.java.com/view_bug.do?bug_id=6893654"&gt;http://bugs.java.com/view_bug.do?bug_id=6893654&lt;/a&gt;<a name="line.50"></a>
<span class="sourceLineNo">051</span> * @see &lt;a href="http://bugs.java.com/view_bug.do?bug_id=4724038"&gt;http://bugs.java.com/view_bug.do?bug_id=4724038&lt;/a&gt;<a name="line.51"></a>
<span class="sourceLineNo">052</span> * @see &lt;a<a name="line.52"></a>
<span class="sourceLineNo">053</span> *      href="http://stackoverflow.com/questions/9261316/memory-mapped-mappedbytebuffer-or-direct-bytebuffer-for-db-implementation"&gt;<a name="line.53"></a>
<span class="sourceLineNo">054</span> *      http://stackoverflow.com/questions/9261316/memory-mapped-mappedbytebuffer-or-direct-bytebuffer-for-db-implementation&lt;/a&gt;<a name="line.54"></a>
<span class="sourceLineNo">055</span> *<a name="line.55"></a>
<span class="sourceLineNo">056</span> * @since 2.1<a name="line.56"></a>
<span class="sourceLineNo">057</span> */<a name="line.57"></a>
<span class="sourceLineNo">058</span>//CHECKSTYLE:ON<a name="line.58"></a>
<span class="sourceLineNo">059</span>public class MemoryMappedFileManager extends OutputStreamManager {<a name="line.59"></a>
<span class="sourceLineNo">060</span>    /**<a name="line.60"></a>
<span class="sourceLineNo">061</span>     * Default length of region to map.<a name="line.61"></a>
<span class="sourceLineNo">062</span>     */<a name="line.62"></a>
<span class="sourceLineNo">063</span>    static final int DEFAULT_REGION_LENGTH = 32 * 1024 * 1024;<a name="line.63"></a>
<span class="sourceLineNo">064</span>    private static final int MAX_REMAP_COUNT = 10;<a name="line.64"></a>
<span class="sourceLineNo">065</span>    private static final MemoryMappedFileManagerFactory FACTORY = new MemoryMappedFileManagerFactory();<a name="line.65"></a>
<span class="sourceLineNo">066</span>    private static final double NANOS_PER_MILLISEC = 1000.0 * 1000.0;<a name="line.66"></a>
<span class="sourceLineNo">067</span><a name="line.67"></a>
<span class="sourceLineNo">068</span>    private final boolean immediateFlush;<a name="line.68"></a>
<span class="sourceLineNo">069</span>    private final int regionLength;<a name="line.69"></a>
<span class="sourceLineNo">070</span>    private final String advertiseURI;<a name="line.70"></a>
<span class="sourceLineNo">071</span>    private final RandomAccessFile randomAccessFile;<a name="line.71"></a>
<span class="sourceLineNo">072</span>    private final ThreadLocal&lt;Boolean&gt; isEndOfBatch = new ThreadLocal&lt;&gt;();<a name="line.72"></a>
<span class="sourceLineNo">073</span>    private MappedByteBuffer mappedBuffer;<a name="line.73"></a>
<span class="sourceLineNo">074</span>    private long mappingOffset;<a name="line.74"></a>
<span class="sourceLineNo">075</span><a name="line.75"></a>
<span class="sourceLineNo">076</span>    protected MemoryMappedFileManager(final RandomAccessFile file, final String fileName, final OutputStream os,<a name="line.76"></a>
<span class="sourceLineNo">077</span>            final boolean immediateFlush, final long position, final int regionLength, final String advertiseURI,<a name="line.77"></a>
<span class="sourceLineNo">078</span>            final Layout&lt;? extends Serializable&gt; layout, final boolean writeHeader) throws IOException {<a name="line.78"></a>
<span class="sourceLineNo">079</span>        super(os, fileName, layout, writeHeader, ByteBuffer.wrap(new byte[0]));<a name="line.79"></a>
<span class="sourceLineNo">080</span>        this.immediateFlush = immediateFlush;<a name="line.80"></a>
<span class="sourceLineNo">081</span>        this.randomAccessFile = Objects.requireNonNull(file, "RandomAccessFile");<a name="line.81"></a>
<span class="sourceLineNo">082</span>        this.regionLength = regionLength;<a name="line.82"></a>
<span class="sourceLineNo">083</span>        this.advertiseURI = advertiseURI;<a name="line.83"></a>
<span class="sourceLineNo">084</span>        this.isEndOfBatch.set(Boolean.FALSE);<a name="line.84"></a>
<span class="sourceLineNo">085</span>        this.mappedBuffer = mmap(randomAccessFile.getChannel(), getFileName(), position, regionLength);<a name="line.85"></a>
<span class="sourceLineNo">086</span>        this.byteBuffer = mappedBuffer;<a name="line.86"></a>
<span class="sourceLineNo">087</span>        this.mappingOffset = position;<a name="line.87"></a>
<span class="sourceLineNo">088</span>    }<a name="line.88"></a>
<span class="sourceLineNo">089</span><a name="line.89"></a>
<span class="sourceLineNo">090</span>    /**<a name="line.90"></a>
<span class="sourceLineNo">091</span>     * Returns the MemoryMappedFileManager.<a name="line.91"></a>
<span class="sourceLineNo">092</span>     *<a name="line.92"></a>
<span class="sourceLineNo">093</span>     * @param fileName The name of the file to manage.<a name="line.93"></a>
<span class="sourceLineNo">094</span>     * @param append true if the file should be appended to, false if it should be overwritten.<a name="line.94"></a>
<span class="sourceLineNo">095</span>     * @param immediateFlush true if the contents should be flushed to disk on every write<a name="line.95"></a>
<span class="sourceLineNo">096</span>     * @param regionLength The mapped region length.<a name="line.96"></a>
<span class="sourceLineNo">097</span>     * @param advertiseURI the URI to use when advertising the file<a name="line.97"></a>
<span class="sourceLineNo">098</span>     * @param layout The layout.<a name="line.98"></a>
<span class="sourceLineNo">099</span>     * @return A MemoryMappedFileManager for the File.<a name="line.99"></a>
<span class="sourceLineNo">100</span>     */<a name="line.100"></a>
<span class="sourceLineNo">101</span>    public static MemoryMappedFileManager getFileManager(final String fileName, final boolean append,<a name="line.101"></a>
<span class="sourceLineNo">102</span>            final boolean immediateFlush, final int regionLength, final String advertiseURI,<a name="line.102"></a>
<span class="sourceLineNo">103</span>            final Layout&lt;? extends Serializable&gt; layout) {<a name="line.103"></a>
<span class="sourceLineNo">104</span>        return narrow(MemoryMappedFileManager.class, getManager(fileName, new FactoryData(append, immediateFlush,<a name="line.104"></a>
<span class="sourceLineNo">105</span>                regionLength, advertiseURI, layout), FACTORY));<a name="line.105"></a>
<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
<span class="sourceLineNo">107</span><a name="line.107"></a>
<span class="sourceLineNo">108</span>    public Boolean isEndOfBatch() {<a name="line.108"></a>
<span class="sourceLineNo">109</span>        return isEndOfBatch.get();<a name="line.109"></a>
<span class="sourceLineNo">110</span>    }<a name="line.110"></a>
<span class="sourceLineNo">111</span><a name="line.111"></a>
<span class="sourceLineNo">112</span>    public void setEndOfBatch(final boolean endOfBatch) {<a name="line.112"></a>
<span class="sourceLineNo">113</span>        this.isEndOfBatch.set(Boolean.valueOf(endOfBatch));<a name="line.113"></a>
<span class="sourceLineNo">114</span>    }<a name="line.114"></a>
<span class="sourceLineNo">115</span><a name="line.115"></a>
<span class="sourceLineNo">116</span>    @Override<a name="line.116"></a>
<span class="sourceLineNo">117</span>    protected synchronized void write(final byte[] bytes, int offset, int length, final boolean immediateFlush) {<a name="line.117"></a>
<span class="sourceLineNo">118</span>        while (length &gt; mappedBuffer.remaining()) {<a name="line.118"></a>
<span class="sourceLineNo">119</span>            final int chunk = mappedBuffer.remaining();<a name="line.119"></a>
<span class="sourceLineNo">120</span>            mappedBuffer.put(bytes, offset, chunk);<a name="line.120"></a>
<span class="sourceLineNo">121</span>            offset += chunk;<a name="line.121"></a>
<span class="sourceLineNo">122</span>            length -= chunk;<a name="line.122"></a>
<span class="sourceLineNo">123</span>            remap();<a name="line.123"></a>
<span class="sourceLineNo">124</span>        }<a name="line.124"></a>
<span class="sourceLineNo">125</span>        mappedBuffer.put(bytes, offset, length);<a name="line.125"></a>
<span class="sourceLineNo">126</span><a name="line.126"></a>
<span class="sourceLineNo">127</span>        // no need to call flush() if force is true,<a name="line.127"></a>
<span class="sourceLineNo">128</span>        // already done in AbstractOutputStreamAppender.append<a name="line.128"></a>
<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
<span class="sourceLineNo">130</span><a name="line.130"></a>
<span class="sourceLineNo">131</span>    private synchronized void remap() {<a name="line.131"></a>
<span class="sourceLineNo">132</span>        final long offset = this.mappingOffset + mappedBuffer.position();<a name="line.132"></a>
<span class="sourceLineNo">133</span>        final int length = mappedBuffer.remaining() + regionLength;<a name="line.133"></a>
<span class="sourceLineNo">134</span>        try {<a name="line.134"></a>
<span class="sourceLineNo">135</span>            unsafeUnmap(mappedBuffer);<a name="line.135"></a>
<span class="sourceLineNo">136</span>            final long fileLength = randomAccessFile.length() + regionLength;<a name="line.136"></a>
<span class="sourceLineNo">137</span>            LOGGER.debug("{} {} extending {} by {} bytes to {}", getClass().getSimpleName(), getName(), getFileName(),<a name="line.137"></a>
<span class="sourceLineNo">138</span>                    regionLength, fileLength);<a name="line.138"></a>
<span class="sourceLineNo">139</span><a name="line.139"></a>
<span class="sourceLineNo">140</span>            final long startNanos = System.nanoTime();<a name="line.140"></a>
<span class="sourceLineNo">141</span>            randomAccessFile.setLength(fileLength);<a name="line.141"></a>
<span class="sourceLineNo">142</span>            final float millis = (float) ((System.nanoTime() - startNanos) / NANOS_PER_MILLISEC);<a name="line.142"></a>
<span class="sourceLineNo">143</span>            LOGGER.debug("{} {} extended {} OK in {} millis", getClass().getSimpleName(), getName(), getFileName(),<a name="line.143"></a>
<span class="sourceLineNo">144</span>                    millis);<a name="line.144"></a>
<span class="sourceLineNo">145</span><a name="line.145"></a>
<span class="sourceLineNo">146</span>            mappedBuffer = mmap(randomAccessFile.getChannel(), getFileName(), offset, length);<a name="line.146"></a>
<span class="sourceLineNo">147</span>            this.byteBuffer = mappedBuffer;<a name="line.147"></a>
<span class="sourceLineNo">148</span>            mappingOffset = offset;<a name="line.148"></a>
<span class="sourceLineNo">149</span>        } catch (final Exception ex) {<a name="line.149"></a>
<span class="sourceLineNo">150</span>            logError("Unable to remap", ex);<a name="line.150"></a>
<span class="sourceLineNo">151</span>        }<a name="line.151"></a>
<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
<span class="sourceLineNo">154</span>    @Override<a name="line.154"></a>
<span class="sourceLineNo">155</span>    public synchronized void flush() {<a name="line.155"></a>
<span class="sourceLineNo">156</span>        mappedBuffer.force();<a name="line.156"></a>
<span class="sourceLineNo">157</span>    }<a name="line.157"></a>
<span class="sourceLineNo">158</span><a name="line.158"></a>
<span class="sourceLineNo">159</span>    @Override<a name="line.159"></a>
<span class="sourceLineNo">160</span>    public synchronized boolean closeOutputStream() {<a name="line.160"></a>
<span class="sourceLineNo">161</span>        final long position = mappedBuffer.position();<a name="line.161"></a>
<span class="sourceLineNo">162</span>        final long length = mappingOffset + position;<a name="line.162"></a>
<span class="sourceLineNo">163</span>        try {<a name="line.163"></a>
<span class="sourceLineNo">164</span>            unsafeUnmap(mappedBuffer);<a name="line.164"></a>
<span class="sourceLineNo">165</span>        } catch (final Exception ex) {<a name="line.165"></a>
<span class="sourceLineNo">166</span>            logError("Unable to unmap MappedBuffer", ex);<a name="line.166"></a>
<span class="sourceLineNo">167</span>        }<a name="line.167"></a>
<span class="sourceLineNo">168</span>        try {<a name="line.168"></a>
<span class="sourceLineNo">169</span>            LOGGER.debug("MMapAppender closing. Setting {} length to {} (offset {} + position {})", getFileName(),<a name="line.169"></a>
<span class="sourceLineNo">170</span>                    length, mappingOffset, position);<a name="line.170"></a>
<span class="sourceLineNo">171</span>            randomAccessFile.setLength(length);<a name="line.171"></a>
<span class="sourceLineNo">172</span>            randomAccessFile.close();<a name="line.172"></a>
<span class="sourceLineNo">173</span>            return true;<a name="line.173"></a>
<span class="sourceLineNo">174</span>        } catch (final IOException ex) {<a name="line.174"></a>
<span class="sourceLineNo">175</span>            logError("Unable to close MemoryMappedFile", ex);<a name="line.175"></a>
<span class="sourceLineNo">176</span>            return false;<a name="line.176"></a>
<span class="sourceLineNo">177</span>        }<a name="line.177"></a>
<span class="sourceLineNo">178</span>    }<a name="line.178"></a>
<span class="sourceLineNo">179</span><a name="line.179"></a>
<span class="sourceLineNo">180</span>    public static MappedByteBuffer mmap(final FileChannel fileChannel, final String fileName, final long start,<a name="line.180"></a>
<span class="sourceLineNo">181</span>            final int size) throws IOException {<a name="line.181"></a>
<span class="sourceLineNo">182</span>        for (int i = 1;; i++) {<a name="line.182"></a>
<span class="sourceLineNo">183</span>            try {<a name="line.183"></a>
<span class="sourceLineNo">184</span>                LOGGER.debug("MMapAppender remapping {} start={}, size={}", fileName, start, size);<a name="line.184"></a>
<span class="sourceLineNo">185</span><a name="line.185"></a>
<span class="sourceLineNo">186</span>                final long startNanos = System.nanoTime();<a name="line.186"></a>
<span class="sourceLineNo">187</span>                final MappedByteBuffer map = fileChannel.map(FileChannel.MapMode.READ_WRITE, start, size);<a name="line.187"></a>
<span class="sourceLineNo">188</span>                map.order(ByteOrder.nativeOrder());<a name="line.188"></a>
<span class="sourceLineNo">189</span><a name="line.189"></a>
<span class="sourceLineNo">190</span>                final float millis = (float) ((System.nanoTime() - startNanos) / NANOS_PER_MILLISEC);<a name="line.190"></a>
<span class="sourceLineNo">191</span>                LOGGER.debug("MMapAppender remapped {} OK in {} millis", fileName, millis);<a name="line.191"></a>
<span class="sourceLineNo">192</span><a name="line.192"></a>
<span class="sourceLineNo">193</span>                return map;<a name="line.193"></a>
<span class="sourceLineNo">194</span>            } catch (final IOException e) {<a name="line.194"></a>
<span class="sourceLineNo">195</span>                if (e.getMessage() == null || !e.getMessage().endsWith("user-mapped section open")) {<a name="line.195"></a>
<span class="sourceLineNo">196</span>                    throw e;<a name="line.196"></a>
<span class="sourceLineNo">197</span>                }<a name="line.197"></a>
<span class="sourceLineNo">198</span>                LOGGER.debug("Remap attempt {}/{} failed. Retrying...", i, MAX_REMAP_COUNT, e);<a name="line.198"></a>
<span class="sourceLineNo">199</span>                if (i &lt; MAX_REMAP_COUNT) {<a name="line.199"></a>
<span class="sourceLineNo">200</span>                    Thread.yield();<a name="line.200"></a>
<span class="sourceLineNo">201</span>                } else {<a name="line.201"></a>
<span class="sourceLineNo">202</span>                    try {<a name="line.202"></a>
<span class="sourceLineNo">203</span>                        Thread.sleep(1);<a name="line.203"></a>
<span class="sourceLineNo">204</span>                    } catch (final InterruptedException ignored) {<a name="line.204"></a>
<span class="sourceLineNo">205</span>                        Thread.currentThread().interrupt();<a name="line.205"></a>
<span class="sourceLineNo">206</span>                        throw e;<a name="line.206"></a>
<span class="sourceLineNo">207</span>                    }<a name="line.207"></a>
<span class="sourceLineNo">208</span>                }<a name="line.208"></a>
<span class="sourceLineNo">209</span>            }<a name="line.209"></a>
<span class="sourceLineNo">210</span>        }<a name="line.210"></a>
<span class="sourceLineNo">211</span>    }<a name="line.211"></a>
<span class="sourceLineNo">212</span><a name="line.212"></a>
<span class="sourceLineNo">213</span>    private static void unsafeUnmap(final MappedByteBuffer mbb) throws PrivilegedActionException {<a name="line.213"></a>
<span class="sourceLineNo">214</span>        LOGGER.debug("MMapAppender unmapping old buffer...");<a name="line.214"></a>
<span class="sourceLineNo">215</span>        final long startNanos = System.nanoTime();<a name="line.215"></a>
<span class="sourceLineNo">216</span>        AccessController.doPrivileged(new PrivilegedExceptionAction&lt;Object&gt;() {<a name="line.216"></a>
<span class="sourceLineNo">217</span>            @Override<a name="line.217"></a>
<span class="sourceLineNo">218</span>            public Object run() throws Exception {<a name="line.218"></a>
<span class="sourceLineNo">219</span>                final Method getCleanerMethod = mbb.getClass().getMethod("cleaner");<a name="line.219"></a>
<span class="sourceLineNo">220</span>                getCleanerMethod.setAccessible(true);<a name="line.220"></a>
<span class="sourceLineNo">221</span>                final Object cleaner = getCleanerMethod.invoke(mbb); // sun.misc.Cleaner instance<a name="line.221"></a>
<span class="sourceLineNo">222</span>                final Method cleanMethod = cleaner.getClass().getMethod("clean");<a name="line.222"></a>
<span class="sourceLineNo">223</span>                cleanMethod.invoke(cleaner);<a name="line.223"></a>
<span class="sourceLineNo">224</span>                return null;<a name="line.224"></a>
<span class="sourceLineNo">225</span>            }<a name="line.225"></a>
<span class="sourceLineNo">226</span>        });<a name="line.226"></a>
<span class="sourceLineNo">227</span>        final float millis = (float) ((System.nanoTime() - startNanos) / NANOS_PER_MILLISEC);<a name="line.227"></a>
<span class="sourceLineNo">228</span>        LOGGER.debug("MMapAppender unmapped buffer OK in {} millis", millis);<a name="line.228"></a>
<span class="sourceLineNo">229</span>    }<a name="line.229"></a>
<span class="sourceLineNo">230</span><a name="line.230"></a>
<span class="sourceLineNo">231</span>    /**<a name="line.231"></a>
<span class="sourceLineNo">232</span>     * Returns the name of the File being managed.<a name="line.232"></a>
<span class="sourceLineNo">233</span>     *<a name="line.233"></a>
<span class="sourceLineNo">234</span>     * @return The name of the File being managed.<a name="line.234"></a>
<span class="sourceLineNo">235</span>     */<a name="line.235"></a>
<span class="sourceLineNo">236</span>    public String getFileName() {<a name="line.236"></a>
<span class="sourceLineNo">237</span>        return getName();<a name="line.237"></a>
<span class="sourceLineNo">238</span>    }<a name="line.238"></a>
<span class="sourceLineNo">239</span><a name="line.239"></a>
<span class="sourceLineNo">240</span>    /**<a name="line.240"></a>
<span class="sourceLineNo">241</span>     * Returns the length of the memory mapped region.<a name="line.241"></a>
<span class="sourceLineNo">242</span>     *<a name="line.242"></a>
<span class="sourceLineNo">243</span>     * @return the length of the mapped region<a name="line.243"></a>
<span class="sourceLineNo">244</span>     */<a name="line.244"></a>
<span class="sourceLineNo">245</span>    public int getRegionLength() {<a name="line.245"></a>
<span class="sourceLineNo">246</span>        return regionLength;<a name="line.246"></a>
<span class="sourceLineNo">247</span>    }<a name="line.247"></a>
<span class="sourceLineNo">248</span><a name="line.248"></a>
<span class="sourceLineNo">249</span>    /**<a name="line.249"></a>
<span class="sourceLineNo">250</span>     * Returns {@code true} if the content of the buffer should be forced to the storage device on every write,<a name="line.250"></a>
<span class="sourceLineNo">251</span>     * {@code false} otherwise.<a name="line.251"></a>
<span class="sourceLineNo">252</span>     *<a name="line.252"></a>
<span class="sourceLineNo">253</span>     * @return whether each write should be force-sync'ed<a name="line.253"></a>
<span class="sourceLineNo">254</span>     */<a name="line.254"></a>
<span class="sourceLineNo">255</span>    public boolean isImmediateFlush() {<a name="line.255"></a>
<span class="sourceLineNo">256</span>        return immediateFlush;<a name="line.256"></a>
<span class="sourceLineNo">257</span>    }<a name="line.257"></a>
<span class="sourceLineNo">258</span><a name="line.258"></a>
<span class="sourceLineNo">259</span>    /**<a name="line.259"></a>
<span class="sourceLineNo">260</span>     * Gets this FileManager's content format specified by:<a name="line.260"></a>
<span class="sourceLineNo">261</span>     * &lt;p&gt;<a name="line.261"></a>
<span class="sourceLineNo">262</span>     * Key: "fileURI" Value: provided "advertiseURI" param.<a name="line.262"></a>
<span class="sourceLineNo">263</span>     * &lt;/p&gt;<a name="line.263"></a>
<span class="sourceLineNo">264</span>     *<a name="line.264"></a>
<span class="sourceLineNo">265</span>     * @return Map of content format keys supporting FileManager<a name="line.265"></a>
<span class="sourceLineNo">266</span>     */<a name="line.266"></a>
<span class="sourceLineNo">267</span>    @Override<a name="line.267"></a>
<span class="sourceLineNo">268</span>    public Map&lt;String, String&gt; getContentFormat() {<a name="line.268"></a>
<span class="sourceLineNo">269</span>        final Map&lt;String, String&gt; result = new HashMap&lt;&gt;(super.getContentFormat());<a name="line.269"></a>
<span class="sourceLineNo">270</span>        result.put("fileURI", advertiseURI);<a name="line.270"></a>
<span class="sourceLineNo">271</span>        return result;<a name="line.271"></a>
<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
<span class="sourceLineNo">273</span><a name="line.273"></a>
<span class="sourceLineNo">274</span>    @Override<a name="line.274"></a>
<span class="sourceLineNo">275</span>    protected void flushBuffer(final ByteBuffer buffer) {<a name="line.275"></a>
<span class="sourceLineNo">276</span>        // do nothing (do not call drain() to avoid spurious remapping)<a name="line.276"></a>
<span class="sourceLineNo">277</span>    }<a name="line.277"></a>
<span class="sourceLineNo">278</span><a name="line.278"></a>
<span class="sourceLineNo">279</span>    @Override<a name="line.279"></a>
<span class="sourceLineNo">280</span>    public ByteBuffer getByteBuffer() {<a name="line.280"></a>
<span class="sourceLineNo">281</span>        return mappedBuffer;<a name="line.281"></a>
<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
<span class="sourceLineNo">283</span><a name="line.283"></a>
<span class="sourceLineNo">284</span>    @Override<a name="line.284"></a>
<span class="sourceLineNo">285</span>    public ByteBuffer drain(final ByteBuffer buf) {<a name="line.285"></a>
<span class="sourceLineNo">286</span>        remap();<a name="line.286"></a>
<span class="sourceLineNo">287</span>        return mappedBuffer;<a name="line.287"></a>
<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
<span class="sourceLineNo">289</span><a name="line.289"></a>
<span class="sourceLineNo">290</span>    /**<a name="line.290"></a>
<span class="sourceLineNo">291</span>     * Factory Data.<a name="line.291"></a>
<span class="sourceLineNo">292</span>     */<a name="line.292"></a>
<span class="sourceLineNo">293</span>    private static class FactoryData {<a name="line.293"></a>
<span class="sourceLineNo">294</span>        private final boolean append;<a name="line.294"></a>
<span class="sourceLineNo">295</span>        private final boolean immediateFlush;<a name="line.295"></a>
<span class="sourceLineNo">296</span>        private final int regionLength;<a name="line.296"></a>
<span class="sourceLineNo">297</span>        private final String advertiseURI;<a name="line.297"></a>
<span class="sourceLineNo">298</span>        private final Layout&lt;? extends Serializable&gt; layout;<a name="line.298"></a>
<span class="sourceLineNo">299</span><a name="line.299"></a>
<span class="sourceLineNo">300</span>        /**<a name="line.300"></a>
<span class="sourceLineNo">301</span>         * Constructor.<a name="line.301"></a>
<span class="sourceLineNo">302</span>         *<a name="line.302"></a>
<span class="sourceLineNo">303</span>         * @param append Append to existing file or truncate.<a name="line.303"></a>
<span class="sourceLineNo">304</span>         * @param immediateFlush forces the memory content to be written to the storage device on every event<a name="line.304"></a>
<span class="sourceLineNo">305</span>         * @param regionLength length of the mapped region<a name="line.305"></a>
<span class="sourceLineNo">306</span>         * @param advertiseURI the URI to use when advertising the file<a name="line.306"></a>
<span class="sourceLineNo">307</span>         * @param layout The layout.<a name="line.307"></a>
<span class="sourceLineNo">308</span>         */<a name="line.308"></a>
<span class="sourceLineNo">309</span>        public FactoryData(final boolean append, final boolean immediateFlush, final int regionLength,<a name="line.309"></a>
<span class="sourceLineNo">310</span>                final String advertiseURI, final Layout&lt;? extends Serializable&gt; layout) {<a name="line.310"></a>
<span class="sourceLineNo">311</span>            this.append = append;<a name="line.311"></a>
<span class="sourceLineNo">312</span>            this.immediateFlush = immediateFlush;<a name="line.312"></a>
<span class="sourceLineNo">313</span>            this.regionLength = regionLength;<a name="line.313"></a>
<span class="sourceLineNo">314</span>            this.advertiseURI = advertiseURI;<a name="line.314"></a>
<span class="sourceLineNo">315</span>            this.layout = layout;<a name="line.315"></a>
<span class="sourceLineNo">316</span>        }<a name="line.316"></a>
<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
<span class="sourceLineNo">318</span><a name="line.318"></a>
<span class="sourceLineNo">319</span>    /**<a name="line.319"></a>
<span class="sourceLineNo">320</span>     * Factory to create a MemoryMappedFileManager.<a name="line.320"></a>
<span class="sourceLineNo">321</span>     */<a name="line.321"></a>
<span class="sourceLineNo">322</span>    private static class MemoryMappedFileManagerFactory<a name="line.322"></a>
<span class="sourceLineNo">323</span>            implements ManagerFactory&lt;MemoryMappedFileManager, FactoryData&gt; {<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
<span class="sourceLineNo">325</span>        /**<a name="line.325"></a>
<span class="sourceLineNo">326</span>         * Create a MemoryMappedFileManager.<a name="line.326"></a>
<span class="sourceLineNo">327</span>         *<a name="line.327"></a>
<span class="sourceLineNo">328</span>         * @param name The name of the File.<a name="line.328"></a>
<span class="sourceLineNo">329</span>         * @param data The FactoryData<a name="line.329"></a>
<span class="sourceLineNo">330</span>         * @return The MemoryMappedFileManager for the File.<a name="line.330"></a>
<span class="sourceLineNo">331</span>         */<a name="line.331"></a>
<span class="sourceLineNo">332</span>        @SuppressWarnings("resource")<a name="line.332"></a>
<span class="sourceLineNo">333</span>        @Override<a name="line.333"></a>
<span class="sourceLineNo">334</span>        public MemoryMappedFileManager createManager(final String name, final FactoryData data) {<a name="line.334"></a>
<span class="sourceLineNo">335</span>            final File file = new File(name);<a name="line.335"></a>
<span class="sourceLineNo">336</span>            if (!data.append) {<a name="line.336"></a>
<span class="sourceLineNo">337</span>                file.delete();<a name="line.337"></a>
<span class="sourceLineNo">338</span>            }<a name="line.338"></a>
<span class="sourceLineNo">339</span><a name="line.339"></a>
<span class="sourceLineNo">340</span>            final boolean writeHeader = !data.append || !file.exists();<a name="line.340"></a>
<span class="sourceLineNo">341</span>            final OutputStream os = NullOutputStream.getInstance();<a name="line.341"></a>
<span class="sourceLineNo">342</span>            RandomAccessFile raf = null;<a name="line.342"></a>
<span class="sourceLineNo">343</span>            try {<a name="line.343"></a>
<span class="sourceLineNo">344</span>                FileUtils.makeParentDirs(file);<a name="line.344"></a>
<span class="sourceLineNo">345</span>                raf = new RandomAccessFile(name, "rw");<a name="line.345"></a>
<span class="sourceLineNo">346</span>                final long position = (data.append) ? raf.length() : 0;<a name="line.346"></a>
<span class="sourceLineNo">347</span>                raf.setLength(position + data.regionLength);<a name="line.347"></a>
<span class="sourceLineNo">348</span>                return new MemoryMappedFileManager(raf, name, os, data.immediateFlush, position, data.regionLength,<a name="line.348"></a>
<span class="sourceLineNo">349</span>                        data.advertiseURI, data.layout, writeHeader);<a name="line.349"></a>
<span class="sourceLineNo">350</span>            } catch (final Exception ex) {<a name="line.350"></a>
<span class="sourceLineNo">351</span>                LOGGER.error("MemoryMappedFileManager (" + name + ") " + ex, ex);<a name="line.351"></a>
<span class="sourceLineNo">352</span>                Closer.closeSilently(raf);<a name="line.352"></a>
<span class="sourceLineNo">353</span>            }<a name="line.353"></a>
<span class="sourceLineNo">354</span>            return null;<a name="line.354"></a>
<span class="sourceLineNo">355</span>        }<a name="line.355"></a>
<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
<span class="sourceLineNo">357</span>}<a name="line.357"></a>




























































</pre>
</div>
</body>
</html>
