Class: Gnista::Logreader

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/gnista.rb,
ext/gnista/gnista.c

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(filename) ⇒ Object



199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
# File 'ext/gnista/gnista.c', line 199

static VALUE method_logreader_initialize(VALUE self, VALUE filename) {
	sparkey_returncode returncode;
	instance_logreader *i_logreader = get_logreader(self);
	Check_Type(filename, T_STRING);

	returncode = sparkey_logreader_open(&i_logreader->logreader, RSTRING_PTR(filename));

	if (returncode != SPARKEY_SUCCESS) {
		raise_sparkey(returncode);
	} else {
		i_logreader->open = true;
		rb_iv_set(self, "@logpath", filename);
	}

	return self;
}

Instance Attribute Details

#logpathObject (readonly)

Returns the value of attribute logpath.



25
26
27
# File 'lib/gnista.rb', line 25

def logpath
  @logpath
end

Instance Method Details

#closeObject Also known as: close!



216
217
218
219
220
221
222
223
# File 'ext/gnista/gnista.c', line 216

static VALUE method_logreader_close(VALUE self) {
	instance_logreader *i_logreader = get_logreader(self);
	check_open(i_logreader->open);
	sparkey_logreader_close(&i_logreader->logreader);
	i_logreader->open = false;

	return Qnil;
}

#eachObject



225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
# File 'ext/gnista/gnista.c', line 225

static VALUE method_logreader_each(VALUE self) {
	sparkey_returncode returncode;
	sparkey_logiter *logiter;
	instance_logreader *i_logreader = get_logreader(self);
	check_open(i_logreader->open);

	if (!rb_block_given_p()) {
		return rb_funcall(self, rb_intern("to_enum"), 0);
	}

	returncode = sparkey_logiter_create(&logiter, i_logreader->logreader);

	if (returncode != SPARKEY_SUCCESS) {
		raise_sparkey(returncode);
	}

	VALUE put_sym = ID2SYM(rb_intern("put"));
	VALUE del_sym = ID2SYM(rb_intern("delete"));
	uint8_t *keybuf = malloc(sparkey_logreader_maxkeylen(i_logreader->logreader));
	uint8_t *valuebuf = malloc(sparkey_logreader_maxvaluelen(i_logreader->logreader));
	while (i_logreader->open) {
		returncode = sparkey_logiter_next(logiter, i_logreader->logreader);

		if (sparkey_logiter_state(logiter) != SPARKEY_ITER_ACTIVE) {
			break;
		}

		uint64_t wanted_keylen = sparkey_logiter_keylen(logiter);
		uint64_t actual_keylen;
		returncode = sparkey_logiter_fill_key(logiter, i_logreader->logreader, wanted_keylen, keybuf, &actual_keylen);

		if (returncode != SPARKEY_SUCCESS) {
			free(keybuf);
			free(valuebuf);
			raise_sparkey(returncode);
		} else if (wanted_keylen != actual_keylen) {
			free(keybuf);
			free(valuebuf);
			rb_raise(GnistaException, "Corrupted read in logreader.");
		}

		if (sparkey_logiter_type(logiter) == SPARKEY_ENTRY_PUT) {
			uint64_t wanted_valuelen = sparkey_logiter_valuelen(logiter);
			uint64_t actual_valuelen;
			returncode = sparkey_logiter_fill_value(logiter, i_logreader->logreader, wanted_valuelen, valuebuf, &actual_valuelen);

			if (returncode != SPARKEY_SUCCESS) {
				free(keybuf);
				free(valuebuf);
				raise_sparkey(returncode);
			} else if (wanted_valuelen != actual_valuelen) {
				free(keybuf);
				free(valuebuf);
				rb_raise(GnistaException, "Corrupted read in logreader.");
			}

			rb_yield_values(3, rb_str_new((char *)keybuf, actual_keylen), rb_str_new((char *)valuebuf, actual_valuelen), put_sym);
		} else {
			rb_yield_values(3, rb_str_new((char *)keybuf, actual_keylen), Qnil, del_sym);
		}
	}

	free(keybuf);
	free(valuebuf);
	sparkey_logiter_close(&logiter);

	check_open(i_logreader->open);

	return self;
}

#inspectObject



27
28
29
# File 'lib/gnista.rb', line 27

def inspect
  %(#<#{self.class} #{@logpath.inspect}>)
end

#maxkeylenObject



306
307
308
309
310
311
312
313
314
# File 'ext/gnista/gnista.c', line 306

static VALUE method_logreader_maxkeylen(VALUE self) {
	instance_logreader *i_logreader = get_logreader(self);
	uint64_t maxkeylen;
	check_open(i_logreader->open);

	maxkeylen = sparkey_logreader_maxkeylen(i_logreader->logreader);

	return INT2NUM(maxkeylen);
}

#maxvaluelenObject



316
317
318
319
320
321
322
323
324
# File 'ext/gnista/gnista.c', line 316

static VALUE method_logreader_maxvaluelen(VALUE self) {
	instance_logreader *i_logreader = get_logreader(self);
	uint64_t maxvaluelen;
	check_open(i_logreader->open);

	maxvaluelen = sparkey_logreader_maxvaluelen(i_logreader->logreader);

	return INT2NUM(maxvaluelen);
}

#open?Boolean

Returns:

  • (Boolean)


296
297
298
299
300
301
302
303
304
# File 'ext/gnista/gnista.c', line 296

static VALUE method_logreader_open(VALUE self) {
	instance_logreader *i_logreader = get_logreader(self);

	if (i_logreader->open) {
		return Qtrue;
	} else {
		return Qfalse;
	}
}