/*
* 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.node;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import org.apache.ignite.configuration.DeploymentMode;
import org.apache.ignite.configuration.IgniteConfiguration;
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.jetbrains.annotations.Nullable;
import static java.lang.System.getProperty;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_DAEMON;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_HOME;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_LOCAL_HOST;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_NO_ASCII;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_NO_DISCO_ORDER;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_NO_SHUTDOWN_HOOK;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_PROG_NAME;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_QUIET;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_SUCCESS_FILE;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_UPDATE_NOTIFIER;
import static org.apache.ignite.internal.visor.util.VisorTaskUtils.boolValue;
import static org.apache.ignite.internal.visor.util.VisorTaskUtils.compactClass;
/**
* Data transfer object for node basic configuration properties.
*/
public class VisorBasicConfiguration extends VisorDataTransferObject {
/** */
private static final long serialVersionUID = 0L;
/** Ignite instance name. */
private String igniteInstanceName;
/** IGNITE_HOME determined at startup. */
private String ggHome;
/** Local host value used. */
private String locHost;
/** Marshaller used. */
private String marsh;
/** Deployment Mode. */
private DeploymentMode deployMode;
/** Client mode flag. */
private Boolean clientMode;
/** Whether this node daemon or not. */
private boolean daemon;
/** Whether remote JMX is enabled. */
private boolean jmxRemote;
/** Is node restart enabled. */
private boolean restart;
/** Network timeout. */
private long netTimeout;
/** Logger used on node. */
private String log;
/** Discovery startup delay. */
private long discoStartupDelay;
/** MBean server name */
private String mBeanSrv;
/** Whether ASCII logo is disabled. */
private boolean noAscii;
/** Whether no discovery order is allowed. */
private boolean noDiscoOrder;
/** Whether shutdown hook is disabled. */
private boolean noShutdownHook;
/** Name of command line program. */
private String progName;
/** Whether node is in quiet mode. */
private boolean quiet;
/** Success file name. */
private String successFile;
/** Whether update checker is enabled. */
private boolean updateNtf;
/** Active on start flag. */
private boolean activeOnStart;
/** Address resolver. */
private String addrRslvr;
/** Flag indicating whether cache sanity check is enabled. */
private boolean cacheSanityCheckEnabled;
/** User's class loader. */
private String clsLdr;
/** Consistent globally unique node ID which survives node restarts. */
private String consistentId;
/** Failure detection timeout. */
private Long failureDetectionTimeout;
/** Ignite work folder. */
private String igniteWorkDir;
/** */
private boolean lateAffAssignment;
/** Marshal local jobs. */
private boolean marshLocJobs;
/** Full metrics enabled flag. */
private long metricsUpdateFreq;
/** Failure detection timeout for client nodes. */
private Long clientFailureDetectionTimeout;
/** Message send retries delay. */
private int sndRetryCnt;
/** Interval between message send retries. */
private long sndRetryDelay;
/** Base port number for time server. */
private int timeSrvPortBase;
/** Port number range for time server. */
private int timeSrvPortRange;
/** Utility cache pool keep alive time. */
private long utilityCacheKeepAliveTime;
/**
* Default constructor.
*/
public VisorBasicConfiguration() {
// No-op.
}
/**
* Create data transfer object for node basic configuration properties.
*
* @param ignite Grid.
* @param c Grid configuration.
*/
public VisorBasicConfiguration(IgniteEx ignite, IgniteConfiguration c) {
igniteInstanceName = c.getIgniteInstanceName();
ggHome = getProperty(IGNITE_HOME, c.getIgniteHome());
locHost = getProperty(IGNITE_LOCAL_HOST, c.getLocalHost());
marsh = compactClass(c.getMarshaller());
deployMode = c.getDeploymentMode();
clientMode = c.isClientMode();
daemon = boolValue(IGNITE_DAEMON, c.isDaemon());
jmxRemote = ignite.isJmxRemoteEnabled();
restart = ignite.isRestartEnabled();
netTimeout = c.getNetworkTimeout();
log = compactClass(c.getGridLogger());
discoStartupDelay = c.getDiscoveryStartupDelay();
mBeanSrv = compactClass(c.getMBeanServer());
noAscii = boolValue(IGNITE_NO_ASCII, false);
noDiscoOrder = boolValue(IGNITE_NO_DISCO_ORDER, false);
noShutdownHook = boolValue(IGNITE_NO_SHUTDOWN_HOOK, false);
progName = getProperty(IGNITE_PROG_NAME);
quiet = boolValue(IGNITE_QUIET, true);
successFile = getProperty(IGNITE_SUCCESS_FILE);
updateNtf = boolValue(IGNITE_UPDATE_NOTIFIER, true);
activeOnStart = c.isActiveOnStart();
addrRslvr = compactClass(c.getAddressResolver());
cacheSanityCheckEnabled = c.isCacheSanityCheckEnabled();
clsLdr = compactClass(c.getClassLoader());
consistentId = String.valueOf(c.getConsistentId());
failureDetectionTimeout = c.getFailureDetectionTimeout();
igniteWorkDir = c.getWorkDirectory();
lateAffAssignment = c.isLateAffinityAssignment();
marshLocJobs = c.isMarshalLocalJobs();
metricsUpdateFreq = c.getMetricsUpdateFrequency();
clientFailureDetectionTimeout = c.getClientFailureDetectionTimeout();
sndRetryCnt = c.getNetworkSendRetryCount();
sndRetryDelay = c.getNetworkSendRetryDelay();
timeSrvPortBase = c.getTimeServerPortBase();
timeSrvPortRange = c.getTimeServerPortRange();
utilityCacheKeepAliveTime = c.getUtilityCacheKeepAliveTime();
}
/**
* @return Ignite instance name.
*/
@Nullable public String getIgniteInstanceName() {
return igniteInstanceName;
}
/**
* @return IGNITE_HOME determined at startup.
*/
@Nullable public String getGgHome() {
return ggHome;
}
/**
* @return Local host value used.
*/
@Nullable public String getLocalHost() {
return locHost;
}
/**
* @return Marshaller used.
*/
public String getMarshaller() {
return marsh;
}
/**
* @return Deployment Mode.
*/
public Object getDeploymentMode() {
return deployMode;
}
/**
* @return Client mode flag.
*/
public Boolean isClientMode() {
return clientMode;
}
/**
* @return Whether this node daemon or not.
*/
public boolean isDaemon() {
return daemon;
}
/**
* @return Whether remote JMX is enabled.
*/
public boolean isJmxRemote() {
return jmxRemote;
}
/**
* @return Is node restart enabled.
*/
public boolean isRestart() {
return restart;
}
/**
* @return Network timeout.
*/
public long getNetworkTimeout() {
return netTimeout;
}
/**
* @return Logger used on node.
*/
public String getLogger() {
return log;
}
/**
* @return Discovery startup delay.
*/
public long getDiscoStartupDelay() {
return discoStartupDelay;
}
/**
* @return MBean server name
*/
@Nullable public String getMBeanServer() {
return mBeanSrv;
}
/**
* @return Whether ASCII logo is disabled.
*/
public boolean isNoAscii() {
return noAscii;
}
/**
* @return Whether no discovery order is allowed.
*/
public boolean isNoDiscoOrder() {
return noDiscoOrder;
}
/**
* @return Whether shutdown hook is disabled.
*/
public boolean isNoShutdownHook() {
return noShutdownHook;
}
/**
* @return Name of command line program.
*/
public String getProgramName() {
return progName;
}
/**
* @return Whether node is in quiet mode.
*/
public boolean isQuiet() {
return quiet;
}
/**
* @return Success file name.
*/
public String getSuccessFile() {
return successFile;
}
/**
* @return Whether update checker is enabled.
*/
public boolean isUpdateNotifier() {
return updateNtf;
}
/**
* @return Active on start flag.
*/
public boolean isActiveOnStart() {
return activeOnStart;
}
/**
* @return Class name of address resolver instance.
*/
public String getAddressResolver() {
return addrRslvr;
}
/**
* @return Flag indicating whether cache sanity check is enabled.
*/
public boolean isCacheSanityCheckEnabled() {
return cacheSanityCheckEnabled;
}
/**
* @return User's class loader.
*/
public String getClassLoader() {
return clsLdr;
}
/**
* Gets consistent globally unique node ID which survives node restarts.
*
* @return Node consistent ID.a
*/
public String getConsistentId() {
return consistentId;
}
/**
* @return Failure detection timeout in milliseconds.
*/
public Long getFailureDetectionTimeout() {
return failureDetectionTimeout;
}
/**
* @return Ignite work directory.
*/
public String getWorkDirectory() {
return igniteWorkDir;
}
/**
* @return Late affinity assignment flag.
*/
public boolean isLateAffinityAssignment() {
return lateAffAssignment;
}
/**
* @return {@code True} if local jobs should be marshalled.
*/
public boolean isMarshalLocalJobs() {
return marshLocJobs;
}
/**
* @return Job metrics update frequency in milliseconds.
*/
public long getMetricsUpdateFrequency() {
return metricsUpdateFreq;
}
/**
* @return Failure detection timeout for client nodes in milliseconds.
*/
public Long getClientFailureDetectionTimeout() {
return clientFailureDetectionTimeout;
}
/**
* @return Message send retries count.
*/
public int getNetworkSendRetryCount() {
return sndRetryCnt;
}
/**
* @return Interval between message send retries.
*/
public long getNetworkSendRetryDelay() {
return sndRetryDelay;
}
/**
* @return Base UPD port number for grid time server.
*/
public int getTimeServerPortBase() {
return timeSrvPortBase;
}
/**
* @return Number of ports to try before server initialization fails.
*/
public int getTimeServerPortRange() {
return timeSrvPortRange;
}
/**
* @return Thread pool keep alive time (in milliseconds) to be used in grid for utility cache messages.
*/
public long getUtilityCacheKeepAliveTime() {
return utilityCacheKeepAliveTime;
}
/** {@inheritDoc} */
@Override protected void writeExternalData(ObjectOutput out) throws IOException {
U.writeString(out, igniteInstanceName);
U.writeString(out, ggHome);
U.writeString(out, locHost);
U.writeString(out, marsh);
U.writeEnum(out, deployMode);
out.writeObject(clientMode);
out.writeBoolean(daemon);
out.writeBoolean(jmxRemote);
out.writeBoolean(restart);
out.writeLong(netTimeout);
U.writeString(out, log);
out.writeLong(discoStartupDelay);
U.writeString(out, mBeanSrv);
out.writeBoolean(noAscii);
out.writeBoolean(noDiscoOrder);
out.writeBoolean(noShutdownHook);
U.writeString(out, progName);
out.writeBoolean(quiet);
U.writeString(out, successFile);
out.writeBoolean(updateNtf);
out.writeBoolean(activeOnStart);
U.writeString(out, addrRslvr);
out.writeBoolean(cacheSanityCheckEnabled);
U.writeString(out, clsLdr);
U.writeString(out, consistentId);
out.writeObject(failureDetectionTimeout);
U.writeString(out, igniteWorkDir);
out.writeBoolean(lateAffAssignment);
out.writeBoolean(marshLocJobs);
out.writeLong(metricsUpdateFreq);
out.writeObject(clientFailureDetectionTimeout);
out.writeInt(sndRetryCnt);
out.writeLong(sndRetryDelay);
out.writeInt(timeSrvPortBase);
out.writeInt(timeSrvPortRange);
out.writeLong(utilityCacheKeepAliveTime);
}
/** {@inheritDoc} */
@Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
igniteInstanceName = U.readString(in);
ggHome = U.readString(in);
locHost = U.readString(in);
marsh = U.readString(in);
deployMode = DeploymentMode.fromOrdinal(in.readByte());
clientMode = (Boolean)in.readObject();
daemon = in.readBoolean();
jmxRemote = in.readBoolean();
restart = in.readBoolean();
netTimeout = in.readLong();
log = U.readString(in);
discoStartupDelay = in.readLong();
mBeanSrv = U.readString(in);
noAscii = in.readBoolean();
noDiscoOrder = in.readBoolean();
noShutdownHook = in.readBoolean();
progName = U.readString(in);
quiet = in.readBoolean();
successFile = U.readString(in);
updateNtf = in.readBoolean();
activeOnStart = in.readBoolean();
addrRslvr = U.readString(in);
cacheSanityCheckEnabled = in.readBoolean();
clsLdr = U.readString(in);
consistentId = U.readString(in);
failureDetectionTimeout = (Long)in.readObject();
igniteWorkDir = U.readString(in);
lateAffAssignment = in.readBoolean();
marshLocJobs = in.readBoolean();
metricsUpdateFreq = in.readLong();
clientFailureDetectionTimeout = (Long)in.readObject();
sndRetryCnt = in.readInt();
sndRetryDelay = in.readLong();
timeSrvPortBase = in.readInt();
timeSrvPortRange = in.readInt();
utilityCacheKeepAliveTime = in.readLong();
}
/** {@inheritDoc} */
@Override public String toString() {
return S.toString(VisorBasicConfiguration.class, this);
}
}