Exemplo n.º 1
0
FragInfo_t *rfraginfo_create (CCREF        *refp,
                              DataFragSMsg *fragp,
                              unsigned     max_frags)
{
    DB		*dbp;
    FragInfo_t	*fip;

    dbp = db_alloc_data (fragp->sample_size, 1);
    if (!dbp) {
        warn_printf ("rfraginfo_create: no memory for sample data!");
        return (NULL);
    }
    fip = xmalloc (FRAG_INFO_SIZE (max_frags));
    if (!fip) {
        warn_printf ("rfraginfo_create: no memory for fragment info!");
        db_free_data (dbp);
        return (NULL);
    }
    memset (fip, 0, FRAG_INFO_SIZE (max_frags));
    fip->nrefs = 1;
    fip->total = fip->num_na = max_frags;
    fip->fsize = fragp->frag_size;
    if (refp->relevant)
        fip->writer = refp->u.c.change->c_writer;
    else
        fip->writer = 0;
    fip->data = dbp;
    fip->length = fragp->sample_size;
    tmr_init (&fip->timer, "FragInfo");
    refp->fragments = fip;
    return (fip);
}
Exemplo n.º 2
0
JNIEXPORT jbyteArray JNICALL Java_org_nessdb_DB_get(JNIEnv *jenv, jobject clazz, jlong ptr,
													 jbyteArray jkey, jint jklen
													 )
{
	(void)clazz;
	char *key, *ktmp;
	struct slice sk, sv;

    struct nessdb *_db = (struct nessdb *)ptr;
	if (!_db) {
		__ERROR("get-->db is null, pls open first");

		return NULL;
	}

	if (jklen >= NESSDB_MAX_KEY_SIZE) {
		__ERROR("key length too long...%d", jklen);
		return NULL;
	}

	memset(&sk, 0, sizeof(struct slice));
	memset(&sv, 0, sizeof(struct slice));

	key = (char*)(*jenv)->GetByteArrayElements(jenv, jkey, 0);
	if (key == NULL)
		return NULL;

	ktmp = malloc(jklen + 1);
	memset(ktmp, 0, jklen + 1);
	memcpy(ktmp, key, jklen);

	sk.data = ktmp;
	sk.len = jklen;

	db_get(_db, &sk, &sv);

    jbyteArray jval = NULL;
	if (sv.len > 0) {
        jval = (*jenv)->NewByteArray(jenv, sv.len);
        if (jval != NULL) {
            (*jenv)->SetByteArrayRegion(jenv, jval, 0, sv.len, (jbyte*)sv.data);
        } else {
            __ERROR("jenv new bytearray(%d) failed...", sv.len);
        }
	}

	/* release */
	if (key) {
		(*jenv)->ReleaseByteArrayElements(jenv, jkey, (jbyte*)key, 0);
		free(ktmp);
	}

    if (sv.data)
        db_free_data(sv.data);

	return jval;
}
Exemplo n.º 3
0
void rfraginfo_delete (CCREF *refp)
{
    FragInfo_t	*fip;

    if ((fip = refp->fragments) == NULL)
        return;

    refp->fragments = NULL;
    rcl_access (fip);
    fip->nrefs--;
    rcl_done (fip);
    if (fip->nrefs > 0)
        return;

    db_free_data (fip->data);
    tmr_stop (&fip->timer);
    if (fip->key && fip->key != fip->hash.hash)
        xfree (fip->key);
    xfree (fip);
}
Exemplo n.º 4
0
FragInfo_t *rfraginfo_update (CCREF *refp, DataFragSMsg *fragp)
{
    FragInfo_t	*fip, *nfip;
    unsigned	max_frags;

    fip = refp->fragments;
    if (!fip)
        return (NULL);

    if (fip->length != fragp->sample_size) {
        max_frags = (fragp->sample_size + fragp->frag_size - 1) / fragp->frag_size;
        if (fragp->frag_start + fragp->num_fragments - 1 > max_frags) {
            rfraginfo_delete (refp);
            return (NULL);
        }
        if (fip->length < fragp->sample_size) {
            db_free_data (fip->data);
            fip->data = db_alloc_data (fragp->sample_size, 1);
            if (!fip->data) {
                warn_printf ("rfraginfo_update: no memory for realloc()!");
                rfraginfo_delete (refp);
                return (NULL);
            }
        }
        fip->length = fragp->sample_size;
        if (fip->total != max_frags) {
            nfip = xrealloc (fip, FRAG_INFO_SIZE (max_frags));
            if (!nfip) {
                rfraginfo_delete (refp);
                return (NULL);
            }
            fip = refp->fragments = nfip;
        }
    }
    else
        max_frags = fip->total;
    memset (fip, 0, FRAG_INFO_SIZE (max_frags));
    fip->total = fip->num_na = max_frags;
    fip->fsize = fragp->frag_size;
    return (fip);
}
Exemplo n.º 5
0
static int db_nessdb_select(struct nb_db *db, struct nb_key *key)
{
	struct db_nessdb *t = db->priv;

	assert (key->size < UINT_MAX);

	struct slice nkey, nval;
	nkey.len = key->size;
	nkey.data = key->data;

	int count = db_get(t->instance->db, &nkey, &nval);
	if (count != 1) {
		printf("db_get() failed: %d\n", count);
		return -1;
	}

#if defined(HAVE_NESSDB_SST)
	db_free_data(nval.data);
#endif

	++t->sent;
	return 0;
}