--sd.conf password does not match dir.conf storage password
=======
+- Write updated bootstrap after every Job.
- Correct Warning: Volume name mismatch. Wanted test2 got test1
when reading a tape and want the next one.
- Create all pools when Director starts
char ed1[30];
m_msg(file, line, &mdb->errmsg, _("Insertion problem: affect_rows=%s\n"),
edit_uint64(mdb->num_rows, ed1));
- j_msg(file, line, mdb->jcr, M_FATAL, 0, mdb->errmsg); /* ***FIXME*** remove me */
return 0;
}
mdb->changes++;
char ed1[30];
m_msg(file, line, &mdb->errmsg, _("Update problem: affect_rows=%s\n"),
edit_uint64(mdb->num_rows, ed1));
- j_msg(file, line, mdb->jcr, M_ERROR, 0, mdb->errmsg);
- j_msg(file, line, mdb->jcr, M_ERROR, 0, "%s\n", cmd);
return 0;
}
mdb->changes++;
{
int fnl, pnl;
char *l, *p;
- uint64_t id;
+ int stat;
char file[MAXSTRING];
char spath[MAXSTRING];
char buf[MAXSTRING];
db_escape_string(buf, file, fnl);
fdbr->FilenameId = db_get_filename_record(mdb, buf);
- Dmsg2(100, "db_get_filename_record FilenameId=%d file=%s\n", fdbr->FilenameId, buf);
+ Dmsg2(100, "db_get_filename_record FilenameId=%u file=%s\n", fdbr->FilenameId, buf);
db_escape_string(buf, spath, pnl);
fdbr->PathId = db_get_path_record(mdb, buf);
- Dmsg2(100, "db_get_path_record PathId=%d path=%s\n", fdbr->PathId, buf);
+ Dmsg2(100, "db_get_path_record PathId=%u path=%s\n", fdbr->PathId, buf);
- id = db_get_file_record(mdb, fdbr);
+ stat = db_get_file_record(mdb, fdbr);
- return id;
+ return stat;
}
-
-/* Get a File record
+/*
+ * Get a File record
* Returns: 0 on failure
* 1 on success
+ *
+ * DO NOT use Jmsg in this routine.
+ *
+ * Note in this routine, we do not use Jmsg because it may be
+ * called to get attributes of a non-existant file, which is
+ * "normal" if a new file is found during Verify.
*/
static
int db_get_file_record(B_DB *mdb, FILE_DBR *fdbr)
db_lock(mdb);
Mmsg(&mdb->cmd,
-"SELECT FileId, LStat, MD5 from File where File.JobId=%d and File.PathId=%d and \
-File.FilenameId=%d", fdbr->JobId, fdbr->PathId, fdbr->FilenameId);
+"SELECT FileId, LStat, MD5 from File where File.JobId=%u and File.PathId=%u and \
+File.FilenameId=%u", fdbr->JobId, fdbr->PathId, fdbr->FilenameId);
- Dmsg3(050, "Get_file_record JobId=%d FilenameId=%d PathId=%d\n",
+ Dmsg3(050, "Get_file_record JobId=%u FilenameId=%u PathId=%u\n",
fdbr->JobId, fdbr->FilenameId, fdbr->PathId);
Dmsg1(100, "Query=%s\n", mdb->cmd);
mdb->num_rows = sql_num_rows(mdb);
Dmsg1(050, "get_file_record num_rows=%d\n", (int)mdb->num_rows);
- /*
- * Note, we can find more than one File record with the same
- * filename if the file is linked. ????????
- */
if (mdb->num_rows > 1) {
- Jmsg1(mdb->jcr, M_WARNING, 0, _("get_file_record want 1 got rows=%d\n"), mdb->num_rows);
- Jmsg1(mdb->jcr, M_ERROR, 0, "%s", mdb->cmd);
+ Mmsg1(&mdb->errmsg, _("get_file_record want 1 got rows=%d\n"),
+ mdb->num_rows);
}
if (mdb->num_rows >= 1) {
if ((row = sql_fetch_row(mdb)) == NULL) {
- Mmsg1(&mdb->errmsg, "Error fetching row: %s\n", sql_strerror(mdb));
- Jmsg(mdb->jcr, M_ERROR, 0, "%s", mdb->errmsg);
+ Mmsg1(&mdb->errmsg, _("Error fetching row: %s\n"), sql_strerror(mdb));
} else {
fdbr->FileId = (FileId_t)strtod(row[0], NULL);
strncpy(fdbr->LStat, row[1], sizeof(fdbr->LStat));
/* Get Filename record
* Returns: 0 on failure
* FilenameId on success
+ *
+ * DO NOT use Jmsg in this routine (see notes for get_file_record)
*/
static int db_get_filename_record(B_DB *mdb, char *fname)
{
if (mdb->num_rows > 1) {
Mmsg1(&mdb->errmsg, _("More than one Filename!: %d\n"), (int)(mdb->num_rows));
- Jmsg(mdb->jcr, M_WARNING, 0, "%s", mdb->errmsg);
}
if (mdb->num_rows >= 1) {
if ((row = sql_fetch_row(mdb)) == NULL) {
Mmsg1(&mdb->errmsg, _("error fetching row: %s\n"), sql_strerror(mdb));
- Jmsg(mdb->jcr, M_ERROR, 0, "%s", mdb->errmsg);
} else {
FilenameId = atoi(row[0]);
if (FilenameId <= 0) {
Mmsg2(&mdb->errmsg, _("Get DB Filename record %s found bad record: %d\n"),
mdb->cmd, FilenameId);
- Jmsg(mdb->jcr, M_ERROR, 0, "%s", mdb->errmsg);
FilenameId = 0;
}
}
/* Get path record
* Returns: 0 on failure
* PathId on success
+ *
+ * DO NOT use Jmsg in this routine (see notes for get_file_record)
*/
static int db_get_path_record(B_DB *mdb, char *path)
{
} else if (mdb->num_rows == 1) {
if ((row = sql_fetch_row(mdb)) == NULL) {
Mmsg1(&mdb->errmsg, _("error fetching row: %s\n"), sql_strerror(mdb));
- Jmsg(mdb->jcr, M_ERROR, 0, "%s", mdb->errmsg);
} else {
PathId = atoi(row[0]);
if (PathId <= 0) {
- Mmsg2(&mdb->errmsg, _("Get DB path record %s found bad record: %d\n"),
+ Mmsg2(&mdb->errmsg, _("Get DB path record %s found bad record: %u\n"),
mdb->cmd, PathId);
- Jmsg(mdb->jcr, M_ERROR, 0, "%s", mdb->errmsg);
PathId = 0;
} else {
/* Cache path */
} else {
Mmsg(&mdb->cmd, "SELECT VolSessionId, VolSessionTime, \
PoolId, StartTime, EndTime, JobFiles, JobBytes, JobTDate, Job, JobStatus \
-FROM Job WHERE JobId=%d", jr->JobId);
+FROM Job WHERE JobId=%u", jr->JobId);
}
if (!QUERY_DB(mdb, mdb->cmd)) {
return 0; /* failed */
}
if ((row = sql_fetch_row(mdb)) == NULL) {
- Mmsg1(&mdb->errmsg, _("No Job found for JobId %d\n"), jr->JobId);
+ Mmsg1(&mdb->errmsg, _("No Job found for JobId %u\n"), jr->JobId);
Jmsg(mdb->jcr, M_ERROR, 0, "%s", mdb->errmsg);
sql_free_result(mdb);
db_unlock(mdb);
db_lock(mdb);
Mmsg(&mdb->cmd,
-"SELECT VolumeName FROM JobMedia,Media WHERE JobMedia.JobId=%d \
+"SELECT VolumeName FROM JobMedia,Media WHERE JobMedia.JobId=%u \
AND JobMedia.MediaId=Media.MediaId", JobId);
Dmsg1(130, "VolNam=%s\n", mdb->cmd);
Mmsg(&mdb->cmd, "SELECT MediaId,VolumeName,MediaType,VolStatus,\
VolBytes,LastWritten,VolRetention,Recycle,Slot \
-FROM Media WHERE Media.PoolId=%d ORDER BY MediaId", mdbr->PoolId);
+FROM Media WHERE Media.PoolId=%u ORDER BY MediaId", mdbr->PoolId);
db_lock(mdb);
if (!QUERY_DB(mdb, mdb->cmd)) {
{
if (JobId > 0) { /* do by JobId */
Mmsg(&mdb->cmd, "SELECT JobId, Media.VolumeName, FirstIndex, LastIndex \
-FROM JobMedia, Media WHERE Media.MediaId=JobMedia.MediaId and JobMedia.JobId=%d",
+FROM JobMedia, Media WHERE Media.MediaId=JobMedia.MediaId and JobMedia.JobId=%u",
JobId);
} else {
Mmsg(&mdb->cmd, "SELECT JobId, Media.VolumeName, FirstIndex, LastIndex \
JobFiles,JobBytes,JobStatus FROM Job");
} else { /* single record */
Mmsg(&mdb->cmd, "SELECT JobId,Name,StartTime,Type,Level,\
-JobFiles,JobBytes,JobStatus FROM Job WHERE Job.JobId=%d", jr->JobId);
+JobFiles,JobBytes,JobStatus FROM Job WHERE Job.JobId=%u", jr->JobId);
}
db_lock(mdb);
{
Mmsg(&mdb->cmd, "SELECT Path.Path,Filename.Name FROM File,\
-Filename,Path WHERE File.JobId=%d and Filename.FilenameId=File.FilenameId \
+Filename,Path WHERE File.JobId=%u and Filename.FilenameId=File.FilenameId \
and Path.PathId=File.PathId",
jobid);
int stat;
db_lock(mdb);
- Mmsg(&mdb->cmd, "UPDATE File SET MD5='%s' WHERE FileId=%d", MD5, FileId);
+ Mmsg(&mdb->cmd, "UPDATE File SET MD5='%s' WHERE FileId=%u", MD5, FileId);
stat = UPDATE_DB(mdb, mdb->cmd);
db_unlock(mdb);
return stat;
int stat;
db_lock(mdb);
- Mmsg(&mdb->cmd, "UPDATE File SET MarkId=%d WHERE FileId=%d", JobId, FileId);
+ Mmsg(&mdb->cmd, "UPDATE File SET MarkId=%u WHERE FileId=%u", JobId, FileId);
stat = UPDATE_DB(mdb, mdb->cmd);
db_unlock(mdb);
return stat;
db_lock(mdb);
Mmsg(&mdb->cmd, "UPDATE Job SET Level='%c', StartTime='%s', \
-ClientId=%d, JobTDate=%s WHERE JobId=%d",
+ClientId=%u, JobTDate=%s WHERE JobId=%u",
(char)(jr->Level), dt, jr->ClientId, edit_uint64(JobTDate, ed1), jr->JobId);
stat = UPDATE_DB(mdb, mdb->cmd);
db_unlock(mdb);
db_lock(mdb);
Mmsg(&mdb->cmd,
"UPDATE Job SET JobStatus='%c', EndTime='%s', \
-ClientId=%d, JobBytes=%s, JobFiles=%d, JobErrors=%d, VolSessionId=%d, \
-VolSessionTime=%d, PoolId=%d, FileSetId=%d, JobTDate=%s WHERE JobId=%d",
+ClientId=%u, JobBytes=%s, JobFiles=%u, JobErrors=%u, VolSessionId=%u, \
+VolSessionTime=%u, PoolId=%u, FileSetId=%u, JobTDate=%s WHERE JobId=%u",
(char)(jr->JobStatus), dt, jr->ClientId, edit_uint64(jr->JobBytes, ed1),
jr->JobFiles, jr->JobErrors, jr->VolSessionId, jr->VolSessionTime,
jr->PoolId, jr->FileSetId, edit_uint64(JobTDate, ed2), jr->JobId);
db_lock(mdb);
Mmsg(&mdb->cmd,
"UPDATE Pool SET NumVols=%d, MaxVols=%d, UseOnce=%d, UseCatalog=%d, \
-AcceptAnyVolume=%d, LabelFormat='%s' WHERE PoolId=%d",
+AcceptAnyVolume=%d, LabelFormat='%s' WHERE PoolId=%u",
pr->NumVols, pr->MaxVols, pr->UseOnce, pr->UseCatalog,
pr->AcceptAnyVolume, pr->LabelFormat, pr->PoolId);
Dmsg1(400, "Firstwritten stat=%d\n", stat);
}
- Mmsg(&mdb->cmd, "UPDATE Media SET VolJobs=%d,\
- VolFiles=%d, VolBlocks=%d, VolBytes=%s, VolMounts=%d, VolErrors=%d,\
- VolWrites=%d, VolMaxBytes=%s, LastWritten='%s', VolStatus='%s',\
+ Mmsg(&mdb->cmd, "UPDATE Media SET VolJobs=%u,\
+ VolFiles=%u, VolBlocks=%u, VolBytes=%s, VolMounts=%u, VolErrors=%u,\
+ VolWrites=%u, VolMaxBytes=%s, LastWritten='%s', VolStatus='%s',\
Slot=%d WHERE VolumeName='%s'",
mr->VolJobs, mr->VolFiles, mr->VolBlocks, edit_uint64(mr->VolBytes, ed1),
mr->VolMounts, mr->VolErrors, mr->VolWrites,
Dmsg1(130, "FT_SPEC saving: %s\n", ff_pkt->fname);
break;
case FT_NOACCESS:
- Jmsg(jcr, M_NOTSAVED, -1, _(" Could not access %s: ERR=%s"), ff_pkt->fname,
+ Jmsg(jcr, M_NOTSAVED, -1, _(" Could not access %s: ERR=%s\n"), ff_pkt->fname,
strerror(ff_pkt->ff_errno));
return 1;
case FT_NOFOLLOW:
strerror(ff_pkt->ff_errno));
return 1;
default:
- Jmsg(jcr, M_NOTSAVED, 0, _("Unknown file type %d; not saved: %s\n"), ff_pkt->type, ff_pkt->fname);
+ Jmsg(jcr, M_NOTSAVED, 0, _(" Unknown file type %d; not saved: %s\n"), ff_pkt->type, ff_pkt->fname);
return 1;
}
ff_pkt->statp.st_size > 0) {
if ((fid = open(ff_pkt->fname, O_RDONLY | O_BINARY)) < 0) {
ff_pkt->ff_errno = errno;
- Jmsg(jcr, M_NOTSAVED, -1, _("Cannot open %s: ERR=%s.\n"), ff_pkt->fname, strerror(ff_pkt->ff_errno));
+ Jmsg(jcr, M_NOTSAVED, -1, _(" Cannot open %s: ERR=%s.\n"), ff_pkt->fname, strerror(ff_pkt->ff_errno));
return 1;
}
} else {
if (compress2((Bytef *)jcr->compress_buf, &compress_len,
(const Bytef *)sd->msg, (uLong)sd->msglen,
ff_pkt->GZIP_level) != Z_OK) {
- Jmsg(jcr, M_ERROR, 0, _("Compression error\n"));
+ Jmsg(jcr, M_FATAL, 0, _("Compression error\n"));
sd->msg = msgsave;
sd->msglen = 0;
close(fid);
} /* end while */
if (sd->msglen < 0) {
- Jmsg(jcr, M_ERROR, 0, _("Error during save reading ERR=%s\n"), ff_pkt->fname,
- strerror(ff_pkt->ff_errno));
+ Jmsg(jcr, M_ERROR, 0, _("Network error. ERR=%s\n"), bnet_strerror(sd));
}
/* Send data termination poll signal to Storage daemon.
return 0;
} else {
if (strcmp(sd->msg, "3000 OK\n") != 0) {
- Jmsg1(jcr, M_ERROR, 0, _("Job aborted by Storage daemon: %s\n"), sd->msg);
+ Jmsg1(jcr, M_FATAL, 0, _("Job aborted by Storage daemon: %s\n"), sd->msg);
close(fid);
return 0;
}
Jmsg(jcr, M_NOTSAVED, -1, _(" Could not open directory %s: ERR=%s\n"), ff_pkt->fname, strerror(ff_pkt->ff_errno));
return 1;
default:
- Jmsg(jcr, M_NOTSAVED, 0, _("Unknown file type %d: %s\n"), ff_pkt->type, ff_pkt->fname);
+ Jmsg(jcr, M_NOTSAVED, 0, _(" Unknown file type %d: %s\n"), ff_pkt->type, ff_pkt->fname);
return 1;
}
ff_pkt->statp.st_size > 0) {
if ((fid = open(ff_pkt->fname, O_RDONLY | O_BINARY)) < 0) {
ff_pkt->ff_errno = errno;
- Jmsg(jcr, M_NOTSAVED, -1, _("Cannot open %s: ERR=%s.\n"), ff_pkt->fname, strerror(ff_pkt->ff_errno));
+ Jmsg(jcr, M_NOTSAVED, -1, _(" Cannot open %s: ERR=%s.\n"), ff_pkt->fname, strerror(ff_pkt->ff_errno));
return 1;
}
} else {
*/
/* Send file attributes to Director (note different format than for Storage) */
Dmsg2(400, "send ATTR inx=%d fname=%s\n", jcr->JobFiles, ff_pkt->fname);
- if (ff_pkt->type == FT_LNK || ff_pkt->tye == FT_LNKSAVED) {
+ if (ff_pkt->type == FT_LNK || ff_pkt->type == FT_LNKSAVED) {
stat = bnet_fsend(dir, "%d %d %s %s%c%s%c%s%c", jcr->JobFiles,
STREAM_UNIX_ATTRIBUTES, ff_pkt->VerifyOpts, ff_pkt->fname,
0, attribs, 0, ff_pkt->link, 0);
* make sure we are not closing the daemon messages, otherwise
* kaboom.
*/
- if (stat < 0 && msgs != daemon_msgs) {
+ if (stat < 0 && msgs != daemon_msgs && errno != ECHILD) {
Emsg1(M_ERROR, 0, _("Mail program terminated in error.\nCMD=%s\n"),
cmd);
}
/* Messages to the operator go one at a time */
stat = pclose(d->fd);
d->fd = NULL;
- if (stat < 0) {
+ if (stat < 0 && errno != ECHILD) {
Emsg1(M_ERROR, 0, _("Operator mail program terminated in error.\nCMD=%s\n"),
mcmd);
}