Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Linuxfabrik
Fork of the Icinga Director
Commits
7a95f430
Commit
7a95f430
authored
Sep 30, 2019
by
Thomas Gelf
Browse files
DaemonDb: trigger restart on schema change
fixes #1964
parent
4ba2c21c
Changes
2
Hide whitespace changes
Inline
Side-by-side
library/Director/Daemon/BackgroundDaemon.php
View file @
7a95f430
...
...
@@ -147,6 +147,14 @@ class BackgroundDaemon
// TODO: level is sent but not used
$processState
->
setComponentState
(
'db'
,
$state
);
});
$db
->
on
(
'schemaChange'
,
function
(
$startupSchema
,
$dbSchema
)
{
Logger
::
info
(
sprintf
(
"DB schema version changed. Started with %d, DB has %d. Restarting."
,
$startupSchema
,
$dbSchema
));
$this
->
reload
();
});
$db
->
setConfigWatch
(
$dbResourceName
...
...
library/Director/Daemon/DaemonDb.php
View file @
7a95f430
...
...
@@ -47,8 +47,15 @@ class DaemonDb
/** @var Deferred|null */
protected
$pendingDisconnect
;
/** @var \React\EventLoop\TimerInterface */
protected
$refreshTimer
;
/** @var \React\EventLoop\TimerInterface */
protected
$schemaCheckTimer
;
/** @var int */
protected
$startupSchemaVersion
;
public
function
__construct
(
DaemonProcessDetails
$details
,
$dbConfig
=
null
)
{
$this
->
details
=
$details
;
...
...
@@ -84,6 +91,9 @@ class DaemonDb
$this
->
refreshTimer
=
$loop
->
addPeriodicTimer
(
3
,
function
()
{
$this
->
refreshMyState
();
});
$this
->
schemaCheckTimer
=
$loop
->
addPeriodicTimer
(
15
,
function
()
{
$this
->
checkDbSchema
();
});
if
(
$this
->
configWatch
)
{
$this
->
configWatch
->
run
(
$this
->
loop
);
}
...
...
@@ -148,7 +158,8 @@ class DaemonDb
if
(
$this
->
hasAnyOtherActiveInstance
(
$connection
))
{
throw
new
RuntimeException
(
'DB is locked by a running daemon instance'
);
}
$this
->
details
->
set
(
'schema_version'
,
$migrations
->
getLastMigrationNumber
());
$this
->
startupSchemaVersion
=
$migrations
->
getLastMigrationNumber
();
$this
->
details
->
set
(
'schema_version'
,
$this
->
startupSchemaVersion
);
$this
->
connection
=
$connection
;
$this
->
db
=
$connection
->
getDbAdapter
();
...
...
@@ -159,6 +170,42 @@ class DaemonDb
return
$connection
;
}
protected
function
checkDbSchema
()
{
if
(
$this
->
connection
===
null
)
{
return
;
}
if
(
$this
->
schemaIsOutdated
())
{
$this
->
emit
(
'schemaChange'
,
[
$this
->
getStartupSchemaVersion
(),
$this
->
getDbSchemaVersion
()
]);
}
}
protected
function
schemaIsOutdated
()
{
return
$this
->
getStartupSchemaVersion
()
<
$this
->
getDbSchemaVersion
();
}
protected
function
getStartupSchemaVersion
()
{
return
$this
->
startupSchemaVersion
;
}
protected
function
getDbSchemaVersion
()
{
if
(
$this
->
connection
===
null
)
{
throw
new
RuntimeException
(
'Cannot determine DB schema version without an established DB connection'
);
}
$migrations
=
new
Migrations
(
$this
->
connection
);
return
$migrations
->
getLastMigrationNumber
();
}
protected
function
onConnected
()
{
$this
->
emitStatus
(
'connected'
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment