| /* |
| * 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_ |