Class: GroongaQueryLog::Command::RunRegressionTest::GroongaServer

Inherits:
Object
  • Object
show all
Includes:
Loggable
Defined in:
lib/groonga-query-log/command/run-regression-test.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Loggable

#puts

Constructor Details

#initialize(groonga, groonga_options, database_path, options) ⇒ GroongaServer

Returns a new instance of GroongaServer.



374
375
376
377
378
379
380
381
382
383
# File 'lib/groonga-query-log/command/run-regression-test.rb', line 374

def initialize(groonga, groonga_options, database_path, options)
  @input_directory = options[:input_directory] || Pathname.new(".")
  @working_directory = options[:working_directory] || Pathname.new(".")
  @groonga = groonga
  @groonga_options = groonga_options
  @database_path = @working_directory + database_path
  @host = "127.0.0.1"
  @port = find_unused_port
  @options = options
end

Instance Attribute Details

#hostObject (readonly)

Returns the value of attribute host.



373
374
375
# File 'lib/groonga-query-log/command/run-regression-test.rb', line 373

def host
  @host
end

#portObject (readonly)

Returns the value of attribute port.



373
374
375
# File 'lib/groonga-query-log/command/run-regression-test.rb', line 373

def port
  @port
end

Instance Method Details

#ensure_databaseObject



413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
# File 'lib/groonga-query-log/command/run-regression-test.rb', line 413

def ensure_database
  if @options[:recreate_database]
    FileUtils.rm_rf(@database_path.dirname.to_s)
  end

  return if @database_path.exist?
  FileUtils.mkdir_p(@database_path.dirname.to_s)
  system(@groonga, "-n", @database_path.to_s, "quit")
  load_files.each do |load_file|
    if load_file.extname == ".rb"
      env = {
        "GROONGA_LOG_PATH" => log_path.to_s,
      }
      command = [
        RbConfig.ruby,
        load_file.to_s,
        @database_path.to_s,
      ]
    else
      env = {}
      command = [
        @groonga,
        "--log-path", log_path.to_s,
        "--file", load_file.to_s,
        @database_path.to_s,
      ]
    end
    command_line = command.join(" ")
    puts("Running...: #{command_line}")
    pid = spawn(env, *command)
    begin
      pid, status = Process.waitpid2(pid)
    rescue Interrupt
      Process.kill(:TERM, pid)
      pid, status = Process.waitpid2(pid)
    end
    unless status.success?
      raise "Failed to run: #{command_line}"
    end
  end
end

#runObject



385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
# File 'lib/groonga-query-log/command/run-regression-test.rb', line 385

def run
  return unless @options[:run_queries]

  arguments = @groonga_options.dup
  arguments.concat(["--bind-address", @host])
  arguments.concat(["--port", @port.to_s])
  arguments.concat(["--protocol", "http"])
  arguments.concat(["--log-path", log_path.to_s])
  if @options[:output_query_log]
    arguments.concat(["--query-log-path", query_log_path.to_s])
  end
  arguments << "-s"
  arguments << @database_path.to_s
  @pid = spawn(@groonga, *arguments)

  n_retries = 10
  begin
    send_command("status")
  rescue SystemCallError
    sleep(1)
    n_retries -= 1
    raise if n_retries.zero?
    retry
  end

  yield if block_given?
end

#shutdownObject



459
460
461
462
463
464
465
# File 'lib/groonga-query-log/command/run-regression-test.rb', line 459

def shutdown
  begin
    send_command("shutdown")
  rescue SystemCallError
  end
  Process.waitpid(@pid)
end

#use_persistent_cache?Boolean

Returns:

  • (Boolean)


455
456
457
# File 'lib/groonga-query-log/command/run-regression-test.rb', line 455

def use_persistent_cache?
  @groonga_options.include?("--cache-base-path")
end