Пример #1
0
int so_scheduler_init(soscheduler *s, void *env)
{
    sr_mutexinit(&s->lock);
    s->workers_branch       = 0;
    s->workers_backup       = 0;
    s->workers_gc           = 0;
    s->workers_gc_db        = 0;
    s->rotate               = 0;
    s->req                  = 0;
    s->i                    = NULL;
    s->count                = 0;
    s->rr                   = 0;
    s->env                  = env;
    s->checkpoint_lsn       = 0;
    s->checkpoint_lsn_last  = 0;
    s->checkpoint           = 0;
    s->age                  = 0;
    s->age_last             = 0;
    s->backup_bsn           = 0;
    s->backup_last          = 0;
    s->backup_last_complete = 0;
    s->backup               = 0;
    s->gc                   = 0;
    s->gc_last              = 0;
    so_workersinit(&s->workers);
    return 0;
}
Пример #2
0
static void
mt_multi_stmt(stc *cx)
{
	cx->env = sp_env();
	t( cx->env != NULL );
	void *c = sp_ctl(cx->env);
	t( c != NULL );
	t( sp_set(c, "sophia.path", cx->suite->sophiadir) == 0 );
	t( sp_set(c, "scheduler.threads", "3") == 0 );
	t( sp_set(c, "log.path", cx->suite->logdir) == 0 );
	t( sp_set(c, "log.sync", "0") == 0 );
	t( sp_set(c, "log.rotate_sync", "0") == 0 );
	t( sp_set(c, "db", "test") == 0 );
	t( sp_set(c, "db.test.path", cx->suite->dir) == 0 );
	t( sp_set(c, "db.test.sync", "0") == 0 );
	cx->db = sp_get(c, "db.test");
	t( cx->db != NULL );
	t( sp_open(cx->env) == 0 );

	ssa a;
	ss_aopen(&a, &ss_stda);
	srscheme cmp;
	sr_schemeinit(&cmp);
	srkey *part = sr_schemeadd(&cmp, &a);
	t( sr_keysetname(part, &a, "key") == 0 );
	t( sr_keyset(part, &a, "u32") == 0 );
	ssinjection ij;
	memset(&ij, 0, sizeof(ij));
	srerror error;
	sr_errorinit(&error);
	srseq seq;
	sr_seqinit(&seq);
	sscrcf crc = ss_crc32c_function();
	sr r;
	sr_init(&r, &error, &a, &seq, SF_KV, SF_SRAW, &cmp, &ij, crc, NULL);

	soworkers w;
	so_workersinit(&w);
	void *ptr[2] = { cx->env, cx->db };
	t( so_workersnew(&w, &r, 5, multi_stmt_thread, (void*)ptr) == 0 );
	t( so_workersshutdown(&w, &r) == 0 );
	sr_schemefree(&cmp, &a);

	void *o = sp_get(c, "db.test.index.count");
	t( o != NULL );
	t( strcmp( sp_get(o, "value", NULL), "100000") == 0 );
	sp_destroy(o);

	t( sp_destroy(cx->env) == 0 );
}