Kern's ToDo List
- 08 June 2004
+ 10 June 2004
+
+1.34.4 Items to do:
+- Implement SIGHUP in Dir
+- Implement fast tree insert (doubly linked list?)
+- Implement "label slots=1,2... pool=yyy barcodes"
+- Do tape alerts -- see tapealert.txt
+- When restore started from console, report jobid.
+- Feedback while the tree is being built.
+- On Win95
+ The error I when I installed 1.34.2 clients:
+ The BACULA-FD file is
+ linked to missing export KERNEL32.DLL:GetFileAttributesExA.
+
Documentation to do: (any release a little bit at a time)
- Document query file format.
- If you use restore replace=never, the directory attributes for
non-existent directories will not be restored properly.
-1.34 Cleanup
+Wish list:
- Add multiple-media-types.txt
- look at mxt-changer.html
- Document a get out of jail procedure if everything breaks if you lost/broke
the Catalog.
-
-1.34.3 Items:
-- Add regression of btape "fill"
-
-For version 1.35:
-- Implement "label slots=1,2... pool=yyy barcodes"
- Make ? do a help command (no return needed).
-- Do tape alerts -- see tapealert.txt
- Implement restore directory.
- Add All Local Partitions = yes to new style saves.
- Document streams and how to implement them.
-- On Win95
- The error I when I installed 1.34.2 clients:
- The BACULA-FD file is
- linked to missing export KERNEL32.DLL:GetFileAttributesExA.
-- When restore started from console, report jobid.
-- Feedback while the tree is being built.
- Possibly implement "Ensure Full Backup = yes" looks for a failed full backup
and upgrades the current backup if one exists.
- Check that barcode reading and update slots scan works.
====
-=== Done in 1.35
+=== Done in 1.34.3
- To pass Include 1 or two letter commands
I Name Include name - first record
B Name Base name - repeat
F Number Number of filenames to follow
<file-name>
...
+- Add regression of btape "fill"
+
/*
* If we have a non-zero InChanger, ensure that no other Media
- * record in this Pool has InChanger set on the same Slot.
+ * record has InChanger set on the same Slot.
*
* This routine assumes the database is already locked.
*/
db_make_inchanger_unique(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr)
{
if (mr->InChanger != 0 && mr->Slot != 0) {
- Mmsg(&mdb->cmd, "UPDATE Media SET InChanger=0 WHERE PoolId=%u "
- "AND Slot=%d AND MediaId!=%u", mr->PoolId, mr->Slot, mr->MediaId);
+ Mmsg(&mdb->cmd, "UPDATE Media SET InChanger=0 WHERE "
+ "Slot=%d AND MediaId!=%u", mr->Slot, mr->MediaId);
Dmsg1(400, "%s\n", mdb->cmd);
UPDATE_DB(jcr, mdb, mdb->cmd);
}
return 1;
}
+/*
+ * NOTE! This routine opens the SD socket but leaves it open
+ */
static int send_label_request(UAContext *ua, MEDIA_DBR *mr, MEDIA_DBR *omr,
POOL_DBR *pr, int relabel, bool media_record_exists)
{
ok = TRUE;
}
}
- close_sd_bsock(ua);
unbash_spaces(mr->VolumeName);
unbash_spaces(mr->MediaType);
unbash_spaces(pr->Name);
} else {
vl->VolName = NULL;
}
- Dmsg2(100, "Add slot=%d Vol=%s to list.\n", vl->Slot, NPRT(vl->VolName));
+ Dmsg2(100, "Add slot=%d Vol=%s to SD list.\n", vl->Slot, NPRT(vl->VolName));
if (!vol_list) {
vl->next = vol_list;
vol_list = vl;
void binit(BFILE *bfd)
{
+ memset(bfd, 0, sizeof(BFILE));
bfd->fid = -1;
bfd->mode = BF_CLOSED;
bfd->use_backup_api = have_win32_api();
*/
void binit(BFILE *bfd)
{
+ memset(bfd, 0, sizeof(BFILE));
bfd->fid = -1;
}
#ifndef __BFILE_H
#define __BFILE_H
+/* =======================================================
+ *
+ * W I N D O W S
+ *
+ * =======================================================
+ */
#if defined(HAVE_CYGWIN) || defined(HAVE_WIN32)
#include <windows.h>
#else /* Linux/Unix systems */
+/* =======================================================
+ *
+ * U N I X
+ *
+ * =======================================================
+ */
+
/* Basic low level I/O file packet */
struct BFILE {
int fid; /* file id on Unix */
}
#ifdef TEST_PROGRAM
-void d_msg(char*, int, int, char*, ...)
+void d_msg(const char*, int, int, const char*, ...)
{}
int main(int argc, char *argv[])
{
continue;
}
edit_utime(val, outval);
- printf("in=%s val=%lld outval=%s\n", str[i], val, outval);
+ printf("in=%s val=%" lld " outval=%s\n", str[i], val, outval);
}
}
#endif
}
dev = dcr->dev;
block = dcr->block;
+ memset(&rec, 0, sizeof(rec));
Dmsg1(20, "Begin append device=%s\n", dev_name(dev));
if (rec->Stream == STREAM_UNIX_ATTRIBUTES ||
rec->Stream == STREAM_UNIX_ATTRIBUTES_EX) {
+ if (verbose > 1) {
+ char *rtype = "Attributes";
+ Pmsg5(-1, "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n",
+ rtype, rec->VolSessionId, rec->VolSessionTime, rec->Stream, rec->data_len);
+ }
if (!unpack_attributes_record(jcr, rec->Stream, rec->data, attr)) {
- Emsg0(M_ERROR_TERM, 0, _("Cannot continue.\n"));
+ if (!forge_on) {
+ Emsg0(M_ERROR_TERM, 0, _("Cannot continue.\n"));
+ }
}
if (attr->file_index != rec->FileIndex) {
- Emsg2(M_ERROR_TERM, 0, _("Record header file index %ld not equal record index %ld\n"),
- rec->FileIndex, attr->file_index);
+ Emsg2(forge_on?M_WARNING:M_ERROR_TERM, 0, _("Record header file index %ld not equal record index %ld\n"),
+ rec->FileIndex, attr->file_index);
}
attr->data_stream = decode_stat(attr->attr, &attr->statp, &attr->LinkFI);
}
Dmsg5(10, "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n",
rtype, rec->VolSessionId, rec->VolSessionTime, rec->Stream, rec->data_len);
+ if (verbose) {
+ Pmsg5(-1, "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n",
+ rtype, rec->VolSessionId, rec->VolSessionTime, rec->Stream, rec->data_len);
+ }
}
/* */
#undef VERSION
-#define VERSION "1.34.3"
+#define VERSION "1.34.4"
#define VSTRING "1"
#define BDATE "09 June 2004"
#define LSMDATE "09Jun04"