re-sync with upstream

This commit is contained in:
Andrew Beekhof 2013-06-20 16:29:04 +10:00
parent 86911946e9
commit 0ee2414f9e
2 changed files with 3745 additions and 142 deletions

3677
pacemaker-7d8acec.patch Normal file

File diff suppressed because it is too large Load Diff

View File

@ -2,28 +2,16 @@
%global uname hacluster %global uname hacluster
%global pcmk_docdir %{_docdir}/%{name} %global pcmk_docdir %{_docdir}/%{name}
%global specversion 2 %global specversion 3
%global upstream_version 781a388 %global upstream_version 781a388
%global upstream_prefix ClusterLabs-pacemaker %global upstream_prefix ClusterLabs-pacemaker
# Compatibility macros for distros (fedora) that don't provide Python macros by default %global py_site %(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")
# Do this instead of trying to conditionally include {_rpmconfigdir}/macros.python
%{!?py_ver: %{expand: %%global py_ver %%(echo `python -c "import sys; print sys.version[:3]"`)}}
%{!?py_prefix: %{expand: %%global py_prefix %%(echo `python -c "import sys; print sys.prefix"`)}}
%{!?py_libdir: %{expand: %%global py_libdir %%{expand:%%%%{py_prefix}/%%%%{_lib}/python%%%%{py_ver}}}}
%{!?py_sitedir: %{expand: %%global py_sitedir %%{expand:%%%%{py_libdir}/site-packages}}}
# Turn off the auto compilation of python files not in the site-packages directory # Turn off the auto compilation of python files not in the site-packages directory
# Needed so that the -devel package is multilib compliant # Needed so that the -devel package is multilib compliant
%global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g') %global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Compatibility macro wrappers for legacy RPM versions that do not
# support conditional builds
%{!?bcond_without: %{expand: %%global bcond_without() %%{expand:%%%%{!?_without_%%{1}:%%%%global with_%%{1} 1}}}}
%{!?bcond_with: %{expand: %%global bcond_with() %%{expand:%%%%{?_with_%%{1}:%%%%global with_%%{1} 1}}}}
%{!?with: %{expand: %%global with() %%{expand:%%%%{?with_%%{1}:1}%%%%{!?with_%%{1}:0}}}}
%{!?without: %{expand: %%global without() %%{expand:%%%%{?with_%%{1}:0}%%%%{!?with_%%{1}:1}}}}
%global cs_major %(pkg-config corosync --modversion | awk -F . '{print $1}') %global cs_major %(pkg-config corosync --modversion | awk -F . '{print $1}')
%global cs_minor %(pkg-config corosync --modversion | awk -F . '{print $2}') %global cs_minor %(pkg-config corosync --modversion | awk -F . '{print $2}')
%global rawhide %(test ! -e /etc/yum.repos.d/fedora-rawhide.repo; echo $?) %global rawhide %(test ! -e /etc/yum.repos.d/fedora-rawhide.repo; echo $?)
@ -32,22 +20,11 @@
# Invoke "rpmbuild --without <feature>" or "rpmbuild --with <feature>" # Invoke "rpmbuild --without <feature>" or "rpmbuild --with <feature>"
# to disable or enable specific features # to disable or enable specific features
# Supported cluster stacks, must support at least one
%bcond_without corosync
%bcond_with heartbeat
%bcond_with cman
# Legacy stonithd fencing agents # Legacy stonithd fencing agents
%bcond_with stonithd %bcond_with stonithd
# ESMTP is not available in RHEL, only in EPEL. Allow people to build
# the RPM without ESMTP in case they choose not to use EPEL packages
%bcond_with esmtp
%bcond_with snmp
# Build with/without support for profiling tools # Build with/without support for profiling tools
%bcond_with profiling %bcond_with profiling
%bcond_with gcov
# We generate docs using Publican, Asciidoc and Inkscape, but they're not available everywhere # We generate docs using Publican, Asciidoc and Inkscape, but they're not available everywhere
%bcond_without doc %bcond_without doc
@ -55,7 +32,7 @@
# Use a different versioning scheme # Use a different versioning scheme
%bcond_with pre_release %bcond_with pre_release
# Support Upstart job # Ship an Upstart job file
%bcond_with upstart_job %bcond_with upstart_job
%if %{with profiling} %if %{with profiling}
@ -82,6 +59,7 @@ Group: System Environment/Daemons
# wget --no-check-certificate -O ClusterLabs-pacemaker-${VER}.tar.gz https://github.com/ClusterLabs/pacemaker/tarball/${VER} # wget --no-check-certificate -O ClusterLabs-pacemaker-${VER}.tar.gz https://github.com/ClusterLabs/pacemaker/tarball/${VER}
Source0: %{upstream_prefix}-%{upstream_version}.tar.gz Source0: %{upstream_prefix}-%{upstream_version}.tar.gz
Patch0: pacemaker-1.1.8-cast-align.patch Patch0: pacemaker-1.1.8-cast-align.patch
Patch1: pacemaker-7d8acec.patch
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
AutoReqProv: on AutoReqProv: on
Requires: resource-agents Requires: resource-agents
@ -90,29 +68,15 @@ Requires: %{name}-cluster-libs = %{version}-%{release}
Requires: %{name}-cli = %{version}-%{release} Requires: %{name}-cli = %{version}-%{release}
Requires: python >= 2.4 Requires: python >= 2.4
%if %{defined systemd_requires}
%systemd_requires
%endif
%if 0%{?rhel} > 0 %if 0%{?rhel} > 0
ExclusiveArch: i686 x86_64 ExclusiveArch: i686 x86_64
%endif %endif
%if %{defined _unitdir}
# Needed for systemd unit
Requires(post): systemd-sysv
Requires(post): systemd-units
Requires(preun): systemd-units
Requires(postun): systemd-units
%endif
%if %{with heartbeat}
Requires(pre): cluster-glue
%endif
%if %{with snmp}
Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
%endif
%if 0%{?suse_version} %if 0%{?suse_version}
# net-snmp-devel on SLES10 does not suck in tcpd-devel automatically
BuildRequires: tcpd-devel
# Suse splits this off into a separate package # Suse splits this off into a separate package
Requires: python-curses python-xml Requires: python-curses python-xml
BuildRequires: python-curses python-xml BuildRequires: python-curses python-xml
@ -130,6 +94,14 @@ BuildRequires: resource-agents
BuildRequires: libqb-devel > 0.11.0 BuildRequires: libqb-devel > 0.11.0
Requires: libqb > 0.11.0 Requires: libqb > 0.11.0
# Enables optional functionality
BuildRequires: ncurses-devel openssl-devel libselinux-devel docbook-style-xsl
BuildRequires: bison byacc flex help2man
%if %{defined _unitdir}
BuildRequires: systemd-devel
%endif
%if 0%{?suse_version} >= 1100 %if 0%{?suse_version} >= 1100
# Renamed since opensuse-11.0 # Renamed since opensuse-11.0
BuildRequires: libgnutls-devel BuildRequires: libgnutls-devel
@ -137,13 +109,6 @@ BuildRequires: libgnutls-devel
BuildRequires: gnutls-devel BuildRequires: gnutls-devel
%endif %endif
# Enables optional functionality
BuildRequires: ncurses-devel openssl-devel libselinux-devel docbook-style-xsl
BuildRequires: bison byacc flex help2man
%if %{with cman}
%if 0%{?fedora} > 0 %if 0%{?fedora} > 0
%if 0%{?fedora} < 17 %if 0%{?fedora} < 17
BuildRequires: clusterlib-devel BuildRequires: clusterlib-devel
@ -156,29 +121,8 @@ BuildRequires: clusterlib-devel
%endif %endif
%endif %endif
%endif
%if %{with esmtp}
BuildRequires: libesmtp-devel
%endif
%if %{with snmp}
%ifarch alpha %{ix86} x86_64
BuildRequires: lm_sensors-devel
%endif
BuildRequires: net-snmp-devel
%endif
%if %{with corosync}
Requires: corosync Requires: corosync
BuildRequires: corosynclib-devel BuildRequires: corosynclib-devel
%endif
%if %{with heartbeat}
# Do not require heartbeat, the admin should select which stack to use and install it
BuildRequires: cluster-glue-libs-devel heartbeat-devel heartbeat-libs >= 3.0.0
%endif
%if %{with stonithd} %if %{with stonithd}
BuildRequires: cluster-glue-libs-devel BuildRequires: cluster-glue-libs-devel
@ -197,17 +141,17 @@ BuildRequires: publican inkscape asciidoc
%description %description
Pacemaker is an advanced, scalable High-Availability cluster resource Pacemaker is an advanced, scalable High-Availability cluster resource
manager for Linux-HA (Heartbeat) and/or Corosync. manager for Corosync, CMAN and/or Linux-HA.
It supports "n-node" clusters with significant capabilities for It supports more than 16 node clusters with significant capabilities
managing resources and dependencies. for managing resources and dependencies.
It will run scripts at initialization, when machines go up or down, It will run scripts at initialization, when machines go up or down,
when related resources fail and can be configured to periodically check when related resources fail and can be configured to periodically check
resource health. resource health.
Available rpmbuild rebuild options: Available rpmbuild rebuild options:
--with(out) : heartbeat cman corosync doc publican snmp esmtp pre_release --with(out) : stonithd doc profiling pre_release upstart_job
%package cli %package cli
License: GPLv2+ and LGPLv2+ License: GPLv2+ and LGPLv2+
@ -218,7 +162,7 @@ Requires: perl-TimeDate
%description cli %description cli
Pacemaker is an advanced, scalable High-Availability cluster resource Pacemaker is an advanced, scalable High-Availability cluster resource
manager for Linux-HA (Heartbeat) and/or Corosync. manager for Corosync, CMAN and/or Linux-HA.
The %{name}-cli package contains command line tools that can be used The %{name}-cli package contains command line tools that can be used
to query and control the cluster from machines that may, or may not, to query and control the cluster from machines that may, or may not,
@ -231,7 +175,7 @@ Group: System Environment/Daemons
%description -n %{name}-libs %description -n %{name}-libs
Pacemaker is an advanced, scalable High-Availability cluster resource Pacemaker is an advanced, scalable High-Availability cluster resource
manager for Linux-HA (Heartbeat) and/or Corosync. manager for Corosync, CMAN and/or Linux-HA.
The %{name}-libs package contains shared libraries needed for cluster The %{name}-libs package contains shared libraries needed for cluster
nodes and those just running the CLI tools. nodes and those just running the CLI tools.
@ -244,22 +188,25 @@ Requires: %{name}-libs = %{version}-%{release}
%description -n %{name}-cluster-libs %description -n %{name}-cluster-libs
Pacemaker is an advanced, scalable High-Availability cluster resource Pacemaker is an advanced, scalable High-Availability cluster resource
manager for Linux-HA (Heartbeat) and/or Corosync. manager for Corosync, CMAN and/or Linux-HA.
The %{name}-cluster-libs package contains cluster-aware shared The %{name}-cluster-libs package contains cluster-aware shared
libraries needed for nodes that will form part of the cluster nodes. libraries needed for nodes that will form part of the cluster nodes.
%package -n %{name}-remote %package remote
License: GPLv2+ and LGPLv2+ License: GPLv2+ and LGPLv2+
Summary: Pacemaker remote daemon for non-cluster nodes Summary: Pacemaker remote daemon for non-cluster nodes
Group: System Environment/Daemons Group: System Environment/Daemons
Requires: %{name}-libs = %{version}-%{release} Requires: %{name}-libs = %{version}-%{release}
Requires: %{name}-cli = %{version}-%{release} Requires: %{name}-cli = %{version}-%{release}
Requires: resource-agents Requires: resource-agents
%if %{defined systemd_requires}
%systemd_requires
%endif
%description -n %{name}-remote %description remote
Pacemaker is an advanced, scalable High-Availability cluster resource Pacemaker is an advanced, scalable High-Availability cluster resource
manager for Linux-HA (Heartbeat) and/or Corosync. manager for Corosync, CMAN and/or Linux-HA.
The %{name}-remote package contains the Pacemaker Remote daemon The %{name}-remote package contains the Pacemaker Remote daemon
which is capable of extending pacemaker functionality to remote which is capable of extending pacemaker functionality to remote
@ -274,16 +221,11 @@ Requires: %{name}-libs = %{version}-%{release}
Requires: %{name}-cluster-libs = %{version}-%{release} Requires: %{name}-cluster-libs = %{version}-%{release}
Requires: libtool-ltdl-devel libqb-devel libuuid-devel Requires: libtool-ltdl-devel libqb-devel libuuid-devel
Requires: libxml2-devel libxslt-devel bzip2-devel glib2-devel Requires: libxml2-devel libxslt-devel bzip2-devel glib2-devel
%if %{with corosync}
Requires: corosynclib-devel Requires: corosynclib-devel
%endif
%if %{with heartbeat}
Requires: cluster-glue-libs-devel heartbeat-devel
%endif
%description -n %{name}-libs-devel %description -n %{name}-libs-devel
Pacemaker is an advanced, scalable High-Availability cluster resource Pacemaker is an advanced, scalable High-Availability cluster resource
manager for Linux-HA (Heartbeat) and/or Corosync. manager for Corosync, CMAN and/or Linux-HA.
The %{name}-libs-devel package contains headers and shared libraries The %{name}-libs-devel package contains headers and shared libraries
for developing tools for Pacemaker. for developing tools for Pacemaker.
@ -308,12 +250,13 @@ Group: Documentation
Documentation for Pacemaker. Documentation for Pacemaker.
Pacemaker is an advanced, scalable High-Availability cluster resource Pacemaker is an advanced, scalable High-Availability cluster resource
manager for Linux-HA (Heartbeat) and/or Corosync. manager for Corosync, CMAN and/or Linux-HA.
%prep %prep
%setup -q -n %{upstream_prefix}-%{upstream_version} %setup -q -n %{upstream_prefix}-%{upstream_version}
%patch0 -p1 -R %patch0 -p1 -R
%patch1 -p1
# Force the local time # Force the local time
# #
@ -326,19 +269,9 @@ find . -exec touch \{\} \;
%build %build
./autogen.sh ./autogen.sh
%if %{with snmp}
eval `objdump --headers --private-headers /usr/bin/perl | grep RPATH | awk '{print "export LD_LIBRARY_PATH="$2}'`
%endif
# RHEL <= 5 does not support --docdir # RHEL <= 5 does not support --docdir
docdir=%{pcmk_docdir} %{configure} \ docdir=%{pcmk_docdir} %{configure} \
%{!?with_heartbeat: --without-heartbeat} \
%{!?with_corosync: --without-ais} \
%{!?with_esmtp: --without-esmtp} \
%{!?with_snmp: --without-snmp} \
%{?with_cman: --with-cman} \
%{?with_profiling: --with-profiling} \ %{?with_profiling: --with-profiling} \
%{?with_gcov: --with-gcov} \
--with-initdir=%{_initrddir} \ --with-initdir=%{_initrddir} \
--localstatedir=%{_var} \ --localstatedir=%{_var} \
--with-version=%{version}-%{release} --with-version=%{version}-%{release}
@ -375,7 +308,13 @@ find %{buildroot} -name '*.la' -type f -print0 | xargs -0 rm -f
# Do not package these either # Do not package these either
rm -f %{buildroot}/%{_libdir}/service_crm.so rm -f %{buildroot}/%{_libdir}/service_crm.so
%if %{with gcov} # Don't ship init scripts for systemd based platforms
%if %{defined _unitdir}
rm -f %{buildroot}/%{_initrddir}/pacemaker
rm -f %{buildroot}/%{_initrddir}/pacemaker_remote
%endif
%if %{with profiling}
GCOV_BASE=%{buildroot}/%{_var}/lib/pacemaker/gcov GCOV_BASE=%{buildroot}/%{_var}/lib/pacemaker/gcov
mkdir -p $GCOV_BASE mkdir -p $GCOV_BASE
find . -name '*.gcno' -type f | while read F ; do find . -name '*.gcno' -type f | while read F ; do
@ -389,17 +328,22 @@ done
rm -rf %{buildroot} rm -rf %{buildroot}
%post %post
%if %{defined _unitdir} %systemd_post pacemaker.service
/bin/systemctl daemon-reload >/dev/null 2>&1 || :
%endif
/sbin/chkconfig --add pacemaker || :
%preun %preun
/sbin/service pacemaker stop || : %systemd_preun pacemaker.service
if [ $1 -eq 0 ]; then
# Package removal, not upgrade %postun
/sbin/chkconfig --del pacemaker || : %systemd_postun_with_restart pacemaker.service
fi
%post remote
%systemd_post pacemaker_remote.service
%preun remote
%systemd_preun pacemaker_remote.service
%postun remote
%systemd_postun_with_restart pacemaker_remote.service
%pre -n %{name}-libs %pre -n %{name}-libs
@ -415,19 +359,6 @@ exit 0
%postun -n %{name}-cluster-libs -p /sbin/ldconfig %postun -n %{name}-cluster-libs -p /sbin/ldconfig
%post -n %{name}-remote
%if %{defined _unitdir}
/bin/systemctl daemon-reload >/dev/null 2>&1 || :
%endif
/sbin/chkconfig --add pacemaker_remote || :
%preun -n %{name}-remote
if [ $1 -eq 0 ]; then
# Package removal, not upgrade
/sbin/service pacemaker_remote stop &>/dev/null || :
/sbin/chkconfig --del pacemaker_remote || :
fi
%files %files
########################################################### ###########################################################
%defattr(-,root,root) %defattr(-,root,root)
@ -435,13 +366,12 @@ fi
%exclude %{_datadir}/pacemaker/tests %exclude %{_datadir}/pacemaker/tests
%config(noreplace) %{_sysconfdir}/sysconfig/pacemaker %config(noreplace) %{_sysconfdir}/sysconfig/pacemaker
%if %{with corosync}
%{_sbindir}/pacemakerd %{_sbindir}/pacemakerd
%{_initrddir}/pacemaker
%endif
%if %{defined _unitdir} %if %{defined _unitdir}
%{_unitdir}/pacemaker.service %{_unitdir}/pacemaker.service
%else
%{_initrddir}/pacemaker
%endif %endif
%{_datadir}/pacemaker %{_datadir}/pacemaker
@ -450,10 +380,6 @@ fi
%exclude %{_sbindir}/pacemaker_remoted %exclude %{_sbindir}/pacemaker_remoted
%{_libexecdir}/pacemaker/* %{_libexecdir}/pacemaker/*
%if %{with heartbeat}
%{_libdir}/heartbeat/*
%endif
%{_sbindir}/crm_attribute %{_sbindir}/crm_attribute
%{_sbindir}/crm_master %{_sbindir}/crm_master
%{_sbindir}/crm_node %{_sbindir}/crm_node
@ -465,19 +391,13 @@ fi
%{_bindir}/disable_rgmanager %{_bindir}/disable_rgmanager
%{_sbindir}/stonith_admin %{_sbindir}/stonith_admin
%if %{with heartbeat}
%{_sbindir}/crm_uuid
%endif
%doc %{_mandir}/man7/* %doc %{_mandir}/man7/*
%doc %{_mandir}/man8/attrd_updater.* %doc %{_mandir}/man8/attrd_updater.*
%doc %{_mandir}/man8/crm_attribute.* %doc %{_mandir}/man8/crm_attribute.*
%doc %{_mandir}/man8/crm_node.* %doc %{_mandir}/man8/crm_node.*
%doc %{_mandir}/man8/crm_master.* %doc %{_mandir}/man8/crm_master.*
%doc %{_mandir}/man8/fence_pcmk.* %doc %{_mandir}/man8/fence_pcmk.*
%if %{with corosync}
%doc %{_mandir}/man8/pacemakerd.* %doc %{_mandir}/man8/pacemakerd.*
%endif
%doc %{_mandir}/man8/stonith_admin.* %doc %{_mandir}/man8/stonith_admin.*
%doc COPYING %doc COPYING
@ -494,13 +414,11 @@ fi
%dir /usr/lib/ocf/resource.d %dir /usr/lib/ocf/resource.d
/usr/lib/ocf/resource.d/pacemaker /usr/lib/ocf/resource.d/pacemaker
%if %{with corosync}
%if 0%{?cs_major} < 2 %if 0%{?cs_major} < 2
%if 0%{?cs_minor} < 8 %if 0%{?cs_minor} < 8
%{_libexecdir}/lcrso/pacemaker.lcrso %{_libexecdir}/lcrso/pacemaker.lcrso
%endif %endif
%endif %endif
%endif
%if %{with upstart_job} %if %{with upstart_job}
%config(noreplace) %{_sysconfdir}/init/pacemaker.conf %config(noreplace) %{_sysconfdir}/init/pacemaker.conf
@ -529,9 +447,7 @@ fi
%exclude %{_mandir}/man8/crm_node.* %exclude %{_mandir}/man8/crm_node.*
%exclude %{_mandir}/man8/crm_master.* %exclude %{_mandir}/man8/crm_master.*
%exclude %{_mandir}/man8/fence_pcmk.* %exclude %{_mandir}/man8/fence_pcmk.*
%if %{with corosync}
%exclude %{_mandir}/man8/pacemakerd.* %exclude %{_mandir}/man8/pacemakerd.*
%endif
%exclude %{_mandir}/man8/pacemaker_remoted.* %exclude %{_mandir}/man8/pacemaker_remoted.*
%exclude %{_mandir}/man8/stonith_admin.* %exclude %{_mandir}/man8/stonith_admin.*
@ -560,13 +476,15 @@ fi
%doc COPYING.LIB %doc COPYING.LIB
%doc AUTHORS %doc AUTHORS
%files -n %{name}-remote %files remote
%defattr(-,root,root) %defattr(-,root,root)
%config(noreplace) %{_sysconfdir}/sysconfig/pacemaker %config(noreplace) %{_sysconfdir}/sysconfig/pacemaker
%{_initrddir}/pacemaker_remote %{_initrddir}/pacemaker_remote
%if %{defined _unitdir} %if %{defined _unitdir}
%{_unitdir}/pacemaker_remote.service %{_unitdir}/pacemaker_remote.service
%else
%{_initrddir}/pacemaker_remote
%endif %endif
%{_sbindir}/pacemaker_remoted %{_sbindir}/pacemaker_remoted
@ -580,7 +498,7 @@ fi
%files cts %files cts
%defattr(-,root,root) %defattr(-,root,root)
%{py_sitedir}/cts %{py_site}/cts
%{_datadir}/pacemaker/tests/cts %{_datadir}/pacemaker/tests/cts
%{_libexecdir}/pacemaker/lrmd_test %{_libexecdir}/pacemaker/lrmd_test
%doc COPYING.LIB %doc COPYING.LIB
@ -592,7 +510,7 @@ fi
%{_datadir}/pacemaker/tests %{_datadir}/pacemaker/tests
%{_includedir}/pacemaker %{_includedir}/pacemaker
%{_libdir}/*.so %{_libdir}/*.so
%if %{with gcov} %if %{with profiling}
%{_var}/lib/pacemaker %{_var}/lib/pacemaker
%endif %endif
%{_libdir}/pkgconfig/*.pc %{_libdir}/pkgconfig/*.pc
@ -600,6 +518,14 @@ fi
%doc AUTHORS %doc AUTHORS
%changelog %changelog
* Thu Jun 20 2013 Andrew Beekhof <abeekhof@redhat.com> - 1.1.9-3
- Update to upstream 7d8acec
- See included ChangeLog file or https://raw.github.com/ClusterLabs/pacemaker/master/ChangeLog for full details
+ Feature: Turn off auto-respawning of systemd services when the cluster starts them
+ Fix: crmd: Ensure operations for cleaned up resources don't block recovery
+ Fix: logging: If SIGTRAP is sent before tracing is turned on, turn it on instead of crashing
* Mon Jun 17 2013 Andrew Beekhof <abeekhof@redhat.com> - 1.1.9-2 * Mon Jun 17 2013 Andrew Beekhof <abeekhof@redhat.com> - 1.1.9-2
- Update for new upstream tarball: 781a388 - Update for new upstream tarball: 781a388
- See included ChangeLog file or https://raw.github.com/ClusterLabs/pacemaker/master/ChangeLog for full details - See included ChangeLog file or https://raw.github.com/ClusterLabs/pacemaker/master/ChangeLog for full details