LCOV - code coverage report
Current view: top level - src/server - backup_phase1.c (source / functions) Hit Total Coverage
Test: burp-coverage-clean.info Lines: 24 40 60.0 %
Date: 2022-05-01 01:22:11 Functions: 1 1 100.0 %

          Line data    Source code
       1             : #include "../burp.h"
       2             : #include "../alloc.h"
       3             : #include "../asfd.h"
       4             : #include "../async.h"
       5             : #include "../cmd.h"
       6             : #include "../cntr.h"
       7             : #include "../cstat.h"
       8             : #include "../fsops.h"
       9             : #include "../handy.h"
      10             : #include "../log.h"
      11             : #include "../msg.h"
      12             : #include "../sbuf.h"
      13             : #include "child.h"
      14             : #include "compress.h"
      15             : #include "manio.h"
      16             : #include "quota.h"
      17             : #include "sdirs.h"
      18             : #include "backup_phase1.h"
      19             : 
      20           1 : int backup_phase1_server_all(struct async *as,
      21             :         struct sdirs *sdirs, struct conf **confs)
      22             : {
      23           1 :         int ret=-1;
      24           1 :         struct sbuf *sb=NULL;
      25           1 :         char *phase1tmp=NULL;
      26           1 :         struct asfd *asfd=as->asfd;
      27           1 :         struct manio *manio=NULL;
      28             :         struct cntr *cntr;
      29           1 :         int fail_on_warning=0;
      30           1 :         struct cntr_ent *warn_ent=NULL;
      31             : 
      32           1 :         cntr=get_cntr(confs);
      33           1 :         fail_on_warning=get_int(confs[OPT_FAIL_ON_WARNING]);
      34           1 :         if(cntr)
      35           1 :                 warn_ent=cntr->ent[CMD_WARNING];
      36             : 
      37           1 :         logp("Begin phase1 (file system scan)\n");
      38             : 
      39           1 :         if(!(phase1tmp=get_tmp_filename(sdirs->phase1data))
      40           1 :           || !(manio=manio_open_phase1(phase1tmp,
      41           1 :                 comp_level(get_int(confs[OPT_COMPRESSION]))))
      42           1 :           || !(sb=sbuf_alloc()))
      43             :                 goto error;
      44             : 
      45             :         while(1)
      46             :         {
      47           1 :                 sbuf_free_content(sb);
      48             : 
      49           1 :                 if(check_fail_on_warning(fail_on_warning, warn_ent))
      50             :                         goto error;
      51             : 
      52           1 :                 switch(sbuf_fill_from_net(sb, asfd, cntr))
      53             :                 {
      54             :                         case 0: break;
      55             :                         case 1: // Last thing the client sends is
      56             :                                 // 'backupphase2', and it wants an 'ok' reply.
      57           0 :                                 if(asfd->write_str(asfd, CMD_GEN, "ok")
      58           0 :                                   || send_msg_fzp(manio->fzp, CMD_GEN,
      59             :                                         "phase1end", strlen("phase1end")))
      60             :                                                 goto error;
      61             :                                 goto end;
      62             :                         case -1:
      63             :                         default: goto error;
      64             :                 }
      65           0 :                 if(timed_operation(CNTR_STATUS_SCANNING, sb->path.buf,
      66             :                         asfd, sdirs, confs)
      67           0 :                   || manio_write_sbuf(manio, sb))
      68             :                         goto error;
      69           0 :                 cntr_add_phase1(cntr, sb->path.cmd, 0);
      70             : 
      71           0 :                 if(sbuf_is_estimatable(sb))
      72             :                 {
      73           0 :                         cntr_add_val(cntr, CMD_BYTES_ESTIMATED,
      74           0 :                                 (uint64_t)sb->statp.st_size);
      75             :                 }
      76             :         }
      77             : 
      78             : end:
      79           0 :         if(check_fail_on_warning(fail_on_warning, warn_ent))
      80             :                 goto error;
      81             : 
      82           0 :         if(manio_close(&manio))
      83             :         {
      84           0 :                 logp("error closing %s in backup_phase1_server\n", phase1tmp);
      85           0 :                 goto error;
      86             :         }
      87             : 
      88           0 :         if(check_quota(as, cntr,
      89             :                 get_uint64_t(confs[OPT_HARD_QUOTA]),
      90             :                 get_uint64_t(confs[OPT_SOFT_QUOTA])))
      91             :                         goto error;
      92             : 
      93             :         // Possible rename race condition is of no consequence here, because
      94             :         // the working directory will always get deleted if phase1 is not
      95             :         // complete.
      96           0 :         if(do_rename(phase1tmp, sdirs->phase1data))
      97             :                 goto error;
      98             : 
      99           0 :         logp("End phase1 (file system scan)\n");
     100           0 :         ret=0;
     101             : error:
     102           1 :         free_w(&phase1tmp);
     103           1 :         manio_close(&manio);
     104           1 :         sbuf_free(&sb);
     105           1 :         return ret;
     106             : }

Generated by: LCOV version 1.13