Ejemplo n.º 1
0
static
rc_t DB_Fini(const SParam* p, DB_Handle* h, bool drop)
{
    rc_t rc = 0, rc2;

    /* THIS FUNCTION MAKES NO ATTEMPT TO PRESERVE INITIAL ERROR CODES
       EACH SUCCESSIVE ERROR OVERWRITES THE PREVIOUS CODE */
    if( h != NULL ) {
        PLOGMSG(klogInfo, (klogInfo, "Fini SEQUENCE", "severity=status"));
        if( (rc2 = CGWriterSeq_Whack(h->wseq, !drop, NULL)) != 0 && !drop ) {
            drop = true;
            rc = rc2;
        }
        h->wseq = NULL;
        h->reads = NULL;
        PLOGMSG(klogInfo, (klogInfo, "Fini (PRI&SEC)_ALIGNMENT", "severity=status"));
        if( (rc2 = CGWriterAlgn_Whack(h->walgn, !drop, NULL, NULL)) != 0 && !drop ) {
            drop = true;
            rc = rc2;
        }
        h->walgn = NULL;
        h->mappings = NULL;
        PLOGMSG(klogInfo, (klogInfo, "Fini EVIDENCE_INTERVAL", "severity=status"));
        if( (rc2 = CGWriterEvdInt_Whack(h->wev_int, !drop, NULL)) != 0 && !drop ) {
            drop = true;
            rc = rc2;
        }
        h->wev_int = NULL;
        h->ev_int = NULL;
        PLOGMSG(klogInfo, (klogInfo, "Fini EVIDENCE_ALIGNMENT", "severity=status"));
        if( (rc2 = CGWriterEvdDnbs_Whack(h->wev_dnb, !drop, NULL)) != 0 && !drop ) {
            drop = true;
            rc = rc2;
        }
        h->wev_dnb = NULL;
        h->ev_dnb = NULL;
        PLOGMSG(klogInfo, (klogInfo, "Fini calculating reference coverage", "severity=status"));
        if( (rc2 = ReferenceMgr_Release(h->rmgr, !drop, NULL, drop ? false : true)) != 0 && !drop ) {
            drop = true;
            rc = rc2;
	    LOGERR(klogErr, rc, "Failed calculating reference coverage");
        }
        h->rmgr = NULL;
        if( rc == 0 )
        {
            KMetadata* meta;
            if( (rc = VDatabaseOpenMetadataUpdate(h->db, &meta)) == 0 ) {
                KMDataNode *node;
                if( (rc = KMetadataOpenNodeUpdate(meta, &node, "/")) == 0 ) {
                    if( (rc = KLoaderMeta_Write(node, p->argv0, __DATE__, "Complete Genomics", KAppVersion())) != 0 ) {
                        LOGERR(klogErr, rc, "Cannot update loader meta");
                    }
                    KMDataNodeRelease(node);
                }
                KMetadataRelease(meta);
            }
        }
        PLOGMSG(klogInfo, (klogInfo, "Fini VDatabaseRelease", "severity=status"));
        VDatabaseRelease(h->db);
        h->db = NULL;
        VSchemaRelease(h->schema);
        h->schema = NULL;
        if( drop || rc != 0 ) {
            rc2 = VDBManagerDrop(h->mgr, kptDatabase, p->out);
            if( GetRCState(rc2) == rcNotFound ) {
                /* WHAT WOULD BE THE POINT OF RESETTING "rc" TO ZERO? */
                rc = 0;
            } else if( rc2 != 0 ) {
                if ( rc == 0 )
                    rc = rc2;
                PLOGERR(klogErr, (klogErr, rc2, "cannot drop db at '$(path)'", PLOG_S(path), p->out));
            }
        }
        VDBManagerRelease(h->mgr);
        h->mgr = NULL;
    }
    return rc;
}
Ejemplo n.º 2
0
rc_t CGWriterAlgn_Make(const CGWriterAlgn** cself, TMappingsData** data, VDatabase* db, const ReferenceMgr* rmgr,
                       uint32_t min_mapq, bool single_mate, uint32_t cluster_size)
{
    rc_t rc = 0;
    CGWriterAlgn* self;

    if( cself == NULL || db == NULL ) {
        return RC(rcExe, rcFormatter, rcConstructing, rcParam, rcNull);
    }
    self = calloc(1, sizeof(*self));
    if( self == NULL ) {
        rc = RC(rcExe, rcFormatter, rcConstructing, rcMemory, rcExhausted);
    } else {
        if( (rc = TableWriterAlgn_Make(&self->primary, db,
                            ewalgn_tabletype_PrimaryAlignment, ewalgn_co_SEQ_SPOT_ID | ewalgn_co_unsorted)) != 0 ){
            LOGERR(klogErr, rc, "primary alignment table");
        } else if( (rc = TableWriterAlgn_Make(&self->secondary, db,
                            ewalgn_tabletype_SecondaryAlignment, ewalgn_co_SEQ_SPOT_ID | ewalgn_co_unsorted)) != 0 ) {
            LOGERR(klogErr, rc, "secondary alignment table");
        } else {
            int i;
            /* interconnect buffers */
            for(i = 0; i < CG_MAPPINGS_MAX; i++) {
                self->algn[i].seq_spot_id.buffer = &self->match[i].seq_spot_id;
                self->algn[i].seq_spot_id.elements = 1;
                
                self->algn[i].seq_read_id.buffer = &self->match[i].seq_read_id;
                self->algn[i].seq_read_id.elements = 1;

                self->algn[i].read_start.buffer = &self->match[i].read_start;
                
                self->algn[i].read_len.buffer = &self->match[i].read_len;
                
                self->algn[i].has_ref_offset.buffer = self->match[i].has_ref_offset;
                
                self->algn[i].ref_offset.buffer = self->match[i].ref_offset;
                
                self->algn[i].ref_offset_type.buffer = self->match[i].ref_offset_type;
                
                self->algn[i].ref_id.buffer = &self->match[i].ref_id;
                
                self->algn[i].ref_start.buffer = &self->match[i].ref_start;
                
                self->algn[i].has_mismatch.buffer = self->match[i].has_mismatch;
                
                self->algn[i].mismatch.buffer = self->match[i].mismatch;
                
                self->algn[i].ref_orientation.buffer = &self->match[i].ref_orientation;
                self->algn[i].ref_orientation.elements = 1;
                
                self->algn[i].mapq.buffer = &self->match[i].mapq;
                self->algn[i].mapq.elements = 1;
                
                self->algn[i].mate_ref_orientation.buffer = &self->match[i].mate_ref_orientation;
                self->algn[i].mate_ref_orientation.elements = 1;
                
                self->algn[i].mate_ref_id.buffer = &self->match[i].mate_ref_id;
                self->algn[i].mate_ref_id.elements = 1;
                
                self->algn[i].mate_ref_pos.buffer = &self->match[i].mate_ref_pos;
                self->algn[i].mate_ref_pos.elements = 1;
                
                self->algn[i].template_len.buffer = &self->match[i].template_len;
                self->algn[i].template_len.elements = 1;
            }
            self->rmgr = rmgr;
            self->min_mapq = min_mapq;
            self->single_mate = single_mate;
            global_cluster_size = cluster_size;
            *data = &self->data;
        }
    }
    if( rc == 0 ) {
        *cself = self;
    } else {
        CGWriterAlgn_Whack(self, false, NULL, NULL);
    }
    return rc;
}