_DebugMessage(100, "startBackupNode_DBI state = %d\n", state);
- sp->fname = full_path;
- sp->link = full_path;
- sp->statp.st_mode = 0700 | S_IFREG;
- sp->statp.st_ctime = now;
- sp->statp.st_mtime = now;
- sp->statp.st_atime = now;
- sp->statp.st_size = (uint64_t)-1;
- sp->type = FT_REG;
-
- return bRC_OK;
+ if (context->job_level == 'F') {
+ sp->fname = full_path;
+ sp->link = full_path;
+ sp->statp.st_mode = 0700 | S_IFREG;
+ sp->statp.st_ctime = now;
+ sp->statp.st_mtime = now;
+ sp->statp.st_atime = now;
+ sp->statp.st_size = (uint64_t)-1;
+ sp->type = FT_REG;
+ return bRC_OK;
+ }
+ else
+ {
+ bfuncs->setBaculaValue(context->bpContext, bVarFileSeen, (void *)full_path);
+ return bRC_Seen;
+ }
}
bRC
exchange_fd_context_t *context = (exchange_fd_context_t *)ctx->pContext;
char *name;
int i, intval;
+ int accurate;
switch (event->eventType) {
case bEventJobStart:
break;
case bEventStartBackupJob:
_DebugMessage(0, "BackupStart\n");
+ bfuncs->getBaculaValue(ctx, bVarAccurate, (void *)&accurate);
+ context->accurate = accurate;
context->job_type = JOB_TYPE_BACKUP;
// level should have been specified by now - check it
// if level is D or I, since should have been specified too
do {
current_node = context->current_node;
retval = current_node->startBackupFile(context, sp);
+ if (retval == bRC_Seen)
+ endBackupFile(ctx);
} while (current_node != context->current_node);
_DebugMessage(100, "startBackupFile done - type = %d, fname = %s, retval = %d\n", sp->type, sp->fname, retval);
return retval;
#define FT_REG 3
#define FT_DIREND 5
-
#define _REENTRANT 1
#define _THREAD_SAFE 1
#define _POSIX_PTHREAD_SEMANTICS 1
#include "host.h"
#endif
-
#define EXCHANGE_PLUGIN_VERSION 1
#define JOB_TYPE_BACKUP 1
time_t job_since;
bool notrunconfull_option;
bool truncate_logs;
+ bool accurate;
};
static inline char *tocharstring(WCHAR *src)
time_t now = time(NULL);
_DebugMessage(100, "startBackupNode_FILE state = %d\n", state);
- sp->fname = full_path;
- sp->link = full_path;
- _DebugMessage(100, "fname = %s\n", sp->fname);
- sp->statp.st_mode = 0700 | S_IFREG;
- sp->statp.st_ctime = now;
- sp->statp.st_mtime = now;
- sp->statp.st_atime = now;
- sp->statp.st_size = (uint64_t)-1;
- sp->type = FT_REG;
-
- return bRC_OK;
+ if (context->job_level == 'F' || parent->type == NODE_TYPE_STORAGE_GROUP) {
+ sp->fname = full_path;
+ sp->link = full_path;
+ _DebugMessage(100, "fname = %s\n", sp->fname);
+ sp->statp.st_mode = 0700 | S_IFREG;
+ sp->statp.st_ctime = now;
+ sp->statp.st_mtime = now;
+ sp->statp.st_atime = now;
+ sp->statp.st_size = (uint64_t)-1;
+ sp->type = FT_REG;
+ return bRC_OK;
+ } else {
+ bfuncs->setBaculaValue(context->bpContext, bVarFileSeen, (void *)full_path);
+ return bRC_Seen;
+ }
}
bRC
logfile_ptr = NULL;
if (context->job_level == 'F')
{
- _DebugMessage(100, "Calling HrESEBackupSetup\n");
+ _DebugMessage(100, "Calling HrESEBackupSetup (BACKUP_TYPE_FULL)\n");
result = HrESEBackupSetup(hccx, ibi->hInstanceId, BACKUP_TYPE_FULL);
- state = 1;
+ state = 1;
}
else
{
- _DebugMessage(100, "Calling HrESEBackupSetup\n");
+ _DebugMessage(100, "Calling HrESEBackupSetup (BACKUP_TYPE_LOGS_ONLY)\n");
result = HrESEBackupSetup(hccx, ibi->hInstanceId, BACKUP_TYPE_LOGS_ONLY);
- state = 2;
+ if (context->accurate)
+ state = 1;
+ else
+ state = 2;
}
if (result != 0)
{
_JobMessage(M_ERROR, "HrESEBackupSetup failed with error 0x%08x - %s\n", result, ESEErrorMessage(result));
+ state = 999;
return bRC_Error;
}
break;
}
else
{
- //_DebugMessage(100, "NOT including file %S\n", logfile_ptr);
+ if (context->accurate) {
+ tmp = new char[strlen(full_path) + wcslen(tmp_logfile_ptr) + 1];
+ strcpy(tmp, full_path);
+ wcstombs(tmp + strlen(full_path), tmp_logfile_ptr, wcslen(tmp_logfile_ptr) + 1);
+ _JobMessage(M_WARNING, "Marking '%s' as seen\n", tmp);
+ bfuncs->setBaculaValue(context->bpContext, bVarFileSeen, (void *)tmp);
+ delete tmp;
+ }
}
if (handle != INVALID_HANDLE_VALUE)
context->current_node = file_node;
break;
case 3:
- time_t now = time(NULL);
- sp->fname = full_path;
- sp->link = full_path;
- sp->statp.st_mode = 0700 | S_IFDIR;
- sp->statp.st_ctime = now;
- sp->statp.st_mtime = now;
- sp->statp.st_atime = now;
- sp->statp.st_size = 0;
- sp->type = FT_DIREND;
+ if (context->job_level == 'F')
+ {
+ time_t now = time(NULL);
+ sp->fname = full_path;
+ sp->link = full_path;
+ sp->statp.st_mode = 0700 | S_IFDIR;
+ sp->statp.st_ctime = now;
+ sp->statp.st_mtime = now;
+ sp->statp.st_atime = now;
+ sp->statp.st_size = 0;
+ sp->type = FT_DIREND;
+ }
+ else
+ {
+ bfuncs->setBaculaValue(context->bpContext, bVarFileSeen, (void *)full_path);
+ return bRC_Seen;
+ }
break;
}