blob: 769a282fe11eccdbd7976a2190aa22bfdf8f5595 [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.
*/
package org.apache.ignite.internal.visor.cache;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.List;
import org.apache.ignite.cache.CacheAtomicityMode;
import org.apache.ignite.cache.CacheMode;
import org.apache.ignite.cache.CacheWriteSynchronizationMode;
import org.apache.ignite.cache.PartitionLossPolicy;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.DataRegionConfiguration;
import org.apache.ignite.configuration.DiskPageCompression;
import org.apache.ignite.internal.IgniteEx;
import org.apache.ignite.internal.util.typedef.internal.S;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.internal.visor.VisorDataTransferObject;
import org.apache.ignite.internal.visor.query.VisorQueryConfiguration;
import org.apache.ignite.internal.visor.query.VisorQueryEntity;
import org.apache.ignite.lang.IgniteUuid;
import org.jetbrains.annotations.Nullable;
import static org.apache.ignite.internal.visor.util.VisorTaskUtils.compactClass;
import static org.apache.ignite.internal.visor.util.VisorTaskUtils.compactIterable;
/**
* Data transfer object for cache configuration properties.
*/
public class VisorCacheConfiguration extends VisorDataTransferObject {
/** */
private static final long serialVersionUID = 0L;
/** Cache name. */
private String name;
/** Cache group name. */
private String grpName;
/** Cache mode. */
private CacheMode mode;
/** Cache atomicity mode. */
private CacheAtomicityMode atomicityMode;
/** Eager ttl flag. */
private boolean eagerTtl;
/** Write synchronization mode. */
private CacheWriteSynchronizationMode writeSynchronizationMode;
/** Invalidate. */
private boolean invalidate;
/** Max concurrent async operations. */
private int maxConcurrentAsyncOps;
/** Cache interceptor. */
private String interceptor;
/** Default lock acquisition timeout. */
private long dfltLockTimeout;
/** Cache affinity config. */
private VisorCacheAffinityConfiguration affinityCfg;
/** Preload config. */
private VisorCacheRebalanceConfiguration rebalanceCfg;
/** Eviction config. */
private VisorCacheEvictionConfiguration evictCfg;
/** Near cache config. */
private VisorCacheNearConfiguration nearCfg;
/** Store config. */
private VisorCacheStoreConfiguration storeCfg;
/** Collection of query entities. */
private List<VisorQueryEntity> qryEntities;
/** Collection of type metadata. */
private List<VisorCacheJdbcType> jdbcTypes;
/** Whether statistics collection is enabled. */
private boolean statisticsEnabled;
/** Whether management is enabled. */
private boolean mgmtEnabled;
/** Class name of cache loader factory. */
private String ldrFactory;
/** Class name of cache writer factory. */
private String writerFactory;
/** Class name of expiry policy factory. */
private String expiryPlcFactory;
/** Query configuration. */
private VisorQueryConfiguration qryCfg;
/** System cache flag. */
private boolean sys;
/** Keep binary in store flag. */
private boolean storeKeepBinary;
/** On-heap cache enabled flag. */
private boolean onheapCache;
/** Partition loss policy. */
private PartitionLossPolicy partLossPlc;
/** Query parallelism. */
private int qryParallelism;
/** Copy on read flag. */
private boolean cpOnRead;
/** Eviction filter. */
private String evictFilter;
/** Listener configurations. */
private String lsnrConfigurations;
/** */
private boolean loadPrevVal;
/** Name of {@link DataRegionConfiguration} for this cache */
private String dataRegName;
/** Maximum inline size for sql indexes. */
private int sqlIdxMaxInlineSize;
/** Node filter specifying nodes on which this cache should be deployed. */
private String nodeFilter;
/** */
private int qryDetailMetricsSz;
/** Flag indicating whether data can be read from backup. */
private boolean readFromBackup;
/** Name of class implementing GridCacheTmLookup. */
private String tmLookupClsName;
/** Cache topology validator. */
private String topValidator;
/** Dynamic deployment ID. */
private IgniteUuid dynamicDeploymentId;
/** Disk page compression algorithm. */
private DiskPageCompression diskPageCompression;
/** Algorithm specific disk page compression level. */
private Integer diskPageCompressionLevel;
/**
* Default constructor.
*/
public VisorCacheConfiguration() {
// No-op.
}
/**
* Create data transfer object for cache configuration properties.
*
* @param ignite Grid.
* @param ccfg Cache configuration.
* @param dynamicDeploymentId Dynamic deployment ID.
*/
public VisorCacheConfiguration(IgniteEx ignite, CacheConfiguration ccfg, IgniteUuid dynamicDeploymentId) {
name = ccfg.getName();
grpName = ccfg.getGroupName();
this.dynamicDeploymentId = dynamicDeploymentId;
mode = ccfg.getCacheMode();
atomicityMode = ccfg.getAtomicityMode();
eagerTtl = ccfg.isEagerTtl();
writeSynchronizationMode = ccfg.getWriteSynchronizationMode();
invalidate = ccfg.isInvalidate();
maxConcurrentAsyncOps = ccfg.getMaxConcurrentAsyncOperations();
interceptor = compactClass(ccfg.getInterceptor());
dfltLockTimeout = ccfg.getDefaultLockTimeout();
qryEntities = VisorQueryEntity.list(ccfg.getQueryEntities());
jdbcTypes = VisorCacheJdbcType.list(ccfg.getCacheStoreFactory());
statisticsEnabled = ccfg.isStatisticsEnabled();
mgmtEnabled = ccfg.isManagementEnabled();
ldrFactory = compactClass(ccfg.getCacheLoaderFactory());
writerFactory = compactClass(ccfg.getCacheWriterFactory());
expiryPlcFactory = compactClass(ccfg.getExpiryPolicyFactory());
sys = ignite.context().cache().systemCache(ccfg.getName());
storeKeepBinary = ccfg.isStoreKeepBinary();
onheapCache = ccfg.isOnheapCacheEnabled();
partLossPlc = ccfg.getPartitionLossPolicy();
qryParallelism = ccfg.getQueryParallelism();
affinityCfg = new VisorCacheAffinityConfiguration(ccfg);
rebalanceCfg = new VisorCacheRebalanceConfiguration(ccfg);
evictCfg = new VisorCacheEvictionConfiguration(ccfg);
nearCfg = new VisorCacheNearConfiguration(ccfg);
storeCfg = new VisorCacheStoreConfiguration(ignite, ccfg);
qryCfg = new VisorQueryConfiguration(ccfg);
cpOnRead = ccfg.isCopyOnRead();
evictFilter = compactClass(ccfg.getEvictionFilter());
lsnrConfigurations = compactIterable(ccfg.getCacheEntryListenerConfigurations());
loadPrevVal = ccfg.isLoadPreviousValue();
dataRegName = ccfg.getDataRegionName();
sqlIdxMaxInlineSize = ccfg.getSqlIndexMaxInlineSize();
nodeFilter = compactClass(ccfg.getNodeFilter());
qryDetailMetricsSz = ccfg.getQueryDetailMetricsSize();
readFromBackup = ccfg.isReadFromBackup();
tmLookupClsName = ccfg.getTransactionManagerLookupClassName();
topValidator = compactClass(ccfg.getTopologyValidator());
diskPageCompression = ccfg.getDiskPageCompression();
diskPageCompressionLevel = ccfg.getDiskPageCompressionLevel();
}
/**
* @return Cache name.
*/
@Nullable public String getName() {
return name;
}
/**
* @return Cache group name.
*/
@Nullable public String getGroupName() {
return grpName;
}
/**
* @return Cache mode.
*/
public CacheMode getMode() {
return mode;
}
/**
* @return Cache atomicity mode.
*/
public CacheAtomicityMode getAtomicityMode() {
return atomicityMode;
}
/**
* @return Eager ttl flag
*/
public boolean eagerTtl() {
return eagerTtl;
}
/**
* @return Write synchronization mode.
*/
public CacheWriteSynchronizationMode getWriteSynchronizationMode() {
return writeSynchronizationMode;
}
/**
* @return Invalidate.
*/
public boolean isInvalidate() {
return invalidate;
}
/**
* @return Max concurrent async operations
*/
public int getMaxConcurrentAsyncOperations() {
return maxConcurrentAsyncOps;
}
/**
* @return Cache interceptor.
*/
@Nullable public String getInterceptor() {
return interceptor;
}
/**
* @return Gets default lock acquisition timeout.
*/
public long getDefaultLockTimeout() {
return dfltLockTimeout;
}
/**
* @return Collection of type metadata.
*/
public List<VisorCacheJdbcType> getJdbcTypes() {
return jdbcTypes;
}
/**
* @return Near cache config.
*/
public VisorCacheNearConfiguration getNearConfiguration() {
return nearCfg;
}
/**
* @return Eager ttl flag.
*/
public boolean isEagerTtl() {
return eagerTtl;
}
/**
* @return {@code true} if cache statistics collection enabled.
*/
public boolean isStatisticsEnabled() {
return statisticsEnabled;
}
/**
* @return Whether management is enabled.
*/
public boolean isManagementEnabled() {
return mgmtEnabled;
}
/**
* @return Class name of cache loader factory.
*/
public String getLoaderFactory() {
return ldrFactory;
}
/**
* @return Class name of cache writer factory.
*/
public String getWriterFactory() {
return writerFactory;
}
/**
* @return Class name of expiry policy factory.
*/
public String getExpiryPolicyFactory() {
return expiryPlcFactory;
}
/**
* @return Cache affinity config.
*/
public VisorCacheAffinityConfiguration getAffinityConfiguration() {
return affinityCfg;
}
/**
* @return Preload config.
*/
public VisorCacheRebalanceConfiguration getRebalanceConfiguration() {
return rebalanceCfg;
}
/**
* @return Eviction config.
*/
public VisorCacheEvictionConfiguration getEvictionConfiguration() {
return evictCfg;
}
/**
* @return Store config
*/
public VisorCacheStoreConfiguration getStoreConfiguration() {
return storeCfg;
}
/**
* @return Collection of query entities.
*/
public List<VisorQueryEntity> getQueryEntities() {
return qryEntities;
}
/**
* @return Collection of query entities.
*/
public VisorQueryConfiguration getQueryConfiguration() {
return qryCfg;
}
/**
* @return System cache flag.
*/
public boolean isSystem() {
return sys;
}
/**
* @return Keep binary in store flag.
*/
public Boolean isStoreKeepBinary() {
return storeKeepBinary;
}
/**
* @return On-heap cache enabled flag.
*/
public boolean isOnheapCacheEnabled() {
return onheapCache;
}
/**
* @return Partition loss policy.
*/
public PartitionLossPolicy getPartitionLossPolicy() {
return partLossPlc;
}
/**
* @return Query parallelism.
*/
public int getQueryParallelism() {
return qryParallelism;
}
/**
* @return Copy on read flag.
*/
public boolean isCopyOnRead() {
return cpOnRead;
}
/**
* @return Eviction filter or {@code null}.
*/
public String getEvictionFilter() {
return evictFilter;
}
/**
* @return Listener configurations.
*/
public String getListenerConfigurations() {
return lsnrConfigurations;
}
/**
* @return Load previous value flag.
*/
public boolean isLoadPreviousValue() {
return loadPrevVal;
}
/**
* @return {@link DataRegionConfiguration} name.
*/
@Deprecated
public String getMemoryPolicyName() {
return dataRegName;
}
/**
* @return Maximum payload size for offheap indexes.
*/
public int getSqlIndexMaxInlineSize() {
return sqlIdxMaxInlineSize;
}
/**
* @return Predicate specifying on which nodes the cache should be started.
*/
public String getNodeFilter() {
return nodeFilter;
}
/**
* @return Maximum number of query metrics that will be stored in memory.
*/
public int getQueryDetailMetricsSize() {
return qryDetailMetricsSz;
}
/**
* @return {@code true} if data can be read from backup node or {@code false} if data always should be read from
* primary node and never from backup.
*/
public boolean isReadFromBackup() {
return readFromBackup;
}
/**
* @return Transaction manager finder.
*/
@Deprecated
public String getTransactionManagerLookupClassName() {
return tmLookupClsName;
}
/**
* @return Topology validator.
*/
public String getTopologyValidator() {
return topValidator;
}
/**
* @return Cache dynamic deployment ID.
*/
public IgniteUuid getDynamicDeploymentId() {
return dynamicDeploymentId;
}
/**
* @return Disk page compression algorithm.
*/
public DiskPageCompression getDiskPageCompression() {
return diskPageCompression;
}
/**
* @return Algorithm specific disk page compression level.
*/
public Integer getDiskPageCompressionLevel() {
return diskPageCompressionLevel;
}
/** {@inheritDoc} */
@Override public byte getProtocolVersion() {
return V2;
}
/** {@inheritDoc} */
@Override protected void writeExternalData(ObjectOutput out) throws IOException {
U.writeString(out, name);
U.writeString(out, grpName);
out.writeByte(CacheMode.toCode(mode));
U.writeEnum(out, atomicityMode);
out.writeBoolean(eagerTtl);
U.writeEnum(out, writeSynchronizationMode);
out.writeBoolean(invalidate);
out.writeInt(maxConcurrentAsyncOps);
U.writeString(out, interceptor);
out.writeLong(dfltLockTimeout);
out.writeObject(affinityCfg);
out.writeObject(rebalanceCfg);
out.writeObject(evictCfg);
out.writeObject(nearCfg);
out.writeObject(storeCfg);
U.writeCollection(out, qryEntities);
U.writeCollection(out, jdbcTypes);
out.writeBoolean(statisticsEnabled);
out.writeBoolean(mgmtEnabled);
U.writeString(out, ldrFactory);
U.writeString(out, writerFactory);
U.writeString(out, expiryPlcFactory);
out.writeObject(qryCfg);
out.writeBoolean(sys);
out.writeBoolean(storeKeepBinary);
out.writeBoolean(onheapCache);
U.writeEnum(out, partLossPlc);
out.writeInt(qryParallelism);
out.writeBoolean(cpOnRead);
U.writeString(out, evictFilter);
U.writeString(out, lsnrConfigurations);
out.writeBoolean(loadPrevVal);
U.writeString(out, dataRegName);
out.writeInt(sqlIdxMaxInlineSize);
U.writeString(out, nodeFilter);
out.writeInt(qryDetailMetricsSz);
out.writeBoolean(readFromBackup);
U.writeString(out, tmLookupClsName);
U.writeString(out, topValidator);
U.writeIgniteUuid(out, dynamicDeploymentId);
// V2
U.writeEnum(out, diskPageCompression);
out.writeObject(diskPageCompressionLevel);
}
/** {@inheritDoc} */
@Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
name = U.readString(in);
grpName = U.readString(in);
mode = CacheMode.fromCode(in.readByte());
atomicityMode = CacheAtomicityMode.fromOrdinal(in.readByte());
eagerTtl = in.readBoolean();
writeSynchronizationMode = CacheWriteSynchronizationMode.fromOrdinal(in.readByte());
invalidate = in.readBoolean();
maxConcurrentAsyncOps = in.readInt();
interceptor = U.readString(in);
dfltLockTimeout = in.readLong();
affinityCfg = (VisorCacheAffinityConfiguration)in.readObject();
rebalanceCfg = (VisorCacheRebalanceConfiguration)in.readObject();
evictCfg = (VisorCacheEvictionConfiguration)in.readObject();
nearCfg = (VisorCacheNearConfiguration)in.readObject();
storeCfg = (VisorCacheStoreConfiguration)in.readObject();
qryEntities = U.readList(in);
jdbcTypes = U.readList(in);
statisticsEnabled = in.readBoolean();
mgmtEnabled = in.readBoolean();
ldrFactory = U.readString(in);
writerFactory = U.readString(in);
expiryPlcFactory = U.readString(in);
qryCfg = (VisorQueryConfiguration)in.readObject();
sys = in.readBoolean();
storeKeepBinary = in.readBoolean();
onheapCache = in.readBoolean();
partLossPlc = PartitionLossPolicy.fromOrdinal(in.readByte());
qryParallelism = in.readInt();
cpOnRead = in.readBoolean();
evictFilter = U.readString(in);
lsnrConfigurations = U.readString(in);
loadPrevVal = in.readBoolean();
dataRegName = U.readString(in);
sqlIdxMaxInlineSize = in.readInt();
nodeFilter = U.readString(in);
qryDetailMetricsSz = in.readInt();
readFromBackup = in.readBoolean();
tmLookupClsName = U.readString(in);
topValidator = U.readString(in);
dynamicDeploymentId = U.readIgniteUuid(in);
if (protoVer > V1) {
diskPageCompression = DiskPageCompression.fromOrdinal(in.readByte());
diskPageCompressionLevel = (Integer)in.readObject();
}
}
/** {@inheritDoc} */
@Override public String toString() {
return S.toString(VisorCacheConfiguration.class, this);
}
}