scf_transaction_create man page on SmartOS

Man page or keyword search:  
man Server   16655 pages
apropos Keyword Search (all sections)
Output format
SmartOS logo
[printable version]

SCF_TRANSACTION_CREATE(3SCF)			  SCF_TRANSACTION_CREATE(3SCF)

NAME
       scf_transaction_create,	scf_transaction_handle, scf_transaction_reset,
       scf_transaction_reset_all,    scf_transaction_destroy,	  scf_transac‐
       tion_destroy_children,	scf_transaction_start,	 scf_transaction_prop‐
       erty_delete,    scf_transaction_property_new,	 scf_transaction_prop‐
       erty_change, scf_transaction_property_change_type, scf_transaction_com‐
       mit - create and manipulate transaction in  the	Service	 Configuration
       Facility

SYNOPSIS
       cc [ flag... ] file... -lscf [ library... ]
       #include <libscf.h>

       scf_transaction_t *scf_transaction_create(scf_handle_t *handle);

       scf_handle_t *scf_transaction_handle(scf_transaction_t *tran);

       void scf_transaction_reset(scf_transaction_t *tran);

       void scf_transaction_reset_all(scf_transaction_t *tran);

       void scf_transaction_destroy(scf_transaction_t *tran);

       void scf_transaction_destroy_children(scf_transaction_t *tran);

       int scf_transaction_start(scf_transaction_t *tran,
	    scf_propertygroup_t *pg);

       int scf_transaction_property_delete(scf_transaction_t *tran,
	    scf_transaction_entry_t *entry, const char *prop_name);

       int scf_transaction_property_new(scf_transaction_t *tran,
	    scf_transaction_entry_t *entry, const char *prop_name,
	    scf_type_t type);

       int scf_transaction_property_change(scf_transaction_t *tran,
	    scf_transaction_entry_t *entry, const char *prop_name,
	    scf_type_t type);

       int scf_transaction_property_change_type(
	    scf_transaction_t *tran, scf_transaction_entry_t *entry,
	    const char *prop_name, scf_type_t type);

       int scf_transaction_commit(scf_transaction_t *tran);

DESCRIPTION
       Transactions  are  the mechanism for changing property groups. They act
       atomically, whereby either all of the updates occur or none of them do.
       An scf_transaction_t is always in one of the following states:

       reset
		    The	 initial  state.  A  successful return of scf_transac‐
		    tion_start() moves the transaction to the started state.

       started
		    The transaction  has  started.  The	 scf_transaction_prop‐
		    erty_delete(),  scf_transaction_property_new(), scf_trans‐
		    action_property_change(),	 and	 scf_transaction_prop‐
		    erty_change_type() functions can be used to set up changes
		    to properties. The scf_transaction_reset() and  scf_trans‐
		    action_reset_all() functions return the transaction to the
		    reset state.

       committed
		    A call to scf_transaction_commit() (whether or not	it  is
		    successful)	 moves the transaction to the committed state.
		    Modifying, resetting, or destroying the entries and values
		    associated	with a transaction will move it to the invalid
		    state.

       invalid
		    The	    scf_transaction_reset()	 and	  scf_transac‐
		    tion_reset_all()  functions	 return the transaction to the
		    reset state.

       The scf_transaction_create()  function  allocates  and  initializes  an
       scf_transaction_t  bound to handle. The scf_transaction_destroy() func‐
       tion resets, destroys, and frees tran. If there are any entries associ‐
       ated  with  the	transaction,  scf_transaction_destroy() also effects a
       call to scf_transaction_reset(). The scf_transaction_destroy_children()
       function	 resets, destroys, and frees all entries and values associated
       the transaction.

       The scf_transaction_handle() function gets the handle to which tran  is
       bound.

       The  scf_transaction_start() function sets up the transaction to modify
       the property group to which pg is set. The time reference  used	by  pg
       becomes	the  basis  of	the  transaction. The transaction fails if the
       property group has been modified since the last update  of  pg  at  the
       time when scf_transaction_commit() is called.

       The  scf_transaction_property_delete(), scf_transaction_property_new(),
       scf_transaction_property_change(),      and	 scf_transaction_prop‐
       erty_change_type()  functions add a new transaction entry to the trans‐
       action. Each property  the  transaction	affects	 must  have  a	unique
       scf_transaction_entry_t. Each scf_transaction_entry_t can be associated
       with only a single transaction at a time. These functions all  fail  if
       the  transaction	 is not in the started state, prop_name is not a valid
       property name, or entry is already associated with a transaction. These
       functions affect commit and failure as follows:

       scf_transaction_property_delete()

	   This function deletes the property prop_name in the property group.
	   It fails if prop_name does not name	a  property  in	 the  property
	   group.

       scf_transaction_property_new()

	   This	 function  adds a new property prop_name to the property group
	   with a value list of type type. It  fails  if  prop_name  names  an
	   existing property in the property group.

       scf_transaction_property_change()

	   This	 function  changes  the	 value	list  for an existing property
	   prop_name in the property group. It fails  if  prop_name  does  not
	   name	 an existing property in the property group or names an exist‐
	   ing property with a different type.

       scf_transaction_property_change_type()

	   This function changes the value list and type for an existing prop‐
	   erty	 prop_name  in	the property group. It fails if prop_name does
	   not name an existing property in the property group.

       If the function call is successful, entry remains active in the	trans‐
       action  until  scf_transaction_destroy(),  scf_transaction_reset(),  or
       scf_transaction_reset_all() is called.	The  scf_entry_add_value(3SCF)
       manual  page  provides  information  for	 setting up the value list for
       entries that are not associated with scf_transaction_property_delete().
       Resetting  or destroying an entry or value active in a transaction will
       move it into the invalid state.

       The scf_transaction_commit() function attempts to commit tran.

       The scf_transaction_reset() function returns  the  transaction  to  the
       reset  state  and  releases  all	 of  the transaction entries that were
       added.

       The scf_transaction_reset_all() function returns the transaction to the
       reset  state,  releases	all  of	 the  transaction  entries,  and calls
       scf_value_reset(3SCF) on all values associated with the entries.

RETURN VALUES
       Upon successful	completion,  scf_transaction_create()  returns	a  new
       scf_transaction_t. Otherwise, it returns NULL.

       Upon successful completion, scf_transaction_handle() returns the handle
       associated with the transaction. Otherwise, it returns NULL.

       Upon  successful	 completion,   scf_transaction_start(),	  scf_transac‐
       tion_property_delete(),	 scf_transaction_property_new(),  scf_transac‐
       tion_property_change(),	 and	scf_transaction_property_change_type()
       return 0. Otherwise, they return −1.

       The scf_transaction_commit() function returns 1 upon successful commit,
       0 if the property group set in scf_transaction_start() is not the  most
       recent, and -1 on failure.

ERRORS
       The scf_transaction_create() function will fail if:

       SCF_ERROR_INVALID_ARGUMENT
				     The value of the handle argument is NULL.

       SCF_ERROR_NO_MEMORY
				     There is not enough memory to allocate an
				     scf_transaction_t.

       SCF_ERROR_NO_RESOURCES
				     The  server  does	 not   have   adequate
				     resources for a new transaction handle.

       The scf_transaction_handle() function will fail if:

       SCF_ERROR_HANDLE_DESTROYED
				     The  handle associated with tran has been
				     destroyed.

       The scf_transaction_start() function will fail if:

       SCF_ERROR_BACKEND_ACCESS

	   The repository backend refused the modification.

       SCF_ERROR_BACKEND_READONLY

	   The repository backend refused modification	because	 it  is	 read-
	   only.

       SCF_ERROR_CONNECTION_BROKEN

	   The connection to the repository was lost.

       SCF_ERROR_DELETED

	   The property group has been deleted.

       SCF_ERROR_HANDLE_MISMATCH

	   The	transaction  and  property group are not derived from the same
	   handle.

       SCF_ERROR_IN_USE

	   The transaction  is	not  in	 the  reset  state.  The  scf_transac‐
	   tion_reset()	 and scf_transaction_reset_all() functions can be used
	   to return the transaction to the reset state.

       SCF_ERROR_NO_RESOURCES

	   The server does not have the resources to complete the request.

       SCF_ERROR_NOT_BOUND

	   The handle was never bound or has been unbound.

       SCF_ERROR_NOT_SET

	   The property group specified by pg is not set.

       SCF_ERROR_PERMISSION_DENIED

	   The user does not have sufficient privileges to modify the property
	   group.

       The  scf_transaction_property_delete(), scf_transaction_property_new(),
       scf_transaction_property_change(),      and	 scf_transaction_prop‐
       erty_change_type() functions will fail if:

       SCF_ERROR_BACKEND_ACCESS

	   The	 storage   mechanism   that  the   repository server (svc.con‐
	   figd(1M)) chose for the operation denied access.

       SCF_ERROR_CONNECTION_BROKEN

	   The connection to the repository was lost.

       SCF_ERROR_DELETED

	   The property group the transaction is changing has been deleted.

       SCF_ERROR_HANDLE_MISMATCH

	   The transaction and entry are not derived from the same handle.

       SCF_ERROR_IN_USE

	   The property already has an entry in the transaction.

       SCF_ERROR_INTERNAL

	   An internal error occurred.

       SCF_ERROR_INVALID_ARGUMENT

	   The prop_name argument is not a valid property name.

       SCF_ERROR_NO_RESOURCES

	   The server does not have the resources to complete the request.

       SCF_ERROR_NOT_BOUND

	   The handle is not bound.

       SCF_ERROR_NOT_SET

	   The transaction has not been started.

       SCF_ERROR_TYPE_MISMATCH

	   The tran argument is not of a type compatible with type.

       The	scf_transaction_property_delete(),	 scf_transaction_prop‐
       erty_change(),	and  scf_transaction_property_change_type()  functions
       will fail if:

       SCF_ERROR_EXISTS
			      The object already exists.

       SCF_ERROR_NOT_FOUND
			      The property group does not contain  a  property
			      named prop_name.

       The scf_transaction_property_new() , scf_transaction_property_change(),
       and scf_transaction_property_change_type() functions will fail if:

       SCF_ERROR_INVALID_ARGUMENT
				     The prop_name argument is not not a valid
				     property name, or the type argument is an
				     invalid type.

       The scf_transaction_property_new() function will fail if:

       SCF_ERROR_EXISTS
			      The property group already contains  a  property
			      named prop_name.

       SCF_ERROR_NOT_FOUND
			      Nothing of that name was found.

       The scf_transaction_property_change() function will fail if:

       SCF_ERROR_TYPE_MISMATCH
				  The property prop_name is not of type type.

       The scf_transaction_commit() function will fail if:

       SCF_ERROR_BACKEND_READONLY

	   The repository backend is read-only.

       SCF_ERROR_BACKEND_ACCESS

	   The repository backend refused the modification.

       SCF_ERROR_NOT_BOUND

	   The handle is not bound.

       SCF_ERROR_CONNECTION_BROKEN

	   The connection to the repository was lost.

       SCF_ERROR_INVALID_ARGUMENT

	   The transaction is in an invalid state.

       SCF_ERROR_DELETED

	   The property group the transaction is acting on has been deleted.

       SCF_ERROR_NOT_SET

	   The transaction has not been started.

       SCF_ERROR_PERMISSION_DENIED

	   The user does not have sufficient privileges to modify the property
	   group.

       SCF_ERROR_NO_RESOURCES

	   The server does not have sufficient resources to commit the	trans‐
	   action.

       The scf_error(3SCF) function can be used to retrieve the error value.

EXAMPLES
       Example 1 Set an existing boolean value to true.

	 tx = scf_transaction_create(handle);
	 e1 = scf_entry_create(handle);
	 v1 = scf_value_create(handle);

	 do {
	      if (scf_pg_update(pg) == -1)
		   goto fail;
	      if (scf_transaction_start(tx, pg) == -1)
		   goto fail;

	      /* set up transaction entries */
	      if (scf_transaction_property_change(tx, e1, "property",
		 SCF_TYPE_BOOLEAN) == -1) {
		     scf_transaction_reset(tx);
		     goto fail;
	      }
	      scf_value_set_boolean(v1, 1);
	      scf_entry_add_value(e1, v1);

	      result = scf_transaction_commit(tx);

	      scf_transaction_reset(tx);
	 } while (result == 0);

	 if (result < 0)
	      goto fail;

	 /* success */

	    cleanup:
	 scf_transaction_destroy(tx);
	 scf_entry_destroy(e1);
	 scf_value_destroy(v1);

ATTRIBUTES
       See attributes(5) for descriptions of the following attributes:

       ┌────────────────────┬─────────────────┐
       │  ATTRIBUTE TYPE    │ ATTRIBUTE VALUE │
       ├────────────────────┼─────────────────┤
       │Interface Stability │ Committed	      │
       ├────────────────────┼─────────────────┤
       │MT-Level	    │ Safe	      │
       └────────────────────┴─────────────────┘

SEE ALSO
       libscf(3LIB),   scf_value_reset(3SCF),	scf_error(3SCF),   scf_pg_cre‐
       ate(3SCF), attributes(5)

				 Aug 28, 2007	  SCF_TRANSACTION_CREATE(3SCF)
[top]

List of man pages available for SmartOS

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net