bool bdb_create_mediatype_record(JCR *jcr, MEDIATYPE_DBR *mr);
bool bdb_create_attributes_record(JCR *jcr, ATTR_DBR *ar);
bool bdb_create_restore_object_record(JCR *jcr, ROBJECT_DBR *ar);
+ bool bdb_create_object_record(JCR *jcr, OBJECT_DBR *obj_r);
bool bdb_create_base_file_attributes_record(JCR *jcr, ATTR_DBR *ar);
bool bdb_commit_base_file_attributes_record(JCR *jcr);
bool bdb_create_base_file_list(JCR *jcr, char *jobids);
bool bdb_get_accurate_jobids(JCR *jcr, JOB_DBR *jr, db_list_ctx *jobids);
bool bdb_get_used_base_jobids(JCR *jcr, POOLMEM *jobids, db_list_ctx *result);
bool bdb_get_restoreobject_record(JCR *jcr, ROBJECT_DBR *rr);
+ bool bdb_get_plugin_object_record(JCR *jcr, OBJECT_DBR *obj_r);
int bdb_get_num_restoreobject_records(JCR *jcr, ROBJECT_DBR *rr);
bool bdb_get_job_statistics(JCR *jcr, JOB_DBR *jr);
bool bdb_get_client_pool(JCR *jcr, alist *results);
void bdb_list_events_records(JCR *jcr, EVENTS_DBR *rec, DB_LIST_HANDLER *sendit, void *ctx, e_list_type type);
void bdb_list_base_files_for_job(JCR *jcr, JobId_t jobid, DB_LIST_HANDLER *sendit, void *ctx);
void bdb_list_restore_objects(JCR *jcr, ROBJECT_DBR *rr, DB_LIST_HANDLER *sendit, void *ctx, e_list_type type);
+ void bdb_list_plugin_objects(JCR *jcr, OBJECT_DBR *obj_r, DB_LIST_HANDLER *sendit, void *ctx, e_list_type type);
void bdb_list_snapshot_records(JCR *jcr, SNAPSHOT_DBR *sdbr,
DB_LIST_HANDLER *sendit, void *ctx, e_list_type type);
void bdb_list_files(JCR *jcr, FILE_DBR *fr, DB_RESULT_HANDLER *sendit, void *ctx);
int DigestType;
};
+class OBJECT_DBR {
+public:
+ OBJECT_DBR() { bmemset(this, 0, sizeof(OBJECT_DBR)); };
+ ~OBJECT_DBR() { };
+
+ DBId_t ObjectId;
+ JobId_t JobId;
+ char *Path;
+ char *Filename;
+ char *PluginName;
+ char *ObjectType;
+ char *ObjectName;
+ char *ObjectSource;
+ char *ObjectUUID;
+ uint64_t ObjectSize;
+};
+
struct ROBJECT_DBR {
char *object_name;
char *object;
mdb->bdb_create_attributes_record(jcr, ar)
#define db_create_restore_object_record(jcr, mdb, ar) \
mdb->bdb_create_restore_object_record(jcr, ar)
+#define db_create_object_record(jcr, mdb, obj_r) \
+ mdb->bdb_create_object_record(jcr, obj_r)
#define db_create_base_file_attributes_record(jcr, mdb, ar) \
mdb->bdb_create_base_file_attributes_record(jcr, ar)
#define db_commit_base_file_attributes_record(jcr, mdb) \
mdb->bdb_get_used_base_jobids(jcr, jobids, result)
#define db_get_restoreobject_record(jcr, mdb, rr) \
mdb->bdb_get_restoreobject_record(jcr, rr)
+#define db_get_plugin_object_record(jcr, mdb, obj_r) \
+ mdb->bdb_get_plugin_object_record(jcr, obj_r)
#define db_get_num_restoreobject_records(jcr, mdb, rr) \
mdb->bdb_get_num_restoreobject_records(jcr, rr)
#define db_get_type_index(mdb) \
mdb->bdb_list_events_records(jcr, rec, sendit, ctx, type)
#define db_list_base_files_for_job(jcr, mdb, jobid, sendit, ctx) \
mdb->bdb_list_base_files_for_job(jcr, jobid, sendit, ctx)
+#define db_list_plugin_objects(jcr, mdb, obj_r, sendit, ctx, type) \
+ mdb->bdb_list_plugin_objects(jcr, obj_r, sendit, ctx, type)
#define db_list_restore_objects(jcr, mdb, rr, sendit, ctx, type) \
mdb->bdb_list_restore_objects(jcr, rr, sendit, ctx, type)
#define db_list_snapshot_records(jcr, mdb, snapdbr, sendit, ua, llist) \
return ret;
}
+/**
+ * Create Plugin Object record in BDB
+ *
+ */
+bool BDB::bdb_create_object_record(JCR *jcr, OBJECT_DBR *obj)
+{
+ bool ret = false;
+ int str_len;
+
+ POOLMEM *esc_path = get_pool_memory(PM_MESSAGE);
+ POOLMEM *esc_filename = get_pool_memory(PM_MESSAGE);
+ POOLMEM *esc_plugin_name = get_pool_memory(PM_MESSAGE);
+ POOLMEM *esc_obj_type = get_pool_memory(PM_MESSAGE);
+ POOLMEM *esc_obj_name = get_pool_memory(PM_MESSAGE);
+ POOLMEM *esc_obj_source = get_pool_memory(PM_MESSAGE);
+ POOLMEM *esc_obj_uuid = get_pool_memory(PM_MESSAGE);
+
+ str_len = strlen(obj->Path);
+ esc_path = check_pool_memory_size(esc_path, str_len*2+1);
+ bdb_escape_string(jcr, esc_path, obj->Path, str_len);
+
+ str_len = strlen(obj->Filename);
+ esc_filename = check_pool_memory_size(esc_filename, str_len*2+1);
+ bdb_escape_string(jcr, esc_filename, obj->Filename, str_len);
+
+ str_len = strlen(obj->PluginName);
+ esc_plugin_name = check_pool_memory_size(esc_plugin_name, str_len*2+1);
+ bdb_escape_string(jcr, esc_plugin_name, obj->PluginName, str_len);
+
+ str_len = strlen(obj->ObjectType);
+ esc_obj_type = check_pool_memory_size(esc_obj_type, str_len*2+1);
+ bdb_escape_string(jcr, esc_obj_type, obj->ObjectType, str_len);
+
+ str_len = strlen(obj->ObjectName);
+ esc_obj_name = check_pool_memory_size(esc_obj_name, str_len*2+1);
+ bdb_escape_string(jcr, esc_obj_name, obj->ObjectName, str_len);
+
+ str_len = strlen(obj->ObjectSource);
+ esc_obj_source = check_pool_memory_size(esc_obj_source, str_len*2+1);
+ bdb_escape_string(jcr, esc_obj_source, obj->ObjectSource, str_len);
+
+ str_len = strlen(obj->ObjectUUID);
+ esc_obj_uuid= check_pool_memory_size(esc_obj_uuid, str_len*2+1);
+ bdb_escape_string(jcr, esc_obj_uuid, obj->ObjectUUID, str_len);
+
+ bdb_lock();
+ Mmsg(cmd,
+ "INSERT INTO Object (JobId, Path, Filename, PluginName, "
+ "ObjectType, ObjectName, ObjectSource, ObjectUUID, ObjectSize) "
+ "VALUES (%u, '%s', '%s', '%s', '%s', '%s', '%s', '%s', %llu)",
+ obj->JobId, esc_path, esc_filename, esc_plugin_name,
+ esc_obj_type, esc_obj_name, esc_obj_source, esc_obj_uuid,
+ obj->ObjectSize);
+
+ obj->ObjectId = sql_insert_autokey_record(cmd, NT_("Object"));
+ if (obj->ObjectId == 0) {
+ Mmsg2(&errmsg, _("Create database Plugin Object record %s failed. ERR=%s"),
+ cmd, sql_strerror());
+ Jmsg(jcr, M_FATAL, 0, "%s", errmsg);
+ ret = false;
+ } else {
+ ret = true;
+ }
+ bdb_unlock();
+
+ free_pool_memory(esc_path);
+ free_pool_memory(esc_filename);
+ free_pool_memory(esc_plugin_name);
+ free_pool_memory(esc_obj_type);
+ free_pool_memory(esc_obj_name);
+ free_pool_memory(esc_obj_source);
+ free_pool_memory(esc_obj_uuid);
+
+ return ret;
+}
+
/**
* Create Restore Object record in BDB
*
rr->object = rr->plugin_name = rr->object_name = NULL;
}
+/*
+ * TODO Update doc
+ * */
+bool BDB::bdb_get_plugin_object_record(JCR *jcr, OBJECT_DBR *obj_r)
+{
+ SQL_ROW row;
+ int stat = false;
+
+ /*TODO Probably only specified
+ ObjectId/JobId records should be retrieved hennce Mmsg without additional args for now
+ */
+ Mmsg(cmd,
+ "SELECT JobId, Path, Filename, PluginName, "
+ "ObjectType, ObjectName, ObjectSource, ObjectUUID, ObjectSize "
+ "FROM Object");
+
+ bdb_lock();
+ if (QueryDB(jcr, cmd)) {
+ //TODO fill that part
+ stat = true;
+ } else {
+ //err
+ Jmsg(jcr, M_ERROR, 0, _("Query %s failed!\n"), cmd);
+ }
+
+ bdb_unlock();
+ return stat;
+}
/*
* Get RestoreObject Record
* If the RestoreObjectId is non-zero, we get its record
bdb_unlock();
}
+
+/*
+ * List plugin objects
+ */
+void BDB::bdb_list_plugin_objects(JCR *jcr, OBJECT_DBR *obj_r, DB_LIST_HANDLER *sendit, void *ctx, e_list_type type)
+{
+
+ //TODO Fixup fields displayed
+ Mmsg(cmd,
+ "SELECT ObjectId, JobId, "
+ "ObjectType, ObjectName "
+ "FROM Object");
+
+
+ bdb_lock();
+ if (!QueryDB(jcr, cmd)) {
+ Jmsg(jcr, M_ERROR, 0, _("Query %s failed!\n"), cmd);
+ bdb_unlock();
+ return;
+ }
+
+ list_result(jcr, this, sendit, ctx, type);
+
+ sql_free_result();
+ bdb_unlock();
+}
+
/*
* List restore objects
*
#define FT_JUNCTION 26 /* Win32 Junction point or Symlink to a dir */
#define FT_PLUGIN_CONFIG 27 /* Object for Plugin configuration */
#define FT_PLUGIN_CONFIG_FILLED 28 /* Object for Plugin configuration filled by Director */
+#define FT_PLUGIN_OBJECT 29 /* Opaque Plugin Object used for Object Management*/
/* Definitions for upper part of type word (see above). */
#define AR_DATA_STREAM (1<<16) /* Data stream id present */