Skip to content

Instantly share code, notes, and snippets.

@yorickpeterse
Created September 29, 2015 11:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yorickpeterse/188b540f13ee0de538e8 to your computer and use it in GitHub Desktop.
Save yorickpeterse/188b540f13ee0de538e8 to your computer and use it in GitHub Desktop.
require 'sequel'
require 'securerandom'
db_host = 'localhost'
db_name = 'test'
db_user = 'root'
db_options = {test: true, max_connections: 10, encoding: 'UTF-8'}
if defined?(JRuby)
DB = Sequel.connect(
"jdbc:postgresql://#{db_host}/#{db_name}?user=#{db_user}",
db_options
)
else
DB = Sequel.connect("postgres://#{db_user}@#{db_host}/#{db_name}", db_options)
end
puts 'Preparing...'
DB.create_table!(:reviews) do
primary_key :id
String :title, null: false
end
DB.create_table!(:review_comments) do
String :comment
Integer :review_id
end
class Review < Sequel::Model
end
class ReviewComment < Sequel::Model
end
100.times do
rid = DB[:reviews].insert(:title => SecureRandom.hex)
DB[:review_comments].insert(:comment => SecureRandom.hex, :review_id => rid)
end
stop = false
puts 'Starting threads...'
%w{INT TERM}.each do |signal|
trap(signal) do
stop = true
end
end
threads = 10.times.map do
Thread.new do
loop do
break if stop
review = Review.select(:id).order { random{} }.first
review.update(:title => SecureRandom.hex)
DB.transaction(savepoint: true) do
ReviewComment.where(:review_id => review.id).delete
end
DB.transaction(savepoint: true) do
ReviewComment.insert(:review_id => review.id, :comment => SecureRandom.hex)
end
end
end
end
threads.each(&:join)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment