Blame include/opensm/osm_db.h

Packit Service 54dbc3
/*
Packit Service 54dbc3
 * Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved.
Packit Service 54dbc3
 * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
Packit Service 54dbc3
 * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
Packit Service 54dbc3
 *
Packit Service 54dbc3
 * This software is available to you under a choice of one of two
Packit Service 54dbc3
 * licenses.  You may choose to be licensed under the terms of the GNU
Packit Service 54dbc3
 * General Public License (GPL) Version 2, available from the file
Packit Service 54dbc3
 * COPYING in the main directory of this source tree, or the
Packit Service 54dbc3
 * OpenIB.org BSD license below:
Packit Service 54dbc3
 *
Packit Service 54dbc3
 *     Redistribution and use in source and binary forms, with or
Packit Service 54dbc3
 *     without modification, are permitted provided that the following
Packit Service 54dbc3
 *     conditions are met:
Packit Service 54dbc3
 *
Packit Service 54dbc3
 *      - Redistributions of source code must retain the above
Packit Service 54dbc3
 *        copyright notice, this list of conditions and the following
Packit Service 54dbc3
 *        disclaimer.
Packit Service 54dbc3
 *
Packit Service 54dbc3
 *      - Redistributions in binary form must reproduce the above
Packit Service 54dbc3
 *        copyright notice, this list of conditions and the following
Packit Service 54dbc3
 *        disclaimer in the documentation and/or other materials
Packit Service 54dbc3
 *        provided with the distribution.
Packit Service 54dbc3
 *
Packit Service 54dbc3
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
Packit Service 54dbc3
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Packit Service 54dbc3
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
Packit Service 54dbc3
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
Packit Service 54dbc3
 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
Packit Service 54dbc3
 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
Packit Service 54dbc3
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
Packit Service 54dbc3
 * SOFTWARE.
Packit Service 54dbc3
 *
Packit Service 54dbc3
 */
Packit Service 54dbc3
Packit Service 54dbc3
#ifndef _OSM_DB_H_
Packit Service 54dbc3
#define _OSM_DB_H_
Packit Service 54dbc3
Packit Service 54dbc3
/*
Packit Service 54dbc3
 * Abstract:
Packit Service 54dbc3
 * Declaration of the DB interface.
Packit Service 54dbc3
 */
Packit Service 54dbc3
Packit Service 54dbc3
#include <complib/cl_list.h>
Packit Service 54dbc3
#include <complib/cl_spinlock.h>
Packit Service 54dbc3
Packit Service 54dbc3
struct osm_log;
Packit Service 54dbc3
Packit Service 54dbc3
#ifdef __cplusplus
Packit Service 54dbc3
#  define BEGIN_C_DECLS extern "C" {
Packit Service 54dbc3
#  define END_C_DECLS   }
Packit Service 54dbc3
#else				/* !__cplusplus */
Packit Service 54dbc3
#  define BEGIN_C_DECLS
Packit Service 54dbc3
#  define END_C_DECLS
Packit Service 54dbc3
#endif				/* __cplusplus */
Packit Service 54dbc3
Packit Service 54dbc3
BEGIN_C_DECLS
Packit Service 54dbc3
/****h* OpenSM/Database
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	Database
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	The OpenSM database interface provide the means to restore persistent
Packit Service 54dbc3
*  data, query, modify, delete and eventually commit it back to the
Packit Service 54dbc3
*  persistent media.
Packit Service 54dbc3
*
Packit Service 54dbc3
*  The interface is defined such that it can is not "data dependent":
Packit Service 54dbc3
*  All keys and data items are texts.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	The DB implementation should be thread safe, thus callers do not need to
Packit Service 54dbc3
*  provide serialization.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	This object should be treated as opaque and should be
Packit Service 54dbc3
*	manipulated only through the provided functions.
Packit Service 54dbc3
*
Packit Service 54dbc3
* AUTHOR
Packit Service 54dbc3
*	Eitan Zahavi, Mellanox Technologies LTD
Packit Service 54dbc3
*
Packit Service 54dbc3
*********/
Packit Service 54dbc3
/****s* OpenSM: Database/osm_db_domain_t
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_db_domain_t
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	A domain of the database. Can be viewed as a database table.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	The osm_db_domain_t object should be treated as opaque and should
Packit Service 54dbc3
*	be manipulated only through the provided functions.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
typedef struct osm_db_domain {
Packit Service 54dbc3
	struct osm_db *p_db;
Packit Service 54dbc3
	void *p_domain_imp;
Packit Service 54dbc3
} osm_db_domain_t;
Packit Service 54dbc3
/*
Packit Service 54dbc3
* FIELDS
Packit Service 54dbc3
*	p_db
Packit Service 54dbc3
*		Pointer to the parent database object.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_domain_imp
Packit Service 54dbc3
*		Pointer to the db implementation object
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
* osm_db_t
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****s* OpenSM: Database/osm_db_t
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_db_t
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	The main database object.
Packit Service 54dbc3
*
Packit Service 54dbc3
*	The osm_db_t object should be treated as opaque and should
Packit Service 54dbc3
*	be manipulated only through the provided functions.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
typedef struct osm_db {
Packit Service 54dbc3
	void *p_db_imp;
Packit Service 54dbc3
	struct osm_log *p_log;
Packit Service 54dbc3
	cl_list_t domains;
Packit Service 54dbc3
} osm_db_t;
Packit Service 54dbc3
/*
Packit Service 54dbc3
* FIELDS
Packit Service 54dbc3
*	p_db_imp
Packit Service 54dbc3
*		Pointer to the database implementation object
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_log
Packit Service 54dbc3
*		Pointer to the OSM logging facility
Packit Service 54dbc3
*
Packit Service 54dbc3
*  domains
Packit Service 54dbc3
*     List of initialize domains
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: Database/osm_db_construct
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_db_construct
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Construct a database.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
void osm_db_construct(IN osm_db_t * p_db);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*	p_db
Packit Service 54dbc3
*		[in] Pointer to the database object to construct
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUES
Packit Service 54dbc3
*	NONE
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*	Database, osm_db_init, osm_db_destroy
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: Database/osm_db_destroy
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_db_destroy
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Destroys the osm_db_t structure.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
void osm_db_destroy(IN osm_db_t * p_db);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*	p_db
Packit Service 54dbc3
*		[in] Pointer to osm_db_t structure to destroy
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*	Database, osm_db_construct, osm_db_init
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: Database/osm_db_init
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_db_init
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Initializes the osm_db_t structure.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
int osm_db_init(IN osm_db_t * p_db, IN struct osm_log * p_log);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_db
Packit Service 54dbc3
*		[in] Pointer to the database object to initialize
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_log
Packit Service 54dbc3
*		[in] Pointer to the OSM logging facility
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUES
Packit Service 54dbc3
*	0 on success 1 otherwise
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*	Database, osm_db_construct, osm_db_destroy
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: Database/osm_db_domain_init
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_db_domain_init
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Initializes the osm_db_domain_t structure.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
osm_db_domain_t *osm_db_domain_init(IN osm_db_t * p_db, IN const char *domain_name);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_db
Packit Service 54dbc3
*		[in] Pointer to the database object to initialize
Packit Service 54dbc3
*
Packit Service 54dbc3
*	domain_name
Packit Service 54dbc3
*		[in] a char array with the domain name.
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUES
Packit Service 54dbc3
*	pointer to the new domain object or NULL if failed.
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*	Database, osm_db_construct, osm_db_destroy
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: Database/osm_db_restore
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_db_restore
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Reads the entire domain from persistent storage - overrides all
Packit Service 54dbc3
*  existing cached data (if any).
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
int osm_db_restore(IN osm_db_domain_t * p_domain);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_domain
Packit Service 54dbc3
*		[in] Pointer to the database domain object to restore
Packit Service 54dbc3
*		     from persistent db
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUES
Packit Service 54dbc3
*	0 if successful 1 otherwize
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*	Database, osm_db_domain_init, osm_db_clear, osm_db_store,
Packit Service 54dbc3
*  osm_db_keys, osm_db_lookup, osm_db_update, osm_db_delete
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: Database/osm_db_clear
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_db_clear
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Clears the entire domain values from/in the cache
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
int osm_db_clear(IN osm_db_domain_t * p_domain);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_domain
Packit Service 54dbc3
*		[in] Pointer to the database domain object to clear
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUES
Packit Service 54dbc3
*	0 if successful 1 otherwize
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*	Database, osm_db_domain_init, osm_db_restore, osm_db_store,
Packit Service 54dbc3
*  osm_db_keys, osm_db_lookup, osm_db_update, osm_db_delete
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: Database/osm_db_store
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_db_store
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Store the domain cache back to the database (commit)
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
int osm_db_store(IN osm_db_domain_t * p_domain,
Packit Service 54dbc3
		 IN boolean_t fsync_high_avail_files);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_domain
Packit Service 54dbc3
*		[in] Pointer to the database domain object to restore from
Packit Service 54dbc3
*		     persistent db
Packit Service 54dbc3
*
Packit Service 54dbc3
*	fsync_high_avail_files
Packit Service 54dbc3
*		[in] Boolean that indicates whether or not to synchronize
Packit Service 54dbc3
*		     in-memory high availability files with storage
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUES
Packit Service 54dbc3
*	0 if successful 1 otherwize
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*	Database, osm_db_domain_init, osm_db_restore, osm_db_clear,
Packit Service 54dbc3
*  osm_db_keys, osm_db_lookup, osm_db_update, osm_db_delete
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: Database/osm_db_keys
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_db_keys
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Retrive all keys of the domain
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
int osm_db_keys(IN osm_db_domain_t * p_domain, OUT cl_list_t * p_key_list);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*
Packit Service 54dbc3
* p_domain
Packit Service 54dbc3
*    [in] Pointer to the database domain object
Packit Service 54dbc3
*
Packit Service 54dbc3
* p_key_list
Packit Service 54dbc3
*    [out] List of key values. It should be PRE constructed and initialized.
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUES
Packit Service 54dbc3
*	0 if successful 1 otherwize
Packit Service 54dbc3
*
Packit Service 54dbc3
* NOTE: the caller needs to free and destruct the list,
Packit Service 54dbc3
*       the keys returned are intrnal to the hash and should NOT be free'ed
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*	Database, osm_db_domain_init, osm_db_restore, osm_db_clear, osm_db_store,
Packit Service 54dbc3
*  osm_db_lookup, osm_db_update, osm_db_delete
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: Database/osm_db_lookup
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_db_lookup
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Lookup an entry in the domain by the given key
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
/* lookup value by key */
Packit Service 54dbc3
char *osm_db_lookup(IN osm_db_domain_t * p_domain, IN char *p_key);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*
Packit Service 54dbc3
*  p_domain
Packit Service 54dbc3
*    [in] Pointer to the database domain object
Packit Service 54dbc3
*
Packit Service 54dbc3
*	key
Packit Service 54dbc3
*		[in] The key to look for
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUES
Packit Service 54dbc3
*  the value as char * or NULL if not found
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*	Database, osm_db_domain_init, osm_db_restore, osm_db_clear, osm_db_store,
Packit Service 54dbc3
*  osm_db_keys, osm_db_update, osm_db_delete
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: Database/osm_db_update
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_db_update
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Set the value of the given key
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
int osm_db_update(IN osm_db_domain_t * p_domain, IN char *p_key, IN char *p_val);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*
Packit Service 54dbc3
*  p_domain
Packit Service 54dbc3
*    [in] Pointer to the database domain object
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_key
Packit Service 54dbc3
*		[in] The key to update
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_val
Packit Service 54dbc3
*		[in] The value to update
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUES
Packit Service 54dbc3
*  0 on success
Packit Service 54dbc3
*
Packit Service 54dbc3
* NOTE: the value will be duplicated so can be free'ed
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*	Database, osm_db_domain_init, osm_db_restore, osm_db_clear, osm_db_store,
Packit Service 54dbc3
*  osm_db_keys, osm_db_lookup, osm_db_delete
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
/****f* OpenSM: Database/osm_db_delete
Packit Service 54dbc3
* NAME
Packit Service 54dbc3
*	osm_db_delete
Packit Service 54dbc3
*
Packit Service 54dbc3
* DESCRIPTION
Packit Service 54dbc3
*	Delete an entry by the given key
Packit Service 54dbc3
*
Packit Service 54dbc3
* SYNOPSIS
Packit Service 54dbc3
*/
Packit Service 54dbc3
int osm_db_delete(IN osm_db_domain_t * p_domain, IN char *p_key);
Packit Service 54dbc3
/*
Packit Service 54dbc3
* PARAMETERS
Packit Service 54dbc3
*
Packit Service 54dbc3
*  p_domain
Packit Service 54dbc3
*    [in] Pointer to the database domain object
Packit Service 54dbc3
*
Packit Service 54dbc3
*	p_key
Packit Service 54dbc3
*		[in] The key to look for
Packit Service 54dbc3
*
Packit Service 54dbc3
* RETURN VALUES
Packit Service 54dbc3
*  0 on success
Packit Service 54dbc3
*
Packit Service 54dbc3
* SEE ALSO
Packit Service 54dbc3
*	Database, osm_db_domain_init, osm_db_restore, osm_db_clear, osm_db_store,
Packit Service 54dbc3
*  osm_db_keys, osm_db_lookup, osm_db_update
Packit Service 54dbc3
*********/
Packit Service 54dbc3
Packit Service 54dbc3
END_C_DECLS
Packit Service 54dbc3
#endif				/* _OSM_DB_H_ */