blob: e4a7ad6e3e9b5c9544e2bba5051cbf535cca6761 [file] [log] [blame]
<?php
/*
* 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.
*/
namespace Apache\Ignite\Cache;
use Apache\Ignite\Type\ObjectType;
use Apache\Ignite\Type\ObjectArrayType;
use Apache\Ignite\Type\ComplexObjectType;
use Apache\Ignite\Exception\ClientException;
use Apache\Ignite\Internal\Binary\MessageBuffer;
use Apache\Ignite\Internal\Binary\BinaryUtils;
use Apache\Ignite\Internal\Binary\BinaryCommunicator;
use Apache\Ignite\Internal\Utils\ArgumentChecker;
/**
* Class representing Ignite cache configuration on a server.
*
* All configuration settings are optional and have defaults which are defined on a server side.
*
* See Apache Ignite documentation for details of every configuration setting.
*/
class CacheConfiguration
{
const PROP_NAME = 0;
const PROP_CACHE_MODE = 1;
const PROP_ATOMICITY_MODE = 2;
const PROP_BACKUPS = 3;
const PROP_WRITE_SYNCHRONIZATION_MODE = 4;
const PROP_COPY_ON_READ = 5;
const PROP_READ_FROM_BACKUP = 6;
const PROP_DATA_REGION_NAME = 100;
const PROP_IS_ONHEAP_CACHE_ENABLED = 101;
const PROP_QUERY_ENTITY = 200;
const PROP_QUERY_PARALLELISM = 201;
const PROP_QUERY_DETAIL_METRICS_SIZE = 202;
const PROP_SQL_SCHEMA = 203;
const PROP_SQL_INDEX_INLINE_MAX_SIZE = 204;
const PROP_SQL_ESCAPE_ALL = 205;
const PROP_MAX_QUERY_ITERATORS = 206;
const PROP_REBALANCE_MODE = 300;
const PROP_REBALANCE_DELAY = 301;
const PROP_REBALANCE_TIMEOUT = 302;
const PROP_REBALANCE_BATCH_SIZE = 303;
const PROP_REBALANCE_BATCHES_PREFETCH_COUNT = 304;
const PROP_REBALANCE_ORDER = 305;
const PROP_REBALANCE_THROTTLE = 306;
const PROP_GROUP_NAME = 400;
const PROP_CACHE_KEY_CONFIGURATION = 401;
const PROP_DEFAULT_LOCK_TIMEOUT = 402;
const PROP_MAX_CONCURRENT_ASYNC_OPS = 403;
const PROP_PARTITION_LOSS_POLICY = 404;
const PROP_EAGER_TTL = 405;
const PROP_STATISTICS_ENABLED = 406;
/** @name AtomicityMode
* @anchor AtomicityMode
* @{
*/
const ATOMICITY_MODE_TRANSACTIONAL = 0;
const ATOMICITY_MODE_ATOMIC = 1;
/** @} */ // end of AtomicityMode
/** @name CacheMode
* @anchor CacheMode
* @{
*/
const CACHE_MODE_LOCAL = 0;
const CACHE_MODE_REPLICATED = 1;
const CACHE_MODE_PARTITIONED = 2;
/** @} */ // end of CacheMode
/** @name PartitionLossPolicy
* @anchor PartitionLossPolicy
* @{
*/
const PARTITION_LOSS_POLICY_READ_ONLY_SAFE = 0;
const PARTITION_LOSS_POLICY_READ_ONLY_ALL = 1;
const PARTITION_LOSS_POLICY_READ_WRITE_SAFE = 2;
const PARTITION_LOSS_POLICY_READ_WRITE_ALL = 3;
const PARTITION_LOSS_POLICY_IGNORE = 4;
/** @} */ // end of PartitionLossPolicy
/** @name RebalanceMode
* @anchor RebalanceMode
* @{
*/
const REABALANCE_MODE_SYNC = 0;
const REABALANCE_MODE_ASYNC = 1;
const REABALANCE_MODE_NONE = 2;
/** @} */ // end of RebalanceMode
/** @name WriteSynchronizationMode
* @anchor WriteSynchronizationMode
* @{
*/
const WRITE_SYNC_MODE_FULL_SYNC = 0;
const WRITE_SYNC_MODE_FULL_ASYNC = 1;
const WRITE_SYNC_MODE_PRIMARY_SYNC = 2;
/** @} */ // end of WriteSynchronizationMode
private $properties;
private static $propInfo;
/**
* Public CacheConfiguration constructor.
*/
public function __construct()
{
$this->properties = [];
}
/**
*
*
* @param string $name
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*/
public function setName(string $name): CacheConfiguration
{
$this->properties[self::PROP_NAME] = $name;
return $this;
}
/**
*
*
* @return string|null
*/
public function getName(): ?string
{
return $this->getProperty(self::PROP_NAME);
}
/**
*
*
* @param int $atomicityMode one of @ref AtomicityMode constants.
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*
* @throws ClientException if error.
*/
public function setAtomicityMode(int $atomicityMode): CacheConfiguration
{
ArgumentChecker::hasValueFrom(
$atomicityMode, 'atomicityMode', false, [self::ATOMICITY_MODE_TRANSACTIONAL, self::ATOMICITY_MODE_ATOMIC]);
$this->properties[self::PROP_ATOMICITY_MODE] = $atomicityMode;
return $this;
}
/**
*
*
* @return int|null
*/
public function getAtomicityMode(): ?int
{
return $this->getProperty(self::PROP_ATOMICITY_MODE);
}
/**
*
*
* @param int $backups
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*/
public function setBackups(int $backups): CacheConfiguration
{
$this->properties[self::PROP_BACKUPS] = $backups;
return $this;
}
/**
*
*
* @return int|null
*/
public function getBackups(): ?int
{
return $this->getProperty(self::PROP_BACKUPS);
}
/**
*
*
* @param int $cacheMode one of @ref CacheMode constants.
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*
* @throws ClientException if error.
*/
public function setCacheMode(int $cacheMode): CacheConfiguration
{
ArgumentChecker::hasValueFrom(
$cacheMode,
'cacheMode',
false,
[self::CACHE_MODE_LOCAL, self::CACHE_MODE_REPLICATED, self::CACHE_MODE_PARTITIONED]);
$this->properties[self::PROP_CACHE_MODE] = $cacheMode;
return $this;
}
/**
*
*
* @return int|null
*/
public function getCacheMode(): ?int
{
return $this->getProperty(self::PROP_CACHE_MODE);
}
/**
*
*
* @param bool $copyOnRead
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*/
public function setCopyOnRead(bool $copyOnRead): CacheConfiguration
{
$this->properties[self::PROP_COPY_ON_READ] = $copyOnRead;
return $this;
}
/**
*
*
* @return bool|null
*/
public function getCopyOnRead(): ?bool
{
return $this->getProperty(self::PROP_COPY_ON_READ);
}
/**
*
*
* @param string|null $dataRegionName
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*/
public function setDataRegionName(?string $dataRegionName): CacheConfiguration
{
$this->properties[self::PROP_DATA_REGION_NAME] = $dataRegionName;
return $this;
}
/**
*
*
* @return string|null
*/
public function getDataRegionName(): ?string
{
return $this->getProperty(self::PROP_DATA_REGION_NAME);
}
/**
*
*
* @param bool $eagerTtl
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*/
public function setEagerTtl(bool $eagerTtl): CacheConfiguration
{
$this->properties[self::PROP_EAGER_TTL] = $eagerTtl;
return $this;
}
/**
*
*
* @return bool|null
*/
public function getEagerTtl(): ?bool
{
return $this->getProperty(self::PROP_EAGER_TTL);
}
/**
*
*
* @param bool $statisticsEnabled
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*/
public function setStatisticsEnabled(bool $statisticsEnabled): CacheConfiguration
{
$this->properties[self::PROP_STATISTICS_ENABLED] = $statisticsEnabled;
return $this;
}
/**
*
*
* @return bool|null
*/
public function getStatisticsEnabled(): ?bool
{
return $this->getProperty(self::PROP_STATISTICS_ENABLED);
}
/**
*
*
* @param string|null $groupName
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*/
public function setGroupName(?string $groupName): CacheConfiguration
{
$this->properties[self::PROP_GROUP_NAME] = $groupName;
return $this;
}
/**
*
*
* @return string|null
*/
public function getGroupName(): ?string
{
return $this->getProperty(self::PROP_GROUP_NAME);
}
/**
*
*
* @param float $lockTimeout
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*/
public function setDefaultLockTimeout(float $lockTimeout): CacheConfiguration
{
$this->properties[self::PROP_DEFAULT_LOCK_TIMEOUT] = $lockTimeout;
return $this;
}
/**
*
*
* @return float|null
*/
public function getDefaultLockTimeout(): ?float
{
return $this->getProperty(self::PROP_DEFAULT_LOCK_TIMEOUT);
}
/**
*
*
* @param int $maxConcurrentAsyncOperations
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*/
public function setMaxConcurrentAsyncOperations(int $maxConcurrentAsyncOperations): CacheConfiguration
{
$this->properties[self::PROP_MAX_CONCURRENT_ASYNC_OPS] = $maxConcurrentAsyncOperations;
return $this;
}
/**
*
*
* @return int|null
*/
public function getMaxConcurrentAsyncOperations(): ?int
{
return $this->getProperty(self::PROP_MAX_CONCURRENT_ASYNC_OPS);
}
/**
*
*
* @param int $maxQueryIterators
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*/
public function setMaxQueryIterators(int $maxQueryIterators): CacheConfiguration
{
$this->properties[self::PROP_MAX_QUERY_ITERATORS] = $maxQueryIterators;
return $this;
}
/**
*
*
* @return int|null
*/
public function getMaxQueryIterators(): ?int
{
return $this->getProperty(self::PROP_MAX_QUERY_ITERATORS);
}
/**
*
*
* @param bool $isOnheapCacheEnabled
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*/
public function setIsOnheapCacheEnabled(bool $isOnheapCacheEnabled): CacheConfiguration
{
$this->properties[self::PROP_IS_ONHEAP_CACHE_ENABLED] = $isOnheapCacheEnabled;
return $this;
}
/**
*
*
* @return bool|null
*/
public function getIsOnheapCacheEnabled(): ?bool
{
return $this->getProperty(self::PROP_IS_ONHEAP_CACHE_ENABLED);
}
/**
*
*
* @param int $partitionLossPolicy one of @ref PartitionLossPolicy constants.
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*
* @throws ClientException if error.
*/
public function setPartitionLossPolicy(int $partitionLossPolicy): CacheConfiguration
{
ArgumentChecker::hasValueFrom(
$partitionLossPolicy,
'partitionLossPolicy',
false,
[
self::PARTITION_LOSS_POLICY_READ_ONLY_SAFE,
self::PARTITION_LOSS_POLICY_READ_ONLY_ALL,
self::PARTITION_LOSS_POLICY_READ_WRITE_SAFE,
self::PARTITION_LOSS_POLICY_READ_WRITE_ALL,
self::PARTITION_LOSS_POLICY_IGNORE
]);
$this->properties[self::PROP_PARTITION_LOSS_POLICY] = $partitionLossPolicy;
return $this;
}
/**
*
*
* @return int|null
*/
public function getPartitionLossPolicy(): ?int
{
return $this->getProperty(self::PROP_PARTITION_LOSS_POLICY);
}
/**
*
*
* @param int $queryDetailMetricsSize
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*/
public function setQueryDetailMetricsSize(int $queryDetailMetricsSize): CacheConfiguration
{
$this->properties[self::PROP_QUERY_DETAIL_METRICS_SIZE] = $queryDetailMetricsSize;
return $this;
}
/**
*
*
* @return int|null
*/
public function getQueryDetailMetricsSize(): ?int
{
return $this->getProperty(self::PROP_QUERY_DETAIL_METRICS_SIZE);
}
/**
*
*
* @param int $queryParallelism
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*/
public function setQueryParallelism(int $queryParallelism): CacheConfiguration
{
$this->properties[self::PROP_QUERY_PARALLELISM] = $queryParallelism;
return $this;
}
/**
*
*
* @return int|null
*/
public function getQueryParallelism(): ?int
{
return $this->getProperty(self::PROP_QUERY_PARALLELISM);
}
/**
*
*
* @param bool $readFromBackup
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*/
public function setReadFromBackup(bool $readFromBackup): CacheConfiguration
{
$this->properties[self::PROP_READ_FROM_BACKUP] = $readFromBackup;
return $this;
}
/**
*
*
* @return bool|null
*/
public function getReadFromBackup(): ?bool
{
return $this->getProperty(self::PROP_READ_FROM_BACKUP);
}
/**
*
*
* @param int $rebalanceBatchSize
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*/
public function setRebalanceBatchSize(int $rebalanceBatchSize): CacheConfiguration
{
$this->properties[self::PROP_REBALANCE_BATCH_SIZE] = $rebalanceBatchSize;
return $this;
}
/**
*
*
* @return int|null
*/
public function getRebalanceBatchSize(): ?int
{
return $this->getProperty(self::PROP_REBALANCE_BATCH_SIZE);
}
/**
*
*
* @param float $rebalanceBatchesPrefetchCount
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*/
public function setRebalanceBatchesPrefetchCount(float $rebalanceBatchesPrefetchCount): CacheConfiguration
{
$this->properties[self::PROP_REBALANCE_BATCHES_PREFETCH_COUNT] = $rebalanceBatchesPrefetchCount;
return $this;
}
/**
*
*
* @return float|null
*/
public function getRebalanceBatchesPrefetchCount(): ?float
{
return $this->getProperty(self::PROP_REBALANCE_BATCHES_PREFETCH_COUNT);
}
/**
*
*
* @param float $rebalanceDelay
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*/
public function setRebalanceDelay(float $rebalanceDelay): CacheConfiguration
{
$this->properties[self::PROP_REBALANCE_DELAY] = $rebalanceDelay;
return $this;
}
/**
*
*
* @return float|null
*/
public function getRebalanceDelay(): ?float
{
return $this->getProperty(self::PROP_REBALANCE_DELAY);
}
/**
*
*
* @param int $rebalanceMode one of @ref RebalanceMode constants.
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*
* @throws ClientException if error.
*/
public function setRebalanceMode(int $rebalanceMode): CacheConfiguration
{
ArgumentChecker::hasValueFrom(
$rebalanceMode,
'rebalanceMode',
false,
[self::REABALANCE_MODE_SYNC, self::REABALANCE_MODE_ASYNC, self::REABALANCE_MODE_NONE]);
$this->properties[self::PROP_REBALANCE_MODE] = $rebalanceMode;
return $this;
}
/**
*
*
* @return int|null
*/
public function getRebalanceMode(): ?int
{
return $this->getProperty(self::PROP_REBALANCE_MODE);
}
/**
*
*
* @param int $rebalanceOrder
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*/
public function setRebalanceOrder(int $rebalanceOrder): CacheConfiguration
{
$this->properties[self::PROP_REBALANCE_ORDER] = $rebalanceOrder;
return $this;
}
/**
*
*
* @return int|null
*/
public function getRebalanceOrder(): ?int
{
return $this->getProperty(self::PROP_REBALANCE_ORDER);
}
/**
*
*
* @param float $rebalanceThrottle
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*/
public function setRebalanceThrottle(float $rebalanceThrottle): CacheConfiguration
{
$this->properties[self::PROP_REBALANCE_THROTTLE] = $rebalanceThrottle;
return $this;
}
/**
*
*
* @return float|null
*/
public function getRebalanceThrottle(): ?float
{
return $this->getProperty(self::PROP_REBALANCE_THROTTLE);
}
/**
*
*
* @param float $rebalanceTimeout
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*/
public function setRebalanceTimeout(float $rebalanceTimeout): CacheConfiguration
{
$this->properties[self::PROP_REBALANCE_TIMEOUT] = $rebalanceTimeout;
return $this;
}
/**
*
*
* @return float|null
*/
public function getRebalanceTimeout(): ?float
{
return $this->getProperty(self::PROP_REBALANCE_TIMEOUT);
}
/**
*
*
* @param bool $sqlEscapeAll
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*/
public function setSqlEscapeAll(bool $sqlEscapeAll): CacheConfiguration
{
$this->properties[self::PROP_SQL_ESCAPE_ALL] = $sqlEscapeAll;
return $this;
}
/**
*
*
* @return bool|null
*/
public function getSqlEscapeAll(): ?bool
{
return $this->getProperty(self::PROP_SQL_ESCAPE_ALL);
}
/**
*
*
* @param int $sqlIndexInlineMaxSize
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*/
public function setSqlIndexInlineMaxSize(int $sqlIndexInlineMaxSize): CacheConfiguration
{
$this->properties[self::PROP_SQL_INDEX_INLINE_MAX_SIZE] = $sqlIndexInlineMaxSize;
return $this;
}
/**
*
*
* @return int|null
*/
public function getSqlIndexInlineMaxSize(): ?int
{
return $this->getProperty(self::PROP_SQL_INDEX_INLINE_MAX_SIZE);
}
/**
*
*
* @param string|null $sqlSchema
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*/
public function setSqlSchema(?string $sqlSchema): CacheConfiguration
{
$this->properties[self::PROP_SQL_SCHEMA] = $sqlSchema;
return $this;
}
/**
*
*
* @return string|null
*/
public function getSqlSchema(): ?string
{
return $this->getProperty(self::PROP_SQL_SCHEMA);
}
/**
*
*
* @param int $writeSynchronizationMode one of @ref WriteSynchronizationMode constants.
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*
* @throws ClientException if error.
*/
public function setWriteSynchronizationMode(int $writeSynchronizationMode): CacheConfiguration
{
ArgumentChecker::hasValueFrom(
$writeSynchronizationMode,
'writeSynchronizationMode',
false,
[self::WRITE_SYNC_MODE_FULL_SYNC, self::WRITE_SYNC_MODE_FULL_ASYNC, self::WRITE_SYNC_MODE_PRIMARY_SYNC]);
$this->properties[self::PROP_WRITE_SYNCHRONIZATION_MODE] = $writeSynchronizationMode;
return $this;
}
/**
*
*
* @return int|null
*/
public function getWriteSynchronizationMode(): ?int
{
return $this->getProperty(self::PROP_WRITE_SYNCHRONIZATION_MODE);
}
/**
*
*
* @param CacheKeyConfiguration ...$keyConfigurations
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*/
public function setKeyConfigurations(CacheKeyConfiguration ...$keyConfigurations): CacheConfiguration
{
$this->properties[self::PROP_CACHE_KEY_CONFIGURATION] = $keyConfigurations;
return $this;
}
/**
*
*
* @return CacheKeyConfiguration[]|null
*/
public function getKeyConfigurations(): ?array
{
return $this->getProperty(self::PROP_CACHE_KEY_CONFIGURATION);
}
/**
*
*
* @param QueryEntity ...$queryEntities
*
* @return CacheConfiguration the same instance of the CacheConfiguration.
*/
public function setQueryEntities(QueryEntity ...$queryEntities): CacheConfiguration
{
$this->properties[self::PROP_QUERY_ENTITY] = $queryEntities;
return $this;
}
/**
*
*
* @return QueryEntity[]|null
*/
public function getQueryEntities(): ?array
{
return $this->getProperty(self::PROP_QUERY_ENTITY);
}
private function getProperty(int $prop)
{
if (array_key_exists($prop, $this->properties)) {
return $this->properties[$prop];
}
return null;
}
static function init(): void
{
self::$propInfo = array(
self::PROP_NAME => ObjectType::STRING,
self::PROP_CACHE_MODE => ObjectType::INTEGER,
self::PROP_ATOMICITY_MODE => ObjectType::INTEGER,
self::PROP_BACKUPS => ObjectType::INTEGER,
self::PROP_WRITE_SYNCHRONIZATION_MODE => ObjectType::INTEGER,
self::PROP_COPY_ON_READ => ObjectType::BOOLEAN,
self::PROP_READ_FROM_BACKUP => ObjectType::BOOLEAN,
self::PROP_DATA_REGION_NAME => ObjectType::STRING,
self::PROP_IS_ONHEAP_CACHE_ENABLED => ObjectType::BOOLEAN,
self::PROP_QUERY_ENTITY => new ObjectArrayType((new ComplexObjectType())->setPhpClassName(QueryEntity::class)),
self::PROP_QUERY_PARALLELISM => ObjectType::INTEGER,
self::PROP_QUERY_DETAIL_METRICS_SIZE => ObjectType::INTEGER,
self::PROP_SQL_SCHEMA => ObjectType::STRING,
self::PROP_SQL_INDEX_INLINE_MAX_SIZE => ObjectType::INTEGER,
self::PROP_SQL_ESCAPE_ALL => ObjectType::BOOLEAN,
self::PROP_MAX_QUERY_ITERATORS => ObjectType::INTEGER,
self::PROP_REBALANCE_MODE => ObjectType::INTEGER,
self::PROP_REBALANCE_DELAY => ObjectType::LONG,
self::PROP_REBALANCE_TIMEOUT => ObjectType::LONG,
self::PROP_REBALANCE_BATCH_SIZE => ObjectType::INTEGER,
self::PROP_REBALANCE_BATCHES_PREFETCH_COUNT => ObjectType::LONG,
self::PROP_REBALANCE_ORDER => ObjectType::INTEGER,
self::PROP_REBALANCE_THROTTLE => ObjectType::LONG,
self::PROP_GROUP_NAME => ObjectType::STRING,
self::PROP_CACHE_KEY_CONFIGURATION => new ObjectArrayType((new ComplexObjectType())->setPhpClassName(CacheKeyConfiguration::class)),
self::PROP_DEFAULT_LOCK_TIMEOUT => ObjectType::LONG,
self::PROP_MAX_CONCURRENT_ASYNC_OPS => ObjectType::INTEGER,
self::PROP_PARTITION_LOSS_POLICY => ObjectType::INTEGER,
self::PROP_EAGER_TTL => ObjectType::BOOLEAN,
self::PROP_STATISTICS_ENABLED => ObjectType::BOOLEAN
);
}
// This is not the public API method, is not intended for usage by an application.
public function write(BinaryCommunicator $communicator, MessageBuffer $buffer, string $name): void
{
$this->setName($name);
$startPos = $buffer->getPosition();
$buffer->setPosition($startPos +
BinaryUtils::getSize(ObjectType::INTEGER) +
BinaryUtils::getSize(ObjectType::SHORT));
foreach ($this->properties as $propertyCode => $property) {
$this->writeProperty($communicator, $buffer, $propertyCode, $property);
}
$length = $buffer->getPosition() - $startPos;
$buffer->setPosition($startPos);
$buffer->writeInteger($length);
$buffer->writeShort(count($this->properties));
}
private function writeProperty(BinaryCommunicator $communicator, MessageBuffer $buffer, int $propertyCode, $property): void
{
$buffer->writeShort($propertyCode);
$propertyType = self::$propInfo[$propertyCode];
switch (BinaryUtils::getTypeCode($propertyType)) {
case ObjectType::INTEGER:
case ObjectType::LONG:
case ObjectType::BOOLEAN:
$communicator->writeObject($buffer, $property, $propertyType, false);
return;
case ObjectType::STRING:
$communicator->writeObject($buffer, $property, $propertyType);
return;
case ObjectType::OBJECT_ARRAY:
$length = $property ? count($property) : 0;
$buffer->writeInteger($length);
foreach ($property as $prop) {
$prop->write($communicator, $buffer);
}
return;
default:
BinaryUtils::internalError();
}
}
// This is not the public API method, is not intended for usage by an application.
public function read(BinaryCommunicator $communicator, MessageBuffer $buffer): void
{
//length
$buffer->readInteger();
$this->readProperty($communicator, $buffer, self::PROP_ATOMICITY_MODE);
$this->readProperty($communicator, $buffer, self::PROP_BACKUPS);
$this->readProperty($communicator, $buffer, self::PROP_CACHE_MODE);
$this->readProperty($communicator, $buffer, self::PROP_COPY_ON_READ);
$this->readProperty($communicator, $buffer, self::PROP_DATA_REGION_NAME);
$this->readProperty($communicator, $buffer, self::PROP_EAGER_TTL);
$this->readProperty($communicator, $buffer, self::PROP_STATISTICS_ENABLED);
$this->readProperty($communicator, $buffer, self::PROP_GROUP_NAME);
$this->readProperty($communicator, $buffer, self::PROP_DEFAULT_LOCK_TIMEOUT);
$this->readProperty($communicator, $buffer, self::PROP_MAX_CONCURRENT_ASYNC_OPS);
$this->readProperty($communicator, $buffer, self::PROP_MAX_QUERY_ITERATORS);
$this->readProperty($communicator, $buffer, self::PROP_NAME);
$this->readProperty($communicator, $buffer, self::PROP_IS_ONHEAP_CACHE_ENABLED);
$this->readProperty($communicator, $buffer, self::PROP_PARTITION_LOSS_POLICY);
$this->readProperty($communicator, $buffer, self::PROP_QUERY_DETAIL_METRICS_SIZE);
$this->readProperty($communicator, $buffer, self::PROP_QUERY_PARALLELISM);
$this->readProperty($communicator, $buffer, self::PROP_READ_FROM_BACKUP);
$this->readProperty($communicator, $buffer, self::PROP_REBALANCE_BATCH_SIZE);
$this->readProperty($communicator, $buffer, self::PROP_REBALANCE_BATCHES_PREFETCH_COUNT);
$this->readProperty($communicator, $buffer, self::PROP_REBALANCE_DELAY);
$this->readProperty($communicator, $buffer, self::PROP_REBALANCE_MODE);
$this->readProperty($communicator, $buffer, self::PROP_REBALANCE_ORDER);
$this->readProperty($communicator, $buffer, self::PROP_REBALANCE_THROTTLE);
$this->readProperty($communicator, $buffer, self::PROP_REBALANCE_TIMEOUT);
$this->readProperty($communicator, $buffer, self::PROP_SQL_ESCAPE_ALL);
$this->readProperty($communicator, $buffer, self::PROP_SQL_INDEX_INLINE_MAX_SIZE);
$this->readProperty($communicator, $buffer, self::PROP_SQL_SCHEMA);
$this->readProperty($communicator, $buffer, self::PROP_WRITE_SYNCHRONIZATION_MODE);
$this->readProperty($communicator, $buffer, self::PROP_CACHE_KEY_CONFIGURATION);
$this->readProperty($communicator, $buffer, self::PROP_QUERY_ENTITY);
}
private function readProperty(BinaryCommunicator $communicator, MessageBuffer $buffer, int $propertyCode): void
{
$propertyType = self::$propInfo[$propertyCode];
switch (BinaryUtils::getTypeCode($propertyType)) {
case ObjectType::INTEGER:
case ObjectType::LONG:
case ObjectType::BOOLEAN:
$this->properties[$propertyCode] = $communicator->readTypedObject($buffer, $propertyType);
return;
case ObjectType::STRING:
$this->properties[$propertyCode] = $communicator->readObject($buffer, $propertyType);
return;
case ObjectType::OBJECT_ARRAY:
$length = $buffer->readInteger();
$properties = [];
for ($i = 0; $i < $length; $i++) {
$propClassName = $propertyType->getElementType()->getPhpClassName();
$property = new $propClassName();
$property->read($communicator, $buffer);
array_push($properties, $property);
}
$this->properties[$propertyCode] = $properties;
return;
default:
BinaryUtils::internalError();
}
}
}
CacheConfiguration::init();