Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
ISC Open Source Projects
Kea
Commits
615df6d2
Commit
615df6d2
authored
Sep 02, 2014
by
Marcin Siodelski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[3534] Commit and rollback the staging configuration.
parent
117561c3
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
32 additions
and
28 deletions
+32
-28
src/bin/dhcp4/ctrl_dhcp4_srv.cc
src/bin/dhcp4/ctrl_dhcp4_srv.cc
+10
-13
src/bin/dhcp4/json_config_parser.cc
src/bin/dhcp4/json_config_parser.cc
+0
-1
src/bin/dhcp4/kea_controller.cc
src/bin/dhcp4/kea_controller.cc
+7
-0
src/bin/dhcp6/ctrl_dhcp6_srv.cc
src/bin/dhcp6/ctrl_dhcp6_srv.cc
+8
-13
src/bin/dhcp6/json_config_parser.cc
src/bin/dhcp6/json_config_parser.cc
+0
-1
src/bin/dhcp6/kea_controller.cc
src/bin/dhcp6/kea_controller.cc
+7
-0
No files found.
src/bin/dhcp4/ctrl_dhcp4_srv.cc
View file @
615df6d2
...
...
@@ -145,19 +145,16 @@ ControlledDhcpv4Srv::processConfig(isc::data::ConstElementPtr config) {
}
// Configuration may change active interfaces. Therefore, we have to reopen
// sockets according to new configuration. This operation is not exception
// safe and we really don't want to emit exceptions to whoever called this
// method. Instead, catch an exception and create appropriate answer.
try
{
CfgMgr
::
instance
().
getCurrentCfg
()
->
getCfgIface
()
.
openSockets
(
CfgIface
::
V4
,
srv
->
getPort
(),
getInstance
()
->
useBroadcast
());
// sockets according to new configuration. It is possible that this
// operation will fail for some interfaces but the openSockets function
// guards against exceptions and invokes a callback function to
// log warnings. Since we allow that this fails for some interfaces there
// is no need to rollback configuration if socket fails to open on any
// of the interfaces.
CfgMgr
::
instance
().
getStagingCfg
()
->
getCfgIface
().
openSockets
(
CfgIface
::
V4
,
srv
->
getPort
(),
getInstance
()
->
useBroadcast
());
}
catch
(
std
::
exception
&
ex
)
{
err
<<
"failed to open sockets after server reconfiguration: "
<<
ex
.
what
();
answer
=
isc
::
config
::
createAnswer
(
1
,
err
.
str
());
}
return
(
answer
);
}
...
...
@@ -177,7 +174,7 @@ void ControlledDhcpv4Srv::shutdown() {
ControlledDhcpv4Srv
::~
ControlledDhcpv4Srv
()
{
cleanup
();
server_
=
NULL
;
// forget this instance. Noone should call any handlers at
// this stage.
}
...
...
src/bin/dhcp4/json_config_parser.cc
View file @
615df6d2
...
...
@@ -648,7 +648,6 @@ configureDhcp4Server(Dhcpv4Srv&, isc::data::ConstElementPtr config_set) {
// Rollback changes as the configuration parsing failed.
if
(
rollback
)
{
globalContext
().
reset
(
new
ParserContext
(
original_context
));
CfgMgr
::
instance
().
rollback
();
return
(
answer
);
}
...
...
src/bin/dhcp4/kea_controller.cc
View file @
615df6d2
...
...
@@ -102,7 +102,14 @@ void configure(const std::string& file_name) {
isc_throw
(
isc
::
BadValue
,
reason
);
}
// Configuration successful.
CfgMgr
::
instance
().
commit
();
}
catch
(
const
std
::
exception
&
ex
)
{
// If configuration failed at any stage, we drop the staging
// configuration and continue to use the previous one.
CfgMgr
::
instance
().
rollback
();
LOG_ERROR
(
dhcp4_logger
,
DHCP4_CONFIG_LOAD_FAIL
)
.
arg
(
file_name
).
arg
(
ex
.
what
());
isc_throw
(
isc
::
BadValue
,
"configuration error using file '"
...
...
src/bin/dhcp6/ctrl_dhcp6_srv.cc
View file @
615df6d2
...
...
@@ -140,19 +140,14 @@ ControlledDhcpv6Srv::processConfig(isc::data::ConstElementPtr config) {
}
// Configuration may change active interfaces. Therefore, we have to reopen
// sockets according to new configuration. This operation is not exception
// safe and we really don't want to emit exceptions to the callback caller.
// Instead, catch an exception and create appropriate answer.
try
{
CfgMgr
::
instance
().
getCurrentCfg
()
->
getCfgIface
()
.
openSockets
(
CfgIface
::
V6
,
srv
->
getPort
());
}
catch
(
const
std
::
exception
&
ex
)
{
std
::
ostringstream
err
;
err
<<
"failed to open sockets after server reconfiguration: "
<<
ex
.
what
();
answer
=
isc
::
config
::
createAnswer
(
1
,
err
.
str
());
}
// sockets according to new configuration. It is possible that this
// operation will fail for some interfaces but the openSockets function
// guards against exceptions and invokes a callback function to
// log warnings. Since we allow that this fails for some interfaces there
// is no need to rollback configuration if socket fails to open on any
// of the interfaces.
CfgMgr
::
instance
().
getStagingCfg
()
->
getCfgIface
().
openSockets
(
CfgIface
::
V6
,
srv
->
getPort
());
return
(
answer
);
}
...
...
src/bin/dhcp6/json_config_parser.cc
View file @
615df6d2
...
...
@@ -849,7 +849,6 @@ configureDhcp6Server(Dhcpv6Srv&, isc::data::ConstElementPtr config_set) {
// Rollback changes as the configuration parsing failed.
if
(
rollback
)
{
globalContext
().
reset
(
new
ParserContext
(
original_context
));
CfgMgr
::
instance
().
rollback
();
return
(
answer
);
}
...
...
src/bin/dhcp6/kea_controller.cc
View file @
615df6d2
...
...
@@ -106,7 +106,14 @@ void configure(const std::string& file_name) {
isc_throw
(
isc
::
BadValue
,
reason
);
}
// Configuration successful.
CfgMgr
::
instance
().
commit
();
}
catch
(
const
std
::
exception
&
ex
)
{
// If configuration failed at any stage, we drop the staging
// configuration and continue to use the previous one.
CfgMgr
::
instance
().
rollback
();
LOG_ERROR
(
dhcp6_logger
,
DHCP6_CONFIG_LOAD_FAIL
)
.
arg
(
file_name
).
arg
(
ex
.
what
());
isc_throw
(
isc
::
BadValue
,
"configuration error using file '"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a 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