Exemple #1
0
bool B_ACCURATE_HTABLE::send_deleted_list(JCR *jcr)
{
    CurFile *elt;
    FF_PKT *ff_pkt;
    int32_t LinkFIc;
    struct stat statp;
    int stream = STREAM_UNIX_ATTRIBUTES;

    if (!jcr->accurate) {
        return true;
    }

    ff_pkt = init_find_files();
    ff_pkt->type = FT_DELETED;

    foreach_htable(elt, m_file_list) {
        if (bit_is_set(elt->payload.filenr, m_seen_bitmap) ||
                plugin_check_file(jcr, elt->fname)) {
            continue;
        }
        Dmsg1(dbglvl, "deleted fname=%s\n", elt->fname);
        ff_pkt->fname = elt->fname;
        decode_stat(elt->payload.lstat, &statp, sizeof(statp), &LinkFIc); /* decode catalog stat */
        ff_pkt->statp.st_mtime = statp.st_mtime;
        ff_pkt->statp.st_ctime = statp.st_ctime;
        encode_and_send_attributes(jcr, ff_pkt, stream);
    }

    term_find_files(ff_pkt);
    return true;
}
Exemple #2
0
bool B_ACCURATE_LMDB::send_deleted_list(JCR *jcr)
{
   int result;
   int32_t LinkFIc;
   struct stat statp;
   FF_PKT *ff_pkt;
   MDB_cursor *cursor;
   MDB_val key, data;
   bool retval = false;
   accurate_payload *payload;
   int stream = STREAM_UNIX_ATTRIBUTES;

   if (!jcr->accurate) {
      return true;
   }

   /*
    * Commit any pending write transactions.
    */
   if (m_db_rw_txn) {
      result = mdb_txn_commit(m_db_rw_txn);
      if (result != 0) {
         Jmsg1(jcr, M_FATAL, 0, _("Unable close write transaction: %s\n"), mdb_strerror(result));
         goto bail_out;
      }
      m_db_rw_txn = NULL;
   }

   ff_pkt = init_find_files();
   ff_pkt->type = FT_DELETED;

   result = mdb_cursor_open(m_db_ro_txn, m_db_dbi, &cursor);
   if (result == 0) {
      while ((result = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
         payload = (accurate_payload *)data.mv_data;

         if (bit_is_set(payload->filenr, m_seen_bitmap) ||
             plugin_check_file(jcr, (char *)key.mv_data)) {
            continue;
         }

         Dmsg1(dbglvl, "deleted fname=%s\n", key.mv_data);
         decode_stat(payload->lstat, &statp, sizeof(struct stat), &LinkFIc); /* decode catalog stat */
         ff_pkt->fname = (char *)key.mv_data;
         ff_pkt->statp.st_mtime = statp.st_mtime;
         ff_pkt->statp.st_ctime = statp.st_ctime;
         encode_and_send_attributes(jcr, ff_pkt, stream);
      }
      mdb_cursor_close(cursor);
   } else {
      Jmsg1(jcr, M_FATAL, 0, _("Unable create cursor: %s\n"), mdb_strerror(result));
   }

   mdb_txn_reset(m_db_ro_txn);
   result = mdb_txn_renew(m_db_ro_txn);
   if (result != 0) {
      Jmsg1(jcr, M_FATAL, 0, _("Unable to renew read transaction: %s\n"), mdb_strerror(result));
      goto bail_out;
   }

   retval = true;

bail_out:
   term_find_files(ff_pkt);
   return retval;
}