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; }
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; }