blob: e94db5f8d154fb8fa59f42c6d7e9a42fb6779009 [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.
import ctypes
from .prop_codes import *
from .cache_config import (
CacheMode, CacheAtomicityMode, PartitionLossPolicy, RebalanceMode,
WriteSynchronizationMode, QueryEntities, CacheKeyConfiguration,
)
from .primitive import *
from .standard import *
__all__ = [
'PropName', 'PropCacheMode', 'PropCacheAtomicityMode', 'PropBackupsNumber',
'PropWriteSynchronizationMode', 'PropCopyOnRead', 'PropReadFromBackup',
'PropDataRegionName', 'PropIsOnheapCacheEnabled', 'PropQueryEntities',
'PropQueryParallelism', 'PropQueryDetailMetricSize', 'PropSQLSchema',
'PropSQLIndexInlineMaxSize', 'PropSqlEscapeAll', 'PropMaxQueryIterators',
'PropRebalanceMode', 'PropRebalanceDelay', 'PropRebalanceTimeout',
'PropRebalanceBatchSize', 'PropRebalanceBatchesPrefetchCount',
'PropRebalanceOrder', 'PropRebalanceThrottle', 'PropGroupName',
'PropCacheKeyConfiguration', 'PropDefaultLockTimeout',
'PropMaxConcurrentAsyncOperation', 'PropPartitionLossPolicy',
'PropEagerTTL', 'PropStatisticsEnabled', 'prop_map', 'AnyProperty',
]
def prop_map(code: int):
return {
PROP_NAME: PropName,
PROP_CACHE_MODE: PropCacheMode,
PROP_CACHE_ATOMICITY_MODE: PropCacheAtomicityMode,
PROP_BACKUPS_NUMBER: PropBackupsNumber,
PROP_WRITE_SYNCHRONIZATION_MODE: PropWriteSynchronizationMode,
PROP_COPY_ON_READ: PropCopyOnRead,
PROP_READ_FROM_BACKUP: PropReadFromBackup,
PROP_DATA_REGION_NAME: PropDataRegionName,
PROP_IS_ONHEAP_CACHE_ENABLED: PropIsOnheapCacheEnabled,
PROP_QUERY_ENTITIES: PropQueryEntities,
PROP_QUERY_PARALLELISM: PropQueryParallelism,
PROP_QUERY_DETAIL_METRIC_SIZE: PropQueryDetailMetricSize,
PROP_SQL_SCHEMA: PropSQLSchema,
PROP_SQL_INDEX_INLINE_MAX_SIZE: PropSQLIndexInlineMaxSize,
PROP_SQL_ESCAPE_ALL: PropSqlEscapeAll,
PROP_MAX_QUERY_ITERATORS: PropMaxQueryIterators,
PROP_REBALANCE_MODE: PropRebalanceMode,
PROP_REBALANCE_DELAY: PropRebalanceDelay,
PROP_REBALANCE_TIMEOUT: PropRebalanceTimeout,
PROP_REBALANCE_BATCH_SIZE: PropRebalanceBatchSize,
PROP_REBALANCE_BATCHES_PREFETCH_COUNT: PropRebalanceBatchesPrefetchCount,
PROP_REBALANCE_ORDER: PropRebalanceOrder,
PROP_REBALANCE_THROTTLE: PropRebalanceThrottle,
PROP_GROUP_NAME: PropGroupName,
PROP_CACHE_KEY_CONFIGURATION: PropCacheKeyConfiguration,
PROP_DEFAULT_LOCK_TIMEOUT: PropDefaultLockTimeout,
PROP_MAX_CONCURRENT_ASYNC_OPERATIONS: PropMaxConcurrentAsyncOperation,
PROP_PARTITION_LOSS_POLICY: PartitionLossPolicy,
PROP_EAGER_TTL: PropEagerTTL,
PROP_STATISTICS_ENABLED: PropStatisticsEnabled,
}[code]
class PropBase:
prop_code = None
prop_data_class = None
@classmethod
def build_header(cls):
return type(
cls.__name__+'Header',
(ctypes.LittleEndianStructure,),
{
'_pack_': 1,
'_fields_': [
('prop_code', ctypes.c_short),
],
}
)
@classmethod
def parse(cls, connection: 'Connection'):
header_class = cls.build_header()
header_buffer = connection.recv(ctypes.sizeof(header_class))
data_class, data_buffer = cls.prop_data_class.parse(connection)
prop_class = type(
cls.__name__,
(header_class,),
{
'_pack_': 1,
'_fields_': [
('data', data_class),
],
}
)
return prop_class, header_buffer + data_buffer
@classmethod
def to_python(cls, ctype_object, *args, **kwargs):
return cls.prop_data_class.to_python(
ctype_object.data, *args, **kwargs
)
@classmethod
def from_python(cls, value):
header_class = cls.build_header()
header = header_class()
header.prop_code = cls.prop_code
return bytes(header) + cls.prop_data_class.from_python(value)
class PropName(PropBase):
prop_code = PROP_NAME
prop_data_class = String
class PropCacheMode(PropBase):
prop_code = PROP_CACHE_MODE
prop_data_class = CacheMode
class PropCacheAtomicityMode(PropBase):
prop_code = PROP_CACHE_ATOMICITY_MODE
prop_data_class = CacheAtomicityMode
class PropBackupsNumber(PropBase):
prop_code = PROP_BACKUPS_NUMBER
prop_data_class = Int
class PropWriteSynchronizationMode(PropBase):
prop_code = PROP_WRITE_SYNCHRONIZATION_MODE
prop_data_class = WriteSynchronizationMode
class PropCopyOnRead(PropBase):
prop_code = PROP_COPY_ON_READ
prop_data_class = Bool
class PropReadFromBackup(PropBase):
prop_code = PROP_READ_FROM_BACKUP
prop_data_class = Bool
class PropDataRegionName(PropBase):
prop_code = PROP_DATA_REGION_NAME
prop_data_class = String
class PropIsOnheapCacheEnabled(PropBase):
prop_code = PROP_IS_ONHEAP_CACHE_ENABLED
prop_data_class = Bool
class PropQueryEntities(PropBase):
prop_code = PROP_QUERY_ENTITIES
prop_data_class = QueryEntities
class PropQueryParallelism(PropBase):
prop_code = PROP_QUERY_PARALLELISM
prop_data_class = Int
class PropQueryDetailMetricSize(PropBase):
prop_code = PROP_QUERY_DETAIL_METRIC_SIZE
prop_data_class = Int
class PropSQLSchema(PropBase):
prop_code = PROP_SQL_SCHEMA
prop_data_class = String
class PropSQLIndexInlineMaxSize(PropBase):
prop_code = PROP_SQL_INDEX_INLINE_MAX_SIZE
prop_data_class = Int
class PropSqlEscapeAll(PropBase):
prop_code = PROP_SQL_ESCAPE_ALL
prop_data_class = Bool
class PropMaxQueryIterators(PropBase):
prop_code = PROP_MAX_QUERY_ITERATORS
prop_data_class = Int
class PropRebalanceMode(PropBase):
prop_code = PROP_REBALANCE_MODE
prop_data_class = RebalanceMode
class PropRebalanceDelay(PropBase):
prop_code = PROP_REBALANCE_DELAY
prop_data_class = Long
class PropRebalanceTimeout(PropBase):
prop_code = PROP_REBALANCE_TIMEOUT
prop_data_class = Long
class PropRebalanceBatchSize(PropBase):
prop_code = PROP_REBALANCE_BATCH_SIZE
prop_data_class = Int
class PropRebalanceBatchesPrefetchCount(PropBase):
prop_code = PROP_REBALANCE_BATCHES_PREFETCH_COUNT
prop_data_class = Long
class PropRebalanceOrder(PropBase):
prop_code = PROP_REBALANCE_ORDER
prop_data_class = Int
class PropRebalanceThrottle(PropBase):
prop_code = PROP_REBALANCE_THROTTLE
prop_data_class = Long
class PropGroupName(PropBase):
prop_code = PROP_GROUP_NAME
prop_data_class = String
class PropCacheKeyConfiguration(PropBase):
prop_code = PROP_CACHE_KEY_CONFIGURATION
prop_data_class = CacheKeyConfiguration
class PropDefaultLockTimeout(PropBase):
prop_code = PROP_DEFAULT_LOCK_TIMEOUT
prop_data_class = Long
class PropMaxConcurrentAsyncOperation(PropBase):
prop_code = PROP_MAX_CONCURRENT_ASYNC_OPERATIONS
prop_data_class = Int
class PropPartitionLossPolicy(PropBase):
prop_code = PROP_PARTITION_LOSS_POLICY
prop_data_class = PartitionLossPolicy
class PropEagerTTL(PropBase):
prop_code = PROP_EAGER_TTL
prop_data_class = Bool
class PropStatisticsEnabled(PropBase):
prop_code = PROP_STATISTICS_ENABLED
prop_data_class = Bool
class AnyProperty(PropBase):
@classmethod
def from_python(cls, value):
raise Exception(
'You must choose a certain type '
'for your cache configuration property'
)
@classmethod
def to_python(cls, ctype_object, *args, **kwargs):
prop_data_class = prop_map(ctype_object.prop_code)
return prop_data_class.to_python(ctype_object.data, *args, **kwargs)