Exemple #1
0
rc_t WriteFileMeta(SIndexObj* obj)
{
    rc_t rc = 0;
    KMDataNode* nd = NULL;

    PLOGMSG(klogInfo, (klogInfo, "Meta $(f) on index $(i): file size $(s), buffer $(b)",
        PLOG_4(PLOG_S(f),PLOG_S(i),PLOG_U64(s),PLOG_U32(b)), obj->file, obj->index, obj->file_size, obj->buffer_sz));

    if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(obj->meta, &nd, "Format")) == 0 ) {
        KMDataNode* opt = NULL;
        rc = KMDataNodeWriteCString(nd, obj->format);
        if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(nd, &opt, "Options")) == 0 ) {
            KMDataNode* ond = NULL;
            if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &ond, "accession")) == 0 ) {
                rc = KMDataNodeWriteCString(ond, g_accession);
                KMDataNodeRelease(ond);
            }
            if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &ond, "minSpotId")) == 0 ) {
                rc = KMDataNodeWriteB64(ond, &obj->minSpotId);
                KMDataNodeRelease(ond);
            }
            if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(opt, &ond, "maxSpotId")) == 0 ) {
                rc = KMDataNodeWriteB64(ond, &obj->maxSpotId);
                KMDataNodeRelease(ond);
            }
            KMDataNodeRelease(opt);
        }
        KMDataNodeRelease(nd);
    }

    if( rc == 0 && obj->file_size > 0 && (rc = KMDataNodeOpenNodeUpdate(obj->meta, &nd, "Size")) == 0 ) {
        rc = KMDataNodeWriteB64(nd, &obj->file_size);
        KMDataNodeRelease(nd);
    }

    if( rc == 0 && obj->buffer_sz > 0 && (rc = KMDataNodeOpenNodeUpdate(obj->meta, &nd, "Buffer")) == 0 ) {
        rc = KMDataNodeWriteB32(nd, &obj->buffer_sz);
        KMDataNodeRelease(nd);
    }

    if( rc == 0 && strlen(obj->index) > 0 && (rc = KMDataNodeOpenNodeUpdate(obj->meta, &nd, "Index")) == 0 ) {
        rc = KMDataNodeWriteCString(nd, obj->index);
        KMDataNodeRelease(nd);
    }

    if( rc == 0 && obj->file_size > 0 && (rc = KMDataNodeOpenNodeUpdate(obj->meta, &nd, "md5")) == 0 ) {
        char x[5];
        int i;
        for( i = 0; rc == 0 && i < sizeof(obj->md5_digest); i++ ) {
            int l = snprintf(x, 4, "%02x", obj->md5_digest[i]);
            rc = KMDataNodeAppend(nd, x, l);
        }
        KMDataNodeRelease(nd);
    }
    return rc;
}
LIB_EXPORT rc_t CC TableWriterSeq_Whack(const TableWriterSeq* cself, bool commit, uint64_t* rows)
{
    rc_t rc = 0;

    if( cself != NULL ) {
        TableWriterSeq* self = (TableWriterSeq*)cself;
        VTable *vtbl;
        
        TableReader_Whack(cself->tmpkey_reader);

        if (commit && (rc = TableWriter_GetVTable(cself->base, &vtbl)) == 0 ) {
            KMetadata* meta;
            
            if ((rc = VTableOpenMetadataUpdate(vtbl, &meta)) == 0) {
                KMDataNode* node = NULL;
                
                if (cself->stats) {
                    if ((rc = KMetadataOpenNodeUpdate(meta, &node, "MATE_STATISTICS")) == 0) {
                        rc = TableWriterSeq_WriteStatistics(cself, node);
                        KMDataNodeRelease(node);
                    }
                }
                if ((rc = KMetadataOpenNodeUpdate(meta, &node, "unaligned")) == 0) {
                    KMDataNode *sub = NULL;
                    
                    KMDataNodeOpenNodeUpdate(node, &sub, "first-unaligned");
                    KMDataNodeWriteB64(sub, &self->firstUnaligned);
                    KMDataNodeRelease(sub);
                    
                    KMDataNodeOpenNodeUpdate(node, &sub, "first-half-aligned");
                    KMDataNodeWriteB64(sub, &self->firstHalfAligned);
                    KMDataNodeRelease(sub);

                    KMDataNodeRelease(node);
                }
                KMetadataRelease(meta);
            }
        }

        rc = TableWriter_Whack(cself->base, commit && (rc == 0), rows);
        KVectorRelease(cself->stats);
        free(self->qual_buf);
        free(self);
    }
    return rc;
}
Exemple #3
0
static rc_t group_stats_write_node(KMDataNode *const node,
                                   char const name[],
                                   void const *const value)
{
    KMDataNode *subnode;
    rc_t rc = KMDataNodeOpenNodeUpdate(node, &subnode, "%s", name);
    if (rc == 0) {
        rc = KMDataNodeWriteB64(subnode, value);
        KMDataNodeRelease(subnode);
    }
    return rc;
}
Exemple #4
0
static
rc_t sra_meta_stats_node_group_update(sra_meta_stats_node_group* g,
    const int64_t spot_id, const uint32_t spot_len,
    const uint32_t bio_spot_len, const uint32_t cmp_spot_len)
{
    rc_t rc = 0;
    uint64_t u64;
    int64_t i64;

    if( (rc = sra_meta_stats_node_read(g->node_spot_count, &u64)) == 0 ) {
        if( u64 + 1 < u64 ) {
            rc = RC(rcVDB, rcFunction, rcUpdating, rcMetadata, rcOutofrange);
        } else {
            if( spot_id != 0 ) {
                ++u64;
            }
            rc = KMDataNodeWriteB64(g->node_spot_count, &u64);
        }
    }
    if( (rc = sra_meta_stats_node_read(g->node_base_count, &u64)) == 0 ) {
        if( u64 + 1 < u64 ) {
            rc = RC(rcVDB, rcFunction, rcUpdating, rcMetadata, rcOutofrange);
        } else {
            u64 += spot_len;
            rc = KMDataNodeWriteB64(g->node_base_count, &u64);
        }
    }
    if( (rc = sra_meta_stats_node_read(g->node_bio_base_count, &u64)) == 0 ) {
        if( u64 + bio_spot_len < u64 ) {
            rc = RC(rcVDB, rcFunction, rcUpdating, rcMetadata, rcOutofrange);
        } else {
            u64 += bio_spot_len;
            rc = KMDataNodeWriteB64(g->node_bio_base_count, &u64);
        }
    }
    if( g->node_cmp_base_count != NULL ) {
        if( (rc = sra_meta_stats_node_read(g->node_cmp_base_count, &u64)) == 0 ) {
            if( u64 + cmp_spot_len < u64 ) {
                rc = RC(rcVDB, rcFunction, rcUpdating, rcMetadata, rcOutofrange);
            } else {
                u64 += cmp_spot_len;
                rc = KMDataNodeWriteB64(g->node_cmp_base_count, &u64);
            }
        }
    }
    if( (rc = sra_meta_stats_node_read(g->node_spot_max, &i64)) == 0 ) {
        if( i64 == 0 || i64 < spot_id ) {
            i64 = spot_id;
            rc = KMDataNodeWriteB64(g->node_spot_max, &i64);
        }
    }
    if( (rc = sra_meta_stats_node_read(g->node_spot_min, &i64)) == 0 ) {
        if( i64 == 0 || i64 > spot_id ) {
            i64 = spot_id;
            rc = KMDataNodeWriteB64(g->node_spot_min, &i64);
        }
    }
    return rc;
}
Exemple #5
0
static
rc_t CC refseq_meta_stats( void *self, const VXformInfo *info, int64_t row_id,
                             VRowResult *rslt, uint32_t argc, const VRowData argv [] )
{
    rc_t rc = 0;
    KMDataNode* node;
    refseq_meta_stats_data* data = self;
    uint64_t i, seq_len = argv[0].u.data.elem_count;
    const INSDC_4na_bin * seq = argv[0].u.data.base;
   
    seq +=  argv[0].u.data.first_elem;

    assert(data != NULL);

    if( data->buf_sz < seq_len ) {
        char* x = realloc(data->buf, seq_len);
        if( x == NULL ) {
            rc = RC(rcVDB, rcFunction, rcUpdating, rcMemory, rcExhausted);
        } else {
            data->buf = x;
            data->buf_sz = seq_len;
        }
    }
    for(i = 0; rc == 0 && i < seq_len; i++) {
        data->buf[i] = INSDC_4na_map_CHARSET[seq[i]];
    }
    if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(data->stats, &node, "TOTAL_SEQ_LEN")) == 0 ) {
        if( data->total_seq_len + seq_len < data->total_seq_len ) {
            rc = RC(rcVDB, rcFunction, rcUpdating, rcMetadata, rcOutofrange);
        } else {
            data->total_seq_len += seq_len;
            rc = KMDataNodeWriteB64(node, &data->total_seq_len);
        }
        KMDataNodeRelease(node);
    }
    if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(data->stats, &node, "CRC32")) == 0 ) {
        data->crc32 = CRC32(data->crc32, data->buf, seq_len);
        rc = KMDataNodeWriteB32(node, &data->crc32);
        KMDataNodeRelease(node);
    }
    if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(data->stats, &node, "MD5")) == 0 ) {
        uint8_t digest[16];
        MD5State md5;
        MD5StateAppend(&data->md5, data->buf, seq_len);
        memcpy(&md5, &data->md5, sizeof(md5));
        MD5StateFinish(&md5, digest);
        rc = KMDataNodeWrite(node, digest, sizeof(digest));
        KMDataNodeRelease(node);
    }
    return rc;
}
Exemple #6
0
 inline rc_t WriteB64 ( const void *b64 ) throw()
 { return KMDataNodeWriteB64 ( this, b64 ); }