blob: 1937ea48092fff62346a665b4cbf0472c4b61f00 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/
#pragma once
#ifndef GEODE_CACHESTATISTICS_H_
#define GEODE_CACHESTATISTICS_H_
#include <atomic>
#include <chrono>
#include "internal/geode_globals.hpp"
/**
* @file
*/
namespace apache {
namespace geode {
namespace client {
class LocalRegion;
/**
*@class CacheStatistics CacheStatistics.hpp
*
*Defines common statistical information
*for both the region and its entries. All of these methods may throw a
*CacheClosedException, RegionDestroyedException, or EntryDestroyedException.
*
*@see Region::getStatistics
*@see RegionEntry::getStatistics
*/
class APACHE_GEODE_EXPORT CacheStatistics {
public:
typedef std::chrono::system_clock::time_point time_point;
CacheStatistics() : m_lastAccessTime(0), m_lastModifiedTime(0){};
CacheStatistics(const CacheStatistics&) = delete;
virtual ~CacheStatistics() = default;
/**
* For an entry, returns the time that the entry's value was last modified.
* For a region, returns the last time any of the region's entries' values or
* the values in subregions' entries were modified. The
* modification may have been initiated locally, or it may have been an update
* distributed from another cache. It may also have been a new value provided
* by a loader. The modification time on a region is propagated upward to
* parent regions, transitively, to the root region.
* <p>
* Entry and subregion creation will update the modification time on a
* region, but <code>destroy</code>, <code>destroyRegion</code>,
* <code>invalidate</code>, and <code>invalidateRegion</code>
* do not update the modification time.
* @return the last modification time of the region or the entry;
* returns std::chrono::system_clock epoch if the entry is invalid or the
* modification time is uninitialized.
*
* @see Region::put
* @see Region::get
* @see Region::create
* @see Region::createSubregion
*/
virtual time_point getLastModifiedTime() const;
/**
* For an entry, returns the last time it was accessed via
* <code>Region.get</code>.
* For a region, returns the last time any of its entries or the entries of
* its subregions were accessed with <code>Region.get</code>.
* Any modifications will also update the lastAccessedTime, so
* <code>lastAccessedTime</code> is always <code>>= lastModifiedTime</code>.
* The <code>lastAccessedTime</code> on a region is propagated upward to
* parent regions, transitively, to the the root region.
*
* @return the last access time of the region or the entry's value;
* returns std::chrono::system_clock epoch if the entry is invalid or the
* modification time is uninitialized.
*
* @see Region::get
* @see getLastModifiedTime
*/
virtual time_point getLastAccessedTime() const;
private:
virtual void setLastAccessedTime(time_point lat);
virtual void setLastModifiedTime(time_point lmt);
std::atomic<time_point::duration::rep> m_lastAccessTime;
std::atomic<time_point::duration::rep> m_lastModifiedTime;
friend class LocalRegion;
};
} // namespace client
} // namespace geode
} // namespace apache
#endif // GEODE_CACHESTATISTICS_H_