blob: 579899397cf4f7aaef9c59f1ba46a0c313461644 [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
#include "geode_defs.hpp"
#include "begin_native.hpp"
#include <geode/RegionAttributes.hpp>
#include "end_native.hpp"
#include "native_shared_ptr.hpp"
#include "ISerializable.hpp"
#include "ExpirationAction.hpp"
#include "DiskPolicyType.hpp"
#include "ICacheLoader.hpp"
#include "ICacheWriter.hpp"
#include "ICacheListener.hpp"
#include "IPartitionResolver.hpp"
#include "Properties.hpp"
using namespace System;
namespace Apache
{
namespace Geode
{
namespace Client
{
namespace native = apache::geode::client;
/// <summary>
/// Defines attributes for configuring a region.
/// </summary>
/// <remarks>
/// These are
/// <c>ICacheListener</c>, <c>ICacheLoader</c>, <c>ICacheWriter</c>,
/// scope, mirroring, and expiration attributes
/// for the region itself; expiration attributes for the region entries;
/// and whether statistics are enabled for the region and its entries.
///
/// To create an instance of this interface, use
/// <see cref="RegionAttributesFactory.Create" />.
///
/// For compatibility rules and default values, see <see cref="RegionAttributesFactory" />.
/// <para>
/// Note that the <c>RegionAttributes</c> are not distributed with the region.
/// </para>
/// </remarks>
/// <seealso cref="RegionAttributesFactory" />
/// <seealso cref="AttributesMutator" />
/// <seealso cref="Region.Attributes" />
generic <class TKey, class TValue>
public ref class RegionAttributes sealed
: public IDataSerializableInternal
{
public:
/// <summary>
/// Gets the cache loader for the region.
/// </summary>
/// <returns>
/// region's <c>ICacheLoader</c> or null if none
/// </returns>
property Apache::Geode::Client::ICacheLoader<TKey, TValue>^ CacheLoader
{
Apache::Geode::Client::ICacheLoader<TKey, TValue>^ get();
}
/// <summary>
/// Gets the cache writer for the region.
/// </summary>
/// <returns>
/// region's <c>ICacheWriter</c> or null if none
/// </returns>
property ICacheWriter<TKey, TValue>^ CacheWriter
{
ICacheWriter<TKey, TValue>^ get();
}
/// <summary>
/// Gets the cache listener for the region.
/// </summary>
/// <returns>
/// region's <c>ICacheListener</c> or null if none
/// </returns>
property ICacheListener<TKey, TValue>^ CacheListener
{
ICacheListener<TKey, TValue>^ get();
}
/// <summary>
/// Gets the partition resolver for the region.
/// </summary>
/// <returns>
/// region's <c>IPartitionResolver</c> or null if none
/// </returns>
property IPartitionResolver<TKey, TValue>^ PartitionResolver
{
IPartitionResolver<TKey, TValue>^ get();
}
/// <summary>
/// Gets the <c>timeToLive</c> value for the region as a whole.
/// </summary>
/// <returns>the timeToLive duration for this region</returns>
property TimeSpan RegionTimeToLive
{
TimeSpan get();
}
/// <summary>
/// Gets the <c>timeToLive</c> expiration action for the region as a whole.
/// </summary>
/// <returns>the timeToLive action for this region</returns>
property ExpirationAction RegionTimeToLiveAction
{
ExpirationAction get();
}
/// <summary>
/// Gets the <c>idleTimeout</c> value for the region as a whole.
/// </summary>
/// <returns>the IdleTimeout duration for this region</returns>
property TimeSpan RegionIdleTimeout
{
TimeSpan get();
}
/// <summary>
/// Gets the <c>idleTimeout</c> expiration action for the region as a whole.
/// </summary>
/// <returns>the idleTimeout action for this region</returns>
property ExpirationAction RegionIdleTimeoutAction
{
ExpirationAction get();
}
/// <summary>
/// Gets the <c>timeToLive</c> value for entries in this region.
/// </summary>
/// <returns>the timeToLive duration for entries in this region</returns>
property TimeSpan EntryTimeToLive
{
TimeSpan get();
}
/// <summary>
/// Gets the <c>timeToLive</c> expiration action for entries in this region.
/// </summary>
/// <returns>the timeToLive action for entries in this region</returns>
property ExpirationAction EntryTimeToLiveAction
{
ExpirationAction get();
}
/// <summary>
/// Gets the <c>idleTimeout</c> value for entries in this region.
/// </summary>
/// <returns>the idleTimeout duration for entries in this region</returns>
property TimeSpan EntryIdleTimeout
{
TimeSpan get();
}
/// <summary>
/// Gets the <c>idleTimeout</c> expiration action for entries in this region.
/// </summary>
/// <returns>the idleTimeout action for entries in this region</returns>
property ExpirationAction EntryIdleTimeoutAction
{
ExpirationAction get();
}
/// <summary>
/// If true, this region will store data in the current process.
/// </summary>
/// <returns>true if caching is enabled</returns>
property bool CachingEnabled
{
bool get();
}
// MAP ATTRIBUTES
/// <summary>
/// Returns the initial capacity of the entry's local cache.
/// </summary>
/// <returns>the initial capacity</returns>
property System::Int32 InitialCapacity
{
System::Int32 get();
}
/// <summary>
/// Returns the load factor of the entry's local cache.
/// </summary>
/// <returns>the load factor</returns>
property Single LoadFactor
{
Single get();
}
/// <summary>
/// Returns the concurrency level of the entry's local cache.
/// </summary>
/// <returns>the concurrency level</returns>
/// <seealso cref="RegionAttributesFactory" />
property System::Int32 ConcurrencyLevel
{
System::Int32 get();
}
/// <summary>
/// Returns the maximum number of entries this cache will hold before
/// using LRU eviction.
/// </summary>
/// <returns>the maximum LRU size, or 0 for no limit</returns>
property System::UInt32 LruEntriesLimit
{
System::UInt32 get();
}
/// <summary>
/// Returns the disk policy type of the region.
/// </summary>
/// <returns>the disk policy type, default is null</returns>
property DiskPolicyType DiskPolicy
{
DiskPolicyType get();
}
/// <summary>
/// Returns the ExpirationAction used for LRU Eviction, default is LOCAL_DESTROY.
/// </summary>
/// <returns>the LRU eviction action</returns>
property ExpirationAction LruEvictionAction
{
ExpirationAction get();
}
/// <summary>
/// Returns the path of the library from which
/// the factory function will be invoked on a cache server.
/// </summary>
/// <returns>the CacheLoader library path</returns>
property String^ CacheLoaderLibrary
{
String^ get();
}
/// <summary>
/// Rreturns the symbol name of the factory function from which
/// the loader will be created on a cache server.
/// </summary>
/// <returns>the CacheLoader factory function name</returns>
property String^ CacheLoaderFactory
{
String^ get();
}
/// <summary>
/// Returns the path of the library from which
/// the factory function will be invoked on a cache server.
/// </summary>
/// <returns>the CacheListener library path</returns>
property String^ CacheListenerLibrary
{
String^ get();
}
/// <summary>
/// Returns the path of the library from which
/// the factory function will be invoked on a cache server.
/// </summary>
/// <returns>the PartitionResolver library path</returns>
property String^ PartitionResolverLibrary
{
String^ get();
}
/// <summary>
/// Returns the symbol name of the factory function from which
/// the loader will be created on a cache server.
/// </summary>
/// <returns>the CacheListener factory function name</returns>
property String^ CacheListenerFactory
{
String^ get();
}
/// <summary>
/// Returns the symbol name of the factory function from which
/// the loader will be created on a cache server.
/// </summary>
/// <returns>the PartitionResolver factory function name</returns>
property String^ PartitionResolverFactory
{
String^ get();
}
/// <summary>
/// Returns the path of the library from which
/// the factory function will be invoked on a cache server.
/// </summary>
/// <returns>the CacheWriter library path</returns>
property String^ CacheWriterLibrary
{
String^ get();
}
/// <summary>
/// Returns the symbol name of the factory function from which
/// the loader will be created on a cache server.
/// </summary>
/// <returns>the CacheWriter factory function name</returns>
property String^ CacheWriterFactory
{
String^ get();
}
/// <summary>
/// True if all the attributes are equal to those of <c>other</c>.
/// </summary>
/// <param name="other">attribute object to compare</param>
/// <returns>true if equal</returns>
bool Equals(RegionAttributes<TKey, TValue>^ other);
/// <summary>
/// True if all the attributes are equal to those of <c>other</c>.
/// </summary>
/// <param name="other">attribute object to compare</param>
/// <returns>true if equal</returns>
virtual bool Equals(Object^ other) override;
/// <summary>
/// Throws IllegalStateException if the attributes are not suited for serialization
/// such as those that have a cache callback (listener, loader, or writer) set
/// directly instead of providing the library path and factory function.
/// </summary>
/// <exception cref="IllegalStateException">if the attributes cannot be serialized</exception>
void ValidateSerializableAttributes();
/// <summary>
/// This method returns the list of endpoints (servername:portnumber) separated by commas.
/// </summary>
/// <returns>list of endpoints</returns>
property String^ Endpoints
{
String^ get();
}
/// <summary>
/// This method returns the name of the attached pool.
/// </summary>
/// <returns>pool name</returns>
property String^ PoolName
{
String^ get();
}
/// <summary>
/// True if client notification is enabled.
/// </summary>
/// <returns>true if enabled</returns>
property bool ClientNotificationEnabled
{
bool get();
}
/// <summary>
/// True if cloning is enabled for in case of delta.
/// </summary>
/// <returns>true if enabled</returns>
property bool CloningEnabled
{
bool get();
}
/// <summary>
/// Returns the path of the library from which
/// the factory function will be invoked on a cache server.
/// </summary>
/// <returns>the PersistenceManager library path</returns>
property String^ PersistenceLibrary
{
String^ get();
}
/// <summary>
/// Returns the symbol name of the factory function from which
/// the persistence manager will be created on a cache server.
/// </summary>
/// <returns>the PersistenceManager factory function name</returns>
property String^ PersistenceFactory
{
String^ get();
}
/// <summary>
/// Returns the properties set for persistence.
/// </summary>
/// <returns>properties for the PersistenceManager</returns>
property Properties<String^, String^>^ PersistenceProperties
{
Properties<String^, String^>^ get();
}
/// <summary>
/// Returns the concurrency check enabled flag of the region
/// </summary>
/// <returns>the concurrency check enabled flag</returns>
/// <seealso cref="RegionAttributesFactory" />
property bool ConcurrencyChecksEnabled
{
bool get();
}
/// <summary>
/// Serializes this Properties object.
/// </summary>
/// <param name="output">the DataOutput stream to use for serialization</param>
virtual void ToData(DataOutput^ output);
/// <summary>
/// Deserializes this Properties object.
/// </summary>
/// <param name="input">the DataInput stream to use for reading data</param>
/// <returns>the deserialized Properties object</returns>
virtual void FromData(DataInput^ input);
/// <summary>
/// return the size of this object in bytes
/// </summary>
virtual property System::UInt64 ObjectSize
{
virtual System::UInt64 get()
{
return 0; //don't care
}
}
internal:
/// <summary>
/// Internal factory function to wrap a native object pointer inside
/// this managed class with null pointer check.
/// </summary>
/// <param name="nativeptr">The native object pointer</param>
/// <returns>
/// The managed wrapper object; null if the native pointer is null.
/// </returns>
inline static RegionAttributes<TKey, TValue>^ Create(native::RegionAttributes nativeptr)
{
return gcnew RegionAttributes<TKey, TValue>( nativeptr );
}
std::shared_ptr<native::RegionAttributes> GetNative()
{
return m_nativeptr->get_shared_ptr();
}
private:
/// <summary>
/// Private constructor to wrap a native object pointer
/// </summary>
/// <param name="nativeobj">The native object pointer</param>
inline RegionAttributes<TKey, TValue>(native::RegionAttributes nativeobj)
{
const std::shared_ptr<native::RegionAttributes> nativeptr = std::make_shared<native::RegionAttributes>(nativeobj);
m_nativeptr = gcnew native_shared_ptr<native::RegionAttributes>(nativeptr);
}
native_shared_ptr<native::RegionAttributes>^ m_nativeptr;
};
} // namespace Client
} // namespace Geode
} // namespace Apache