Package com.persistit

Source Code of com.persistit.BufferPoolMXBeanImpl

/**
* Copyright 2011-2012 Akiban Technologies, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.persistit;

import java.rmi.RemoteException;

import com.persistit.Management.BufferPoolInfo;
import com.persistit.mxbeans.BufferPoolMXBean;
import com.persistit.mxbeans.Description;

/**
* MXBean that exposes information about a {@link BufferPool}.
*
* @author peter
*
*/
class BufferPoolMXBeanImpl implements BufferPoolMXBean {

    private final static long MAX_STALE = 5000;

    private final Persistit _persistit;

    private final int _bufferSize;

    private BufferPoolInfo _recent;

    static String mbeanName(final int bufferPoolSize) {
        return MXBEAN_NAME + "." + bufferPoolSize;
    }

    BufferPoolMXBeanImpl(final Persistit persistit, final int bufferSize) {
        _persistit = persistit;
        _bufferSize = bufferSize;
        _recent = new BufferPoolInfo();
    }

    private BufferPoolInfo recent() {
        final long now = System.currentTimeMillis();
        if (_recent.getAcquisitionTime() < now - MAX_STALE) {
            try {
                final BufferPoolInfo[] array = _persistit.getManagement().getBufferPoolInfoArray();
                for (final BufferPoolInfo info : array) {
                    if (info.getBufferSize() == _bufferSize) {
                        _recent = info;
                    }
                }
            } catch (final RemoteException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if (_recent == null) {
            _recent = new BufferPoolInfo();
        }
        return _recent;
    }

    /**
     * Return the size of <code>Buffer</code>s managed by this pool.
     *
     * @return The size in bytes of each buffer in this pool
     */
    @Override
    @Description("The size in bytes of each buffer in this pool")
    public int getBufferSize() {
        return recent().getBufferSize();
    }

    /**
     * Return the count of <code>Buffer</code>s managed by this pool.
     *
     * @return The count
     */
    @Override
    @Description("Return the count of Buffer managed by this pool")
    public int getBufferCount() {
        return recent().getBufferCount();
    }

    /**
     * Return the count of lookup operations for pages images that resulted in a
     * physical disk read operation. This number, in comparison with the hit
     * counter, indicates how effective the cache is in reducing disk I/O.
     *
     * @return The get count
     */
    @Override
    @Description("Count of unsuccessful lookup operations that resulted in physical disks")
    public long getMissCount() {
        return recent().getMissCount();
    }

    /**
     * Return the count of lookup operations for pages images in this pool for
     * which the page image was already found in this <code>BufferPool</code>.
     * This number, in comparison with the get counter, indicates how effective
     * the cache is in reducing disk I/O.
     *
     * @return The hit count
     */
    @Override
    @Description("Count of successful lookup operations")
    public long getHitCount() {
        return recent().getHitCount();
    }

    /**
     * @return Count of pages newly created in this <code>BufferPool</code>.
     */
    @Override
    @Description("Count of pages newly created")
    public long getNewCount() {
        return recent().getNewCount();
    }

    /**
     * Get the count of valid pages evicted from this <code>BufferPool</code> to
     * make room for newly read or created pages.
     *
     * @return The evicted page count
     */
    @Override
    @Description("Count of pages replaced by other pages")
    public long getEvictCount() {
        return recent().getEvictCount();
    }

    /**
     * Return count of pages written from this pool.
     *
     * @return The write count
     */
    @Override
    @Description("Count of pages written from this BufferPool")
    public long getWriteCount() {
        return recent().getWriteCount();
    }

    /**
     * Return count of pages forced to be written due to an update after a
     * checkpoint
     *
     * @return The forced checkpoint write count
     */
    @Override
    @Description("Count of pages forced to be written due to an update after a checkpoint")
    public long getForcedCheckpointWriteCount() {
        return recent().getForcedCheckpointWriteCount();
    }

    /**
     * Return count of pages forced to be written when dirty on eviction
     *
     * @return The forced write count
     */
    @Override
    @Description("Count of pages forced to be written when dirty on eviction")
    public long getForcedWriteCount() {
        return recent().getForcedWriteCount();
    }

    /**
     * Get the "hit ratio" - the number of hits divided by the number of overall
     * gets. A value close to 1.0 indicates that most attempts to find data in
     * the <code>BufferPool</code> are successful - i.e., that the cache is
     * effectively reducing the need for disk read operations.
     *
     * @return The ratio
     */
    @Override
    @Description("Ratio of hits to total page lookup operations")
    public double getHitRatio() {
        return recent().getHitRatio();
    }

    /**
     * Get the count of valid pages in this pool.
     *
     * @return The count of valid pages in this pool
     */
    @Override
    @Description("Count of valid pages in this pool")
    public int getValidPageCount() {
        return recent().getValidPageCount();
    }

    /**
     * Get the count of dirty pages (pages that contain updates not yet written
     * to disk) in this pool.
     *
     * @return The count of dirty pages in this pool
     */
    @Override
    @Description("The count of dirty pages in this pool")
    public int getDirtyPageCount() {
        return recent().getDirtyPageCount();
    }

    /**
     * Get the count of pages on which running threads have reader
     * (non-exclusive), but <i>not</i> writer (exclusive) claims in this pool.
     *
     * @return The count of pages with reader claims
     */
    @Override
    @Description("The count of pages with reader claims")
    public int getReaderClaimedPageCount() {
        return recent().getReaderClaimedPageCount();
    }

    /**
     * Get the count of pages on which running threads have writer (exclusive)
     * claims in this pool.
     *
     * @return The count of pages with writer claims
     */
    @Override
    @Description("The count of pages with writer claims")
    public int getWriterClaimedPageCount() {
        return recent().getWriterClaimedPageCount();
    }

    /**
     * @return Earliest timestamp of any dirty page in this
     *         <code>BufferPool</code>.
     */
    @Override
    @Description("Earliest timestamp of any dirty page in this >BufferPool")
    public long getEarliestDirtyTimestamp() {
        return recent().getEarliestDirtyTimestamp();
    }

}
TOP

Related Classes of com.persistit.BufferPoolMXBeanImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.