All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hazelcast.internal.monitor.impl.PerIndexStats Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 2008-2024, Hazelcast, Inc. All Rights Reserved.
 *
 * 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.hazelcast.internal.monitor.impl;

import com.hazelcast.internal.memory.MemoryAllocator;
import com.hazelcast.query.impl.Comparison;
import com.hazelcast.query.impl.Index;

/**
 * Provides internal per-index statistics for {@link com.hazelcast.query.impl.Index
 * Index}.
 */
@SuppressWarnings({"checkstyle:methodcount", "checkstyle:anoninnerlength"})
public interface PerIndexStats {

    /**
     * Empty no-op internal index stats instance.
     */
    PerIndexStats EMPTY = new PerIndexStats() {

        @Override
        public long makeTimestamp() {
            return 0;
        }

        @Override
        public long getCreationTime() {
            return 0;
        }

        @Override
        public long getQueryCount() {
            return 0;
        }

        @Override
        public void incrementQueryCount() {
            // do nothing
        }

        @Override
        public long getHitCount() {
            return 0;
        }

        @Override
        public long getTotalHitLatency() {
            return 0;
        }

        @Override
        public double getTotalNormalizedHitCardinality() {
            return 0.0;
        }

        @Override
        public long getInsertCount() {
            return 0;
        }

        @Override
        public long getTotalInsertLatency() {
            return 0;
        }

        @Override
        public long getUpdateCount() {
            return 0;
        }

        @Override
        public long getTotalUpdateLatency() {
            return 0;
        }

        @Override
        public long getRemoveCount() {
            return 0;
        }

        @Override
        public long getTotalRemoveLatency() {
            return 0;
        }

        @Override
        public long getMemoryCost() {
            return 0;
        }

        @Override
        public void updateMemoryCost(long delta) {
            // do nothing
        }

        @Override
        public void onDispose() {
            // do nothing
        }

        @Override
        public void onInsert(long timestamp, IndexOperationStats operationStats, Index.OperationSource operationSource) {
            // do nothing
        }

        @Override
        public void onUpdate(long timestamp, IndexOperationStats operationStats, Index.OperationSource operationSource) {
            // do nothing
        }

        @Override
        public void onRemove(long timestamp, IndexOperationStats operationStats, Index.OperationSource operationSource) {
            // do nothing
        }

        @Override
        public void onClear() {
            // do nothing
        }

        @Override
        public void onIndexHit(long timestamp, long hitCardinality) {
            // do nothing
        }

        @Override
        public void resetPerQueryStats() {
            // do nothing
        }

        @Override
        public MemoryAllocator wrapMemoryAllocator(MemoryAllocator memoryAllocator) {
            return memoryAllocator;
        }

        @Override
        public IndexOperationStats createOperationStats() {
            return IndexOperationStats.EMPTY;
        }

    };

    /**
     * Returns a new timestamp.
     * 

* Used for latency measurement, expressed in nanoseconds. */ long makeTimestamp(); /** * Returns the creation time of the index. *

* The value is relative to midnight, January 1, 1970 UTC and expressed in * milliseconds. */ long getCreationTime(); /** * Returns the total number of queries served by the index. *

* The returned value may be less than the one returned by {@link * #getHitCount()} since a single query may hit the same index more than once. */ long getQueryCount(); /** * Increments the query count for the index. */ void incrementQueryCount(); /** * Returns the total number of hits into the index. *

* The returned value may be greater than the one returned by {@link * #getQueryCount} since a single query may hit the same index more than once. */ long getHitCount(); /** * Returns the total hit latency for the index. */ long getTotalHitLatency(); /** * Returns the total normalized cardinality of the hits served by the index. *

* Normalized hit cardinality is calculated as {@code hit_cardinality / * entry_count} at the time of the hit. The returned value is a sum of all * individual normalized hit cardinalities. */ double getTotalNormalizedHitCardinality(); /** * Returns the number of insert operations performed on the index. */ long getInsertCount(); /** * Returns the total latency (in nanoseconds) of insert operations performed * on the index. *

* To compute the average latency divide the returned value by {@link * #getInsertCount() insert operation count}. */ long getTotalInsertLatency(); /** * Returns the number of update operations performed on the index. */ long getUpdateCount(); /** * Returns the total latency (in nanoseconds) of update operations performed * on the index. *

* To compute the average latency divide the returned value by {@link * #getUpdateCount() update operation count}. */ long getTotalUpdateLatency(); /** * Returns the number of remove operations performed on the index. */ long getRemoveCount(); /** * Returns the total latency (in nanoseconds) of remove operations performed * on the index. *

* To compute the average latency divide the returned value by {@link * #getRemoveCount() remove operation count}. */ long getTotalRemoveLatency(); /** * Returns the memory cost of the index in bytes. *

* Currently, for on-heap indexes (OBJECT and BINARY storages), the returned * value is just a best-effort approximation and doesn't indicate a precise * on-heap memory usage of the index. */ long getMemoryCost(); /** * Updates the memory cost of the index in bytes. * @param delta the value to be added to the memory cost */ void updateMemoryCost(long delta); /** * Invoked on index dispose. */ void onDispose(); /** * Invoked by the associated index after every insert operation. * * @param timestamp the time at which the insert operation was started. * @param operationStats the operation stats to track the stats. * @param operationSource the operation source. * @see #makeTimestamp * @see com.hazelcast.query.impl.Index#putEntry */ void onInsert(long timestamp, IndexOperationStats operationStats, Index.OperationSource operationSource); /** * Invoked by the associated index after every update operation. * * @param timestamp the time at which the update operation was started. * @param operationStats the operation stats to track the stats. * @param operationSource the operation source. * @see #makeTimestamp * @see com.hazelcast.query.impl.Index#putEntry */ void onUpdate(long timestamp, IndexOperationStats operationStats, Index.OperationSource operationSource); /** * Invoked by the associated index after every remove operation. * * @param timestamp the time at which the remove operation was started. * @param operationStats the operation stats to track the stats. * @param operationSource the operation source. * @see #makeTimestamp * @see com.hazelcast.query.impl.Index#removeEntry */ void onRemove(long timestamp, IndexOperationStats operationStats, Index.OperationSource operationSource); /** * Invoked by the associated index after the index was cleared. * * @see com.hazelcast.query.impl.Index#clear */ void onClear(); /** * Invoked by the associated index after every index hit. *

* Following operations generate a hit: *

    *
  • {@link com.hazelcast.query.impl.Index#getRecords(Comparable)} *
  • {@link com.hazelcast.query.impl.Index#getRecords(Comparable[])} *
  • {@link com.hazelcast.query.impl.Index#getRecords(Comparison, Comparable)} *
  • {@link com.hazelcast.query.impl.Index#getRecords(Comparable, boolean, Comparable, boolean)} *
* * @param timestamp the time at which the hit-producing operation was * started. * @param hitCardinality the cardinality of the hit. * @see #makeTimestamp() */ void onIndexHit(long timestamp, long hitCardinality); /** * Resets the per-query stats, if any, currently tracked by this internal * index stats instance. */ void resetPerQueryStats(); /** * Wraps the given memory allocator. *

* Used for the off-heap memory cost tracking. * * @param memoryAllocator the memory allocator to wrap. * @return the wrapped memory allocator. */ MemoryAllocator wrapMemoryAllocator(MemoryAllocator memoryAllocator); /** * Creates a new per-operation stats instance. * * @return the created per-operation stats instance. */ IndexOperationStats createOperationStats(); }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy