-/*
- *
- * Program to test cache path
- *
- * Eric Bollengier, March 2007
- *
- *
- * Version $Id$
- */
/*
Bacula® - The Network Backup Solution
- Copyright (C) 2001-2006 Free Software Foundation Europe e.V.
+ Copyright (C) 2009-2009 Free Software Foundation Europe e.V.
The main author of Bacula is Kern Sibbald, with contributions from
many others, a complete list can be found in the file AUTHORS.
(FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
Switzerland, email:ftf@fsfeurope.org.
*/
+/*
+ *
+ * Program to test cache path
+ *
+ * Eric Bollengier, August 2009
+ *
+ *
+ */
#include "bacula.h"
#include "cats/cats.h"
#include "cats/bvfs.h"
+#include "findlib/find.h"
/* Local variables */
static B_DB *db;
-
+static const char *file = "COPYRIGHT";
+static DBId_t fnid=0;
static const char *db_name = "regress";
static const char *db_user = "regress";
static const char *db_password = "";
" -P <password specify database password (default none)\n"
" -h <host> specify database host (default NULL)\n"
" -w <working> specify working directory\n"
+" -j <jobids> specify jobids\n"
+" -p <path> specify path\n"
+" -f <file> specify file\n"
+" -l <limit> maximum tuple to fetch\n"
+" -T truncate cache table before starting\n"
" -v verbose\n"
" -? print this message\n\n"), 2001, VERSION, BDATE);
exit(1);
}
+static int result_handler(void *ctx, int fields, char **row)
+{
+ Bvfs *vfs = (Bvfs *)ctx;
+ ATTR *attr = vfs->get_attr();
+ char empty[] = "A A A A A A A A A A A A A A";
+
+ memset(&attr->statp, 0, sizeof(struct stat));
+ decode_stat((row[BVFS_LStat] && row[BVFS_LStat][0])?row[BVFS_LStat]:empty,
+ &attr->statp, &attr->LinkFI);
+
+ if (bvfs_is_dir(row) || bvfs_is_file(row))
+ {
+ /* display clean stuffs */
+
+ if (bvfs_is_dir(row)) {
+ pm_strcpy(attr->ofname, bvfs_basename_dir(row[BVFS_Name]));
+ } else {
+ /* if we see the requested file, note his filenameid */
+ if (bstrcmp(row[BVFS_Name], file)) {
+ fnid = str_to_int64(row[BVFS_FilenameId]);
+ }
+ pm_strcpy(attr->ofname, row[BVFS_Name]);
+ }
+ print_ls_output(vfs->get_jcr(), attr);
+
+ } else {
+ Pmsg5(0, "JobId=%s FileId=%s\tMd5=%s\tVolName=%s\tVolInChanger=%s\n",
+ row[BVFS_JobId], row[BVFS_FileId], row[BVFS_Md5], row[BVFS_VolName],
+ row[BVFS_VolInchanger]);
+
+ pm_strcpy(attr->ofname, file);
+ print_ls_output(vfs->get_jcr(), attr);
+ }
+ return 0;
+}
+
+
/* number of thread started */
int main (int argc, char *argv[])
{
int ch;
+ char *jobids = (char *)"1";
+ char *path=NULL, *client=NULL;
+ uint64_t limit=0;
+ bool clean=false;
setlocale(LC_ALL, "");
bindtextdomain("bacula", LOCALEDIR);
textdomain("bacula");
OSDependentInit();
- while ((ch = getopt(argc, argv, "h:c:d:n:P:Su:vf:w:?")) != -1) {
+ while ((ch = getopt(argc, argv, "h:c:l:d:n:P:Su:vf:w:?j:p:f:T")) != -1) {
switch (ch) {
case 'd': /* debug level */
if (*optarg == 't') {
}
}
break;
+ case 'l':
+ limit = str_to_int64(optarg);
+ break;
+
+ case 'c':
+ client = optarg;
+ break;
case 'h':
db_host = optarg;
verbose++;
break;
+ case 'p':
+ path = optarg;
+ break;
+
+ case 'f':
+ file = optarg;
+ break;
+
+ case 'j':
+ jobids = optarg;
+ break;
+
+ case 'T':
+ clean = true;
+ break;
+
case '?':
default:
usage();
}
bjcr->db = db;
-
- db_sql_query(db, "DELETE FROM brestore_pathhierarchy", NULL, NULL);
- db_sql_query(db, "DELETE FROM brestore_knownjobid", NULL, NULL);
- db_sql_query(db, "DELETE FROM brestore_pathvisibility", NULL, NULL);
- bvfs_update_cache(bjcr, db);
+ if (clean) {
+ Pmsg0(0, "Clean old table\n");
+ db_sql_query(db, "DELETE FROM PathHierarchy", NULL, NULL);
+ db_sql_query(db, "UPDATE Job SET HasCache=0", NULL, NULL);
+ db_sql_query(db, "DELETE FROM PathVisibility", NULL, NULL);
+ bvfs_update_cache(bjcr, db);
+ }
+
Bvfs fs(bjcr, db);
+ fs.set_handler(result_handler, &fs);
- fs.set_jobids("1");
+ fs.set_jobids(jobids);
fs.update_cache();
- fs.ch_dir("");
- fs.ls_files();
- fs.ls_dirs();
+ if (limit)
+ fs.set_limit(limit);
+
+ if (path) {
+ fs.ch_dir(path);
+ fs.ls_special_dirs();
+ fs.ls_dirs();
+ while (fs.ls_files()) {
+ fs.next_offset();
+ }
+
+ if (fnid && client) {
+ Pmsg0(0, "---------------------------------------------\n");
+ Pmsg1(0, "Getting file version for %s\n", file);
+ fs.get_all_file_versions(fs.get_pwd(), fnid, client);
+ }
+ exit (0);
+ }
+
+
+ Pmsg0(0, "list /\n");
fs.ch_dir("/");
- fs.ls_files();
+ fs.ls_special_dirs();
fs.ls_dirs();
+ fs.ls_files();
+ Pmsg0(0, "list /tmp/\n");
fs.ch_dir("/tmp/");
- fs.ls_files();
+ fs.ls_special_dirs();
fs.ls_dirs();
+ fs.ls_files();
+ Pmsg0(0, "list /tmp/regress/\n");
fs.ch_dir("/tmp/regress/");
+ fs.ls_special_dirs();
fs.ls_files();
fs.ls_dirs();
- fs.set_jobid(1);
+ Pmsg0(0, "list /tmp/regress/build/\n");
fs.ch_dir("/tmp/regress/build/");
- fs.ls_files();
- fs.ls_dirs();
fs.ls_special_dirs();
+ fs.ls_dirs();
+ fs.ls_files();
+
fs.get_all_file_versions(1, 347, "zog4-fd");
char p[200];