draft-ietf-netconf-partial-lock-04.txt   draft-ietf-netconf-partial-lock-05.txt 
NETCONF B. Lengyel NETCONF B. Lengyel
Internet-Draft Ericsson Internet-Draft Ericsson
Intended status: Standards Track M. Bjorklund Intended status: Standards Track M. Bjorklund
Expires: May 2, 2009 Tail-f Systems Expires: June 11, 2009 Tail-f Systems
October 29, 2008 December 08, 2008
Partial Lock RPC for NETCONF Partial Lock RPC for NETCONF
draft-ietf-netconf-partial-lock-04 draft-ietf-netconf-partial-lock-05
Status of this Memo Status of this Memo
By submitting this Internet-Draft, each author represents that any By submitting this Internet-Draft, each author represents that any
applicable patent or other IPR claims of which he or she is aware applicable patent or other IPR claims of which he or she is aware
have been or will be disclosed, and any of which he or she becomes have been or will be disclosed, and any of which he or she becomes
aware will be disclosed, in accordance with Section 6 of BCP 79. aware will be disclosed, in accordance with Section 6 of BCP 79.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that Task Force (IETF), its areas, and its working groups. Note that
skipping to change at page 1, line 35 skipping to change at page 1, line 35
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt. http://www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html. http://www.ietf.org/shadow.html.
This Internet-Draft will expire on May 2, 2009. This Internet-Draft will expire on June 11, 2009.
Copyright Notice Copyright Notice
Copyright (C) The IETF Trust (2008). Copyright (C) The IETF Trust (2008).
Abstract Abstract
The NETCONF protocol defines the lock and unlock RPCs, used to lock The NETCONF protocol defines the lock and unlock RPCs, used to lock
entire configuration datastores. In some situations, a way to lock entire configuration datastores. In some situations, a way to lock
only parts of a configuration datastore is required. This document only parts of a configuration datastore is required. This document
defines a capability-based extension to the NETCONF protocol for defines a capability-based extension to the NETCONF protocol for
locking portions of a configuration datastore. locking portions of a configuration datastore.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1. Definition of Terms . . . . . . . . . . . . . . . . . . . 3 1.1. Definition of Terms . . . . . . . . . . . . . . . . . . . 3
2. Partial Locking Capability . . . . . . . . . . . . . . . . . . 3 2. Partial Locking Capability . . . . . . . . . . . . . . . . . . 3
2.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2. Dependencies . . . . . . . . . . . . . . . . . . . . . . . 4 2.1.1. Usage Scenarios . . . . . . . . . . . . . . . . . . . 4
2.3. Capability Identifier . . . . . . . . . . . . . . . . . . 4 2.2. Dependencies . . . . . . . . . . . . . . . . . . . . . . . 5
2.4. New Operations . . . . . . . . . . . . . . . . . . . . . . 4 2.3. Capability Identifier . . . . . . . . . . . . . . . . . . 5
2.4.1. <partial-lock> . . . . . . . . . . . . . . . . . . . . 4 2.4. New Operations . . . . . . . . . . . . . . . . . . . . . . 5
2.4.2. <partial-unlock> . . . . . . . . . . . . . . . . . . . 8 2.4.1. <partial-lock> . . . . . . . . . . . . . . . . . . . . 6
2.5. Modifications to Existing Operations . . . . . . . . . . . 9 2.4.2. <partial-unlock> . . . . . . . . . . . . . . . . . . . 10
2.6. Interactions with Other Capabilities . . . . . . . . . . . 9 2.5. Modifications to Existing Operations . . . . . . . . . . . 11
2.6.1. Candidate Configuration Capability . . . . . . . . . . 9 2.6. Interactions with Other Capabilities . . . . . . . . . . . 12
2.6.2. Confirmed Commit Capability . . . . . . . . . . . . . 9 2.6.1. Candidate Configuration Capability . . . . . . . . . . 12
2.6.3. Distinct Startup Capability . . . . . . . . . . . . . 10 2.6.2. Confirmed Commit Capability . . . . . . . . . . . . . 12
3. Security Considerations . . . . . . . . . . . . . . . . . . . 10 2.6.3. Distinct Startup Capability . . . . . . . . . . . . . 12
4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 3. Security Considerations . . . . . . . . . . . . . . . . . . . 12
5. Appendix A - XML Schema for Partial Locking (normative) . . 12 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13
5. Appendix A - XML Schema for Partial Locking (normative) . . 14
6. Appendix B - YANG Module for Partial Locking 6. Appendix B - YANG Module for Partial Locking
(non-normative) . . . . . . . . . . . . . . . . . . . . . . . 16 (non-normative) . . . . . . . . . . . . . . . . . . . . . . . 18
7. Appendix C - Change Log . . . . . . . . . . . . . . . . . . 19 7. Appendix C - Change Log . . . . . . . . . . . . . . . . . . 21
7.1. 03-04 . . . . . . . . . . . . . . . . . . . . . . . . . . 19 7.1. 04-05 . . . . . . . . . . . . . . . . . . . . . . . . . . 21
7.2. 02-03 . . . . . . . . . . . . . . . . . . . . . . . . . . 19 7.2. 03-04 . . . . . . . . . . . . . . . . . . . . . . . . . . 21
7.3. 01-02 . . . . . . . . . . . . . . . . . . . . . . . . . . 19 7.3. 02-03 . . . . . . . . . . . . . . . . . . . . . . . . . . 21
7.4. 00-01 . . . . . . . . . . . . . . . . . . . . . . . . . . 19 7.4. 01-02 . . . . . . . . . . . . . . . . . . . . . . . . . . 21
7.5. -00 . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 7.5. 00-01 . . . . . . . . . . . . . . . . . . . . . . . . . . 22
8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 21 7.6. -00 . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 22 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 23
9.1. Normative References . . . . . . . . . . . . . . . . . . . 22 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 24
9.2. Informative References . . . . . . . . . . . . . . . . . . 22 9.1. Normative References . . . . . . . . . . . . . . . . . . . 24
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 23 9.2. Informative References . . . . . . . . . . . . . . . . . . 24
Intellectual Property and Copyright Statements . . . . . . . . . . 24 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 25
Intellectual Property and Copyright Statements . . . . . . . . . . 26
1. Introduction 1. Introduction
The NETCONF protocol [NETCONF] describes the lock and unlock RPCs The [NETCONF] protocol describes the lock and unlock operations that
that operate on entire configuration datastores. Often, multiple operate on entire configuration datastores. Often, multiple
management sessions need to be able to modify the configuration of a management sessions need to be able to modify the configuration of a
managed device in parallel. In these cases, locking only parts of a managed device in parallel. In these cases, locking only parts of a
configuration datastore is needed. This document defines an configuration datastore is needed. This document defines a
extension to the NETCONF protocol to allow this. capability based extension to the NETCONF protocol to support partial
locking of NETCONF datastores using a mechanism based on the existing
The mechanism for partial locking is based on the existing XPath XPath filtering mechanisms.
filtering mechanisms.
Partial locking is defined as a capability to NETCONF.
1.1. Definition of Terms 1.1. Definition of Terms
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in BCP "OPTIONAL" in this document are to be interpreted as described in BCP
14, [RFC2119]. 14, [RFC2119].
Additionally the following terms are defined:
o Instance Identifier: an XPath expression identifying a specific
node in the conceptual XML datastore. It contains an absolute
path expression in abbreviated syntax, where predicates are used
only to specify values for nodes defined as keys to distinguish
multiple instances.
o Scope of the lock: initially the set of nodes returned by the
XPath expressions in a successful partial-lock operation. The set
might be modified if some of the nodes are deleted.
o Protected area: the set of nodes that are protected from
modification by the lock. This consist of nodes in the scope of
the lock and nodes in subtrees under them.
2. Partial Locking Capability 2. Partial Locking Capability
2.1. Overview 2.1. Overview
The :partial-lock capability indicates that the device supports the The :partial-lock capability indicates that the device supports the
locking of its configuration with a more limited scope than a locking of its configuration with a more limited scope than a
complete configuration datastore. The scope to be locked is complete configuration datastore. The scope to be locked is
specified by using restricted or full XPath expressions. Partial specified by using restricted or full XPath expressions. Partial
locking covers configuration data, but not state data. locking only affects configuration data.
The system MUST ensure that configuration resources covered by the The system MUST ensure that configuration resources covered by the
lock are not modified by other NETCONF or non-NETCONF management lock are not modified by other NETCONF or non-NETCONF management
operations such as SNMP and the CLI. operations such as SNMP and the CLI.
The duration of the partial lock begins when the partial lock is The duration of the partial lock begins when the partial lock is
granted and lasts until (1) either the corresponding <partial-unlock> granted and lasts until (1) either the corresponding partial-unlock
operation succeeds or (2) the NETCONF session terminates. operation succeeds or (2) the NETCONF session terminates.
A NETCONF session MAY have multiple parts of one or more datastores A NETCONF session MAY have multiple parts of one or more datastores
(running, candidate, startup) locked using partial lock operations. (running, candidate, startup) locked using partial lock operations.
The <partial-lock> operation returns a lock-id to identify each The <partial-lock> operation returns a lock-id to identify each
successfully acquired lock. successfully acquired lock.
2.1.1. Usage Scenarios
In the following we describe a few scenarios for partial locking.
While scenarios using the running datastore are seen as the most
important, as an example a scenario involving the candidate datastore
is also presented. Besides the three described here, there are many
other usage scenarios possible.
2.1.1.1. Multiple managers handling the writable running datastore
Multiple managers are handling the same NETCONF agent simultaneously.
The agent is handled via the writable running datastore. Each
manager has his or her own task, which might involve the modification
of overlapping sections of the datastore.
After collecting and analyzing input and preparing the NETCONF
operations off-line, the manager locks the areas that are important
for his task using one single <partial-lock> operation. The manager
executes a number of <edit-config> operations to modify the
configuration, then releases the partial-lock. The lock should be
held for only a short time (seconds rather then minutes). The
manager should collect all human input before locking anything. As
each manager locks only a part of the data model, usually multiple
operators can execute the <edit-config> operations simultaneously.
2.1.1.2. Multiple managers handling the writable running datastore,
distinct management areas
Multiple managers are handling the same NETCONF agent simultaneously.
The agent is handled via the writable running datastore. The agent's
data model contains a number of well defined separate areas that can
be configured without impacting other areas. An example can be a
server with multiple applications running on it, or a number of a
network elements with a common NETCONF agent for management.
Each manager has his or her own task, which does not involve the
modification of overlapping sections of the datastore.
The manager locks his area with a <partial-lock> operation, uses a
number of <edit-config> commands to modify it, later releases the
lock. As each manager has his functional area assigned to him, and
he locks only that area, multiple managers can edit the configuration
simultaneously. Locks can be held for extended periods (minutes,
hours), as this will not hinder other managers.
This scenario assumes, that the global lock operation from [NETCONF]
is not used.
2.1.1.3. Multiple managers handling the candidate datastore in a semi-
coordinated work mode
Multiple managers are handling the same NETCONF agent simultaneously.
The agent is handled via the candidate datastore. Each manager has
his or her own task which might involve the modification of
overlapping sections of the datastore.
After collecting and analyzing input and preparing the NETCONF
operations off-line, the manager locks the areas that are important
for his task using one single <partial-lock> operation in both the
candidate and the running datastore. He executes a number of <edit-
config> operations to modify the configuration, then releases the
partial-lock. The lock should be held for only a short time (seconds
rather then minutes).
Operators coordinate with each other. When all of them finish their
tasks one of them orders commit. If any of the operators are still
working, and holds a lock, the commit will fail, and will need to be
repeated after all managers finish.
2.2. Dependencies 2.2. Dependencies
The device MUST support restricted XPath expressions in the select The device MUST support restricted XPath expressions in the select
element, as described in Section 2.4.1. Optionally, if the :xpath element, as described in Section 2.4.1. Optionally, if the :xpath
capability is also supported, the device MUST also support using any capability is also supported (as defined in [NETCONF] chapter 8.9.
XPath 1.0 expression in the select element. XPath Capability), the device MUST also support using any XPath 1.0
expression in the select element.
2.3. Capability Identifier 2.3. Capability Identifier
urn:ietf:params:netconf:capability:partial-lock:1.0 urn:ietf:params:netconf:capability:partial-lock:1.0
2.4. New Operations 2.4. New Operations
2.4.1. <partial-lock> 2.4.1. <partial-lock>
The <partial-lock> operation allows the client to lock a portion of The <partial-lock> operation allows the client to lock a portion of
one or more datastores. The portion to lock is specified with XPath one or more datastores. The portion to lock is specified with XPath
expressions in the select elements and the list of datastores in the expressions in the "select" elements and the list of datastores in
target element in the <partial-lock> operation. Each XPath the "target" elements in the <partial-lock> operation. Each XPath
expression MUST return a node set. Locking a node also protects the expression MUST return a node set.
complete subtree under the node from modification by others.
When a NETCONF session holds a lock on a node, no other session or
non-NETCONF mechanism of the system can change that node or any node
in the hierarchy of nodes beneath it.
Locking a node protects the node itself and the complete subtree
under the node from modification by others. The set of locked nodes
is called the scope of the lock, while all the locked nodes and the
nodes in the subtrees under them make up the protected area.
In some situations it is desirable that the same set of nodes are In some situations it is desirable that the same set of nodes are
locked in more than one datastore. As an example: if an interface is locked in more than one datastore. For example, if an interface is
configured in the candidate datastore, it is dangerous if it is configured in the candidate datastore, it is dangerous for it to be
configured by someone else in a possibly conflicting manner in the configured by someone else in a possibly conflicting manner in the
running datastore. For this reason <partial-lock> allows the locking running datastore. For this reason <partial-lock> allows the locking
of the same sections of the management data in one or multiple of the same sections of the management data in multiple datastores.
datastores.
The select XPath expressions are evaluated only once at lock time. The XPath expressions are evaluated only once at lock time.
Thereafter, the scope of the lock is maintained as a set of nodes. Thereafter, the scope of the lock is maintained as a set of nodes,
If the configuration data is later altered in a way that would make i.e. the returned nodeset, and not by the XPath expression. If the
the original select XPath expressions evaluate to a different set of configuration data is later altered in a way that would make the
nodes, this does not affect the scope of the partial lock. original XPath expressions evaluate to a different set of nodes, this
does not affect the scope of the partial lock.
XPath is only used for the creation of the partial lock. Let's say the agent's data model includes a list of users. If the
Conceptually, the scope of the lock is defined by the returned node XPath expression in the partial lock operation covers all users at
set and not by the XPath expression. locking, the scope of the lock will be maintained as the list of
"user" nodes at the time when the lock was granted. If someone later
creates a new user, this new user will not be included in the locked-
nodes list created previously, the new user will not be locked.
A <partial-lock> operation MUST be handled atomically by the NETCONF A <partial-lock> operation MUST be handled atomically by the NETCONF
server. The server either locks all requested parts of the server. The server either locks all requested parts of the
datastore(s) or none. That is, if during the <partial-lock> datastore(s) or none. If during the <partial-lock> operation one of
operation one of the requested parts cannot be locked, the server the requested parts cannot be locked, the server MUST unlock all
MUST unlock all parts that were previously locked during that parts that have already been locked during that operation.
operation.
If a node is locked by a session, only that same session is able to
modify that node or any node in the subtree underneath it.
If a top level node of a locked subtree is deleted, any other session If a node in the scope of the lock is deleted, it is removed from the
can recreate it, as it is no longer covered by the lock. If all top scope of the lock, so any other session or non-NETCONF mechanism can
level nodes are deleted, the lock will still be present. However, recreate it. If all nodes in the scope of the lock are deleted, the
its scope will become nil (i.e., the lock will not cover any nodes). lock will still be present. However, its scope will become empty
(since the lock will not cover any nodes).
A NETCONF server MUST be able to grant multiple simultaneous partial A NETCONF server MUST be able to grant multiple simultaneous partial
locks to a single NETCONF session. If the scope of the individual locks to a single NETCONF session. If the protected area of the
locks overlaps, nodes in the common area MUST be locked until all of individual locks overlaps, nodes in the common area MUST be protected
the locks are released. until all of the locks are released.
A partial lock operation MUST fail if: A partial lock operation MUST fail if:
o Any NETCONF session (including the current session) owns the o Any NETCONF session (including the current session) owns the
global lock on any target datastore. global lock on any target datastore.
o Any part of the scope to be locked is already locked by another o Any part of the area to be protected is already locked (or
management session/protocol, including other NETCONF sessions protected by partial locking) by another management session,
using the <partial-lock> or any other non-NETCONF management including other NETCONF sessions using <partial-lock> or any other
method. non-NETCONF management method.
o The NETCONF server implements access control, and the locking user o The NETCONF server implements access control, and the locking user
does not have sufficient rights to all parts of a datastore does not have sufficient access rights. The exact handling of
section to be locked. The exact handling of access rights is access rights is outside the scope of this document, but it is
outside the scope of this document, but it is assumed that there assumed that there is an access control system that MAY deny or
is an access control system that MAY deny or allow the partial allow the partial lock operation.
lock operation.
As with most locking systems, it is possible that two management
sessions trying to lock different parts of the configuration could
become dead-locked. To avoid this situation, clients SHOULD lock
everything they need in one operation. If that operation fails, the
client SHOULD back down, release any previously acquired locks, and
retry the procedure after waiting some time interval. The length of
the interval SHOULD be random to avoid repeated dead-locks when both
(or all) clients back down and then retry the partial lock operation.
The <partial-lock> operation is designed for simplicity, so when a The <partial-lock> operation is designed for simplicity, so when a
partial lock is executed you get what you asked for: a set of nodes partial lock is executed you get what you asked for: a set of nodes
that are locked for writing. There are some other issues that are that are locked for writing. As a consequence users must observe the
intentionally not addressed: following:
o Locking does not affect read operations. o Locking does not affect read operations.
o If part of a datastore is locked, this has no effect on any o If part of a datastore is locked, this has no effect on any
unlocked parts of the datastore. If this is a problem (e.g., unlocked parts of the datastore. If this is a problem (e.g.,
changes depend on data values in the unlocked part of the changes depend on data values or nodes outside the protected part
datastore), these values SHOULD be included in the scope of the of the datastore), these nodes should be included in the protected
lock. area of the lock.
o Configuration data can be edited both inside and outside the scope o Configuration data can be edited both inside and outside the
of a lock. It is the responsibility of the NETCONF client protected area of a lock. It is the responsibility of the NETCONF
application to lock all relevant parts of a datastore that are client application to lock all relevant parts of a datastore that
crucial for a specific management action. are crucial for a specific management action.
Note: The <partial-lock> operation does not modify the global <lock> Note: The <partial-lock> operation does not modify the global <lock>
operation defined in the base NETCONF Protocol [NETCONF]. If part of operation defined in the base NETCONF Protocol [NETCONF]. If part of
a datastore is already locked by <partial-lock>, then a global lock a datastore is already locked by <partial-lock>, then a global lock
for that datastore MUST fail even if the global lock is requested by for that datastore MUST fail even if the global lock is requested by
the NETCONF session that owns the partial lock. the NETCONF session that owns the partial lock.
2.4.1.1. Parameters, Result, Examples 2.4.1.1. Parameters, Result, Examples
Parameters: Parameters:
target: Name of one or more configuration datastores of which a part target: Name of one or more configuration datastores of which a part
shall be locked. If multiple datastores are specified the same shall be locked. If multiple datastores are specified the same
select parameter(s) are used for all of them. For each datastore select parameter(s) are evaluated for each of them.
locking of the same set of nodes will be requested.
select: One or more 'select' elements, each containing an XPath select: One or more 'select' elements, each containing an XPath
expression. The XPath expression is evaluated in a context where expression. The XPath expression is evaluated in a context where
the context node is the root of the server's conceptual data the context node is the root of the server's conceptual data
model, and the set of namespace declarations are those in scope model, and the set of namespace declarations are those in scope
on the select element. on the select element.
Each select expression is evaluated for each targeted datastore. Each select expression is evaluated for each targeted datastore.
The nodes that matched the select expression and are locked are The nodes returned from the select expressions are reported in
reported in the rpc-reply message. Note that if some of the the rpc-reply message.
requested nodes exist only in one of the datastores, the lock is
granted on different nodes in different datastores. Note that if some of the requested nodes exist only in some of
the targeted datastores, the lock is granted on different nodes
in different datastores.
Each select expression MUST return a node set, and at least one Each select expression MUST return a node set, and at least one
of the node sets for one of the specified datastores MUST be non- of the node sets for one of the specified datastores MUST be non-
empty. empty.
If the device supports the :xpath capability, any valid XPath 1.0 If the device supports the :xpath capability, any valid XPath 1.0
expression can be used. If the device does not support the expression can be used. If the device does not support the
:xpath capability, the XPath expression MUST be limited to an :xpath capability, the XPath expression MUST be limited to an
Instance Identifier expression. An Instance Identifier is an Instance Identifier expression. An Instance Identifier is an
absolute path expression in abbreviated syntax, where predicates absolute path expression in abbreviated syntax, where predicates
skipping to change at page 8, line 16 skipping to change at page 10, line 15
If the lock is held by a non-NETCONF session, a <session-id> of 0 If the lock is held by a non-NETCONF session, a <session-id> of 0
(zero) is included. If needed the returned session-id may be used to (zero) is included. If needed the returned session-id may be used to
<kill-session> the NETCONF session holding the lock. The same error <kill-session> the NETCONF session holding the lock. The same error
response is returned if the requesting session already holds the response is returned if the requesting session already holds the
(global) lock for the same datastore. (global) lock for the same datastore.
If all the select expressions return an empty node set, the <error- If all the select expressions return an empty node set, the <error-
tag> is 'operation-failed', and the <error-app-tag> is 'no-matches'. tag> is 'operation-failed', and the <error-app-tag> is 'no-matches'.
If any select expression returns something other than a node set, the If any select expression returns something other than a node set, the
<error-tag> is 'invalid-value', the <error-app-tag> is 'XPath does <error-tag> is 'invalid-value', the <error-app-tag> is 'not-a-node-
not return a node set'. set'.
If the :xpath capability is not supported and the XPath expression is If the :xpath capability is not supported and the XPath expression is
not an Instance Identifier, the <error-tag> is 'invalid-value', the not an Instance Identifier, the <error-tag> is 'invalid-value', the
<error-app-tag> is ':xpath capability not supported'. <error-app-tag> is 'invalid-lock-specification'.
If access control denies the partial lock, the <error-tag> is If access control denies the partial lock, the <error-tag> is
'access-denied'. 'access-denied'.
2.4.1.2. Reserving model sections for future work 2.4.1.2. Reserving nodes for future editing
Partial lock cannot be used to lock non-existent nodes, which would Partial lock cannot be used to lock non-existent nodes, which would
effectively attempt to reserve them for future use. To guarantee effectively attempt to reserve them for future use. To guarantee
that a node cannot be created by some other session, the parent node that a node cannot be created by some other session, the parent node
SHOULD be locked, the top level node of the new section created, and should be locked, the top level node of the new section created, and
then locked with another <partial-lock> operation. After this, the then locked with another <partial-lock> operation. After this, the
lock on the parent node SHOULD be removed. lock on the parent node should be removed.
2.4.1.3. Deadlock Avoidance
As with most locking systems, it is possible that two management
sessions trying to lock different parts of the configuration could
become dead-locked. To avoid this situation, clients should lock
everything they need in one operation. If locking fails, the client
should back-off, release any previously acquired locks, and retry the
procedure after waiting some randomized time interval.
2.4.2. <partial-unlock> 2.4.2. <partial-unlock>
The operation unlocks the parts of the datastores that were The operation unlocks the parts of the datastores that were
previously locked using <partial-lock> during the same session. previously locked using <partial-lock> during the same session.
Parameters: Parameters:
lock-id: Lock identifier to unlock, taken from a reply to a previous lock-id: Identity of the lock to be unlocked. This lock-id MUST
<partial-lock> operation. have been received as a response to a lock request by the manager
during the current session, and MUST NOT have been sent in a
previous unlock request.
Example: Unlock a previously created lock Example: Unlock a previously created lock
<nc:rpc xmlns="urn:ietf:params:xml:ns:netconf:partial-lock:1.0" <nc:rpc xmlns="urn:ietf:params:xml:ns:netconf:partial-lock:1.0"
xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"
message-id="136"> message-id="136">
<partial-unlock> <partial-unlock>
<lock-id>127</lock-id> <lock-id>127</lock-id>
</partial-unlock> </partial-unlock>
</nc:rpc> </nc:rpc>
skipping to change at page 9, line 30 skipping to change at page 11, line 35
deleted. deleted.
Negative Response: Negative Response:
If the <lock-id> parameter does not identify a lock which is owned by If the <lock-id> parameter does not identify a lock which is owned by
the session, an 'invalid-value' error is returned. the session, an 'invalid-value' error is returned.
2.5. Modifications to Existing Operations 2.5. Modifications to Existing Operations
A successful partial lock will cause a subsequent operation to fail A successful partial lock will cause a subsequent operation to fail
if it attempts to modify the locked area and is executed in a NETCONF if that attempts to modify nodes in the protected area of the lock
session other than the session that owns the lock. All operations and is executed in a NETCONF session other than the session that has
that modify the datastore are affected, including: <edit-config>, been granted the lock. The <error-tag> 'in-use' and the <error-app-
<copy-config>, <delete-config>, <commit> and <discard-changes>. A tag> 'locked' is returned. All operations that modify the datastore
successful partial lock will also cause the (global) <lock> operation are affected, including: <edit-config>, <copy-config>, <delete-
to fail. All of these operations are affected only if they are config>, <commit> and <discard-changes>. If a datastore contains
targeting the same datastore. nodes locked by partial lock, this will cause the (global) <lock>
operation to fail. The <error-tag> element 'lock-denied' and an
<error-info> element including the <session-id> of the lock owner
will be returned. If the lock is held by a non-NETCONF session, a
<session-id> of 0 (zero) is returned.
All of these operations are affected only if they are targeting the
same datastore.
2.6. Interactions with Other Capabilities 2.6. Interactions with Other Capabilities
2.6.1. Candidate Configuration Capability 2.6.1. Candidate Configuration Capability
Partial locking of the candidate datastore can only be done if the Partial locking of the candidate datastore can only be done if the
:candidate capability is supported by the device. Partial locking of :candidate capability is supported by the device. Partial locking of
the candidate datastore does not depend on whether the datastore was the candidate datastore does not depend on whether the datastore was
modified or not. modified or not.
skipping to change at page 10, line 17 skipping to change at page 12, line 30
o the NETCONF server implements the :confirmed-commit capability, o the NETCONF server implements the :confirmed-commit capability,
and and
o there was a recent confirmed <commit> operation where the o there was a recent confirmed <commit> operation where the
confirming <commit> operation has not been received confirming <commit> operation has not been received
then the lock MUST be denied, because if the confirmation does not then the lock MUST be denied, because if the confirmation does not
arrive, the running datastore MUST be rolled back to its state before arrive, the running datastore MUST be rolled back to its state before
the commit. The NETCONF server might therefore need to modify the the commit. The NETCONF server might therefore need to modify the
configuration. configuration.
In this case the <error-tag> 'in-use' and the <error-app-tag> 'Lock In this case the <error-tag> 'in-use' and the <error-app-tag>
denied, Outstanding confirmed commit' is returned. 'outstanding-confirmed-commit' is returned.
2.6.3. Distinct Startup Capability 2.6.3. Distinct Startup Capability
Partial locking of the startup datastore can only be done if the Partial locking of the startup datastore can only be done if the
:startup capability is supported by the device. :startup capability is supported by the device.
3. Security Considerations 3. Security Considerations
The same considerations are relevant as for the base NETCONF Protocol The same considerations are relevant as for the base NETCONF Protocol
[NETCONF]. It is assumed that the <partial-lock> and <partial- [NETCONF]. It is assumed that the <partial-lock> and <partial-
skipping to change at page 12, line 31 skipping to change at page 14, line 31
contact contact
"Balazs Lengyel "Balazs Lengyel
Ericsson Hungary, Inc. Ericsson Hungary, Inc.
balazs.lengyel@ericsson.com" balazs.lengyel@ericsson.com"
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>
<xs:import namespace="urn:ietf:params:xml:ns:netconf:base:1.0" <xs:import namespace="urn:ietf:params:xml:ns:netconf:base:1.0"
schemaLocation="urn:ietf:params:xml:ns:netconf:base:1.0"/> schemaLocation="urn:ietf:params:xml:ns:netconf:base:1.0"/>
<xs:simpleType name="lock-id-type">
<xs:annotation>
<xs:documentation>
A number identifying a specific
partial-lock granted to a session.
It is allocated by the system, and SHOULD
be used in the unlock operation.
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:unsignedInt"/>
</xs:simpleType>
<xs:complexType name="partialLockType"> <xs:complexType name="partialLockType">
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
A NETCONF operation that locks part of one or more datastores. A NETCONF operation that locks part of one or more datastores.
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>
<xs:complexContent> <xs:complexContent>
<xs:extension base="nc:rpcOperationType"> <xs:extension base="nc:rpcOperationType">
<xs:sequence> <xs:sequence>
<xs:element name="target"> <xs:element name="target" maxOccurs="3">
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
A list of one or more datastore names for NETCONF. A list of one or more datastore names for NETCONF.
Each target element MUST contain a different
datastore name.
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>
<xs:complexType> <xs:complexType>
<xs:sequence> <xs:choice>
<xs:element name="startup" minOccurs="0"> <xs:element name="startup" minOccurs="0">
<xs:complexType/> <xs:complexType/>
</xs:element> </xs:element>
<xs:element name="candidate" minOccurs="0"> <xs:element name="candidate" minOccurs="0">
<xs:complexType/> <xs:complexType/>
</xs:element> </xs:element>
<xs:element name="running" minOccurs="0"> <xs:element name="running" minOccurs="0">
<xs:complexType/> <xs:complexType/>
</xs:element> </xs:element>
</xs:sequence> </xs:choice>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
<xs:element name="select" type="xs:string" <xs:element name="select" type="xs:string"
maxOccurs="unbounded"> maxOccurs="unbounded">
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
XPath expression that specifies the scope of the lock. XPath expression that specifies the scope of the lock.
An Instance Identifier expression must be used unless An Instance Identifier expression must be used unless
the :xpath capability is supported in which case any the :xpath capability is supported in which case any
XPath 1.0 expression is allowed. XPath 1.0 expression is allowed.
skipping to change at page 13, line 37 skipping to change at page 15, line 51
<xs:complexType name="partialUnLockType"> <xs:complexType name="partialUnLockType">
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
A NETCONF operation that releases a previously acquired A NETCONF operation that releases a previously acquired
partial-lock. partial-lock.
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>
<xs:complexContent> <xs:complexContent>
<xs:extension base="nc:rpcOperationType"> <xs:extension base="nc:rpcOperationType">
<xs:sequence> <xs:sequence>
<xs:element name="lock-id" type="xs:unsignedInt"> <xs:element name="lock-id" type="lock-id-type">
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
Identifies the lock, SHOULD be used in the subsequent Identifies the lock to be released. MUST be the value
partial-lock operation. received in the response to the partial-lock operation.
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>
</xs:element> </xs:element>
</xs:sequence> </xs:sequence>
</xs:extension> </xs:extension>
</xs:complexContent> </xs:complexContent>
</xs:complexType> </xs:complexType>
<!-- <partial-lock> operation --> <!-- <partial-lock> operation -->
<xs:element name="partial-lock" type="partialLockType" <xs:element name="partial-lock" type="partialLockType"
substitutionGroup="nc:rpcOperation"/> substitutionGroup="nc:rpcOperation"/>
<!-- <partial-unlock> operation --> <!-- <partial-unlock> operation -->
<xs:element name="partial-unlock" type="partialUnLockType" <xs:element name="partial-unlock" type="partialUnLockType"
substitutionGroup="nc:rpcOperation"/> substitutionGroup="nc:rpcOperation"/>
<!-- reply to <partial-lock> --> <!-- reply to <partial-lock> -->
<xs:complexType name="dataPartInPpartialLockReplyType"> <xs:complexType name="contentPartInPartialLockReplyType">
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
In a reply to a successful partial-lock request the content The content of the reply to a successful
of the <rpc-reply> element MUST conform to this complex type. partial-lock request MUST conform to this complex type.
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>
<xs:sequence> <xs:sequence>
<xs:element name="lock-id" type="xs:unsignedInt"> <xs:element name="lock-id" type="lock-id-type">
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
Identifies the lock to be released. Must be the value Identifies the lock to be released. Must be the value
received in the response to the partial-lock operation. received in the response to the partial-lock operation.
</xs:documentation> </xs:documentation>
</xs:annotation> </xs:annotation>
</xs:element> </xs:element>
<xs:element name="running" minOccurs="0"> <xs:element name="running" minOccurs="0">
<xs:annotation> <xs:annotation>
<xs:documentation> <xs:documentation>
skipping to change at page 16, line 11 skipping to change at page 18, line 11
</xs:complexType> </xs:complexType>
</xs:schema> </xs:schema>
6. Appendix B - YANG Module for Partial Locking (non-normative) 6. Appendix B - YANG Module for Partial Locking (non-normative)
The following YANG module defines the <partial-lock> and <partial- The following YANG module defines the <partial-lock> and <partial-
unlock> operations. The YANG language is defined in unlock> operations. The YANG language is defined in
[I-D.ietf-netmod-yang]. [I-D.ietf-netmod-yang].
module netconf-partial-lock { module ietf-netconf-partial-lock {
namespace urn:ietf:params:xml:ns:netconf:partial-lock:1.0; namespace urn:ietf:params:xml:ns:netconf:partial-lock:1.0;
prefix pl; prefix pl;
organization "IETF NETCONF Working Group"; organization "IETF NETCONF Working Group";
contact contact
"Balazs Lengyel "Balazs Lengyel
Ericsson Ericsson
balazs.lengyel@ericsson.com"; balazs.lengyel@ericsson.com";
description description
"This YANG module defines the <partial-lock> and "This YANG module defines the <partial-lock> and
<partial-unlock> operations."; <partial-unlock> operations.";
revision 2008-10-31 { revision 2008-12-08 {
description "Initial version."; description "Initial version.";
} }
grouping configNames { typedef lock-id-type {
container target { description "A number identifying a specific
description partial-lock granted to a session.
"A list of one or more datastore names."; It is allocated by the system, and SHOULD
leaf running { type empty; } be used in the partial-unlock operation.";
leaf candidate { type empty; } type uint32;
leaf startup { type empty; }
must "running or candidate or startup" {
error-message "At least one datastore must be specified.";
}
}
} }
rpc partial-lock { rpc partial-lock {
description description
"A NETCONF operation that locks part of one or more datastores."; "A NETCONF operation that locks part of one or more datastores.";
input { input {
uses configNames; list target {
description "A list of one or more datastore names.
Each list entry must contain a different datastore name.";
min-elements 1;
max-elements 3;
choice datastore {
leaf running { type empty; }
leaf candidate { type empty; }
leaf startup { type empty; }
}
}
leaf-list select { leaf-list select {
description description
"XPath expression that specifies the scope of the lock. "XPath expression that specifies the scope of the lock.
An Instance Identifier expression MUST be used unless the An Instance Identifier expression MUST be used unless the
:xpath capability is supported, in which case any XPath 1.0 :xpath capability is supported, in which case any XPath 1.0
expression is allowed."; expression is allowed.";
type string; type string;
min-elements 1; min-elements 1;
} }
} }
output { output {
leaf lock-id { leaf lock-id {
description description
"Identifies the lock, if granted. The lock-id MUST be "Identifies the lock, if granted. The lock-id SHOULD be
used in the partial-unlock rpc."; used in the partial-unlock rpc.";
type uint32; type lock-id-type;
} }
container running { container running {
leaf-list locked-node { leaf-list locked-node {
description "List of locked nodes description "List of locked nodes
in the running datastore"; in the running datastore";
type instance-identifier; type instance-identifier;
} }
} }
container candidate { container candidate {
leaf-list locked-node { leaf-list locked-node {
skipping to change at page 17, line 50 skipping to change at page 20, line 7
rpc partial-unlock { rpc partial-unlock {
description description
"A NETCONF operation that releases a previously acquired "A NETCONF operation that releases a previously acquired
partial-lock."; partial-lock.";
input { input {
leaf lock-id { leaf lock-id {
description description
"Identifies the lock to be released. MUST be the value "Identifies the lock to be released. MUST be the value
received in the response to the partial-lock operation."; received in the response to the partial-lock operation.";
type uint32; type lock-id-type;
} }
} }
} }
} }
7. Appendix C - Change Log 7. Appendix C - Change Log
7.1. 03-04 7.1. 04-05
Language and editorial updates
all app-tags are with dashes without spaces
Added usage scenarios
Changed encoding
Clarified definitions, separated scope of lock and protected area
7.2. 03-04
Minor clarifications Minor clarifications
Added list of locked-nodes to the output of partial-lock. Added list of locked-nodes to the output of partial-lock.
Added <target> wrapper around datastore names. Added <target> wrapper around datastore names.
Allowed atomic/one operation locking of datastore parts in multiple Allowed atomic/one operation locking of datastore parts in multiple
datastores. datastores.
Improved English (hopefully) Improved English (hopefully)
Removed the <data> element from rpc-reply following the text of Removed the <data> element from rpc-reply following the text of
rfc4741. rfc4741.
7.2. 02-03 7.3. 02-03
Minor clarifications Minor clarifications
Same descriptions in XSD and YANG. Same descriptions in XSD and YANG.
7.3. 01-02 7.4. 01-02
Made XSD normative Made XSD normative
Clarified that no specific access control is assumed. Clarified that no specific access control is assumed.
Clarified that non-existing nodes are NOT covered by the lock, even Clarified that non-existing nodes are NOT covered by the lock, even
if they where existing and covered by the lock when it was originally if they where existing and covered by the lock when it was originally
granted. granted.
Some rewording Some rewording
skipping to change at page 19, line 40 skipping to change at page 22, line 4
Made XSD normative Made XSD normative
Clarified that no specific access control is assumed. Clarified that no specific access control is assumed.
Clarified that non-existing nodes are NOT covered by the lock, even Clarified that non-existing nodes are NOT covered by the lock, even
if they where existing and covered by the lock when it was originally if they where existing and covered by the lock when it was originally
granted. granted.
Some rewording Some rewording
Added app-tags for two of the error cases. Added app-tags for two of the error cases.
Made YANG an informative reference Made YANG an informative reference
Enhanced security considerations. Enhanced security considerations.
7.4. 00-01 7.5. 00-01
Added YANG module. Added YANG module.
7.5. -00 7.6. -00
Created from draft-lengyel-ngo-partial-lock-01.txt Created from draft-lengyel-ngo-partial-lock-01.txt
8. Acknowledgements 8. Acknowledgements
Thanks to Andy Bierman, Sharon Chisholm, Phil Shafer , David Thanks to Andy Bierman, Sharon Chisholm, Phil Shafer , David
Harrington, Mehmet Ersue, Wes Hardaker and many other members of the Harrington, Mehmet Ersue, Wes Hardaker and many other members of the
NETCONF WG for providing important input to this document. NETCONF WG for providing important input to this document.
9. References 9. References
skipping to change at page 22, line 22 skipping to change at page 24, line 22
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997. Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
January 2004. January 2004.
9.2. Informative References 9.2. Informative References
[I-D.ietf-netmod-yang] [I-D.ietf-netmod-yang]
Bjorklund, M., "YANG - A data modeling language for Bjorklund, M., "YANG - A data modeling language for
NETCONF", draft-ietf-netmod-yang-01 (work in progress), NETCONF", draft-ietf-netmod-yang-02 (work in progress),
August 2008. November 2008.
Authors' Addresses Authors' Addresses
Balazs Lengyel Balazs Lengyel
Ericsson Ericsson
Email: balazs.lengyel@ericsson.com Email: balazs.lengyel@ericsson.com
Martin Bjorklund Martin Bjorklund
Tail-f Systems Tail-f Systems
 End of changes. 60 change blocks. 
158 lines changed or deleted 291 lines changed or added

This html diff was produced by rfcdiff 1.35. The latest version is available from http://tools.ietf.org/tools/rfcdiff/