Blame include/opensm/osm_db.h

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