Goal
The different services of Denodo Platform can be configured to be automatically started as part of an operating system’s startup process. This document lists examples of scripts that can be used in Linux systems to automate the startup process of Denodo Platform services.
Content
In the case of Linux systems, if you want to run Denodo Platform services as Linux services, it is necessary to create shell scripts with the startup and shutdown steps.
If you are using systemd service files are also needed for the service configuration:
The service files must be placed under the /etc/systemd/system folder.
- load the scripts as services by executing:
~$ systemctl daemon-reload
- invoke the service using:
~$ systemctl start/stop <service_name>
- execute the service automatically at the next boot using:
~$ systemctl enable <service_name>
The service files need to have execution privileges. If they do not have these privileges, an “unrecognized service” error will be thrown when running the service.
If you are using SysVinit:
Once the scripts are ready move the script files to the /etc/init.d folder.
- execute the services automatically using:
~$ chkconfig <service_name> --add
~$ chkconfig <service_name> on
- invoke the service using:
~$ service <service_name> start/stop/restart
Scripts and unit files for systemd
denodo.properties
DENODO_HOME=/opt/denodo DENODO_USER=denodo JAVA_HOME=${DENODO_HOME}/jre PATH=${JAVA_HOME}/bin:${DENODO_HOME}/bin:${DENODO_HOME}/bin/systemd:${PATH} |
denodo-init
#!/usr/bin/env bash # . /opt/denodo/bin/systemd/denodo.properties PIDFILE=${PIDFILE:-${DENODO_HOME}/logs/vqlserver.pid} DENODO_PID_CHECK_PATTERN=${DENODO_PID_CHECK_PATTERN:-DENODO_APP=Denodo VDP Server} # Return Values E_SUCCESS=0 E_BAD_PID=3 E_BAD_PARAM=4 E_UNMANAGED=5 case "$1" in pre) if [ -f $PIDFILE ]; then pid=$(< "$PIDFILE") if kill -0 $pid && [[ -r /proc/$pid/cmdline ]] && xargs -0 printf '%s\n' < /proc/$pid/cmdline | /bin/grep -q "$DENODO_PID_CHECK_PATTERN"; then echo "PID file $PIDFILE exists, Denodo service is already running: $pid" >&2 else rm ${PIDFILE} fi fi pid=$(/bin/ps -fwwu $DENODO_USER | /bin/grep "$DENODO_PID_CHECK_PATTERN" | /bin/grep "$DENODO_HOME" | /bin/grep -v grep | /bin/awk '{print $2}') if [[ -n "$pid" ]] && [[ -r /proc/$pid/cmdline ]] && xargs -0 printf '%s\n' < /proc/$pid/cmdline | /bin/grep -q "$DENODO_PID_CHECK_PATTERN"; then echo "Denodo service is already running: $pid" >&2 RETURN_CODE=$E_UNMANAGED else RETURN_CODE=$E_SUCCESS fi ;; *) echo "Usage: $0 [pre]" RETURN_CODE=$E_BAD_PARAM ;; esac exit $RETURN_CODE |
vqlserver
#!/usr/bin/env bash # # Start/Stop Denodo VDP Server Daemon # # Time to wait to... T_WAIT_TO_STARTUP=30 # After startup T_WAIT_TO_SHUTDOWN=20 # After shutdown T_WAIT_TO_KILL=20 # After kill . /opt/denodo/bin/systemd/denodo.properties # Denodo service name DENODO_SERVICE="Denodo VDP Server" # PIDFILE to block concurrent attempts to start the service PIDFILE=${PIDFILE:-${DENODO_HOME}/logs/vqlserver.pid} # File to check the process of the service DENODO_PID_CHECK_PATTERN="DENODO_APP=Denodo VDP Server" # Useful paths DENODO_SRV_START_SCRIPT="$DENODO_HOME/bin/vqlserver_startup.sh" DENODO_SRV_STOP_SCRIPT="$DENODO_HOME/bin/vqlserver_shutdown.sh" # Return Values E_SUCCESS=0 E_BAD_PID=3 E_BAD_PARAM=4 E_RUNNING=5 # Function to get the pid of this service get_pid() { local P=$(/bin/ps -fwwu $DENODO_USER | /bin/grep "$DENODO_PID_CHECK_PATTERN" | /bin/grep "$DENODO_HOME" | /bin/grep -v grep | /bin/awk '{print $2}') /bin/echo "$P" } start(){ if [ -f $PIDFILE ]; then local pidf=$(< "$PIDFILE") if kill -0 $pidf && [[ -r /proc/$pidf/cmdline ]] && xargs -0 printf '%s\n' < /proc/$pidf/cmdline | /bin/grep -q "$DENODO_PID_CHECK_PATTERN"; then echo "PID file $PIDFILE exists, Denodo service is already running: $pidf" >&2 else rm ${PIDFILE} fi fi
local PID=$(get_pid) if [ -n "$PID" ] && (( "$PID" > 0 )) 2> /dev/null; then echo "Denodo service is already running: $PID" >&2 RETURN_CODE=$E_RUNNING else # Block any other process attempt to launch the service /bin/touch $PIDFILE # Startup script $DENODO_SRV_START_SCRIPT # Wait to capture the PID. sleep $T_WAIT_TO_STARTUP # Get pid to write it to $PIDFILE PID=$(get_pid) if [ -n "$PID" ] && (( "$PID" > 0 )) 2> /dev/null; then echo $PID >$PIDFILE RETURN_CODE=$E_SUCCESS else /bin/rm $PIDFILE RETURN_CODE=$E_BAD_PID fi fi } stop(){ if [ ! -f $PIDFILE ]; then echo "$DENODO_SERVICE is not running." else # Shutdown script $DENODO_SRV_STOP_SCRIPT # Wait to capture the pid sleep $T_WAIT_TO_SHUTDOWN local PID=$(< "$PIDFILE") if kill -0 "$PID" 2> /dev/null; then # Still running echo "Termination $PID" # SIGTERM /bin/kill $PID sleep $T_WAIT_TO_KILL if kill -0 "$PID" 2> /dev/null; then # Still running # SIGKILL /bin/kill -9 $PID echo "Abrupt termination" fi fi # Remove blocking file $PIDFILE so that it can be started again /bin/rm $PIDFILE RETURN_CODE=$E_SUCCESS fi } case "$1" in start) start ;; stop) stop ;; *) echo $"Usage: $0 {start|stop}" RETURN_CODE=$E_BAD_PARAM esac exit $RETURN_CODE |
schedulerserver
#!/usr/bin/env bash # # Start/Stop Scheduler Server Daemon. # # Time to wait to... T_WAIT_TO_STARTUP=10 # After startup T_WAIT_TO_SHUTDOWN=20 # After shutdown T_WAIT_TO_KILL=20 # After kill . /opt/denodo/bin/systemd/denodo.properties # Denodo service name DENODO_SERVICE="Denodo Scheduler Server" # PIDFILE to block concurrent attempts to start the service PIDFILE=${PIDFILE:-${DENODO_HOME}/logs/schedulerserver.pid} # File to check the process of the service DENODO_PID_CHECK_PATTERN="DENODO_APP=Denodo Scheduler Server" # Useful paths DENODO_SRV_START_SCRIPT="$DENODO_HOME/bin/scheduler_startup.sh" DENODO_SRV_STOP_SCRIPT="$DENODO_HOME/bin/scheduler_shutdown.sh" # Return Values E_SUCCESS=0 E_BAD_PID=3 E_BAD_PARAM=4 E_RUNNING=5 # Function to get the pid of this service get_pid() { local P=$(/bin/ps -fwwu $DENODO_USER | /bin/grep "$DENODO_PID_CHECK_PATTERN" | /bin/grep "$DENODO_HOME" | /bin/grep -v grep | /bin/awk '{print $2}') echo "$P" } start(){ if [ -f $PIDFILE ]; then local pidf=$(< "$PIDFILE") if kill -0 $pidf && [[ -r /proc/$pidf/cmdline ]] && xargs -0 printf '%s\n' < /proc/$pidf/cmdline | /bin/grep -q "$DENODO_PID_CHECK_PATTERN"; then echo "PID file $PIDFILE exists, Denodo service is already running: $pidf" >&2 else rm ${PIDFILE} fi fi
local PID=$(get_pid) if [ -n "$PID" ] && (( "$PID" > 0 )) 2> /dev/null; then echo "Denodo service is already running: $PID" >&2 RETURN_CODE=$E_RUNNING else # Block any other process attempt to launch the service /bin/touch $PIDFILE # Startup script $DENODO_SRV_START_SCRIPT # Wait to capture the PID. sleep $T_WAIT_TO_STARTUP # Get pid to write it to $PIDFILE PID=$(get_pid) if [ -n "$PID" ] && (( "$PID" > 0 )) 2> /dev/null; then echo $PID >$PIDFILE RETURN_CODE=$E_SUCCESS else /bin/rm $PIDFILE RETURN_CODE=$E_BAD_PID fi fi } stop(){ if [ ! -f $PIDFILE ]; then echo "$DENODO_SERVICE is not running." else # Shutdown script $DENODO_SRV_STOP_SCRIPT # Wait to capture the pid sleep $T_WAIT_TO_SHUTDOWN local PID=$(< "$PIDFILE") if kill -0 "$PID" 2> /dev/null; then # Still running echo "Termination $PID" # SIGTERM /bin/kill $PID sleep $T_WAIT_TO_KILL if kill -0 "$PID" 2> /dev/null; then # Still running # SIGKILL /bin/kill -9 $PID echo "Abrupt termination" fi fi # Remove blocking file $PIDFILE so that it can be started again /bin/rm $PIDFILE RETURN_CODE=$E_SUCCESS fi } case "$1" in start) start ;; stop) stop ;; *) echo $"Usage: $0 {start|stop}" RETURN_CODE=$E_BAD_PARAM esac exit $RETURN_CODE |
schedulerindexserver
#!/usr/bin/env bash # # Start/Stop Scheduler Index Server Daemon. # # Time to wait to... T_WAIT_TO_STARTUP=10 # After startup T_WAIT_TO_SHUTDOWN=20 # After shutdown T_WAIT_TO_KILL=20 # After kill . /opt/denodo/bin/systemd/denodo.properties # Denodo service name DENODO_SERVICE="Denodo Scheduler Index Server" # PIDFILE to block concurrent attempts to start the service PIDFILE=${PIDFILE:-${DENODO_HOME}/logs/schedulerindexserver.pid} # File to check the process of the service DENODO_PID_CHECK_PATTERN="DENODO_APP=Denodo Aracne Index" # Useful paths DENODO_SRV_START_SCRIPT="$DENODO_HOME/bin/arnindex_startup.sh" DENODO_SRV_STOP_SCRIPT="$DENODO_HOME/bin/arnindex_shutdown.sh" # Return Values E_SUCCESS=0 E_BAD_PID=3 E_BAD_PARAM=4 E_RUNNING=5 # Function to get the pid of this service get_pid() { local P=$(/bin/ps -fwwu $DENODO_USER | /bin/grep "$DENODO_PID_CHECK_PATTERN" | /bin/grep "$DENODO_HOME" | /bin/grep -v grep | /bin/awk '{print $2}') echo "$P" } start(){ if [ -f $PIDFILE ]; then local pidf=$(< "$PIDFILE") if kill -0 $pidf && [[ -r /proc/$pidf/cmdline ]] && xargs -0 printf '%s\n' < /proc/$pidf/cmdline | /bin/grep -q "$DENODO_PID_CHECK_PATTERN"; then echo "PID file $PIDFILE exists, Denodo service is already running: $pidf" >&2 else rm ${PIDFILE} fi fi
local PID=$(get_pid) if [ -n "$PID" ] && (( "$PID" > 0 )) 2> /dev/null; then echo "Denodo service is already running: $PID" >&2 RETURN_CODE=$E_RUNNING else # Block any other process attempt to launch the service /bin/touch $PIDFILE # Startup script $DENODO_SRV_START_SCRIPT # Wait to capture the PID. sleep $T_WAIT_TO_STARTUP # Get pid to write it to $PIDFILE PID=$(get_pid) if [ -n "$PID" ] && (( "$PID" > 0 )) 2> /dev/null; then echo $PID >$PIDFILE RETURN_CODE=$E_SUCCESS else /bin/rm $PIDFILE RETURN_CODE=$E_BAD_PID fi fi } stop(){ if [ ! -f $PIDFILE ]; then echo "$DENODO_SERVICE is not running." else # Shutdown script $DENODO_SRV_STOP_SCRIPT # Wait to capture the pid sleep $T_WAIT_TO_SHUTDOWN local PID=$(< "$PIDFILE") if kill -0 "$PID" 2> /dev/null; then # Still running echo "Termination $PID" # SIGTERM /bin/kill $PID sleep $T_WAIT_TO_KILL if kill -0 "$PID" 2> /dev/null; then # Still running # SIGKILL /bin/kill -9 $PID echo "Abrupt termination" fi fi # Remove blocking file $PIDFILE so that it can be started again /bin/rm $PIDFILE RETURN_CODE=$E_SUCCESS fi } case "$1" in start) start ;; stop) stop ;; *) echo $"Usage: $0 {start|stop}" RETURN_CODE=$E_BAD_PARAM esac exit $RETURN_CODE |
vqlserver.service
[Unit] Description=Denodo VQL Server Service Wants=network-online.target After=network-online.target [Service] Type=forking Environment=DENODO_HOME=/opt/denodo PIDFile=$DENODO_HOME/logs/vqlserver.pid ExecStartPre=+$DENODO_HOME/lib/sh/denodo-init pre ExecStart=$DENODO_HOME/bin/systemd/vqlserver start ExecStop=$DENODO_HOME/bin/systemd/vqlserver stop Environment=JAVA_HOME=$DENODO_HOME/jre Environment=PIDFILE=$DENODO_HOME/logs/vqlserver.pid Environment=DENODO_PID_CHECK_PATTERN="DENODO_APP=Denodo VDP Server" TimeoutSec=320 User=denodo Group=denodo [Install] WantedBy=multi-user.target |
designstudio.service
[Unit] Description=Denodo Design Studio PartOf=vqlserver.service After=vqlserver.service [Service] Type=oneshot Environment=DENODO_HOME=/opt/denodo ExecStart=$DENODO_HOME/bin/webcontainer.sh start denodo-design-studio ExecStop=$DENODO_HOME/bin/webcontainer.sh stop denodo-design-studio Environment=JAVA_HOME=$DENODO_HOME/jre Environment=DENODO_CONF=$DENODO_HOME/resources/apache-tomcat/webapps/denodo-design-studio/WEB-INF/classes RemainAfterExit=yes KillMode=none User=denodo Group=denodo [Install] WantedBy=multi-user.target |
schedulerserver.service
[Unit] Description=Denodo Scheduler Server Service Wants=network-online.target After=network-online.target vqlserver.service [Service] Type=forking Environment=DENODO_HOME=/opt/denodo PIDFile=$DENODO_HOME/logs/schedulerserver.pid ExecStart=$DENODO_HOME/bin/systemd/schedulerserver start ExecStop=$DENODO_HOME/bin/systemd/schedulerserver stop Environment=JAVA_HOME=$DENODO_HOME/jre Environment=PIDFILE=$DENODO_HOME/logs/schedulerserver.pid Environment=DENODO_PID_CHECK_PATTERN="DENODO_APP=Denodo Scheduler Server" TimeoutSec=240 User=denodo Group=denodo [Install] WantedBy=multi-user.target |
schedulerindexserver.service
[Unit] Description=Denodo Scheduler Index Server Service Wants=network-online.target After=network-online.target [Service] Type=forking Environment=DENODO_HOME=/opt/denodo PIDFile=$DENODO_HOME/logs/schedulerindexserver.pid ExecStart=$DENODO_HOME/bin/systemd/schedulerindexserver start ExecStop=$DENODO_HOME/bin/systemd/schedulerindexserver stop Environment=JAVA_HOME=$DENODO_HOME/jre Environment=PIDFILE=$DENODO_HOME/logs/schedulerindexserver.pid Environment=DENODO_PID_CHECK_PATTERN="DENODO_APP=Denodo Aracne Index" TimeoutSec=240 User=denodo Group=denodo [Install] WantedBy=multi-user.target |
schedulerwebadmintool.service
[Unit] Description=Denodo Scheduler Webadmin PartOf=vqlserver.service After=schedulerserver.service vqlserver.service [Service] Type=oneshot Environment=DENODO_HOME=/opt/denodo ExecStart=$DENODO_HOME/bin/webcontainer.sh start webadmin/denodo-scheduler-admin ExecStop=$DENODO_HOME/bin/webcontainer.sh stop webadmin/denodo-scheduler-admin Environment=JAVA_HOME=$DENODO_HOME/jre Environment=DENODO_CONF=$DENODO_HOME/resources/apache-tomcat/webapps/webadmin#denodo-scheduler-admin/WEB-INF/classes RemainAfterExit=yes KillMode=none User=denodo Group=denodo [Install] WantedBy=multi-user.target |
diagnosticmonitoringtool.service
[Unit] Description=Denodo Diagnostic & Monitoring Tool PartOf=vqlserver.service After=vqlserver.service [Service] Type=oneshot Environment=DENODO_HOME=/opt/denodo ExecStart=$DENODO_HOME/bin/webcontainer.sh start diagnostic-monitoring-tool ExecStop=$DENODO_HOME/bin/webcontainer.sh stop diagnostic-monitoring-tool Environment=JAVA_HOME=$DENODO_HOME/jre Environment=DENODO_CONF=$DENODO_HOME/resources/apache-tomcat/webapps/diagnostic-monitoring-tool/WEB-INF/classes RemainAfterExit=yes KillMode=none User=denodo Group=denodo [Install] WantedBy=multi-user.target |
datacatalog.service
[Unit] Description=Denodo Data Catalog PartOf=vqlserver.service After=vqlserver.service [Service] Type=oneshot Environment=DENODO_HOME=/opt/denodo ExecStart=$DENODO_HOME/bin/webcontainer.sh start denodo-data-catalog ExecStop=$DENODO_HOME/bin/webcontainer.sh stop denodo-data-catalog Environment=JAVA_HOME=$DENODO_HOME/jre Environment=DENODO_CONF=$DENODO_HOME/resources/apache-tomcat/webapps/denodo-data-catalog/WEB-INF/classes RemainAfterExit=yes KillMode=none User=denodo Group=denodo [Install] WantedBy=multi-user.target |
SysVinit scripts
Virtual DataPort Server
#!/bin/sh # # vdpserver Start/stop the VDP server daemon. # # chkconfig: 345 90 60 # description: Virtual DataPort Server DENODO_HOME="/opt/denodo" VDP_USER="vdp" # Source function library. . /etc/rc.d/init.d/functions start() { local PID=$(get_pid) if [ -z $PID ]; then su -c "$DENODO_HOME/bin/vqlserver_startup.sh" $VDP_USER || return 0 else echo "VDP server (pid $PID) is already running." fi } stop() { local PID=$(get_pid) if [ -z $PID ]; then echo "VDP server is not running." else $DENODO_HOME/bin/vqlserver_shutdown.sh fi } restart() { stop start } reload() { restart } force_reload() { # new configuration takes effect after restart restart } status() { local PID=$(get_pid) if [ -z $PID ]; then echo "VDP server is not running." else echo "VDP server (pid $PID) is running." fi } get_pid() { local P=`ps -fwwu $VDP_USER | grep -- "Denodo VDP Server" | grep -v grep | awk '{print $2}'` echo "$P" } case "$1" in start) start ;; stop) stop ;; restart) restart ;; status) status ;; *) echo $"Usage: $0 {start|stop|status|restart}" exit 2 esac exit $? |
Design Studio
#!/bin/sh # # designstudio Start/stop the Design Studio daemon. # # chkconfig: 345 90 60 # description: Design Studio DENODO_HOME="/opt/denodo" VDP_USER="vdp" # Source function library. #. /etc/rc.d/init.d/functions start() { su -c "$DENODO_HOME/bin/designstudio_startup.sh" $VDP_USER || return 0 } stop() { $DENODO_HOME/bin/designstudio_shutdown.sh } restart() { stop start } case "$1" in start) start ;; stop) stop ;; restart) restart ;; *) echo $"Usage: $0 {start|stop|restart}" exit 2 esac exit $? |
Scheduler Server
#!/bin/sh # # scheduler Start/stop the Scheduler server daemon. # # chkconfig: 345 90 60 # description: Scheduler Server DENODO_HOME="/opt/denodo" VDP_USER="vdp" # Source function library. #. /etc/rc.d/init.d/functions start() { local PID=$(get_pid) if [ -z $PID ]; then su -c "$DENODO_HOME/bin/scheduler_startup.sh" $VDP_USER || return 0 else echo "Scheduler server (pid $PID) is already running." fi } stop() { local PID=$(get_pid) if [ -z $PID ]; then echo "Scheduler server is not running." else $DENODO_HOME/bin/scheduler_shutdown.sh fi } restart() { stop start } reload() { restart } force_reload() { # new configuration takes effect after restart restart } status() { local PID=$(get_pid) if [ -z $PID ]; then echo "Scheduler server is not running." else echo "Scheduler server (pid $PID) is running." fi } get_pid() { local P=`ps -fwwu $VDP_USER | grep -- "Denodo Scheduler Server" | grep -v grep | awk '{print $2}'` echo "$P" } case "$1" in start) start ;; stop) stop ;; restart) restart ;; status) status ;; *) echo $"Usage: $0 {start|stop|status|restart}" exit 2 esac exit $? |
Scheduler Index Server
#!/bin/sh # # scheduler Start/stop the Scheduler Index server daemon. # # chkconfig: 345 90 60 # description: Scheduler Index Server DENODO_HOME="/opt/denodo" VDP_USER="vdp" # Source function library. #. /etc/rc.d/init.d/functions start() { local PID=$(get_pid) if [ -z $PID ]; then su -c "$DENODO_HOME/bin/arnindex_startup.sh" $VDP_USER || return 0 else echo "Scheduler Index server (pid $PID) is already running." fi } stop() { local PID=$(get_pid) if [ -z $PID ]; then echo "Scheduler Index server is not running." else $DENODO_HOME/bin/arnindex_shutdown.sh fi } restart() { stop start } reload() { restart } force_reload() { # new configuration takes effect after restart restart } status() { local PID=$(get_pid) if [ -z $PID ]; then echo "Scheduler Index server is not running." else echo "Scheduler Index server (pid $PID) is running." fi } get_pid() { local P=`ps -fwwu $VDP_USER | grep -- "Denodo Aracne Index" | grep -v grep | awk '{print $2}'` echo "$P" } case "$1" in start) start ;; stop) stop ;; restart) restart ;; status) status ;; *) echo $"Usage: $0 {start|stop|status|restart}" exit 2 esac exit $? |
Scheduler Administration Tool
#!/bin/sh # # scheduler_webadmin Start/stop the Scheduler Administration Tool daemon. # # chkconfig: 345 90 60 # description: Scheduler Administration Tool DENODO_HOME="/opt/denodo" VDP_USER="vdp" # Source function library. . /etc/rc.d/init.d/functions start() { su -c "$DENODO_HOME/bin/scheduler_webadmin_startup.sh" $VDP_USER || return 0 } stop() { $DENODO_HOME/bin/scheduler_webadmin_shutdown.sh } restart() { stop start } case "$1" in start) start ;; stop) stop ;; restart) restart ;; *) echo $"Usage: $0 {start|stop|restart}" exit 2 esac exit $? |
Data Catalog
#!/bin/sh # # datacatalog Start/stop the Data Catalog daemon. # # chkconfig: 345 90 60 # description: Denodo Platform Data Catalog DENODO_HOME="/opt/denodo" VDP_USER="vdp" # Source function library. #. /etc/rc.d/init.d/functions start() { su -c "$DENODO_HOME/bin/datacatalog_startup.sh" $VDP_USER || return 0 } stop() { $DENODO_HOME/bin/datacatalog_shutdown.sh } restart() { stop start } case "$1" in start) start ;; stop) stop ;; restart) restart ;; *) echo $"Usage: $0 {start|stop|restart}" exit 2 esac exit $? |
Diagnostic & Monitoring Tool
#!/bin/sh # # diagnosticmonitoringtool Start/stop the Diagnostic & Monitoring Tool daemon. # # chkconfig: 345 90 60 # description: Diagnostic & Monitoring Tool DENODO_HOME="/opt/denodo" VDP_USER="vdp" # Source function library. #. /etc/rc.d/init.d/functions start() { su -c "$DENODO_HOME/bin/diagnosticmonitoringtool_startup.sh" $VDP_USER || return 0 } stop() { $DENODO_HOME/bin/diagnosticmonitoringtool_shutdown.sh } restart() { stop start } case "$1" in start) start ;; stop) stop ;; restart) restart ;; *) echo $"Usage: $0 {start|stop|restart}" exit 2 esac exit $? |
The information provided in the Denodo Knowledge Base is intended to assist our users in advanced uses of Denodo. Please note that the results from the application of processes and configurations detailed in these documents may vary depending on your specific environment. Use them at your own discretion.
For an official guide of supported features, please refer to the User Manuals. For questions on critical systems or complex environments we recommend you to contact your Denodo Customer Success Manager.