On Sun, Apr 30, 2006 at 12:32:18AM +0200, Ola Lundqvist wrote:
> Thanks for the patch. It would be nice if you could update the
> changelog items as well in the patch.

Done.

> On Sat, Apr 29, 2006 at 03:59:40PM +0200, Marc Haber wrote:
> > On Wed, Mar 22, 2006 at 10:15:40PM +0100, Ola Lundqvist wrote:
> > > Patch is welcome.
> > 
> > A first try is attached. This basically moves the lock that we already
> > use to a more global level, and work rudimenatarily. It is not well
> > tested though.
>  
> Shouldn't the locking be moved to after the sleep?

Yes. Stupid me. New patch attached.

> I also think that we should have it configurable if it should break or
> wait, when if finds a previous lock.

If it finds a previous lock, it waits for ten iterations, which is
about five minutes. If another cron-apt is really running, it should
be finished in that time, which causes "our" process to just start
another iteration right after the last one finished. If the other
cron-apt has not finished by that time, and we break, no harm is done
since a cron-apt run has just finished. Stale locks cannot happen
since we use -p.

To make it short - this does not need to be configurable.

> > One thing I have not gotten right is message handling: The message
> > printed if /usr/bin/dotlockfile is not found seems to go nowhere if
> > the cron-apt run won't generate output otherwise. I have not yet
> > understood the message/log file handling with the createdivinfo stuff.
> > It is kind of underdocumented.
> 
> Yes it is a bit hidden... But there are some documentation...

Thanks for trying to explain. I didn't fully understand it, maybe
because it is late and I am not at my full concentration rate. I'll
re-read it tomorrow.

Greetings
Marc

-- 
-----------------------------------------------------------------------------
Marc Haber         | "I don't trust Computers. They | Mailadresse im Header
Mannheim, Germany  |  lose things."    Winona Ryder | Fon: *49 621 72739834
Nordisch by Nature |  How to make an American Quilt | Fax: *49 621 72739835
--- cron-apt    2006-04-29 15:32:33.424994750 +0200
+++ /usr/sbin/cron-apt  2006-04-30 00:53:19.147721000 +0200
@@ -20,6 +20,9 @@
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 #
 # Changes:
+#       2006-04-30 Marc Haber <[EMAIL PROTECTED]>
+#               Move dotlock code so that now the entire cron-apt run
+#               is protected by locking
 #      2005-10-09 Marc Haber <[EMAIL PROTECTED]>
 #              Add $APTCOMMAND to the CRON-APT line output.
 #      2005-10-07 Ola Lundqvist <[EMAIL PROTECTED]>
@@ -270,6 +273,9 @@
     if [ -d "$TMPDIR" ] ; then
        rmdir "$TMPDIR"
     fi
+    if [ -x "/usr/bin/dotlockfile" ]; then
+        dotlockfile -u $LOCKFILE
+    fi
 }
 
 # Do the actual msg transfer. This reduce some duplications.
@@ -401,6 +407,25 @@
     fi
 fi
 
+################## try to take out a lock, terminate if unsuccessful ##########
+
+if [ -x /usr/bin/dotlockfile ] ; then
+    if ! dotlockfile -l -p -r 10 $LOCKFILE; then
+        # create log entry
+        echo > $MAIL "cannot acquire cron-apt lock."
+       onexit
+       exit 1
+    fi
+else
+    if [ -z "$NOLOCKWARN" ]; then
+        echo >  $TEMP "WARNING: dotlockfile not installed. If you don't want 
to see this"
+        echo >> $TEMP "         Warning any more, set NOLOCKWARN in the 
configuration file."
+       createerrorinfo "startup"
+    fi
+fi
+
+################## initialize various log files ##############################
+
 cp "$INITLOG" "$RUNMAIL"
 cp "$INITLOG" "$RUNLOG"
 cp "$INITLOG" "$RUNSYSLOG"
@@ -424,34 +449,14 @@
            grep -v "^[[:space:]]*$" | {
                while read LINE ; do
                    echo "CRON-APT LINE: $APTCOMMAND $LINE" > "$TEMP"
-                   if [ -x /usr/bin/dotlockfile ] ; then
-                       if ! dotlockfile -l -p -r 10 $LOCKFILE; then
-                           echo > $TEMP "cannot acquire apt lock."
-                           RET=1
-                       else
-                           UMASK_SAVE=$(umask)
-                           umask $UMASK_RELAXED
-                           $APTCOMMAND $OPTIONS $LINE >> $TEMP 2>&1
-                           RET=$?
-                           umask $UMASK_SAVE
-                       fi
-                       dotlockfile -u $LOCKFILE
-                   else
-                       if [ -z "$NOLOCKWARN" ]; then
-                           echo >  $TEMP "WARNING: dotlockfile not installed. 
If you don't want to see this"
-                           echo >> $TEMP "         Warning any more, set 
NOLOCKWARN in the configuration file."
-                       fi
-                       UMASK_SAVE=$(umask)
-                       umask $UMASK_RELAXED
-                       $APTCOMMAND $OPTIONS $LINE >> $TEMP 2>&1
-                       RET=$?
-                       umask $UMASK_SAVE
-                   fi
+                   UMASK_SAVE=$(umask)
+                   umask $UMASK_RELAXED
+                   $APTCOMMAND $OPTIONS $LINE >> $TEMP 2>&1
+                   RET=$?
+                   umask $UMASK_SAVE
                    if [ "$FILTERCTRLM" = "true" ]; then
                        CTRLM="$(echo -e \\r)"
                        < "$TEMP" sed "s/.*$CTRLM\(.\+\)/\1/" > "$FILTER"
-                       #grep -v "
-#" "$TEMP" > "$FILTER"
                        cp "$FILTER" "$TEMP"
                    fi
                    if [ $RET -ne 0 ]; then

Reply via email to