Skip to content

Commit

Permalink
Refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
Watson1978 committed Nov 12, 2023
1 parent 1666902 commit b0eaa5e
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 25 deletions.
16 changes: 16 additions & 0 deletions ext/ilios/future.c
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,22 @@ static VALUE future_result_yielder_thread(void *arg)
return Qnil;
}

VALUE future_create(CassFuture *future, VALUE session, future_kind kind)
{
CassandraFuture *cassandra_future;
VALUE cassandra_future_obj;

cassandra_future_obj = CREATE_FUTURE(cassandra_future);
cassandra_future->kind = kind;
cassandra_future->future = future;
cassandra_future->session_obj = session;
cassandra_future->proc_mutex = rb_mutex_new();
uv_sem_init(&cassandra_future->sem, 0);
cassandra_future->already_waited = false;

return cassandra_future_obj;
}

/**
* Run block when future resolves to a value.
*
Expand Down
1 change: 1 addition & 0 deletions ext/ilios/ilios.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ extern void Init_statement(void);
extern void Init_result(void);
extern void Init_future(void);

extern VALUE future_create(CassFuture *future, VALUE session, future_kind kind);
extern void nogvl_future_wait(CassFuture *future);
extern CassFuture *nogvl_session_prepare(CassSession* session, VALUE query);
extern CassFuture *nogvl_session_execute(CassSession* session, CassStatement* statement);
Expand Down
27 changes: 2 additions & 25 deletions ext/ilios/session.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,23 +25,12 @@ const rb_data_type_t cassandra_session_data_type = {
static VALUE session_prepare_async(VALUE self, VALUE query)
{
CassandraSession *cassandra_session;
CassandraFuture *cassandra_future;
CassFuture *prepare_future;
VALUE cassandra_future_obj;

GET_SESSION(self, cassandra_session);

prepare_future = nogvl_session_prepare(cassandra_session->session, query);

cassandra_future_obj = CREATE_FUTURE(cassandra_future);
cassandra_future->kind = prepare_async;
cassandra_future->future = prepare_future;
cassandra_future->session_obj = self;
cassandra_future->proc_mutex = rb_mutex_new();
uv_sem_init(&cassandra_future->sem, 0);
cassandra_future->already_waited = false;

return cassandra_future_obj;
return future_create(prepare_future, self, prepare_async);
}

/**
Expand Down Expand Up @@ -94,25 +83,13 @@ static VALUE session_execute_async(VALUE self, VALUE statement)
{
CassandraSession *cassandra_session;
CassandraStatement *cassandra_statement;
CassandraFuture *cassandra_future;
CassFuture *result_future;
VALUE cassandra_future_obj;

GET_SESSION(self, cassandra_session);
GET_STATEMENT(statement, cassandra_statement);

result_future = nogvl_session_execute(cassandra_session->session, cassandra_statement->statement);

cassandra_future_obj = CREATE_FUTURE(cassandra_future);
cassandra_future->kind = execute_async;
cassandra_future->future = result_future;
cassandra_future->session_obj = self;
cassandra_future->statement_obj = statement;
cassandra_future->proc_mutex = rb_mutex_new();
uv_sem_init(&cassandra_future->sem, 0);
cassandra_future->already_waited = false;

return cassandra_future_obj;
return future_create(result_future, self, execute_async);
}

/**
Expand Down

0 comments on commit b0eaa5e

Please sign in to comment.