22 July 2004
1.35 Items to do:
+- Knoppix CDROM
- Add bscan to four-concurrent-jobs regression.
- Do tape alerts -- see tapealert.txt
- Document a get out of jail procedure if everything breaks if
non-existent directories will not be restored properly.
Wish list:
+- Implement the FreeBSD nodump flag in chflags.
- Figure out how to make named console messages go only to that
console and to the non-restricted console (new console class?).
- Make restricted console prompt for password if *ask* is set or
perhaps if password is undefined.
- Implement "from ISO-date/time every x hours/days/weeks/months" in
schedules.
+==== from Marc Schoechlin
+- the help-command should be more verbose
+ (it should explain the paramters of the different
+ commands in detail)
+ -> it´s time-comsuming to consult the manual anytime
+ you need a special parameter
+ -> maybe it´s more easy to maintain this, if the
+ descriptions of that commands are outsourced to
+ a ceratin-file
+- the cd-command should allow complete paths
+ i.e. cd /foo/bar/foo/bar
+ -> if a customer mails me the path to a certain file,
+ it´s faster to enter the specified directory
+- if the password is not configured in bconsole.conf
+ you should be asked for it.
+ -> sometimes you like to do restore on a customer-machine
+ which shouldn´t know the password for bacula.
+ -> adding the password to the file favours admins
+ to forget to remove the password after usage
+ -> security-aspects
+ the protection of that file is less important
+- long-listed-output of commands should be scrollable
+ like the unix more/less-command does
+ -> if someone runs 200 and more machines, the lists could
+ be a little long and complex
+- command-output should be shown column by column
+ to reduce scrolling and to increase clarity
+ -> see last item
+- lsmark should list the selected files with full
+ paths
+- wildcards for selecting and file and directories would be nice
+- any actions should be interuptable with STRG+C
+- command-expansion would be pretty cool
+====
- Compaction of Disk space by "migrating" Volumes that have pruned
Jobs (what criteria? size, #jobs, time).
- Add prune all command
- Add better error codes to run_program (10000+)
- Revisit and revise Disaster Recovery (fix SCSI and RAID
disk detection)
-
Emsg0(M_ERROR_TERM, 0, "Too many items in Job resource\n");
}
}
- if (job->client && job->client->catalog) {
- CAT *catalog = job->client->catalog;
- B_DB *db;
-
- /*
- * Make sure we can open catalog, otherwise print a warning
- * message because the server is probably not running.
- */
- db = db_init_database(NULL, catalog->db_name, catalog->db_user,
- catalog->db_password, catalog->db_address,
- catalog->db_port, catalog->db_socket);
- if (!db || !db_open_database(NULL, db)) {
- Jmsg(NULL, M_FATAL, 0, _("Could not open database \"%s\".\n"),
- catalog->db_name);
- if (db) {
- Jmsg(NULL, M_FATAL, 0, _("%s"), db_strerror(db));
- }
- OK = false;
- } else {
- /* If a pool is defined for this job, create the pool DB
- * record if it is not already created.
- */
- if (job->pool) {
- create_pool(NULL, db, job->pool, POOL_OP_UPDATE); /* update request */
+ } /* End loop over Job res */
+
+ /* Loop over databases */
+ CAT *catalog;
+ foreach_res(catalog, R_CATALOG) {
+ B_DB *db;
+ /*
+ * Make sure we can open catalog, otherwise print a warning
+ * message because the server is probably not running.
+ */
+ db = db_init_database(NULL, catalog->db_name, catalog->db_user,
+ catalog->db_password, catalog->db_address,
+ catalog->db_port, catalog->db_socket);
+ if (!db || !db_open_database(NULL, db)) {
+ Jmsg(NULL, M_FATAL, 0, _("Could not open database \"%s\".\n"),
+ catalog->db_name);
+ if (db) {
+ Jmsg(NULL, M_FATAL, 0, _("%s"), db_strerror(db));
+ }
+ OK = false;
+ continue;
+ }
+
+ /* Loop over all pools, defining/updating them in each database */
+ POOL *pool;
+ foreach_res(pool, R_POOL) {
+ create_pool(NULL, db, pool, POOL_OP_UPDATE); /* update request */
+ }
+ /* Loop over all counters, defining them in each database */
+
+ /* Set default value in all counters */
+ COUNTER *counter;
+ foreach_res(counter, R_COUNTER) {
+ /* Write to catalog? */
+ if (!counter->created && counter->Catalog == catalog) {
+ COUNTER_DBR cr;
+ bstrncpy(cr.Counter, counter->hdr.name, sizeof(cr.Counter));
+ cr.MinValue = counter->MinValue;
+ cr.MaxValue = counter->MaxValue;
+ cr.CurrentValue = counter->MinValue;
+ if (counter->WrapCounter) {
+ bstrncpy(cr.WrapCounter, counter->WrapCounter->hdr.name, sizeof(cr.WrapCounter));
+ } else {
+ cr.WrapCounter[0] = 0; /* empty string */
}
- /* Set default value in all counters */
- COUNTER *counter;
- foreach_res(counter, R_COUNTER) {
- /* Write to catalog? */
- if (!counter->created && counter->Catalog == catalog) {
- COUNTER_DBR cr;
- bstrncpy(cr.Counter, counter->hdr.name, sizeof(cr.Counter));
- cr.MinValue = counter->MinValue;
- cr.MaxValue = counter->MaxValue;
- cr.CurrentValue = counter->MinValue;
- if (counter->WrapCounter) {
- bstrncpy(cr.WrapCounter, counter->WrapCounter->hdr.name, sizeof(cr.WrapCounter));
- } else {
- cr.WrapCounter[0] = 0; /* empty string */
- }
- if (db_create_counter_record(NULL, db, &cr)) {
- counter->CurrentValue = cr.CurrentValue;
- counter->created = true;
- Dmsg2(100, "Create counter %s val=%d\n", counter->hdr.name, counter->CurrentValue);
- }
- }
- if (!counter->created) {
- counter->CurrentValue = counter->MinValue; /* default value */
- }
+ if (db_create_counter_record(NULL, db, &cr)) {
+ counter->CurrentValue = cr.CurrentValue;
+ counter->created = true;
+ Dmsg2(100, "Create counter %s val=%d\n", counter->hdr.name, counter->CurrentValue);
}
+ }
+ if (!counter->created) {
+ counter->CurrentValue = counter->MinValue; /* default value */
}
- db_close_database(NULL, db);
}
+ db_close_database(NULL, db);
}
UnlockRes();