I was trying to write to the cdb using maapi.
I can see the two parameters that I wrote to cdb just fine with the show command… however, if I try to overwrite either of them, I am getting a message that says “database is locked by session” and it is pointing to the maapi_start_user_session()
Any ideas what I am missing here?
syslog(LOG_INFO, "%s: ", __FUNCTION__);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
addr.sin_family = AF_INET;
addr.sin_port = htons(CONFD_PORT);
if ((msock = socket(PF_INET, SOCK_STREAM, 0)) < 0) {
syslog(LOG_ERR, "%s: Failed to open socket", __FUNCTION__);
return CN_ERROR;
}
/* using MAAPI to connect to CDB to update configuration data */
if (maapi_connect(msock, (struct sockaddr*) &addr,
sizeof(struct sockaddr_in)) < 0) {
syslog(LOG_ERR, "%s: Failed to maapi_connect() to confd", __FUNCTION__);
maapi_close(msock);
return CN_ERROR;
}
if (maapi_load_schemas(msock) != CONFD_OK) {
syslog(LOG_ERR, "%s: Failed to maapi_load_schemas() to confd", __FUNCTION__);
maapi_close(msock);
return CN_ERROR;
}
ip.af = AF_INET;
inet_pton(AF_INET, "0.0.0.0", &ip.ip.v4);
if ((maapi_start_user_session(msock, NULL, "system", NULL, 0,
&ip, CONFD_PROTO_TCP)) != CONFD_OK) {
syslog(LOG_ERR, "%s: Failed to start maapi user session", __FUNCTION__);
maapi_close(msock);
return CONFD_ERR;
}
iDB = CONFD_RUNNING;
// Start MAAPI transaction
if ((maapi_thandle = maapi_start_trans(
msock, (enum confd_dbname)iDB, CONFD_READ_WRITE)) < 0 ) {
syslog(LOG_ERR, "%s: failed to start maapi transaction", __FUNCTION__);
maapi_close(msock);
return CONFD_ERR;
}
syslog(LOG_INFO, "setting link mode to be differerntiated");
maapi_set_namespace(msock, maapi_thandle, link__ns);
if (maapi_set_elem2(msock, maapi_thandle, "differentiated", "/link/mode") != CONFD_OK) {
syslog(LOG_ERR, "link-mode init failed");
}
syslog(LOG_INFO, "setting cos-classifier to be pcp");
if (maapi_set_elem2(msock, maapi_thandle, "pcp", "/link/cos-classifier") != CONFD_OK) {
syslog(LOG_ERR, "cos-classifier init to pcp failed");
}
if (maapi_apply_trans(msock, maapi_thandle, 0) != CONFD_OK) {
syslog(LOG_ERR, "%s: failed to apply transaction", __FUNCTION__);
}
if (maapi_finish_trans(msock, maapi_thandle) != CONFD_OK) {
syslog(LOG_ERR, "%s: failed to finish transaction", __FUNCTION__);
}
syslog(LOG_INFO, "%s: Changes applied to CDB successfully", __FUNCTION__);
if (maapi_end_user_session(msock) != CONFD_OK) {
syslog(LOG_ERR, "%s: failed to end user session", __FUNCTION__);
}
maapi_close(msock);