int qhelp_cmd(UAContext *ua, const char *cmd);
int quit_cmd(UAContext *ua, const char *cmd);
-
+/* not all in alphabetical order. New commands are added after existing commands with similar letters
+ to prevent breakage of existing user scripts. */
struct cmdstruct { const char *key; int (*func)(UAContext *ua, const char *cmd); const char *help; const bool use_in_rs;};
static struct cmdstruct commands[] = { /* Can use it in Console RunScript*/
- { NT_("add"), add_cmd, _("add media to a pool"), false},
+ { NT_("add"), add_cmd, _("add [pool=<pool-name> storage=<storage> jobid=<JobId>] -- add media to a pool"), false},
{ NT_("autodisplay"), autodisplay_cmd, _("autodisplay [on|off] -- console messages"),false},
{ NT_("automount"), automount_cmd, _("automount [on|off] -- after label"), false},
- { NT_("cancel"), cancel_cmd, _("cancel [<jobid=nnn> | <job=name>] -- cancel a job"), false},
- { NT_("create"), create_cmd, _("create DB Pool from resource"), false},
- { NT_("delete"), delete_cmd, _("delete [pool=<pool-name> | media volume=<volume-name>]"), true},
+ { NT_("cancel"), cancel_cmd, _("cancel [jobid=<number> job=<job-name> ujobid=<unique-jobid>] -- cancel a job"), false},
+ { NT_("create"), create_cmd, _("create [pool=<pool-name>] -- create DB Pool from resource"), false},
+ { NT_("delete"), delete_cmd, _("delete [volume=<vol-name> pool=<pool-name> job jobid=<id>]"), true},
{ NT_("disable"), disable_cmd, _("disable <job=name> -- disable a job"), true},
{ NT_("enable"), enable_cmd, _("enable <job=name> -- enable a job"), true},
{ NT_("estimate"), estimate_cmd, _("performs FileSet estimate, listing gives full listing"), true},
{ NT_("exit"), quit_cmd, _("exit = quit"), false},
{ NT_("gui"), gui_cmd, _("gui [on|off] -- non-interactive gui mode"), false},
{ NT_("help"), help_cmd, _("print this command"), false},
- { NT_("list"), list_cmd, _("list [pools | jobs | jobtotals | media <pool=pool-name> | files <jobid=nn> | copies <jobid=nn>]; from catalog"), true},
{ NT_("label"), label_cmd, _("label a tape"), false},
+ { NT_("list"), list_cmd, _("list [pools | jobs | jobtotals | media <pool=pool-name> | files <jobid=nn> | copies <jobid=nn>]; from catalog"), true},
{ NT_("llist"), llist_cmd, _("full or long list like list command"), true},
{ NT_("messages"), messagescmd, _("messages"), false},
{ NT_("memory"), memory_cmd, _("print current memory usage"), true},
- { NT_("mount"), mount_cmd, _("mount <storage-name>"), false},
- { NT_("prune"), prunecmd, _("prune expired records from catalog"), true},
+ { NT_("mount"), mount_cmd, _("mount storage=<storage-name> [ slot=<num> ] [ drive=<num> ] or mount [ jobid=<id> | job=<job-name> ]"), false},
+ { NT_("prune"), prunecmd, _("prune files|jobs|volume client=<client-name> volume=<volume-name> prune expired records from catalog"), true},
{ NT_("purge"), purgecmd, _("purge records from catalog"), true},
{ NT_("python"), python_cmd, _("python control commands"), false},
{ NT_("quit"), quit_cmd, _("quit"), false},
{ NT_("query"), querycmd, _("query catalog"), false},
{ NT_("restore"), restore_cmd, _("restore files"), false},
- { NT_("relabel"), relabel_cmd, _("relabel a tape"), false},
+ { NT_("relabel"), relabel_cmd, _("relabel storage=<storage-name> oldvolume=<old-volume-name> volume=<newvolume-name> -- relabel a tape"), false},
{ NT_("release"), release_cmd, _("release <storage-name>"), false},
{ NT_("reload"), reload_cmd, _("reload conf file"), true},
- { NT_("run"), run_cmd, _("run <job-name>"), false}, /* need to be check */
- { NT_("status"), status_cmd, _("status [storage | client]=<name>"), true},
- { NT_("setdebug"), setdebug_cmd, _("sets debug level"), true},
+ { NT_("run"), run_cmd, _("run job=<job-name> client=<client-name> fileset=<FileSet-name> level=<level-keyword> storage=<storage-name> where=<directory-prefix> when=<universal-time-specification> yes"), false}, /* need to be check */
+ { NT_("status"), status_cmd, _("status [all | dir=<dir-name> | director | client=<client-name> | storage=<storage-name> | days=nnn]"), true},
+ { NT_("setdebug"), setdebug_cmd, _("setdebug level=nn [trace=0/1 client=<client-name> | dir | director | storage=<storage-name> | all] -- sets debug level"), true},
{ NT_("setip"), setip_cmd, _("sets new client address -- if authorized"), false},
{ NT_("show"), show_cmd, _("show (resource records) [jobs | pools | ... | all]"), true},
{ NT_("sqlquery"), sqlquerycmd, _("use SQL to query catalog"), false},
{ NT_("time"), time_cmd, _("print current time"), true},
{ NT_("trace"), trace_cmd, _("turn on/off trace to file"), true},
- { NT_("unmount"), unmount_cmd, _("unmount <storage-name>"), false},
- { NT_("umount"), unmount_cmd, _("umount <storage-name> for old-time Unix guys"),false},
+ { NT_("unmount"), unmount_cmd, _("unmount storage=<storage-name> [ drive=<num> ] or unmount [ jobid=<id> | job=<job-name> ]"), false},
+ { NT_("umount"), unmount_cmd, _("umount - for old-time Unix guys, see unmount"),false},
{ NT_("update"), update_cmd, _("update Volume, Pool or slots"), true},
- { NT_("use"), use_cmd, _("use catalog xxx"), false},
+ { NT_("use"), use_cmd, _("use <database-name> -- catalog xxx"), false},
{ NT_("var"), var_cmd, _("does variable expansion"), false},
{ NT_("version"), version_cmd, _("print Director version"), true},
- { NT_("wait"), wait_cmd, _("wait until no jobs are running [<jobname=name> | <jobid=nnn> | <ujobid=complete_name>]"), false},
+ { NT_("wait"), wait_cmd, _("wait [<jobname=name> | <jobid=nnn> | <ujobid=complete_name>] -- wait until no jobs are running"), false},
};
#define comsize (sizeof(commands)/sizeof(struct cmdstruct))
}
}
-/* set/update Pool.RecyclePoolId in Catalog */
-int update_pool_recyclepool(JCR *jcr, B_DB *db, POOL *pool)
+/* set/update Pool.RecyclePoolId and Pool.ScratchPoolId in Catalog */
+int update_pool_references(JCR *jcr, B_DB *db, POOL *pool)
{
POOL_DBR pr;
- if (!pool->RecyclePool) {
+ if (!pool->RecyclePool && !pool->ScratchPool) {
return 1;
}
set_pooldbr_from_poolres(&pr, pool, POOL_OP_UPDATE);
- if (!set_pooldbr_recyclepoolid(jcr, db, &pr, pool)) {
+ if (!set_pooldbr_references(jcr, db, &pr, pool)) {
return -1; /* error */
}
return 1;
}
-/* set POOL_DBR.RecyclePoolId from Pool resource
+/* set POOL_DBR.RecyclePoolId and POOL_DBR.ScratchPoolId from Pool resource
* works with set_pooldbr_from_poolres
*/
-bool set_pooldbr_recyclepoolid(JCR *jcr, B_DB *db, POOL_DBR *pr, POOL *pool)
+bool set_pooldbr_references(JCR *jcr, B_DB *db, POOL_DBR *pr, POOL *pool)
{
POOL_DBR rpool;
bool ret = true;
} else { /* no RecyclePool used, set it to 0 */
pr->RecyclePoolId = 0;
}
+
+ if (pool->ScratchPool) {
+ memset(&rpool, 0, sizeof(POOL_DBR));
+
+ bstrncpy(rpool.Name, pool->ScratchPool->name(), sizeof(rpool.Name));
+ if (db_get_pool_record(jcr, db, &rpool)) {
+ pr->ScratchPoolId = rpool.PoolId;
+ } else {
+ Jmsg(jcr, M_WARNING, 0,
+ _("Can't set %s ScratchPool to %s, %s is not in database.\n" \
+ "Try to update it with 'update pool=%s'\n"),
+ pool->name(), rpool.Name, rpool.Name,pool->name());
+ ret = false;
+ }
+ } else { /* no ScratchPool used, set it to 0 */
+ pr->ScratchPoolId = 0;
+ }
+
return ret;
}
/* Pool Exists */
if (op == POOL_OP_UPDATE) { /* update request */
set_pooldbr_from_poolres(&pr, pool, op);
+ set_pooldbr_references(jcr, db, &pr, pool);
db_update_pool_record(jcr, db, &pr);
}
return 0; /* exists */
}
set_pooldbr_from_poolres(&pr, pool, op);
+ set_pooldbr_references(jcr, db, &pr, pool);
if (!db_create_pool_record(jcr, db, &pr)) {
return -1; /* error */