Răsfoiți Sursa

Add a missing confdb_key_delete function to the confdb api.

git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@1618 fd59a12c-fef9-0310-b244-a6a79926bd2f
Steven Dake 17 ani în urmă
părinte
comite
442f4c5311
4 a modificat fișierele cu 72 adăugiri și 0 ștergeri
  1. 1 0
      corosync/lib/Makefile
  2. 58 0
      corosync/lib/confdb.c
  3. 12 0
      corosync/lib/sa-confdb.c
  4. 1 0
      corosync/lib/sa-confdb.h

+ 1 - 0
corosync/lib/Makefile

@@ -31,6 +31,7 @@
 # Include configuration
 #
 srcdir ?= $(CURDIR)/../
+subdir ?= lib/
 
 include $(srcdir)Makefile.inc
 

+ 58 - 0
corosync/lib/confdb.c

@@ -659,6 +659,64 @@ error_exit:
 	return (error);
 }
 
+confdb_error_t confdb_key_delete (
+	confdb_handle_t handle,
+	unsigned int parent_object_handle,
+	void *key_name,
+	int key_name_len,
+	void *value,
+	int value_len)
+{
+	confdb_error_t error;
+	struct confdb_inst *confdb_inst;
+	struct iovec iov[2];
+	struct req_lib_confdb_key_delete req_lib_confdb_key_delete;
+	mar_res_header_t res;
+
+	error = saHandleInstanceGet (&confdb_handle_t_db, handle, (void *)&confdb_inst);
+	if (error != SA_AIS_OK) {
+		return (error);
+	}
+
+	if (confdb_inst->standalone) {
+		error = SA_AIS_OK;
+
+		if (confdb_sa_key_delete(parent_object_handle,
+					 key_name, key_name_len,
+					 value, value_len))
+			error = SA_AIS_ERR_ACCESS;
+		goto error_exit;
+	}
+
+	req_lib_confdb_key_delete.header.size = sizeof (struct req_lib_confdb_key_delete);
+	req_lib_confdb_key_delete.header.id = MESSAGE_REQ_CONFDB_KEY_DELETE;
+	req_lib_confdb_key_delete.object_handle = parent_object_handle;
+	memcpy(req_lib_confdb_key_delete.key_name.value, key_name, key_name_len);
+	req_lib_confdb_key_delete.key_name.length = key_name_len;
+	memcpy(req_lib_confdb_key_delete.value.value, value, value_len);
+	req_lib_confdb_key_delete.value.length = value_len;
+
+	iov[0].iov_base = (char *)&req_lib_confdb_key_delete;
+	iov[0].iov_len = sizeof (struct req_lib_confdb_key_delete);
+
+	pthread_mutex_lock (&confdb_inst->response_mutex);
+
+	error = saSendMsgReceiveReply (confdb_inst->response_fd, iov, 1,
+		&res, sizeof (res));
+
+	pthread_mutex_unlock (&confdb_inst->response_mutex);
+	if (error != SA_AIS_OK) {
+		goto error_exit;
+	}
+
+	error = res.error;
+
+error_exit:
+	saHandleInstancePut (&confdb_handle_t_db, handle);
+
+	return (error);
+}
+
 confdb_error_t confdb_key_get (
 	confdb_handle_t handle,
 	unsigned int parent_object_handle,

+ 12 - 0
corosync/lib/sa-confdb.c

@@ -219,6 +219,18 @@ int confdb_sa_key_create (
 					value, value_len);
 }
 
+int confdb_sa_key_delete (
+	unsigned int parent_object_handle,
+	void *key_name,
+	int key_name_len,
+	void *value,
+	int value_len)
+{
+	return objdb->object_key_delete(parent_object_handle,
+					key_name, key_name_len,
+					value, value_len);
+}
+
 int confdb_sa_key_get (
 	unsigned int parent_object_handle,
 	void *key_name,

+ 1 - 0
corosync/lib/sa-confdb.h

@@ -37,6 +37,7 @@ extern int confdb_sa_object_create(unsigned int parent_object_handle, void *obje
 extern int confdb_sa_object_destroy(unsigned int object_handle);
 extern int confdb_sa_object_parent_get(unsigned int object_handle, unsigned int *parent_object_handle);
 extern int confdb_sa_key_create(unsigned int parent_object_handle, void *key_name, int key_name_len, void *value, int value_len);
+extern int confdb_sa_key_delete(unsigned int parent_object_handle, void *key_name, int key_name_len, void *value, int value_len);
 extern int confdb_sa_key_get(unsigned int parent_object_handle, void *key_name, int key_name_len, void *value, int *value_len);
 extern int confdb_sa_key_replace(unsigned int parent_object_handle, void *key_name, int key_name_len, void *old_value, int old_value_len, void *new_value, int new_value_len);
 extern int confdb_sa_object_find(unsigned int parent_object_handle, unsigned int start_pos, void *object_name, int object_name_len, unsigned int *object_handle, unsigned int *next_pos);