|
|
@@ -898,6 +898,121 @@ error_exit:
|
|
|
return (error);
|
|
|
}
|
|
|
|
|
|
+confdb_error_t confdb_key_increment (
|
|
|
+ confdb_handle_t handle,
|
|
|
+ unsigned int parent_object_handle,
|
|
|
+ void *key_name,
|
|
|
+ int key_name_len,
|
|
|
+ unsigned int *value)
|
|
|
+{
|
|
|
+ confdb_error_t error;
|
|
|
+ struct confdb_inst *confdb_inst;
|
|
|
+ struct iovec iov[2];
|
|
|
+ struct req_lib_confdb_key_get req_lib_confdb_key_get;
|
|
|
+ struct res_lib_confdb_key_incdec res_lib_confdb_key_incdec;
|
|
|
+
|
|
|
+ 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_increment(parent_object_handle,
|
|
|
+ key_name, key_name_len,
|
|
|
+ value))
|
|
|
+ error = SA_AIS_ERR_ACCESS;
|
|
|
+ goto error_exit;
|
|
|
+ }
|
|
|
+
|
|
|
+ req_lib_confdb_key_get.header.size = sizeof (struct req_lib_confdb_key_get);
|
|
|
+ req_lib_confdb_key_get.header.id = MESSAGE_REQ_CONFDB_KEY_INCREMENT;
|
|
|
+ req_lib_confdb_key_get.parent_object_handle = parent_object_handle;
|
|
|
+ memcpy(req_lib_confdb_key_get.key_name.value, key_name, key_name_len);
|
|
|
+ req_lib_confdb_key_get.key_name.length = key_name_len;
|
|
|
+
|
|
|
+ iov[0].iov_base = (char *)&req_lib_confdb_key_get;
|
|
|
+ iov[0].iov_len = sizeof (struct req_lib_confdb_key_get);
|
|
|
+
|
|
|
+ pthread_mutex_lock (&confdb_inst->response_mutex);
|
|
|
+
|
|
|
+ error = saSendMsgReceiveReply (confdb_inst->response_fd, iov, 1,
|
|
|
+ &res_lib_confdb_key_incdec, sizeof (struct res_lib_confdb_key_incdec));
|
|
|
+
|
|
|
+ pthread_mutex_unlock (&confdb_inst->response_mutex);
|
|
|
+ if (error != SA_AIS_OK) {
|
|
|
+ goto error_exit;
|
|
|
+ }
|
|
|
+
|
|
|
+ error = res_lib_confdb_key_incdec.header.error;
|
|
|
+ if (error == SA_AIS_OK) {
|
|
|
+ *value = res_lib_confdb_key_incdec.value;
|
|
|
+ }
|
|
|
+
|
|
|
+error_exit:
|
|
|
+ saHandleInstancePut (&confdb_handle_t_db, handle);
|
|
|
+
|
|
|
+ return (error);
|
|
|
+}
|
|
|
+
|
|
|
+confdb_error_t confdb_key_decrement (
|
|
|
+ confdb_handle_t handle,
|
|
|
+ unsigned int parent_object_handle,
|
|
|
+ void *key_name,
|
|
|
+ int key_name_len,
|
|
|
+ unsigned int *value)
|
|
|
+{
|
|
|
+ confdb_error_t error;
|
|
|
+ struct confdb_inst *confdb_inst;
|
|
|
+ struct iovec iov[2];
|
|
|
+ struct req_lib_confdb_key_get req_lib_confdb_key_get;
|
|
|
+ struct res_lib_confdb_key_incdec res_lib_confdb_key_incdec;
|
|
|
+
|
|
|
+ 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_decrement(parent_object_handle,
|
|
|
+ key_name, key_name_len,
|
|
|
+ value))
|
|
|
+ error = SA_AIS_ERR_ACCESS;
|
|
|
+ goto error_exit;
|
|
|
+ }
|
|
|
+
|
|
|
+ req_lib_confdb_key_get.header.size = sizeof (struct req_lib_confdb_key_get);
|
|
|
+ req_lib_confdb_key_get.header.id = MESSAGE_REQ_CONFDB_KEY_DECREMENT;
|
|
|
+ req_lib_confdb_key_get.parent_object_handle = parent_object_handle;
|
|
|
+ memcpy(req_lib_confdb_key_get.key_name.value, key_name, key_name_len);
|
|
|
+ req_lib_confdb_key_get.key_name.length = key_name_len;
|
|
|
+
|
|
|
+ iov[0].iov_base = (char *)&req_lib_confdb_key_get;
|
|
|
+ iov[0].iov_len = sizeof (struct req_lib_confdb_key_get);
|
|
|
+
|
|
|
+ pthread_mutex_lock (&confdb_inst->response_mutex);
|
|
|
+
|
|
|
+ error = saSendMsgReceiveReply (confdb_inst->response_fd, iov, 1,
|
|
|
+ &res_lib_confdb_key_incdec, sizeof (struct res_lib_confdb_key_incdec));
|
|
|
+
|
|
|
+ pthread_mutex_unlock (&confdb_inst->response_mutex);
|
|
|
+ if (error != SA_AIS_OK) {
|
|
|
+ goto error_exit;
|
|
|
+ }
|
|
|
+
|
|
|
+ error = res_lib_confdb_key_incdec.header.error;
|
|
|
+ if (error == SA_AIS_OK) {
|
|
|
+ *value = res_lib_confdb_key_incdec.value;
|
|
|
+ }
|
|
|
+
|
|
|
+error_exit:
|
|
|
+ saHandleInstancePut (&confdb_handle_t_db, handle);
|
|
|
+
|
|
|
+ return (error);
|
|
|
+}
|
|
|
|
|
|
confdb_error_t confdb_key_replace (
|
|
|
confdb_handle_t handle,
|