Commit Graph

6363 Commits

Author SHA1 Message Date
Julian Brost a2926b8604
Merge pull request #9794 from Icinga/round-notification-times-begin-end-not-to-crash-go-daemon
IcingaDB::PrepareObject(): round Notification#times.{begin,end} not to crash Go daemon
2023-06-27 17:08:41 +02:00
Alexander A. Klimov dccb678882 IcingaDB::PrepareObject(): cut off (null) negative Notification#times.{begin,end} not to crash Go daemon
At least our PostgreSQL schema enforces positive values.
2023-06-27 12:58:08 +02:00
Alexander A. Klimov 415b810abf IcingaDB::PrepareObject(): round Notification#times.{begin,end} not to crash Go daemon
The latter expects ints, not floats - not to mention strings.
Luckily Icinga already enforces numeric strings so that we can cast it to number.
2023-06-27 12:53:08 +02:00
Julian Brost 9cf519316e
Merge pull request #9805 from Icinga/checkcommand-timeout-0-crashes-icinga-db-daemon-9804
IcingaDB::PrepareObject(): cut off (0) negative Command#timeout for Redis
2023-06-27 10:45:02 +02:00
Julian Brost c08d3beeb1
Merge pull request #9785 from Icinga/Al2Klimov-patch-8
Icinga DB: also write ConfigObject#original_attributes into Redis
2023-06-27 10:24:41 +02:00
Julian Brost bd11bc2eb4
Merge pull request #9793 from Icinga/unmarshal-number-42-5-into-go-struct-field-notification-notification_interval
IcingaDB::PrepareObject(): round Notification#interval and limit it to >=0
2023-06-27 10:12:13 +02:00
Alexander A. Klimov d641a3c799 IcingaDB::PrepareObject(): cut off (0) negative Command#timeout for Redis
not to crash the Go daemon which expects positive values there.
2023-06-26 15:36:47 +02:00
Julian Brost 5350aa3c72
Merge pull request #9792 from Icinga/icingadb-conversion-of-strings-to-number-types-to-avoid-crashes-9791
IcingaDB::PrepareObject(): convert non-null Checkable#check_timeout to number
2023-06-26 15:03:21 +02:00
Alexander A. Klimov 273aa6f997 IcingaDB::PrepareObject(): round Notification#interval and limit it to >=0
otherwise, e.g. with -42.5, the Go daemon crashes. It expects uints there.
2023-06-19 12:46:40 +02:00
Alexander A. Klimov 9f08bad395 IcingaDB::PrepareObject(): convert non-null Checkable#check_timeout to number
and, in case of null, fall back to Checkable#check_command.timeout, just like
IcingaDB#SerializeState(). Otherwise the Go daemon crashes. It expects a number.
2023-06-15 12:29:42 +02:00
Alexander A. Klimov 1587431945 POST /v1/objects: allow array of attrs to undo modifications of 2023-06-13 16:40:33 +02:00
Alexander A. Klimov 385fe2fd76 Icinga DB: also write ConfigObject#original_attributes into Redis
for the case the Go daemon decides to sync them into DB.
2023-06-12 12:53:25 +02:00
Julian Brost 7c381ae12f
Merge pull request #9779 from Icinga/macroprocessor-resolvemacro-quasi-cv-object-icingaapplication
MacroProcessor::ResolveMacro(): treat quasi-CV-object IcingaApplication as real CV-object
2023-05-31 20:41:31 +02:00
Alexander A. Klimov a9c80ffb2e MacroProcessor::ResolveMacro(): treat quasi-CV-object IcingaApplication as real CV-object
As MacroProcessor checked just for CustomVarObject base class, but
IcingaApplication provided the vars attribute by itself, it had to also
resolve CV macros by itself. That logic diverged from MacroProcessor so that
macros inside IcingaApplication CVs weren't resolved. Until now.
2023-05-31 16:35:09 +02:00
Julian Brost 8a42c3bf18
Merge pull request #9775 from Icinga/icingadb-service-crashes-on-negative-downtime-duration-or-end-before-start-9774
Icinga DB: don't write negative Downtime durations into Redis
2023-05-31 11:37:42 +02:00
Alexander A. Klimov 75eaa81c06 Icinga DB: don't write negative Downtime durations into Redis
via `std::max(0, x)` not to crash the Go daemon which can't handle such.
2023-05-30 17:56:03 +02:00
Julian Brost b0899d9ab4
Merge pull request #8429 from Icinga/bugfix/last-reload-attempt-failed-8428
Share "Last reload attempt failed" time across Icinga process tree on *nix
2023-05-30 11:42:21 +02:00
Julian Brost d871c5c837
Merge pull request #9772 from Icinga/icinga-db-feature-should-normalize-command-arguments-required-skip_key-repeat_key-to-boolean-9576
Icinga DB feature: normalize *Command.arguments[*].{required,skip_key…
2023-05-25 11:54:01 +02:00
Alexander A. Klimov ad618e9716 Icinga DB feature: normalize *Command.arguments[*].{required,skip_key,repeat_key} to boolean
At the moment, the Icinga DB feature will use that value as-is and
serialize it to JSON, resulting in a crash in Icinga DB down the road
because it expects a boolean.
2023-05-24 16:04:14 +02:00
Julian Brost 2470e930eb
Merge pull request #9643 from Icinga/hardware_concurrency
Always use Configuration#Concurrency, not `std:🧵:hardware_concurrency()`
2023-05-23 19:23:14 +02:00
Alexander A. Klimov 3fae41ef22 Restart thread pool after freezing Configuration
The user (-D) or we could have changed Configuration.Concurrency,
so correct the thread pool's thread amount.
2023-05-23 14:41:35 +02:00
Julian Brost 0e25644151
Merge pull request #8969 from Icinga/bugfix/perfdata-dont-get-parsed-correctly-8912
PluginUtility: Fix PerfData parsing for values separated with multiple spaces
2023-05-22 17:16:31 +02:00
Alexander A. Klimov 9376a311ea Fix file endings
git ls-files -z \
	|grep -zEe '^lib/' \
	|grep -zEe '\.[ch]pp$' \
	|xargs -0 perl -p0i -e 's/\n*(?!(?:.|\n))/\n/'
2023-05-17 18:05:13 +02:00
Alexander A. Klimov 32eb1680f7 Configuration.Concurrency: default to 1 until Configuration freeze
not to start many threads before the user could override their amount (-D).
2023-05-11 16:59:47 +02:00
Alexander A. Klimov 8fb5d53118 Track Configuration.Concurrency modifications 2023-05-11 15:41:35 +02:00
Alexander A. Klimov 5c330e9d4f Share "Last reload attempt failed" time across Icinga process tree on *nix
... as only the umbrella process knows that time,
but the icinga check running in the main process also needs to know it.

refs #8428
2023-05-08 14:42:21 +02:00
Julian Brost eca8890d49
Merge pull request #9718 from Icinga/acknowledgement-sync-between-masters-are-not-working-9652
Checkable#ProcessCheckResult(): only clean up ack comments older than check result
2023-05-05 15:29:38 +02:00
Julian Brost af9d67b262
Merge pull request #9726 from Icinga/43624b
Remove -and notify- expired downtimes immediately, not every 60s II
2023-05-02 11:25:03 +02:00
Alexander A. Klimov 58b788cd51 Downtime#Start(): trigger flexible downtimes not earlier than fixed ones
the last state change could be a long time ago. If it's longer than
the new downtime's duration, the downtime expires immediately.

trigger time + duration < now
2023-04-18 16:55:32 +02:00
Julian Brost 8238ec0d96
Merge pull request #9725 from Icinga/operation_aborted-shutDownIfNeeded.Cancel
ApiListener#NewClientHandlerInternal(): on basic_socket#cancel() (due to timeout) don't ssl::stream#async_shutdown()
2023-04-17 12:21:21 +02:00
Alexander A. Klimov 0ac1cd1ecb Rename Downtime::DowntimesExpireTimerHandler()
to actually reflect its purpose.
2023-04-14 14:52:05 +02:00
Alexander A. Klimov 6adf2d19e4 Remove -and notify- expired downtimes immediately, not every 60s
Don't look for expired downtimes in a timer fired every 60s,
but fire one timer per downtime once at expire time.
2023-04-14 14:52:05 +02:00
Alexander A. Klimov ba7102cae3 Explicitly stop started timers and wait for them
before permitting their parent objects' destruction.
For the cases where the handlers have raw pointers to these objects.
2023-04-14 14:52:04 +02:00
Julian Brost 8228fae740
Merge pull request #8627 from WuerthPhoenix/bug/agent-cannot-update-executions-8616
Fix update execution message discarded. refs #8616
2023-04-13 19:29:49 +02:00
Julian Brost f505325ff9
Merge pull request #9445 from Icinga/9365
Disallow config modifications via API during reload
2023-04-13 17:11:58 +02:00
Mattia Codato c5c17928a6 Allow to exec command on endpoint where the checkable is not present but checkable has command_endpoint specified 2023-04-13 14:44:07 +02:00
Alexander A. Klimov 2ee776b5ab Disallow config modifications via API during reload
Once the new main process has read the config,
it misses subsequent modifications from the old process otherwise.
2023-04-12 14:45:40 +02:00
Alexander A. Klimov 64e000df56 Introduce ConfigObjects*Lock 2023-04-12 13:36:48 +02:00
Julian Brost 50018c1d2b
Merge pull request #8218 from efuss/redundancy_group
Introduce redundancy groups for Dependency Objects
2023-04-05 18:49:58 +02:00
Yonas Habteab 24d95e1178 PluginUtility: Fix PerfData don't get parsed correctly
The problem was that some PerfData labels contained several whitespace characters,
not just one, and therefore it was parsed incorrectly in `SplitPerfdata()`. I.e. the condition
in line 144 checks whether the first and last character is a normal quote, but since the
label can contain spaces at the beginning and at the end respectively, this caused the problems.

This PR fixes the problem by removing all occurring whitespace from the beginning and end,
before starting to parse the actual label.
2023-04-05 15:37:54 +02:00
Alexander A. Klimov a66ace7245 Introduce SharedMemory 2023-04-04 13:40:27 +02:00
Alexander A. Klimov c41e5fd05d Support multiple redundant Timer#Start() calls
so that only the first one changes l_AliveTimers (as in Timer#Stop()).
2023-04-04 10:35:22 +02:00
Alexander A. Klimov 298f3b1973 Timer: actually support non-periodic timers 2023-04-04 10:35:22 +02:00
Alexander A. Klimov 3933502739 Timer#Start(): don't unnecessarily unlock/lock l_TimerMutex
via new Timer#InternalRescheduleUnlocked()
2023-04-04 10:35:22 +02:00
Alexander A. Klimov 13b9cfda41 Timer::TimerThreadProc(): don't unnecessarily unlock and lock l_TimerMutex 2023-04-04 10:35:22 +02:00
Alexander A. Klimov 1badbab002 Timer::TimerThreadProc(): keep a Timer alive while it's running
to prevent the case: Timer callback destroys parent object -> destroys
Timer -> ~Timer() -> Stop(true) -> waits for the Timer callback to finish
-> deadlock.
2023-04-04 10:35:22 +02:00
Alexander A. Klimov 9b00c1c4dd Timer: drop unnecessary base class 2023-04-04 10:35:22 +02:00
Alexander A. Klimov 24681b30f6 Make Timer::Ptr a std::shared_ptr 2023-04-04 10:35:22 +02:00
Alexander A. Klimov 9ee4d08722 Make Timer#Timer() private to enforce Timer::Create() usage 2023-04-04 10:35:22 +02:00
Alexander A. Klimov 21b68455ce Use Timer::Create() instead of new Timer()
git ls-files -z |xargs -0 perl -pi -e 's/\bnew Timer\b/Timer::Create/g'

ex. in Timer::Create() itself.
2023-04-04 10:35:20 +02:00
Alexander A. Klimov bb1f574b69 Introduce factory method Timer::Create() 2023-04-04 10:35:10 +02:00
Alexander A. Klimov 35248b1b63 Code style 2023-04-03 13:39:08 +02:00
Alexander A. Klimov cc872dac1f Remove CheckResultReader which has been deprecated for 5 major versions 2023-04-03 11:39:21 +02:00
Julian Brost 7a7902cea7
Merge pull request #9715 from Icinga/StatusDataWriter
Remove StatusDataWriter which has been deprecated for 5 major versions
2023-03-31 12:32:43 +02:00
Julian Brost e87e1ea73f Freeze globals namespace during config load
This allows for a faster config load due to less locking required.

The change is slightly backwards-incompatible. Before, you could manipulate the
globals namespace at a later stage, but disallowing this feels reasonable for
the performance benefit alone (which especially shows on many-core machines).
Apart from that, it's doubtful if doing so is even useful at all as the DSL
provides no mechanism for you to synchronize your operations that may run in
parallel. The data structures itself are protected from race conditions, but
anything implemented on top of this may still be subject to race conditions.
And even if some user has a good reason for doing this, there's a feasible
workaround by creating your own namespace like globals.mutable and using that
instead.
2023-03-30 18:07:51 +02:00
Alexander A. Klimov 335688909b Document why Timer::TimerThreadProc() can use Timer members during Timer#~Timer() call 2023-03-29 18:04:19 +02:00
Alexander A. Klimov 78b4dc6509 Remove unused Stream#Peek() 2023-03-24 18:18:13 +01:00
Alexander A. Klimov 4c154f93dc ApiListener#NewClientHandlerInternal(): on basic_socket#cancel() (due to timeout) don't ssl::stream#async_shutdown()
If a connection hangs for too long in ApiListener#NewClientHandler(),
ApiListener#AddConnection()'s Timeout calls boost::asio::basic_socket#cancel()
on that connection to trigger an exception which unwinds
ApiListener#NewClientHandler(). Previously that unwind could trigger a Defer
which called boost::asio::ssl::stream#async_shutdown() which extended the hang.
2023-03-21 10:57:40 +01:00
Julian Brost 66b039df9c
Merge pull request #9497 from Icinga/9249
Application::Exit(): don't exit(), but _exit(), even in debug build mode
2023-03-10 16:04:54 +01:00
Alexander A. Klimov 6414fd19f5 Checkable#ProcessCheckResult(): only clean up ack comments older than check result
Normally if for some reason an ack comment still exists on a checkable not
acked anymore, still clean it up. But while replaying log config objects
incl. ack comments come before check results and acks. I.e. 1) ack comment,
2) DOWN check result and 3) ack. Not 1) DOWN check result, 2) ack and 3) ack
comment. So the checkable is temporarily not acked, but already has the ack
comment. In this case the DOWN check result which is older than the ack
comment shall not clean up the latter.
2023-03-03 15:48:34 +01:00
Alexander A. Klimov 4662d4477b Checkable#RemoveAckComments(): add optional comment entry time filter 2023-03-03 15:48:11 +01:00
Alexander A. Klimov dceb29c742 Checkable#RemoveCommentsByType(): remove redundant parameter 2023-03-03 11:53:02 +01:00
Mattia Codato 912fdb9700 Fix update execution message discarded
refs Icinga#8616
2023-03-02 17:50:39 +01:00
Alexander Aleksandrovič Klimov 55930c8042
ProcessSpawnImpl(): remove redundant _exit(128);
Now this if doesn’t _exit(128) by itself, but "return" to the outer if which immediately _exit(128)s.
2023-03-02 12:45:15 +01:00
Alexander A. Klimov bbf2e80002 Remove StatusDataWriter which has been deprecated for 5 major versions 2023-03-01 17:16:28 +01:00
Julian Brost cf517050bc
Merge pull request #9711 from Icinga/connect-cancel
Connect(): don't try next DNS record if operation is canceled
2023-03-01 15:49:53 +01:00
Alexander A. Klimov 79f1e0666a Connect(): don't try next DNS record if operation is canceled
Instead return immediately to meet the caller's expectations.
2023-02-28 10:57:54 +01:00
Edgar Fuß 20d7e1b5e6 Fix use of std::unordered_map::insert() as pointed out by Nathaniel Wesley Filardo in GitHup Pull Request #8999 2023-02-21 16:23:40 +01:00
Edgar Fuß 5bba609e60 Add missing #include 2023-02-21 16:23:40 +01:00
Edgar Fuß cfef9fdadc Introduce redundancy groups for Dependency Objects
Traditional behaviour was to regard all dependecies as cumulative (e.g., the parent considered unreachable if any one dependency is violated), commit ed58922389 made all dependencies regarded redundant (e.g., the parent considered unreachable only if all dependency are violated). This may lead to unrelated services (or even hosts vs. services) inadvertantly regarded to be redundant to each other.

Most importantly, applying the explicit "disable-host-service-checks" dependency described in the "Monitoring Basics" chapter will defeat all other dependencies.

This commit introduces a new "redundancy_group" attribute for dependencies.
Specifying a redundancy_group causes a dependency to be regarded as redundant only inside that redundancy group.
Dependencies lacking a redundancy_group attribute are regarded as essential for the parent.

This allows for both cumulative and redundant dependencies and even a combination (cumulation of redundancies, like SSH depeding on both LDAP and DNS to function, while operating redundant LDAP servers as well as redundant DNS resolvers).

This commit lacks changes to the tests.
2023-02-21 16:23:36 +01:00
Julian Brost bda8be343b
Merge pull request #9662 from Icinga/Repair#9627
Repair DSL Namespace values being constant broken in #9627
2023-02-20 16:35:36 +01:00
Julian Brost d9767cff3f
Merge pull request #9675 from Icinga/third-party/nlohmann_json
Update third-party/nlohmann_json to v3.9.1
2023-02-20 15:31:32 +01:00
Julian Brost a84a0a3cee
Merge pull request #8302 from Icinga/bugfix/windows-systemroot-aliases-6259
Macros: support $env.ENV_VAR_NAME$
2023-02-20 13:09:15 +01:00
Alexander A. Klimov f2974c07cf Centralise default icinga.* and env.* macros 2023-02-17 15:33:36 +01:00
Julian Brost 3023009804
Merge pull request #9653 from Icinga/9631
Setup all signal handlers with SA_RESTART flag
2023-02-14 17:55:09 +01:00
Alexander A. Klimov 34d0b942b9 Update third-party/nlohmann_json to v3.9.1
the latest version w/o Apache 2.0 licensed code which conflicts with GPL 2.
2023-02-14 16:19:44 +01:00
Alexander Aleksandrovič Klimov fd5350d588
Fix typo 2023-02-13 13:00:28 +01:00
Julian Brost e074e892ce
Merge pull request #9658 from Icinga/unfreeze
Dictionary#*(): remove bool overrideFrozen if unused
2023-02-10 19:42:00 +01:00
Julian Brost 213f3f9444
Merge pull request #8389 from Icinga/feature/forbid-dep-cycles
Forbid dependency cycles
2023-02-10 17:26:04 +01:00
Alexander A. Klimov b2b49caf61 Macros: support $env.ENV_VAR_NAME$
refs #6259
2023-02-10 17:21:29 +01:00
Alexander A. Klimov f3f2c943c7 ScriptGlobal::Set(): don't explicitly give Namespace#Set() its default values 2023-02-10 15:55:10 +01:00
Alexander A. Klimov e61b380808 Call Namespace#Set(), not #SetFieldByName()
Namespace#SetFieldByName() calls #Set() anyway.
2023-02-10 15:53:30 +01:00
Alexander A. Klimov 683095a165 Make globals.Internal values non-const by default
That namespace is internal anyway.

Previous commit, icinga2 console:
Error: Constants must not be removed.

This commit fixes it.
2023-02-10 15:47:25 +01:00
Alexander A. Klimov 02df94a46a Repair DSL Namespace values being constant broken in #9627
master before #9627 (a0286e9c6):

<1> => namespace n { x = 42; x = 42 }
                             ^^^^^^
Constant must not be modified.
<2> =>

HEAD of #9627 (24b57f0d3):

<1> => namespace n { x = 42; x = 42 }
null
<2> =>
2023-02-10 15:43:01 +01:00
Julian Brost 0dd35bb960
Merge pull request #9657 from Icinga/shared_mutex-Dictionary
Use a shared_mutex for read `Dictionary` operations
2023-02-10 15:15:52 +01:00
Alexander A. Klimov e9846f1827 ScriptGlobal::Set(): remove unused bool overrideFrozen 2023-02-10 11:33:46 +01:00
Alexander A. Klimov cd78da13d3 Dictionary#Clear(): remove unused bool overrideFrozen 2023-02-10 11:33:46 +01:00
Alexander A. Klimov 270c6392d4 Dictionary#Remove(): remove unused bool overrideFrozen 2023-02-10 11:33:46 +01:00
Alexander A. Klimov ca547d0292 Use a shared_mutex for read `Dictionary` operations
This allows multiple parallel read operations resulting
in a overall speedup on systems with many cores.
2023-02-10 11:31:51 +01:00
Alexander A. Klimov a309b4a415 ResolverSpec: add option not to resolve "$name$"
but only "$host.name$".
2023-02-06 16:39:17 +01:00
Alexander A. Klimov 5b63407d15 Forbid dependency cycles 2023-02-06 12:33:48 +01:00
Alexander A. Klimov 91901eafd8 Introduce EnvResolver
refs #6259
2023-02-06 11:25:25 +01:00
Alexander A. Klimov a9341eb4a0 Setup all signal handlers with SA_RESTART flag
so interrupted syscalls get auto-restarted and callers
don't get or have to handle the EINTR error.
2023-02-03 14:46:45 +01:00
Julian Brost c51037725a
Merge pull request #9466 from Icinga/flush-temp-files
Deduplicate and stabilize fragile filesystem transactions
2023-02-02 16:29:11 +01:00
Julian Brost 3eb85797ce
Merge pull request #9622 from Icinga/9563
Main process: ignore SIGHUP
2023-02-02 11:36:13 +01:00
Julian Brost a0239e44f7
Merge pull request #9598 from Icinga/9596
CheckerComponent#CheckThreadProc(): also propagate next check update …
2023-02-01 20:09:06 +01:00
Alexander Aleksandrovič Klimov 4e021e0105
Merge pull request #9648 from Icinga/frozen-namespace-config-validation
Fix config sync after freezing namespaces
2023-02-01 17:07:57 +01:00
Alexander A. Klimov e9b8c67975 CheckerComponent#CheckThreadProc(): also propagate next check update to Icinga DB
if caused by dependency or check period.

Now as long as any of the above causes check skips
next check and next update will be up-to-date in Icinga DB,
so the checkable won't slide into false positive overdue.
2023-02-01 16:25:56 +01:00
Julian Brost 2b43354080
Merge pull request #8744 from Icinga/bugfix/unnecessary-chown-8743
NodeUtility::WriteNodeConfigObjects(): avoid unneccessary Utility::SetFileOwnership()
2023-02-01 14:27:46 +01:00
Julian Brost fd1aa73d25 Fix config sync after freezing namespaces
This was accidentally broken by #9627 because during config sync, a config
validation happens that uses `--define System.ZonesStageVarDir=...` which fails
on the now frozen namespace.

This commit changes this to use `Internal.ZonesStageVarDir` instead. After all,
this is used for internal functionality, users should not directly interact
with this flag.

Additionally, it no longer freezes the `Internal` namespace which actually
allows using `Internal.ZonesStageVarDir` in the first place. This also fixes
`--define Internal.Debug*` which was also broken by said PR. Freezing of the
`Internal` namespace is not necessary for performance reasons as it's not
searched implicitly (for example when accessing `globals.x`) and should users
actually interact with it, they should know by that name that they are on their
own.
2023-02-01 12:29:47 +01:00
Alexander A. Klimov c953ba1206 Remove redundant ThreadPool#m_Threads 2023-01-27 16:34:11 +01:00
Alexander A. Klimov 288ad68649 ThreadPool#ThreadPool(): remove unused parameter 2023-01-27 16:32:29 +01:00
Alexander A. Klimov fd93feaec7 Include Utility::SetFileOwnership() inside FS transactions
to make them even more atomic.
2023-01-27 12:03:59 +01:00
Alexander A. Klimov d22fdf2a7a Introduce AtomicFile#GetTempFilename() 2023-01-27 12:03:59 +01:00
Alexander A. Klimov 0367c9e099 Remove unused Utility::CreateTempFile() 2023-01-27 12:03:59 +01:00
Alexander A. Klimov b92fe23469 Deduplicate and stabilize fragile filesystem transactions
by using AtomicFile so they ensure all or nothing of a file gets replaced.
2023-01-27 12:03:56 +01:00
Alexander A. Klimov a3e205b990 Introduce AtomicFile::Write() 2023-01-27 11:36:09 +01:00
Julian Brost 2d860a0f5e
Merge pull request #8118 from Icinga/feature/speed-object-registry-8112
Speed up config object lookup
2023-01-26 19:03:40 +01:00
Alexander Aleksandrovič Klimov 421ac1735c
Merge pull request #9608 from Icinga/move-types-namespace
Move Types namespace into type.cpp and simplify Type::GetByName()
2023-01-26 18:32:41 +01:00
Julian Brost ad8868cab7
Merge pull request #9599 from Icinga/influx-ns
Influx DB: don't unneccessarily truncate timestamps to whole seconds
2023-01-26 17:44:50 +01:00
Alexander A. Klimov b2fc49569c Make ConfigType#m_Mutex a std::shared_timed_mutex
refs #8112
2023-01-26 15:04:02 +01:00
Alexander A. Klimov 21759f015d ConfigType: store config objects in a hash map
refs #8112
2023-01-26 15:03:54 +01:00
Julian Brost 3dab46623b Move Types namespace into type.cpp and simplify Type::GetByName()
This commit moves the initialization of the globals.Types namespace to type.cpp
in order to keep a pointer to the Namespace object in Type::m_Namespace and
simplify Type::GetByName() using it.

The dynamic type check is moved into an assertion after freezing the namespace.
2023-01-26 14:26:41 +01:00
Yonas Habteab 5a67ddea76 Don't post-increment stl iterators 2023-01-26 09:10:49 +01:00
Yonas Habteab 8bb0b857d8 ApiListener: Fix memory leak & group `a || b && c` correctly 2023-01-26 09:10:49 +01:00
Yonas Habteab 95cec9cba2 Don't mark a method as `virtual` in a `final` class 2023-01-26 09:10:38 +01:00
Yonas Habteab 7b91b200f5 Use simplified if conditions where applicable 2023-01-26 09:06:20 +01:00
Yonas Habteab 38313434d2 Avoid calling `GetDeferredInitializers()` repeatedly 2023-01-26 09:05:19 +01:00
Alexander Aleksandrovič Klimov bb99106926
Merge pull request #7863 from Icinga/bugfix/disallow-receiving-ticket-salt-via-api
Disallow fetching the ticket salt via REST API
2023-01-25 16:39:30 +01:00
Julian Brost 5fea15e090
Merge pull request #7958 from Icinga/bugfix/api-500-404-7956
/v1/actions/*: return 404 if no objects found
2023-01-24 15:08:17 +01:00
Michael Friedrich 4d57de2a1a Hide TicketSalt in /v1/variables 2023-01-20 12:38:18 +01:00
Julian Brost 24b57f0d3a Namespace: don't acquire shared locks on frozen namespaces
This makes freezing a namespace an irrevocable operation but in return allows
omitting further lock operations. This results in a performance improvement as
reading an atomic bool is faster than acquiring and releasing a shared lock.

ObjectLocks on namespaces remain untouched as these mostly affect write
operations which there should be none of after freezing (if there are some,
they will throw exceptions anyways).
2023-01-19 17:56:44 +01:00
Julian Brost cc0e2ec181 Use a shared_mutex for read `Namespace` operations
This allows multiple parallel read operations resulting in a overall speedup on
systems with many cores.
2023-01-19 17:55:29 +01:00
Julian Brost 1c066fc02e Simplify NamespaceValue class hierarchy to one struct without member functions
This commit removes EmbeddedNamespaceValue and ConstEmbeddedNamespaceValue and
reduces NamespaceValue down to a simple struct without inheritance or member
functions. The code from these clases is inlined into the Namespace class. The
class hierarchy determining whether a value is const is moved to an attribute
of NamespaceValue.

This is done in preparation for changes to the locking in the Namespace class.
Currently, it relies on a recursive mutex. In the future, a shared mutex
(read/write lock) should be used instead, which cannot allow recursive locking
(without failing or risk deadlocking on lock upgrades). With this change, all
operations requiring a lock for one operation are within one function, no
recursive locking is not needed any more.
2023-01-19 17:55:11 +01:00
Julian Brost 0503ca1379 Initialize namespaces without using `overrideFrozen`
This commit adds a new initialization priority `FreezeNamespaces` that is run
last and moves all calls to `Namespace::Freeze()` there. This allows all other
initialization functions to still update namespaces without the use of the
`overrideFrozen` flag.

It also moves the initialization of `System.Platform*` and `System.Build*` to
an initialize function so that these can also be set without setting
`overrideFrozen`.

This is preparation for a following commit that will make the frozen flag in
namespaces finial, no longer allowing it to be overriden (freezing the
namespace will disable locking, so performing further updates would be unsafe).
2023-01-19 09:53:36 +01:00
Julian Brost 6229f4d9bf InitializePriority: don't explicitly specify values
Now that all values are in one place, there is no reason for this numbering
with gaps anymore. If you need to insert a new value in between, you can just
do so in the enum.

This reverses the sort order of the enum, thereby requiring a change to the
sort order of the std::priority_queue containing the elements.
2023-01-18 15:57:32 +01:00
Julian Brost 99bb687350 INITIALIZE_ONCE_WITH_PRIORITY: use enum for priority values
Change the type of the priority values from int to a new enum. By replacing the
magic int values throughout the code base with named values, there is now a
single place where all priority values are defined and you get an overview over
the initialization order.
2023-01-18 15:57:27 +01:00
Julian Brost 61285adcae InitializeOnceHelper: use std::function instead of C function pointer
InitializeOnceHelper calls Loader::AddDeferredInitializer which takes a
std::function, so it's eventually converted to that anyways. This commit just
does this a bit earlier, and by saving the step of the intermediate C function
pointer, this would now also work for capturing lambdas (which there are none
of at the moment).
2023-01-18 15:52:42 +01:00
Julian Brost c019f8c04a
Merge pull request #9603 from Icinga/remove-namespace-behavior
Namespace: replace behavior classes with a bool
2023-01-18 15:48:34 +01:00
Julian Brost a259650bea
Merge pull request #8595 from Icinga/bugfix/cluster-zone-own-zone-8570
cluster-zone: consider own zone connected if there's only one endpoint
2023-01-17 17:26:14 +01:00
Alexander A. Klimov 21f548d3c0 Remove no-op InfluxDB URL param
precision=ns is the default.
2023-01-16 12:03:08 +01:00
Julian Brost 9590c176e3
Merge pull request #9491 from Icinga/9488
Fix compile error on Solaris 11.4
2023-01-12 14:22:52 +01:00
Julian Brost 0294c174a4
Merge pull request #9594 from Icinga/8834
ConfigObjectUtility::GetObjectConfigPath(): just return paths of existing objects
2023-01-09 13:49:58 +01:00
Alexander A. Klimov e1bb085b0f ConfigObjectUtility::DeleteObjectHelper(): only delete _api files
to restore the behavior before the previous commit. Otherwise we'd delete all
API object's child objects' files including applied child object rules in /etc.
2023-01-05 18:05:31 +01:00
Julian Brost dd51997c73
Merge pull request #9624 from Icinga/9618
Make compilable on Boost v1.81
2023-01-05 15:32:22 +01:00
Alexander A. Klimov 99c2d69dc8 Handle boost::beast::http::basic_fields#operator[]() signature change (v1.81)
Use always working std::string(x), not broken x.to_string().
(x is a return value.)
2023-01-05 11:18:20 +01:00
Alexander A. Klimov 5bcbc96e22 Handle boost::beast::http::basic_fields#set() signature change (v1.81)
Make String convertible to boost::beast::string_view (always working),
not boost::string_view (broken).
2023-01-05 11:18:20 +01:00
Alexander A. Klimov d059885d9b Main process: ignore SIGHUP
On OpenBSD rcctl reload icinga2 SIGHUPs all "icinga2" processes,
not just our umbrella. We must handle this.
2023-01-03 18:29:31 +01:00
Julian Brost fbb68dbcd0 Namespace: replace behavior classes with a bool
In essence, namespace behaviors acted as hooks for update operations on
namespaces. Two behaviors were implemented:

- `NamespaceBehavior`: allows the update operation unless it acts on a value
  that itself was explicitly marked as constant.
- `ConstNamespaceBehavior`: initially allows insert operations but marks the
  individual values as const. Additionally provides a `Freeze()` member
  function. After this was called, updates are rejected unless a special
  `overrideFrozen` flag is set explicitly.

This marvel of object-oriented programming can be replaced with a simple bool.
This commit basically replaces `Namespace::m_Behavior` with
`Namespace::m_ConstValues` and inlines the behavior functions where they were
called. While doing so, the code was slightly simplified by assuming that
`m_ConstValues` is true if `m_Frozen` is true. This is similar to what the API
allowed in the old code as you could only freeze a `ConstNamespaceBehavior`.
However, this PR moves the `Freeze()` member function and the related
`m_Freeze` member variable to the `Namespace` class. So now the API allows any
namespace to be frozen. The new code also makes sense with the previously
mentioned simplification: a `Namespace` with `m_ConstValues = false` can be
modified without restrictions until `Freeze()` is called. When this is done, it
becomes read-only.

The changes outside of `namespace.*` just adapt the code to the slightly
changed API.
2022-12-09 09:25:46 +01:00
Julian Brost a8cc5dff89 Prevent ObjectLock from being copied
Copying an ObjectLock results in the underlying mutex being unlocked too often.
There's also no good reason for copying a scoped locking class (if at all, it
should be moved).
2022-12-08 15:48:01 +01:00
Alexander Aleksandrovič Klimov ca328627cd
Merge pull request #9537 from Icinga/replace-some-raw-pointer-with-intrusive-ptr
FilterUtility: Replace some nested raw pointers by `unique_ptr<>*`
2022-12-06 13:07:24 +01:00
Alexander Aleksandrovič Klimov b585e20a4c
Merge pull request #9591 from Icinga/circular-refs
icinga2 daemon: w/o --dump-objects just check for circular refs
2022-11-30 21:41:21 +01:00
Alexander A. Klimov ba62c665aa WorkQueue#ParallelFor(): allocate lambda once per thread, not once per item 2022-11-30 11:10:24 +01:00
Alexander A. Klimov 83021f8231 CONTEXT: use << everywhere to unify usages 2022-11-30 11:06:51 +01:00
Alexander A. Klimov b82814fb29 CONTEXT: lazily evaluate frames to only actually assemble when needed 2022-11-30 11:06:45 +01:00
Alexander A. Klimov 0b46e0aeab CONTEXT: use l_Frames as stack to reduce modification complexity 2022-11-30 10:56:24 +01:00
Alexander A. Klimov 70df0e298e CONTEXT: reduce malloc()s by replacing linked list with vector 2022-11-30 10:56:24 +01:00
Alexander A. Klimov 7c481742f4 icinga2 daemon: w/o --dump-objects just check for circular refs
and don't malloc() anything.
2022-11-30 10:45:50 +01:00
Alexander A. Klimov e53ec2a50f SerializeInternal(): allow to optionally not malloc() anything
This effectively just checks for circular refs.
2022-11-30 10:45:50 +01:00
Alexander A. Klimov 145ee890df Just get paths from existing objects for modification and deletion
instead of computing from scratch if they're in the _api package.

For now this changes literally nothing as paths of existing objects still follow
the scheme of paths of new objects which didn't change. Now Icinga only doesn't expect
existing objects at particular paths. However, with the latter in v2.14+ (agent,
satellite) we can just change the path scheme of new objects in v2.16+ (master)
as we wish. The child nodes will just follow the new scheme of paths of new objects.
2022-11-28 16:39:16 +01:00