Skip to content

Commit

Permalink
.......PS. [ZBXNEXT-8500] merged from upstream
Browse files Browse the repository at this point in the history
  • Loading branch information
sokurenko committed Jul 17, 2023
2 parents f1517da + 8fe0149 commit b239502
Show file tree
Hide file tree
Showing 308 changed files with 17,916 additions and 7,827 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ src/zabbix_sender/zabbix_sender
src/zabbix_server/zabbix_server
tests/libs/zbxalgo/evaluate
tests/libs/zbxalgo/evaluate_unknown
tests/libs/zbxalgo/list
tests/libs/zbxalgo/queue
tests/libs/zbxcommon/calculate_item_nextcheck
tests/libs/zbxcommon/calculate_item_nextcheck_unreachable
Expand Down
57 changes: 53 additions & 4 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,8 +1,25 @@
Changes for 7.0.0alpha3

New features:

Bug fixes:
.......PS. [ZBXNEXT-6144] added proxy data memory cache to avoid using proxy history tables in normal operation (wiper)
.........T [ZBXNEXT-7944] excluded edgeupdate service from services discovery in Windows by Zabbix agent templates (drasikhov)
.......PS. [ZBXNEXT-8460] added asynchronous Zabbix agent and HTTP agent pollers (vso)
.........T [ZBXNEXT-8422] added AWS ECS templates (egordymov)

Bug fixes:
........S. [ZBX-23049] fixed default condition for log item macro resolution (kprutkovs)
.........T [ZBX-21909] updated setup section in README for PHP-FPM templates to include configuration example for Apache (drasikhov)
........S. [ZBX-20148] fixed the issue with housekeeper failing to delete some of the events that required deletion (mprihodko)
..F....... [ZBX-21970] fixed console error in map navigation tree widget; disabled add button on a 10th depth level (acikuns, ashubin)
A......... [ZBX-19393] fixed undefined index errors in configuration.importcompare (agriscenko)
..F....... [ZBX-22811] removed csrf token from the monitoring.host.view url (epulke)
..F....... [ZBX-22290] fixed generation of double page headers when general warning appears (epulke)
...G...... [ZBX-22830] fixed free bytes calculation for temporary tablespace in Oracle Zabbix agent 2 plugin (esneiders)
...G...... [ZBX-21845] fixed Zabbix agent 2 systemd plugin failing with newer dbus (esneiders)
...G...... [ZBX-21547] fixed reading of non-UTF-8 encoded files in Zabbix agent 2 (arimdjonoks)
A.F....... [ZBX-22800] fixed detection of authentication LDAP userdirectory when user is assigned to multiple user groups with LDAP authentication (gcalenko)
..F....... [ZBX-22808] fixed broken timeline breakpoint in Problems by severity widget (Ivo)
.........T [ZBX-21571] updated pod crash loop trigger expressions in Kubernetes nodes and cluster state templates (drasikhov)
..F....... [ZBX-22825] fixed Zabbix access to the first page for user with specific page access (dpetra)
..F....... [ZBX-22711] fixed incorrectly displayed simple graphs with non-numeric items in Host graphs page (kkuzmina)
..F....... [ZBX-22369] fixed suffix interpretation in threshold values for "Item value" and "Top hosts" widget (averza, esekace)
Expand Down Expand Up @@ -114,8 +131,26 @@ A.F....... [ZBX-21976] added support of OneLogin and Azure SCIM, fixed some issu
Changes for 6.4.5rc1

New features:

Bug fixes:
.........T [ZBXNEXT-7944] excluded edgeupdate service from services discovery in Windows by Zabbix agent templates (drasikhov)
.........T [ZBXNEXT-8422] added AWS ECS templates (egordymov)

Bug fixes:
........S. [ZBX-23049] fixed default condition for log item macro resolution (kprutkovs)
.........T [ZBX-21909] updated setup section in README for PHP-FPM templates to include configuration example for Apache (drasikhov)
...G...... [ZBX-21547] fixed reading of non-UTF-8 encoded files in Zabbix agent 2 (arimdjonoks)
........S. [ZBX-20148] fixed the issue with housekeeper failing to delete some of the events that required deletion (mprihodko)
..F....... [ZBX-21970] fixed console error in map nav tree widget; disabled add button on a 10th depth level (acikuns, ashubin)
A......... [ZBX-19393] fixed undefined index errors in configuration.importcompare (agriscenko)
..F....... [ZBX-22811] removed csrf token from the monitoring.host.view url (epulke)
..F....... [ZBX-22290] fixed generation of double page headers when general warning appears (epulke)
...G...... [ZBX-21845] fixed Zabbix agent 2 systemd plugin failing with newer dbus (esneiders)
...G...... [ZBX-22830] fixed free bytes calculation for temporary tablespace in Oracle Zabbix agent 2 plugin (esneiders)
A.F....... [ZBX-22800] fixed detection of authentication LDAP userdirectory when user is assigned to multiple user groups with LDAP authentication (gcalenko)
..F....... [ZBX-22808] fixed broken timeline breakpoint in Problems by severity widget (Ivo)
..F....... [ZBX-22914] fixed incorrect calculation of even correlation condition formula when adding a third condition to existing two conditions (Ivo)
..F....... [ZBX-22912] fixed not being able to save an event correlation when custom formula was selected but only one condition remained (Ivo)
..F....... [ZBX-22906] fixed correlation condition popup creating a duplicate condition record when editing an existing correlation (Ivo)
.........T [ZBX-21571] updated pod crash loop trigger expressions in Kubernetes nodes and cluster state templates (drasikhov)
..F....... [ZBX-22369] fixed suffix interpretation in threshold values for "Item value" and "Top hosts" widget (averza, esekace)
..F....... [ZBX-22825] fixed Zabbix access to the first page for user with specific page access (dpetra)
..F....... [ZBX-22711] fixed incorrectly displayed simple graphs with non-numeric items in Host graphs page (kkuzmina)
Expand Down Expand Up @@ -1405,8 +1440,21 @@ A.F....PS. [ZBXNEXT-7402,ZBXNEXT-7413] added support for CyberArk Vault (acikuns
Changes for 6.0.20rc1

New features:
.........T [ZBXNEXT-7944] excluded edgeupdate service from services discovery in Windows by Zabbix agent templates (drasikhov)
.........T [ZBXNEXT-8422] added AWS ECS templates (egordymov)

Bug fixes:
........S. [ZBX-23049] fixed default condition for log item macro resolution (kprutkovs)
.........T [ZBX-21909] updated setup section in README for PHP-FPM templates to include configuration example for Apache (drasikhov)
...G...... [ZBX-21547] fixed reading of non-UTF-8 encoded files in Zabbix agent 2 (arimdjonoks)
........S. [ZBX-20148] fixed the issue with housekeeper failing to delete some of the events that required deletion (mprihodko)
..F....... [ZBX-21970] fixed console error in map nav tree widget; disabled add button on a 10th depth level (acikuns, ashubin)
A......... [ZBX-19393] fixed undefined index errors in configuration.importcompare (agriscenko)
..F....... [ZBX-22290] fixed generation of double page headers when general warning appears (epulke)
...G...... [ZBX-21845] fixed Zabbix agent 2 systemd plugin failing with newer dbus (esneiders)
...G...... [ZBX-22830] fixed free bytes calculation for temporary tablespace in Oracle Zabbix agent 2 plugin (esneiders)
..F....... [ZBX-22912] fixed not being able to save an event correlation when custom formula was selected but only one condition remained (Ivo)
.........T [ZBX-21571] updated pod crash loop trigger expressions in Kubernetes nodes and cluster state templates (drasikhov)
..F....... [ZBX-22369] fixed suffix interpretation in threshold values for "Top hosts" widget (esekace)
..F....... [ZBX-22825] fixed Zabbix access to the first page for user with specific page access (dpetra)
..F....... [ZBX-22867] fixed import popup showing circle animation even if PHP code failed (dfofanovs)
Expand Down Expand Up @@ -4032,6 +4080,7 @@ Changes for 5.0.37rc1
New features:

Bug fixes:
...G...... [ZBX-22830] fixed free bytes calculation for temporary tablespace in Oracle Zabbix agent 2 plugin (esneiders)

--------------------------------------------------------------------------------
Changes for 5.0.36
Expand Down
1 change: 0 additions & 1 deletion ChangeLog.d/bugfix/ZBX-21547

This file was deleted.

1 change: 0 additions & 1 deletion ChangeLog.d/bugfix/ZBX-21571

This file was deleted.

1 change: 0 additions & 1 deletion ChangeLog.d/bugfix/ZBX-22800

This file was deleted.

1 change: 0 additions & 1 deletion ChangeLog.d/bugfix/ZBX-22808

This file was deleted.

1 change: 1 addition & 0 deletions ChangeLog.d/bugfix/ZBX-22915
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
..F....... [ZBX-22915] fixed unfocusable dashboard pages in editing mode (apoga)
1 change: 1 addition & 0 deletions ChangeLog.d/bugfix/ZBX-23014
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
...G...... [ZBX-23014] fixed Zabbix agent build on HP-UX (arimdjonoks)
1 change: 1 addition & 0 deletions ChangeLog.d/bugfix/ZBX-23037
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
...G...... [ZBX-23037] fixed memory leak in vfs.fs.get[] (Andris)
1 change: 1 addition & 0 deletions ChangeLog.d/feature/ZBXNEXT-743
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
..F....... [ZBXNEXT-743] implemented new Gauge widget (apoga, ashubin, averza)
1 change: 0 additions & 1 deletion ChangeLog.d/feature/ZBXNEXT-8422

This file was deleted.

17 changes: 14 additions & 3 deletions build/mingw/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ OBJS = \
$(OUTPUTDIR)\sysinfo_dir.o \
$(OUTPUTDIR)\sysinfo_alias.o \
$(OUTPUTDIR)\eventlog.o \
$(OUTPUTDIR)\process_eventslog.o \
$(OUTPUTDIR)\process_eventslog6.o \
$(OUTPUTDIR)\symbols.o \
$(OUTPUTDIR)\win32_file.o \
$(TARGETDIR)\resource.syso
Expand Down Expand Up @@ -245,15 +247,24 @@ $(OUTPUTDIR)\zbxregexp.o: $(TOPDIR)\src\libs\zbxregexp\zbxregexp.c
$(OUTPUTDIR)\active_checks.o: $(TOPDIR)\src\zabbix_agent\active_checks\active_checks.c
$(CC) $(CFLAGS) -DUNICODE -c $^ -o $@

$(OUTPUTDIR)\eventlog.o: $(TOPDIR)\src\zabbix_agent\eventlog\eventlog.c
$(CC) $(CFLAGS) -DUNICODE -c $^ -o $@

$(OUTPUTDIR)\process_eventslog.o: $(TOPDIR)\src\zabbix_agent\eventlog\process_eventslog.c
$(CC) $(CFLAGS) -DUNICODE -c $^ -o $@

$(OUTPUTDIR)\process_eventslog6.o: $(TOPDIR)\src\zabbix_agent\eventlog\process_eventslog6.c
$(CC) $(CFLAGS) -DUNICODE -c $^ -o $@

$(OUTPUTDIR)\eventlog.o: $(TOPDIR)\src\zabbix_agent\eventlog\eventlog.c
$(CC) $(CFLAGS) -DUNICODE -c $^ -o $@

$(OUTPUTDIR)\persistent_state.o: $(TOPDIR)\src\zabbix_agent\logfiles\persistent_state.c
$(CC) $(CFLAGS) -DUNICODE -c $^ -o $@

$(OUTPUTDIR)\logfiles.o: $(TOPDIR)\src\zabbix_agent\logfiles\logfiles.c
$(CC) $(CFLAGS) -DUNICODE -c $^ -o $@

$(OUTPUTDIR)\eventlog.o: $(TOPDIR)\src\zabbix_agent\eventlog.c
$(CC) $(CFLAGS) -DUNICODE -c $^ -I$(TOPDIR)\go\win64 -o $@

$(TARGETDIR)\resource.syso: $(TOPDIR)\build\win32\project\resource.rc
$(WINDRES) $^ $(RFLAGS) -D _WINDOWS -D ZABBIX_AGENT2 -o $@

Expand Down
4 changes: 3 additions & 1 deletion build/win32/project/Makefile_agent
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,9 @@ OBJS = \
..\..\..\src\libs\zbxwin32\perfmon.o \
..\..\..\src\libs\zbxwinservice\service.o \
..\..\..\src\zabbix_agent\active_checks\active_checks.o \
..\..\..\src\zabbix_agent\eventlog.o \
..\..\..\src\zabbix_agent\eventlog\eventlog.o \
..\..\..\src\zabbix_agent\eventlog\process_eventslog.o \
..\..\..\src\zabbix_agent\eventlog\process_eventslog6.o \
..\..\..\src\zabbix_agent\listener.o \
..\..\..\src\zabbix_agent\logfiles\persistent_state.o \
..\..\..\src\zabbix_agent\logfiles\logfiles.o \
Expand Down
11 changes: 8 additions & 3 deletions build/win32/project/Makefile_targets.inc
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@ all: $(PREBUILD) $(PROGNAME) $(POSTBUILD)

clean: $(POSTCLEAN)
# break this down because del has limit for command-line args length (NMAKE : fatal error U1077: 'del' : return code '0x1')
del $(OBJS) 2>NUL
del $(RESOURCE_RES) $(MESSAGES_H) $(PROGNAME) messages.rc MSG00001.bin $(TARGETNAME).$(TARGETEXT).manifest \
$(PDBS) $(TARGETNAME).$(TARGETEXT).idb 2>NUL
@<<zbx_del_obj.bat
del $(OBJS)
<<
del $(RESOURCE_RES) $(MESSAGES_H) $(PROGNAME) messages.rc 2>NUL
del MSG00001.bin $(TARGETNAME).$(TARGETEXT).manifest $(PDBS) $(TARGETNAME).$(TARGETEXT).idb 2>NUL

$(PROGNAME): $(MESSAGES_H) $(OBJS) $(RESOURCE_RES)
$(LINKER) $(OBJS) $(RESOURCE_RES) $(LFLAGS) /OUT:$(PROGNAME) $(LIBS)
Expand Down Expand Up @@ -127,6 +129,9 @@ $(RESOURCE_RES): $(RESOURCE_RC) $(RESOURCE_H) $(DESC_H)
{..\..\..\src\zabbix_agent\active_checks}.c{..\..\..\src\zabbix_agent\active_checks}.o:
$(CC) $? /Fo"$@" $(CFLAGS)

{..\..\..\src\zabbix_agent\eventlog}.c{..\..\..\src\zabbix_agent\eventlog}.o:
$(CC) $? /Fo"$@" $(CFLAGS)

{..\..\..\src\zabbix_agent\logfiles}.c{..\..\..\src\zabbix_agent\logfiles}.o:
$(CC) $? /Fo"$@" $(CFLAGS)

Expand Down
67 changes: 67 additions & 0 deletions conf/zabbix_proxy.conf
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,49 @@ DBUser=zabbix
# Default:
# ProxyOfflineBuffer=1

### Option: ProxyBufferMode
# Specifies history, discovery and auto registration data storage mechanism:
# disk - data are stored in database and uploaded from database
# memory - data are stored in memory and uploaded from memory.
# If buffer runs out of memory the old data will be discarded.
# On shutdown the buffer is discarded.
# hybrid - the proxy buffer normally works like in memory mode until it runs out of memory or
# the oldest record exceeds the configured age. If that happens the buffer is flushed
# to database and it works like in disk mode until all data have been uploaded and
# it starts working with memory again. On shutdown the memory buffer is flushed
# to database.
#
# Mandatory: no
# Values: disk, memory, hybrid
# Default:
# ProxyBufferMode=disk

ProxyBufferMode=hybrid

### Option: ProxyMemoryBufferSize
# Size of shared memory cache for collected history, discovery and auto registration data, in bytes.
# If enabled (not zero) proxy will keep history discovery and auto registration data in memory unless
# cache is full or stored records are older than defined ProxyMemoryBufferAge.
# This parameter cannot be used together with ProxyLocalBuffer parameter.
#
# Mandatory: no
# Range: 0,128K-2G
# Default:
# ProxyMemoryBufferSize=0

ProxyMemoryBufferSize=16M

### Option: ProxyMemoryBufferAge
# Maximum age of data in proxy memory buffer, in seconds.
# When enabled (not zero) and records in proxy memory buffer are older, then it forces proxy buffer
# to switch to database mode until all records are uploaded to server.
# This parameter must be less or equal to ProxyOfflineBuffer parameter.
#
# Mandatory: no
# Range: 0,600-864000
# Default:
# ProxyMemoryBufferAge=0

### Option: ConfigFrequency - Deprecated, use ProxyConfigFrequency
# How often proxy retrieves configuration data from Zabbix Server in seconds.
# For a proxy in the passive mode this parameter will be ignored.
Expand Down Expand Up @@ -265,6 +308,30 @@ DBUser=zabbix
# Default:
# StartPollers=5

### Option: StartAgentPollers
# Number of pre-forked instances of asynchronous Zabbix agent pollers. Also see MaxConcurrentChecksPerPoller.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartAgentPollers=1

### Option: StartHTTPAgentPollers
# Number of pre-forked instances of asynchronous HTTP agent pollers. Also see MaxConcurrentChecksPerPoller.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartHTTPAgentPollers=1

### Option: MaxConcurrentChecksPerPoller
# Maximum number of asynchronous checks that can be executed at once by each HTTP agent poller or agent poller.
#
# Mandatory: no
# Range: 1-1000
# Default:
# MaxConcurrentChecksPerPoller=1000

### Option: StartIPMIPollers
# Number of pre-forked instances of IPMI pollers.
# The IPMI manager process is automatically started when at least one IPMI poller is started.
Expand Down
25 changes: 25 additions & 0 deletions conf/zabbix_server.conf
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,30 @@ DBUser=zabbix
# Default:
# StartPollers=5

### Option: StartAgentPollers
# Number of pre-forked instances of asynchronous Zabbix agent pollers. Also see MaxConcurrentChecksPerPoller.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartAgentPollers=1

### Option: StartHTTPAgentPollers
# Number of pre-forked instances of asynchronous HTTP agent pollers. Also see MaxConcurrentChecksPerPoller.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartHTTPAgentPollers=1

### Option: MaxConcurrentChecksPerPoller
# Maximum number of asynchronous checks that can be executed at once by each HTTP agent poller or agent poller.
#
# Mandatory: no
# Range: 1-1000
# Default:
# MaxConcurrentChecksPerPoller=1000

### Option: StartIPMIPollers
# Number of pre-forked instances of IPMI pollers.
# The IPMI manager process is automatically started when at least one IPMI poller is started.
Expand All @@ -216,6 +240,7 @@ DBUser=zabbix
# Default:
# StartIPMIPollers=0


### Option: StartPreprocessors
# Number of pre-started instances of preprocessing workers.
#
Expand Down
5 changes: 5 additions & 0 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -1985,7 +1985,10 @@ AC_CONFIG_FILES([
src/go/Makefile
src/libs/Makefile
src/libs/zbxalgo/Makefile
src/libs/zbxasyncpoller/Makefile
src/libs/zbxasynchttppoller/Makefile
src/libs/zbxaudit/Makefile
src/libs/zbxautoreg/Makefile
src/libs/zbxavailability/Makefile
src/libs/zbxconnector/Makefile
src/libs/zbxcommon/Makefile
Expand All @@ -2007,6 +2010,7 @@ AC_CONFIG_FILES([
src/libs/zbxdiscovery/Makefile
src/libs/zbxembed/Makefile
src/libs/zbxeval/Makefile
src/libs/zbxevent/Makefile
src/libs/zbxexec/Makefile
src/libs/zbxexport/Makefile
src/libs/zbxexpr/Makefile
Expand All @@ -2031,6 +2035,7 @@ AC_CONFIG_FILES([
src/libs/zbxparam/Makefile
src/libs/zbxpreproc/Makefile
src/libs/zbxprometheus/Makefile
src/libs/zbxproxybuffer/Makefile
src/libs/zbxregexp/Makefile
src/libs/zbxrtc/Makefile
src/libs/zbxself/Makefile
Expand Down
1 change: 1 addition & 0 deletions create/src/data.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -1070,6 +1070,7 @@ ROW |21 |tophosts |widgets/tophosts |1 |[] |
ROW |22 |trigover |widgets/trigover |1 |[] |
ROW |23 |url |widgets/url |1 |[] |
ROW |24 |web |widgets/web |1 |[] |
ROW |25 |gauge |widgets/gauge |1 |[] |

TABLE |role_rule
FIELDS|role_ruleid|roleid|type|name |value_int|value_str|value_moduleid|value_serviceid|
Expand Down
8 changes: 4 additions & 4 deletions create/src/schema.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -1043,7 +1043,7 @@ FIELD |ns |t_nanosec |'0' |NOT NULL |0
FIELD |value |t_bin |'' |NOT NULL |0

TABLE|proxy_history|id|0
FIELD |id |t_serial | |NOT NULL |0
FIELD |id |t_id | |NOT NULL |0
FIELD |itemid |t_id | |NOT NULL |0 |-|items
FIELD |clock |t_time |'0' |NOT NULL |0
FIELD |timestamp |t_time |'0' |NOT NULL |0
Expand All @@ -1060,7 +1060,7 @@ FIELD |write_clock |t_time |'0' |NOT NULL |0
INDEX |1 |clock

TABLE|proxy_dhistory|id|0
FIELD |id |t_serial | |NOT NULL |0
FIELD |id |t_id | |NOT NULL |0
FIELD |clock |t_time |'0' |NOT NULL |0
FIELD |druleid |t_id | |NOT NULL |0 |-|drules
FIELD |ip |t_varchar(39) |'' |NOT NULL |0
Expand Down Expand Up @@ -1161,7 +1161,7 @@ INDEX |1 |host
INDEX |2 |proxyid

TABLE|proxy_autoreg_host|id|0
FIELD |id |t_serial | |NOT NULL |0
FIELD |id |t_id | |NOT NULL |0
FIELD |clock |t_time |'0' |NOT NULL |0
FIELD |host |t_varchar(128) |'' |NOT NULL |0
FIELD |listen_ip |t_varchar(39) |'' |NOT NULL |0
Expand Down Expand Up @@ -2138,4 +2138,4 @@ TABLE|dbversion|dbversionid|
FIELD |dbversionid |t_id | |NOT NULL |0
FIELD |mandatory |t_integer |'0' |NOT NULL |
FIELD |optional |t_integer |'0' |NOT NULL |
ROW |1 |6050053 |6050053
ROW |1 |6050057 |6050057
1 change: 0 additions & 1 deletion include/audit/zbxaudit_graph.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
#ifndef ZABBIX_AUDIT_GRAPH_H
#define ZABBIX_AUDIT_GRAPH_H

#include "zbxcommon.h"
#include "zbxalgo.h"

void zbx_audit_graph_create_entry(int audit_action, zbx_uint64_t graphid, const char *name, int flags);
Expand Down
1 change: 0 additions & 1 deletion include/audit/zbxaudit_httptest.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
#ifndef ZABBIX_AUDIT_HTTPTEST_H
#define ZABBIX_AUDIT_HTTPTEST_H

#include "zbxcommon.h"
#include "zbxalgo.h"

void zbx_audit_httptest_create_entry(int audit_action, zbx_uint64_t httptestid, const char *name);
Expand Down
Loading

0 comments on commit b239502

Please sign in to comment.