[Bug 2408] New: when more than --max-delete files are about to be deleted no error is returned

samba-bugs at samba.org samba-bugs at samba.org
Wed Mar 2 15:26:01 GMT 2005


https://bugzilla.samba.org/show_bug.cgi?id=2408

           Summary: when more than --max-delete files are about to be
                    deleted no error is returned
           Product: rsync
           Version: 2.6.3
          Platform: All
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P3
         Component: core
        AssignedTo: wayned at samba.org
        ReportedBy: arthur at west.nl
         QAContact: rsync-qa at samba.org


If you specify the --max-delete option to rsync and there are more files to be
deleted than the specified number, all the deletes upto that number are normally
performed and other files that would otherwise be deleted are now silently
ignored. Also, if more files are scheduled for removal, no error code is returned.

The --max-delete option is especially usefull if by some misconfiguration a
great number of files would be deleted. If it is a job that runs daily, all the
files would be silently deleted after a few days rather than all at once more or
less defeating the purpose.

What I would like to see would be a test that would exit rsync with an error
code if too many deletes would take without actually deleting any files.
Returning an error code is the least that should be done IMHO.

>From the 2.6.4 changelog it would seem that the delete code has changed.I have a
(barely tested) patch for 2.6.3 here:

--- rsync-2.6.3.orig/receiver.c 2004-09-21 11:24:06.000000000 +0200
+++ rsync-2.6.3/receiver.c      2005-03-02 15:41:26.000000000 +0100
@@ -93,6 +93,7 @@
        int i, j;
        char *argv[1], fbuf[MAXPATHLEN];
        static int deletion_count;
+       int deletion_test_count;

        if (cvs_exclude)
                add_cvs_excludes();
@@ -102,6 +103,38 @@
                return;
        }

+       /* if --max-delete is specified, check that not too many files will be
deleted */
+       if (max_delete) {
+
+               /* count number of files that would be deleted */
+               deletion_test_count=0;
+
+               for (j = 0; j < flist->count; j++) {
+                       if (!(flist->files[j]->flags & FLAG_TOP_DIR)
+                           || !S_ISDIR(flist->files[j]->mode))
+                               continue;
+
+                       argv[0] = f_name_to(flist->files[j], fbuf);
+
+                       if (!(local_file_list = send_file_list(-1, 1, argv)))
+                               continue;
+
+                       for (i = local_file_list->count-1; i >= 0; i--) {
+                               if (!local_file_list->files[i]->basename)
+                                       continue;
+                               if (flist_find(flist,local_file_list->files[i]) < 0)
+                                       deletion_test_count++;
+                       }
+                       flist_free(local_file_list);
+               }
+
+               /* check deletion count */
+               if ((deletion_count+deletion_test_count) >= max_delete) {
+                       rprintf(FERROR,"too many files would be deleted -
skipping file deletion\n");
+                       return;
+               }
+       }
+
        for (j = 0; j < flist->count; j++) {
                if (!(flist->files[j]->flags & FLAG_TOP_DIR)
                    || !S_ISDIR(flist->files[j]->mode))

-- 
Configure bugmail: https://bugzilla.samba.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug, or are watching the QA contact.


More information about the rsync mailing list