many others, a complete list can be found in the file AUTHORS.
This program is Free Software; you can redistribute it and/or
modify it under the terms of version two of the GNU General Public
- License as published by the Free Software Foundation plus additions
- that are listed in the file LICENSE.
+ License as published by the Free Software Foundation and included
+ in the file LICENSE.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
ua->error_msg("%s", db_strerror(ua->db));
} else {
ua->info_msg(_("New Recycle flag is: %s\n"),
- mr->Recycle==1?_("yes"):_("no"));
+ recycle==1?_("yes"):_("no"));
}
}
ua->error_msg("%s", db_strerror(ua->db));
} else {
ua->info_msg(_("New InChanger flag is: %s\n"),
- mr->InChanger==1?_("yes"):_("no"));
+ InChanger==1?_("yes"):_("no"));
}
}
void update_vol_pool(UAContext *ua, char *val, MEDIA_DBR *mr, POOL_DBR *opr)
{
POOL_DBR pr;
- POOLMEM *query;
+ POOL_MEM query(PM_MESSAGE);
char ed1[50], ed2[50];
memset(&pr, 0, sizeof(pr));
mr->PoolId = pr.PoolId; /* set new PoolId */
/*
*/
- query = get_pool_memory(PM_MESSAGE);
db_lock(ua->db);
Mmsg(query, "UPDATE Media SET PoolId=%s WHERE MediaId=%s",
- edit_int64(mr->PoolId, ed1),
- edit_int64(mr->MediaId, ed2));
- if (!db_sql_query(ua->db, query, NULL, NULL)) {
+ edit_int64(mr->PoolId, ed1), edit_int64(mr->MediaId, ed2));
+ if (!db_sql_query(ua->db, query.c_str(), NULL, NULL)) {
ua->error_msg("%s", db_strerror(ua->db));
} else {
ua->info_msg(_("New Pool is: %s\n"), pr.Name);
}
}
db_unlock(ua->db);
- free_pool_memory(query);
}
/* Modify the RecyclePool of a Volume */
void update_vol_recyclepool(UAContext *ua, char *val, MEDIA_DBR *mr)
{
POOL_DBR pr;
- POOLMEM *query;
+ POOL_MEM query(PM_MESSAGE);
char ed1[50], ed2[50];
memset(&pr, 0, sizeof(pr));
/* pool = select_pool_resource(ua); */
mr->RecyclePoolId = pr.PoolId; /* get the PoolId */
- query = get_pool_memory(PM_MESSAGE);
db_lock(ua->db);
Mmsg(query, "UPDATE Media SET RecyclePoolId=%s WHERE MediaId=%s",
- edit_int64(mr->RecyclePoolId, ed1),
- edit_int64(mr->MediaId, ed2));
- if (!db_sql_query(ua->db, query, NULL, NULL)) {
+ edit_int64(mr->RecyclePoolId, ed1), edit_int64(mr->MediaId, ed2));
+ if (!db_sql_query(ua->db, query.c_str(), NULL, NULL)) {
ua->error_msg("%s", db_strerror(ua->db));
} else {
ua->info_msg(_("New RecyclePool is: %s\n"), pr.Name);
}
db_unlock(ua->db);
- free_pool_memory(query);
}
/*
* Refresh the Volume information from the Pool record
* for all Volumes
*/
-static void update_all_vols_from_pool(UAContext *ua)
+static void update_all_vols_from_pool(UAContext *ua, const char *pool_name)
{
POOL_DBR pr;
MEDIA_DBR mr;
memset(&pr, 0, sizeof(pr));
memset(&mr, 0, sizeof(mr));
+
+ bstrncpy(pr.Name, pool_name, sizeof(pr.Name));
if (!get_pool_dbr(ua, &pr)) {
return;
}
if (!db_update_media_defaults(ua->jcr, ua->db, &mr)) {
ua->error_msg(_("Error updating Volume records: ERR=%s"), db_strerror(ua->db));
} else {
- ua->info_msg(_("All Volume defaults updated from Pool record.\n"));
+ ua->info_msg(_("All Volume defaults updated from \"%s\" Pool record.\n"),
+ pr.Name);
}
}
static int update_volume(UAContext *ua)
{
MEDIA_DBR mr;
+ POOL *pool;
POOL_DBR pr;
POOLMEM *query;
+ char buf[1000];
char ed1[130];
bool done = false;
int i;
update_vol_from_pool(ua, &mr);
return 1;
case 11:
- update_all_vols_from_pool(ua);
+ update_all_vols_from_pool(ua, ua->argv[j]);
return 1;
case 12:
update_volenabled(ua, ua->argv[j], &mr);
case 8: /* InChanger */
ua->info_msg(_("Current InChanger flag is: %d\n"), mr.InChanger);
- if (!get_yesno(ua, _("Set InChanger flag? yes/no: "))) {
+ bsnprintf(buf, sizeof(buf), _("Set InChanger flag for Volume \"%s\": yes/no: "),
+ mr.VolumeName);
+ if (!get_yesno(ua, buf)) {
return 0;
}
mr.InChanger = ua->pint32_val;
VolFiles = ua->pint32_val;
if (VolFiles != (int)(mr.VolFiles + 1)) {
ua->warning_msg(_("Normally, you should only increase Volume Files by one!\n"));
- if (!get_yesno(ua, _("Continue? (yes/no): ")) || ua->pint32_val == 0) {
+ if (!get_yesno(ua, _("Increase Volume Files? (yes/no): ")) || ua->pint32_val == 0) {
break;
}
}
update_vol_from_pool(ua, &mr);
return 1;
case 12:
- update_all_vols_from_pool(ua);
+ pool = select_pool_resource(ua);
+ if (pool) {
+ update_all_vols_from_pool(ua, pool->name());
+ }
return 1;
case 13:
}
memset(&pr, 0, sizeof(pr));
- bstrncpy(pr.Name, pool->hdr.name, sizeof(pr.Name));
+ bstrncpy(pr.Name, pool->name(), sizeof(pr.Name));
if (!get_pool_dbr(ua, &pr)) {
return false;
}
*/
static bool update_job(UAContext *ua)
{
- bool done = false;
int i;
+ char ed1[50], ed2[50];
+ POOL_MEM cmd(PM_MESSAGE);
+ JOB_DBR jr;
+ CLIENT_DBR cr;
+ utime_t StartTime;
+ char *client_name = NULL;
+ char *start_time = NULL;
const char *kw[] = {
- NT_("StartTime"), /* 0 */
+ NT_("starttime"), /* 0 */
+ NT_("client"), /* 1 */
NULL };
+ Dmsg1(200, "cmd=%s\n", ua->cmd);
+ i = find_arg_with_value(ua, NT_("jobid"));
+ if (i < 0) {
+ ua->error_msg(_("Expect JobId keyword, not found.\n"));
+ return false;
+ }
+ memset(&jr, 0, sizeof(jr));
+ memset(&cr, 0, sizeof(cr));
+ jr.JobId = str_to_int64(ua->argv[i]);
+ if (!db_get_job_record(ua->jcr, ua->db, &jr)) {
+ ua->error_msg("%s", db_strerror(ua->db));
+ return false;
+ }
for (i=0; kw[i]; i++) {
int j;
- if ((j=find_arg_with_value(ua, kw[i])) > 0) {
+ if ((j=find_arg_with_value(ua, kw[i])) >= 0) {
switch (i) {
- case 0:
+ case 0: /* start time */
+ start_time = ua->argv[j];
break;
- case 1:
+ case 1: /* Client name */
+ client_name = ua->argv[j];
break;
}
- done = true;
}
}
+ if (!client_name && !start_time) {
+ ua->error_msg(_("Neither Client nor StartTime specified.\n"));
+ return 0;
+ }
+ if (client_name) {
+ if (!get_client_dbr(ua, &cr)) {
+ return false;
+ }
+ jr.ClientId = cr.ClientId;
+ }
+ if (start_time) {
+ utime_t delta_start;
+ StartTime = str_to_utime(start_time);
+ if (StartTime == 0) {
+ ua->error_msg(_("Improper date format: %s\n"), ua->argv[i]);
+ return false;
+ }
+ delta_start = StartTime - jr.StartTime;
+ Dmsg3(200, "ST=%d jr.ST=%d delta=%d\n", (time_t)StartTime,
+ (time_t)jr.StartTime, (time_t)delta_start);
+ jr.StartTime = (time_t)StartTime;
+ jr.SchedTime += (time_t)delta_start;
+ jr.EndTime += (time_t)delta_start;
+ jr.JobTDate += delta_start;
+ /* Convert to DB times */
+ bstrutime(jr.cStartTime, sizeof(jr.cStartTime), jr.StartTime);
+ bstrutime(jr.cSchedTime, sizeof(jr.cSchedTime), jr.SchedTime);
+ bstrutime(jr.cEndTime, sizeof(jr.cEndTime), jr.EndTime);
+ }
+ Mmsg(cmd, "UPDATE Job SET ClientId=%s,StartTime='%s',SchedTime='%s',"
+ "EndTime='%s',JobTDate=%s WHERE JobId=%s",
+ edit_int64(jr.ClientId, ed1),
+ jr.cStartTime,
+ jr.cSchedTime,
+ jr.cEndTime,
+ edit_uint64(jr.JobTDate, ed1),
+ edit_int64(jr.JobId, ed2));
+ if (!db_sql_query(ua->db, cmd.c_str(), NULL, NULL)) {
+ ua->error_msg("%s", db_strerror(ua->db));
+ return false;
+ }
return true;
}