com.yahoo.pulsar.broker.stats.AllocatorStatsGenerator.java Source code

Java tutorial

Introduction

Here is the source code for com.yahoo.pulsar.broker.stats.AllocatorStatsGenerator.java

Source

/**
 * Copyright 2016 Yahoo 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.yahoo.pulsar.broker.stats;

import java.util.stream.Collectors;

import org.apache.bookkeeper.mledger.impl.EntryCacheImpl;

import com.google.common.collect.Lists;
import com.yahoo.pulsar.common.stats.AllocatorStats;
import com.yahoo.pulsar.common.stats.AllocatorStats.PoolArenaStats;
import com.yahoo.pulsar.common.stats.AllocatorStats.PoolChunkListStats;
import com.yahoo.pulsar.common.stats.AllocatorStats.PoolChunkStats;
import com.yahoo.pulsar.common.stats.AllocatorStats.PoolSubpageStats;

import io.netty.buffer.PoolArenaMetric;
import io.netty.buffer.PoolChunkListMetric;
import io.netty.buffer.PoolChunkMetric;
import io.netty.buffer.PoolSubpageMetric;
import io.netty.buffer.PooledByteBufAllocator;

public class AllocatorStatsGenerator {
    public static AllocatorStats generate(String allocatorName) {
        PooledByteBufAllocator allocator = null;
        if ("default".equals(allocatorName)) {
            allocator = PooledByteBufAllocator.DEFAULT;
        } else if ("ml-cache".equals(allocatorName)) {
            allocator = EntryCacheImpl.allocator;
        } else {
            throw new IllegalArgumentException("Invalid allocator name : " + allocatorName);
        }

        AllocatorStats stats = new AllocatorStats();
        stats.directArenas = allocator.directArenas().stream().map(x -> newPoolArenaStats(x))
                .collect(Collectors.toList());
        stats.heapArenas = allocator.heapArenas().stream().map(x -> newPoolArenaStats(x))
                .collect(Collectors.toList());

        stats.numDirectArenas = allocator.numDirectArenas();
        stats.numHeapArenas = allocator.numHeapArenas();
        stats.numThreadLocalCaches = allocator.numThreadLocalCaches();
        stats.normalCacheSize = allocator.normalCacheSize();
        stats.smallCacheSize = allocator.smallCacheSize();
        stats.tinyCacheSize = allocator.tinyCacheSize();
        return stats;
    }

    private static PoolArenaStats newPoolArenaStats(PoolArenaMetric m) {
        PoolArenaStats stats = new PoolArenaStats();
        stats.numTinySubpages = m.numTinySubpages();
        stats.numSmallSubpages = m.numSmallSubpages();
        stats.numChunkLists = m.numChunkLists();

        stats.tinySubpages = m.tinySubpages().stream().map(x -> newPoolSubpageStats(x))
                .collect(Collectors.toList());
        stats.smallSubpages = m.smallSubpages().stream().map(x -> newPoolSubpageStats(x))
                .collect(Collectors.toList());
        stats.chunkLists = m.chunkLists().stream().map(x -> newPoolChunkListStats(x)).collect(Collectors.toList());

        stats.numAllocations = m.numAllocations();
        stats.numTinyAllocations = m.numTinyAllocations();
        stats.numSmallAllocations = m.numSmallAllocations();
        stats.numNormalAllocations = m.numNormalAllocations();
        stats.numHugeAllocations = m.numHugeAllocations();
        stats.numDeallocations = m.numDeallocations();
        stats.numTinyDeallocations = m.numTinyDeallocations();
        stats.numSmallDeallocations = m.numSmallDeallocations();
        stats.numNormalDeallocations = m.numNormalDeallocations();
        stats.numHugeDeallocations = m.numHugeDeallocations();
        stats.numActiveAllocations = m.numActiveAllocations();
        stats.numActiveTinyAllocations = m.numActiveTinyAllocations();
        stats.numActiveSmallAllocations = m.numActiveSmallAllocations();
        stats.numActiveNormalAllocations = m.numActiveNormalAllocations();
        stats.numActiveHugeAllocations = m.numActiveHugeAllocations();
        return stats;
    }

    private static PoolSubpageStats newPoolSubpageStats(PoolSubpageMetric m) {
        PoolSubpageStats stats = new PoolSubpageStats();
        stats.maxNumElements = m.maxNumElements();
        stats.numAvailable = m.numAvailable();
        stats.elementSize = m.elementSize();
        stats.pageSize = m.pageSize();
        return stats;
    }

    private static PoolChunkListStats newPoolChunkListStats(PoolChunkListMetric m) {
        PoolChunkListStats stats = new PoolChunkListStats();
        stats.minUsage = m.minUsage();
        stats.maxUsage = m.maxUsage();
        stats.chunks = Lists.newArrayList();
        m.forEach(chunk -> stats.chunks.add(newPoolChunkStats(chunk)));
        return stats;
    }

    private static PoolChunkStats newPoolChunkStats(PoolChunkMetric m) {
        PoolChunkStats stats = new PoolChunkStats();
        stats.usage = m.usage();
        stats.chunkSize = m.chunkSize();
        stats.freeBytes = m.freeBytes();
        return stats;
    }
}