Subject: [Netconf] idea for new commit operation

From: Andy Bierman <[email-masked]>
Date: Sun, 28 Jun 2009 13:02:04 -0700

Hi,

A :new-commit capability can add output parameters, not just
input parameters.  It can persist across sessions, and
fix the broken parts of confirmed-commit.1.0.  It can support
the verified commit procedure defined in a separate document.

E.g.:

  feature new-commit {
    if-feature confirmed-commit;
    description
      "Supports the new confirmed commit procedure and the
       verified commit procedure.";
  }

  typedef commit-id-type {
     description
       "Contains the agent-assigned identifier for this commit request.
        This value is returned by a new <commit> operation, and
	must be used with the subsequent <complete-commit> or <cancel-commit>
        operations, or the agent will not accept the request.
        This commit identifier is only valid while a confirmed or verified
        commit operation is in effect.  The agent should use a string value
	which is not predictable, and cannot be easily guessed.";
     type string {
        length { "8 .. 1024"; }
     }
  }

  rpc commit {
    if-feature candidate;
    description
      "If the :new-commit capability is supported, and the
       'verified' or 'persist' parameter is entered, then the new
       commit procedure is in effect.  The <complete-commit> or <cancel-commit>
       operations will be used, not the <commit> operation again.

       If the :new-commit capability is not supported, or these
       parameters are not present, then the old commit procedure
       is in effect, and a 2nd <commit> operation is expected
       by any session, before the current session terminates or
       the timeout expires.";
    input {
       leaf timeout {
          if-feature confirmed-commit;
	  description "unchanged";
          type timeout-type;
       }
       leaf confirmed {
          if-feature confirmed-commit;
	  description "unchanged";
          type empty;
       }
       leaf-list test-template {
          if-feature new-commit;
          description
	     "Optional list of verification control entries to
	      use during the verified commit procedure.";
          type instance-identifier;
       }
       leaf persist {
	  if-feature new-commit;
          description
            "If present, then this commit procedure is allowed
	     to persist across a single session.  If the current session
	     is terminated, the running database will not be automatically
             reverted.  Only a timeout or the <cancel-commit> operation
	     will cause the commit procedure to be terminated, if this
	     parameter is present.";
	  type empty;
       }
    }
    output {
       leaf commit-id {
	 if-feature new-commit;
         type commit-id-type;
       }
    }
  }

  rpc complete-commit {
     if-feature new-commit;
     description
       "The 2nd commit to finalize a confirmed or verified commit operation.";
     input {
        leaf commit-id {
           type commit-id-type;
        }
     }
  }

  rpc cancel-commit {
     if-feature new-commit;
     description
       "Cancel a confirmed or verified commit operation in progress.";
     input {
        leaf commit-id {
           type commit-id-type;
        }
     }
  }

Andy