driver: error (fatal): assert: dumper->job is false: file driver.c, line 2107

Mark Ruys <[email protected]> Wed, 26 Jul 2017 15:09:51 +0200
Newsgroups gmane.comp.archivers.amanda.devel
Message-ID <[email protected]>
Hi,

I run a Amanda 3.4.5 instance which since a few days crashes during the dumping process. This is what gets logged:

	driver: error (fatal): assert: dumper->job is false: file driver.c, line 2107

Looking at the source <https://sourceforge.net/p/amanda/code/HEAD/tree/amanda/trunk/server-src/driver.c#l2103>, this is where the assertion fails:

static void
continue_port_dumps(void)
{
    GList   *slist, *slist_next;
    sched_t *sp;
    job_t   *job = NULL;
    assignedhd_t **h;
    int active_dumpers=0, busy_dumpers=0, i;
    dumper_t *dumper;

    /* First we try to grant diskspace to some dumps waiting for it. */
    for (slist = roomq.head; slist != NULL; slist = slist_next) {
        slist_next = slist->next;
        sp = get_sched(slist);
        /* find last holdingdisk used by this dump */
        for (i = 0, h = sp->holdp; h[i+1]; i++) {
            (void)h; /* Quiet lint */
        }
        /* find more space */
        h = find_diskspace(sp->est_size - sp->act_size,
                           &active_dumpers, h[i]);
        if( h ) {
            for (dumper = dmptable; dumper < dmptable + inparallel &&
                                    dumper->job &&
                                    dumper->job->sched != sp; dumper++) {
                (void)sp; /* Quiet lint */
            }
            assert(dumper < dmptable + inparallel);
            assert(dumper->job);
            sp->activehd = assign_holdingdisk(h, sp);
            chunker_cmd(dumper->job->chunker, CONTINUE, sp, NULL);
            amfree(h);
            remove_sched(&roomq, sp);
        }
    }
    …
}

As I understand it, we have a slot in roomq, we have a holdingdisk with enough space, but the dumper table has a record with no job (false) before the record we're looking for. 

Shouldn't the for loop be this:

            for (dumper = dmptable; dumper < dmptable + inparallel &&
                                    ! (dumper->job && dumper->job->sched == sp); dumper++) {
                (void)sp; /* Quiet lint */
            }

How can I get our Amanda dumps run stable again?

Cheers,

Mark

---
Oudenhof 4c, 4191NW Geldermalsen, The Netherlands
Web site and travel directions:   www.peercode.nl <http://peercode.nl/>