Class: Ilios::Cassandra::Cluster

Inherits:
Object
  • Object
show all
Defined in:
ext/ilios/ilios.c

Constant Summary collapse

PROTOCOL_VERSION_V1 =
INT2NUM(CASS_PROTOCOL_VERSION_V1)
PROTOCOL_VERSION_V2 =
INT2NUM(CASS_PROTOCOL_VERSION_V2)
PROTOCOL_VERSION_V3 =
INT2NUM(CASS_PROTOCOL_VERSION_V3)
PROTOCOL_VERSION_V4 =
INT2NUM(CASS_PROTOCOL_VERSION_V4)
PROTOCOL_VERSION_V5 =
INT2NUM(CASS_PROTOCOL_VERSION_V5)
PROTOCOL_VERSION_DSEV1 =
INT2NUM(CASS_PROTOCOL_VERSION_DSEV1)
PROTOCOL_VERSION_DSEV2 =
INT2NUM(CASS_PROTOCOL_VERSION_DSEV2)

Instance Method Summary collapse

Constructor Details

#initializeCassandra::Cluster

Creates a new cluster.



31
32
33
34
35
36
37
38
39
# File 'ext/ilios/cluster.c', line 31

static VALUE cluster_initialize(VALUE self)
{
    CassandraCluster *cassandra_cluster;

    GET_CLUSTER(self, cassandra_cluster);
    cassandra_cluster->cluster = cass_cluster_new();

    return self;
}

Instance Method Details

#connectCassandra::Session

Connects a session.

Returns:

Raises:

  • (RuntimeError)

    If no host is specified to connect in config method.

  • (Cassandra::ConnectError)

    If the connection fails for any reason.



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'ext/ilios/cluster.c', line 48

static VALUE cluster_connect(VALUE self)
{
    CassandraSession *cassandra_session;
    CassandraCluster *cassandra_cluster;
    VALUE cassandra_session_obj;
    const char *keyspace = "";

    GET_CLUSTER(self, cassandra_cluster);
    if (cassandra_cluster->keyspace) {
        keyspace = StringValueCStr(cassandra_cluster->keyspace);
    }

    cassandra_session_obj = CREATE_SESSION(cassandra_session);
    cassandra_session->cluster_obj = self;
    cassandra_session->session = cass_session_new();
    cassandra_session->connect_future = cass_session_connect_keyspace(cassandra_session->session, cassandra_cluster->cluster, keyspace);
    nogvl_future_wait(cassandra_session->connect_future);

    if (cass_future_error_code(cassandra_session->connect_future) != CASS_OK) {
        char error[4096] = { 0 };

        strncpy(error, cass_error_desc(cass_future_error_code(cassandra_session->connect_future)), sizeof(error) - 1);
        rb_raise(eConnectError, "Unable to connect: %s", error);
        return Qnil;
    }

    return cassandra_session_obj;
}

#connect_timeout(timeout_ms) ⇒ Cassandra::Cluster

Sets the timeout for connecting to a node. Default is 5000 milliseconds.

Parameters:

  • timeout_ms (Integer)

    A connect timeout in milliseconds.

Returns:



161
162
163
164
165
166
167
168
169
# File 'ext/ilios/cluster.c', line 161

static VALUE cluster_connect_timeout(VALUE self, VALUE timeout_ms)
{
    CassandraCluster *cassandra_cluster;

    GET_CLUSTER(self, cassandra_cluster);
    cass_cluster_set_connect_timeout(cassandra_cluster->cluster, NUM2UINT(timeout_ms));

    return self;
}

#constant_speculative_execution_policy(constant_delay_ms, max_speculative_executions) ⇒ Cassandra::Cluster

Enable constant speculative executions with the supplied settings.

Parameters:

  • constant_delay_ms (Integer)
  • max_speculative_executions (Integer)

Returns:



212
213
214
215
216
217
218
219
220
221
222
223
224
# File 'ext/ilios/cluster.c', line 212

static VALUE cluster_constant_speculative_execution_policy(VALUE self, VALUE constant_delay_ms, VALUE max_speculative_executions)
{
    CassandraCluster *cassandra_cluster;

    if (NUM2LONG(constant_delay_ms) < 0 || NUM2INT(max_speculative_executions) < 0) {
        rb_raise(rb_eArgError, "Bad parameters.");
    }

    GET_CLUSTER(self, cassandra_cluster);
    cass_cluster_set_constant_speculative_execution_policy(cassandra_cluster->cluster, NUM2LONG(constant_delay_ms), NUM2INT(max_speculative_executions));

    return self;
}

#hosts(hosts) ⇒ Cassandra::Cluster

Sets the contact points.

Parameters:

  • hosts (Array<String>)

    An array of contact points.

Returns:



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'ext/ilios/cluster.c', line 83

static VALUE cluster_hosts(VALUE self, VALUE hosts)
{
    CassandraCluster *cassandra_cluster;

    GET_CLUSTER(self, cassandra_cluster);

    Check_Type(hosts, T_ARRAY);
    if (RARRAY_LEN(hosts) == 0) {
        rb_raise(rb_eArgError, "No host exists.");
    }

    for (int i = 0; i < RARRAY_LEN(hosts); i++) {
        VALUE host = RARRAY_AREF(hosts, i);
        cass_cluster_set_contact_points(cassandra_cluster->cluster, StringValueCStr(host));
    }

    return self;
}

#keyspace(keyspace) ⇒ Cassandra::Cluster

Sets the keyspace.

Parameters:

  • keyspace (Integer)

    A keyspace.

Returns:



125
126
127
128
129
130
131
132
133
134
135
# File 'ext/ilios/cluster.c', line 125

static VALUE cluster_keyspace(VALUE self, VALUE keyspace)
{
    CassandraCluster *cassandra_cluster;

    StringValue(keyspace);

    GET_CLUSTER(self, cassandra_cluster);
    cassandra_cluster->keyspace = keyspace;

    return self;
}

#port(port) ⇒ Cassandra::Cluster

Sets the port number. Default is 9042.

Parameters:

  • port (Integer)

    A port number.

Returns:



109
110
111
112
113
114
115
116
117
# File 'ext/ilios/cluster.c', line 109

static VALUE cluster_port(VALUE self, VALUE port)
{
    CassandraCluster *cassandra_cluster;

    GET_CLUSTER(self, cassandra_cluster);
    cass_cluster_set_port(cassandra_cluster->cluster, NUM2INT(port));

    return self;
}

#protocol_version(version) ⇒ Cassandra::Cluster

Sets the protocol version. The driver will automatically downgrade to the lowest supported protocol version. Default is PROTOCOL_VERSION_V4.

Parameters:

  • timeout_ms (Integer)

    A connect timeout in milliseconds.

Returns:



144
145
146
147
148
149
150
151
152
# File 'ext/ilios/cluster.c', line 144

static VALUE cluster_protocol_version(VALUE self, VALUE version)
{
    CassandraCluster *cassandra_cluster;

    GET_CLUSTER(self, cassandra_cluster);
    cass_cluster_set_protocol_version(cassandra_cluster->cluster, NUM2INT(version));

    return self;
}

#request_timeout(timeout_ms) ⇒ Cassandra::Cluster

Sets the timeout for waiting for a response from a node. Default is 12000 milliseconds.

Parameters:

  • timeout_ms (Integer)

    A request timeout in milliseconds.

Returns:



178
179
180
181
182
183
184
185
186
# File 'ext/ilios/cluster.c', line 178

static VALUE cluster_request_timeout(VALUE self, VALUE timeout_ms)
{
    CassandraCluster *cassandra_cluster;

    GET_CLUSTER(self, cassandra_cluster);
    cass_cluster_set_request_timeout(cassandra_cluster->cluster, NUM2UINT(timeout_ms));

    return self;
}

#resolve_timeout(timeout_ms) ⇒ Cassandra::Cluster

Sets the timeout for waiting for DNS name resolution. Default is 2000 milliseconds.

Parameters:

  • timeout_ms (Integer)

    A request timeout in milliseconds.

Returns:



195
196
197
198
199
200
201
202
203
# File 'ext/ilios/cluster.c', line 195

static VALUE cluster_resolve_timeout(VALUE self, VALUE timeout_ms)
{
    CassandraCluster *cassandra_cluster;

    GET_CLUSTER(self, cassandra_cluster);
    cass_cluster_set_resolve_timeout(cassandra_cluster->cluster, NUM2UINT(timeout_ms));

    return self;
}