]> git.sur5r.net Git - bacula/bacula/commitdiff
Create and put data into RestoreObject table
authorKern Sibbald <kern@sibbald.com>
Fri, 9 Apr 2010 19:38:59 +0000 (21:38 +0200)
committerEric Bollengier <eric@eb.homelinux.org>
Mon, 2 Aug 2010 14:50:31 +0000 (16:50 +0200)
bacula/src/cats/make_mysql_tables.in
bacula/src/cats/make_postgresql_tables.in
bacula/src/cats/make_sqlite3_tables.in
bacula/src/cats/sql_create.c
bacula/src/dird/catreq.c
bacula/src/filed/fd_plugins.c
bacula/src/filed/job.c
bacula/src/lib/bsock.c
bacula/src/plugins/fd/test-plugin-fd.c
regress/tests/test-plugin-test

index ef2efffa41e10192e093df51959c33d6938780b7..206c52f07f66f49623c7103c8cb417204dc54535 100644 (file)
@@ -46,7 +46,7 @@ CREATE TABLE File (
    );
 
 CREATE TABLE RestoreObject (
-   RestoreObjectId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT;
+   RestoreObjectId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
    Fname BLOB NOT NULL,
    Path BLOB NOT NULL,
    RestoreObject BLOB NOT NULL,
index a713c06a4db0c568c8e0ebdf2ee8efdf37e5491f..34d5d612547fd3d515be285b14348ecc0f43dd06 100644 (file)
@@ -30,7 +30,7 @@ CREATE UNIQUE INDEX path_name_idx on path (path);
 
 CREATE TABLE file
 (
-    fileid           bigserial   not null,
+    fileid           bigserial   not null,
     fileindex        integer     not null  default 0,
     jobid            integer     not null,
     pathid           integer     not null,
@@ -60,35 +60,50 @@ CREATE INDEX file_jobid_idx on file(jobid);
 -- CREATE INDEX file_pathid_idx on file(pathid);
 -- CREATE INDEX file_filenameid_idx on file(filenameid);
 
+CREATE TABLE RestoreObject (
+   RestoreObjectId SERIAL NOT NULL,
+   Fname TEXT NOT NULL,
+   Path TEXT NOT NULL,
+   RestoreObject TEXT NOT NULL,
+   PluginName TEXT NOT NULL,
+   ObjectIndex INTEGER DEFAULT 0,
+   ObjectType INTEGER DEFAULT 0,
+   FileIndex INTEGER UNSIGNED DEFAULT 0,
+   JobId INTEGER UNSIGNED,
+   PRIMARY KEY(RestoreObjectId),
+   );
+CREATE INDEX restore_jobid_idx on file(JobId);
+
+
 CREATE TABLE Job
 (
-    JobId             serial      not null,
-    Job               text        not null,
-    Name              text        not null,
-    Type              char(1)     not null,
-    Level             char(1)     not null,
-    ClientId          integer     default 0,
-    JobStatus         char(1)     not null,
-    SchedTime         timestamp   without time zone,
-    StartTime         timestamp   without time zone,
-    EndTime           timestamp   without time zone,
+    JobId            serial      not null,
+    Job              text        not null,
+    Name             text        not null,
+    Type             char(1)     not null,
+    Level            char(1)     not null,
+    ClientId         integer     default 0,
+    JobStatus        char(1)     not null,
+    SchedTime        timestamp   without time zone,
+    StartTime        timestamp   without time zone,
+    EndTime          timestamp   without time zone,
     RealEndTime       timestamp   without time zone,
-    JobTDate          bigint      default 0,
-    VolSessionId      integer     default 0,
-    volSessionTime    integer     default 0,
-    JobFiles          integer     default 0,
-    JobBytes          bigint      default 0,
-    ReadBytes         bigint      default 0,
-    JobErrors         integer     default 0,
-    JobMissingFiles   integer     default 0,
-    PoolId            integer     default 0,
-    FilesetId         integer     default 0,
-    PriorJobid        integer     default 0,
-    PurgedFiles       smallint    default 0,
-    HasBase           smallint    default 0,
-    HasCache          smallint    default 0,
-    Reviewed          smallint    default 0,
-    Comment           text,
+    JobTDate         bigint      default 0,
+    VolSessionId      integer    default 0,
+    volSessionTime    integer    default 0,
+    JobFiles         integer     default 0,
+    JobBytes         bigint      default 0,
+    ReadBytes        bigint      default 0,
+    JobErrors        integer     default 0,
+    JobMissingFiles   integer    default 0,
+    PoolId           integer     default 0,
+    FilesetId        integer     default 0,
+    PriorJobid       integer     default 0,
+    PurgedFiles       smallint   default 0,
+    HasBase          smallint    default 0,
+    HasCache         smallint    default 0,
+    Reviewed         smallint    default 0,
+    Comment          text,
     primary key (jobid)
 );
 
@@ -163,7 +178,7 @@ CREATE TABLE media
              'Error','Busy','Used','Cleaning','Scratch')),
     enabled          smallint    default 1,
     recycle          smallint    default 0,
-    ActionOnPurge     smallint    default 0,
+    ActionOnPurge     smallint   default 0,
     volretention      bigint     default 0,
     voluseduration    bigint     default 0,
     maxvoljobs       integer     default 0,
@@ -239,7 +254,7 @@ CREATE TABLE pool
     maxvolbytes       bigint     default 0,
     autoprune        smallint    default 0,
     recycle          smallint    default 0,
-    ActionOnPurge     smallint    default 0,
+    ActionOnPurge     smallint   default 0,
     pooltype         text                          
       check (pooltype in ('Backup','Copy','Cloned','Archive','Migration','Scratch')),
     labeltype        integer     default 0,
@@ -344,7 +359,7 @@ CREATE TABLE PathHierarchy
 );
 
 CREATE INDEX pathhierarchy_ppathid 
-          ON PathHierarchy (PPathId);
+         ON PathHierarchy (PPathId);
 
 CREATE TABLE PathVisibility
 (
@@ -355,7 +370,7 @@ CREATE TABLE PathVisibility
       CONSTRAINT pathvisibility_pkey PRIMARY KEY (JobId, PathId)
 );
 CREATE INDEX pathvisibility_jobid
-             ON PathVisibility (JobId);
+            ON PathVisibility (JobId);
 
 CREATE TABLE version
 (
index b33a24da8e00736ab910a35a3154afa2200a0f8c..40a17e9c4f413d4e8c6a5c42bccf460884831393 100644 (file)
@@ -39,7 +39,6 @@ CREATE TABLE File (
    MD5 VARCHAR(255) NOT NULL,
    PRIMARY KEY(FileId) 
    );
-
 CREATE INDEX inx3 ON File (JobId);
 CREATE INDEX file_jpf_idx ON File (JobId, PathId, FilenameId);
 --
@@ -49,6 +48,23 @@ CREATE INDEX file_jpf_idx ON File (JobId, PathId, FilenameId);
 -- CREATE INDEX inx4 ON File (PathId);
 -- CREATE INDEX inx5 ON File (FileNameId);
 
+
+CREATE TABLE RestoreObject (
+   RestoreObjectId INTEGER,
+   Fname TEXT DEFAULT '',
+   Path TEXT DEFAULT '',
+   RestoreObject TEXT DEFAULT '',
+   PluginName TEXT DEFAULT '',
+   ObjectIndex INTEGER DEFAULT 0,
+   ObjectType INTEGER DEFAULT 0,
+   FileIndex INTEGER UNSIGNED DEFAULT 0,
+   JobId INTEGER UNSIGNED REFERENCES Job NOT NULL,
+   PRIMARY KEY(RestoreObjectId),
+   INDEX (JobId)
+   );
+CREATE INDEX restore_jobid_idx ON RestoreObject (JobId);
+
+
 CREATE TABLE Job (
    JobId INTEGER,
    Job VARCHAR(128) NOT NULL,
@@ -191,7 +207,7 @@ CREATE TABLE Media (
    VolStatus VARCHAR(20) NOT NULL,
    Enabled TINYINT DEFAULT 1,
    Recycle TINYINT DEFAULT 0,
-   ActionOnPurge     TINYINT    DEFAULT 0,
+   ActionOnPurge     TINYINT   DEFAULT 0,
    VolRetention BIGINT UNSIGNED DEFAULT 0,
    VolUseDuration BIGINT UNSIGNED DEFAULT 0,
    MaxVolJobs INTEGER UNSIGNED DEFAULT 0,
@@ -265,7 +281,7 @@ CREATE TABLE Pool (
    MaxVolBytes BIGINT UNSIGNED DEFAULT 0,
    AutoPrune TINYINT DEFAULT 0,
    Recycle TINYINT DEFAULT 0,
-   ActionOnPurge     TINYINT    DEFAULT 0,
+   ActionOnPurge     TINYINT   DEFAULT 0,
    PoolType VARCHAR(20) NOT NULL,
    LabelType TINYINT DEFAULT 0,
    LabelFormat VARCHAR(128) NOT NULL,
@@ -351,7 +367,7 @@ CREATE TABLE PathHierarchy
 );
 
 CREATE INDEX pathhierarchy_ppathid 
-          ON PathHierarchy (PPathId);
+         ON PathHierarchy (PPathId);
 
 CREATE TABLE PathVisibility
 (
@@ -363,7 +379,7 @@ CREATE TABLE PathVisibility
 );
 
 CREATE INDEX pathvisibility_jobid
-          ON PathVisibility (JobId);
+         ON PathVisibility (JobId);
 
 CREATE TABLE Status (
    JobStatus CHAR(1) NOT NULL,
index 877726670d05e577983e440680ac589ee256812b..3a1d02faf808f49ea1099f61231d93a9e0d79b5b 100644 (file)
@@ -1274,7 +1274,7 @@ bool db_create_restore_object_record(JCR *jcr, B_DB *mdb, ROBJECT_DBR *ro)
    Dmsg1(dbglevel, "Fname=%s\n", ro->fname);
    Dmsg0(dbglevel, "put_object_into_catalog\n");
 
-   split_path_and_file(jcr, mdb, ro->fname);
+   split_path_and_file(jcr, mdb, ro->full_fname);
 
    mdb->esc_name = check_pool_memory_size(mdb->esc_name, mdb->fnl*2+1);
    db_escape_string(jcr, mdb, mdb->esc_name, mdb->fname, mdb->fnl);
@@ -1286,10 +1286,10 @@ bool db_create_restore_object_record(JCR *jcr, B_DB *mdb, ROBJECT_DBR *ro)
    db_escape_string(jcr, mdb, esc_obj, ro->object, ro->object_len);
 
    Mmsg(mdb->cmd,
-        "INSERT INTO RestoreObject (Fname,Path,PluginName,RestoreObject"
+        "INSERT INTO RestoreObject (Fname,Path,PluginName,RestoreObject,"
         "ObjectIndex,ObjectType,FileIndex,JobId) VALUES"
         "('%s','%s','%s','%s',%d,%d,%d,%u)", 
-        ro->fname, ro->path, ro->plugin_name, esc_obj, ro->object_len,
+        mdb->esc_name, mdb->esc_path, mdb->esc_path, esc_obj, ro->object_len,
         ro->ObjectIndex, FT_RESTORE_FIRST, ro->FileIndex, ro->JobId);
 
    ro->RestoreObjectId = sql_insert_id(mdb, mdb->cmd, NT_("RestoreObject"));
index 7d9c2f452ddd745861e2467f47d2062699060b1b..1f765da18b324d91a4c120f40bfa594e82c33bab 100644 (file)
@@ -373,11 +373,11 @@ static void update_attribute(JCR *jcr, char *msg, int32_t msglen)
    uint32_t VolSessionId, VolSessionTime;
    int32_t Stream;
    uint32_t FileIndex;
-   uint32_t data_len;
    char *p;
    int len;
    char *fname, *attr;
    ATTR_DBR *ar = NULL;
+   uint32_t reclen;
 
    /* Start transaction allocates jcr->attr and jcr->ar if needed */
    db_start_transaction(jcr, jcr->db);     /* start transaction if not already open */
@@ -400,7 +400,7 @@ static void update_attribute(JCR *jcr, char *msg, int32_t msglen)
    unser_uint32(VolSessionTime);      /* VolSessionTime */
    unser_int32(FileIndex);            /* FileIndex */
    unser_int32(Stream);               /* Stream */
-   unser_uint32(data_len);            /* Record length */
+   unser_uint32(reclen);              /* Record length */
    p += unser_length(p);              /* Raw record follows */
 
    /*
@@ -409,8 +409,8 @@ static void update_attribute(JCR *jcr, char *msg, int32_t msglen)
     */
 
    Dmsg1(400, "UpdCat msg=%s\n", msg);
-   Dmsg5(400, "UpdCat VolSessId=%d VolSessT=%d FI=%d Strm=%d data_len=%d\n",
-      VolSessionId, VolSessionTime, FileIndex, Stream, data_len);
+   Dmsg5(400, "UpdCat VolSessId=%d VolSessT=%d FI=%d Strm=%d reclen=%d\n",
+      VolSessionId, VolSessionTime, FileIndex, Stream, reclen);
 
    if (Stream == STREAM_UNIX_ATTRIBUTES || Stream == STREAM_UNIX_ATTRIBUTES_EX) {
       if (jcr->cached_attribute) {
@@ -455,6 +455,7 @@ static void update_attribute(JCR *jcr, char *msg, int32_t msglen)
          ROBJECT_DBR ro;
          POOLMEM *attrEx = get_pool_memory(PM_MESSAGE);
          char *p;
+         memset(&ro, 0, sizeof(ro));
          ro.full_fname = fname;
          ro.Stream = Stream;
          ro.FileType = ar->FileType;
@@ -466,13 +467,16 @@ static void update_attribute(JCR *jcr, char *msg, int32_t msglen)
          while (*p++ != 0)               /* skip link */
             { }
          /* We have an object, so do a binary copy */
-         ro.object_len = msglen + ar->attr - p;
+         ro.object_len = msglen + jcr->attr - p;
          attrEx = check_pool_memory_size(attrEx, ro.object_len + 1);
          memcpy(attrEx, p, ro.object_len);  
          ro.object = attrEx;
          /* Add a EOS for those who attempt to print the object */
          p = attrEx + ro.object_len;
          *p = 0;
+         Dmsg7(000, "fname=%s stream=%d FT=%d FI=%d JobId=%d, obj_len=%d\nobj=\"%s\"\n",
+            ro.full_fname, ro.Stream, ro.FileType, ro.FileIndex, ro.JobId,
+            ro.object_len, attrEx);
          /* Send it */
          if (!db_create_restore_object_record(jcr, jcr->db, &ro)) {
             Jmsg1(jcr, M_FATAL, 0, _("Restore object create error. %s"), db_strerror(jcr->db));
index 3141fc6afdfbb561f343b133491e7d900bab2a96..c5f303e6ea11fbed2d753f3e8810cd4d17cbfb97 100644 (file)
@@ -350,7 +350,7 @@ bool send_plugin_name(JCR *jcr, BSOCK *sd, bool start)
            sd->bstrerror());
      return false;
    }
-   Dmsg1(50, "send: %s\n", sd->msg);
+   Dmsg1(50, "send plugin name hdr: %s\n", sd->msg);
 
    if (start) {
       /* Send data -- not much */
@@ -364,7 +364,7 @@ bool send_plugin_name(JCR *jcr, BSOCK *sd, bool start)
             sd->bstrerror());
          return false;
    }
-   Dmsg1(dbglvl, "send: %s\n", sd->msg);
+   Dmsg1(dbglvl, "send plugin start/end: %s\n", sd->msg);
    sd->signal(BNET_EOD);            /* indicate end of plugin name data */
    return true;
 }
index 20f8fb03133469890c4742544f7f5f9653ca5af9..19676e93f106e677bab7c3e9ad288fba80cb7423 100644 (file)
@@ -1639,7 +1639,6 @@ static int backup_cmd(JCR *jcr)
    if (!blast_data_to_storage_daemon(jcr, NULL)) {
       set_jcr_job_status(jcr, JS_ErrorTerminated);
       bnet_suppress_error_messages(sd, 1);
-      bget_msg(sd);                   /* Read final response from append_data */
       Dmsg0(110, "Error in blast_data.\n");
    } else {
       set_jcr_job_status(jcr, JS_Terminated);
index a2e3bb275c47f9fa63ec0a7bb0f6df04b8f49459..ade5eb678cae5be3c1d32146f4a0592c2076cd8e 100644 (file)
@@ -335,6 +335,12 @@ bool BSOCK::send()
    bool ok = true;
 
    if (errors || is_terminated() || msglen > 1000000) {
+      if (!m_suppress_error_msgs) {
+         Qmsg6(m_jcr, M_ERROR, 0,
+            _("Socket has errors=%d; is_terminated=%d; or has insane msglen=%d on call to %s:%s:%d\n"),
+             errors, is_terminated(), msglen, m_who,
+             m_host, m_port);
+      }
       return false;
    }
    if (m_use_locking) P(m_mutex);
index 358352641b2b8b72f226f76725b2b5c50542b4da..a09ae9e50f7641ab058a9492fda1c76dbf364b51 100644 (file)
@@ -280,17 +280,17 @@ static bRC startBackupFile(bpContext *ctx, struct save_pkt *sp)
    }
    time_t now = time(NULL);
    sp->fname = p_ctx->fname;
+   sp->object = (char *)"This is test data for the restore object.";
+   sp->object_len = strlen(sp->object);
+   sp->index = 2;
    sp->type = FT_RESTORE_FIRST;
    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 = -1;
+   sp->statp.st_size = sp->object_len;
    sp->statp.st_blksize = 4096;
    sp->statp.st_blocks = 1;
-   sp->object = (char *)"This is test data for the restore object.";
-   sp->object_len = strlen(sp->object);
-   sp->index = 2;
    p_ctx->backup = true;
    printf("test-plugin-fd: startBackupFile\n");
    return bRC_OK;
@@ -314,8 +314,14 @@ static bRC endBackupFile(bpContext *ctx)
  */
 static bRC pluginIO(bpContext *ctx, struct io_pkt *io)
 {
-   printf("test-plugin-fd: pluginIO\n");
-   return bRC_Error;
+   struct plugin_ctx *p_ctx = (struct plugin_ctx *)ctx->pContext;
+   if (!p_ctx) {
+      return bRC_Error;
+   }
+    
+   io->status = 0;
+   io->io_errno = 0;
+   return bRC_OK;
 }
 
 /*
index 509a6173dbe23dd0dd25331a0ac6aece06a9e32e..1d07c718b9c8914dc399d0217e408188ef3d374a 100755 (executable)
@@ -29,7 +29,8 @@ messages
 label storage=File1 volume=TestVolume001
 setdebug level=150 client=$CLIENT
 estimate job=$JobName level=Full
-setdebug level=50 client=$CLIENT
+@#setdebug level=150 client=$CLIENT
+@#setdebug level=150 storage=File1
 run job=$JobName storage=File1 yes
 wait
 status client=$CLIENT