Skip to content

Instantly share code, notes, and snippets.

@seejee
Last active December 11, 2015 18:29
Show Gist options
  • Save seejee/4641906 to your computer and use it in GitHub Desktop.
Save seejee/4641906 to your computer and use it in GitHub Desktop.
Pathway.create uses the wrong shard:
Loading development environment (Rails 3.2.11)
1.9.3-p327 :001 > RequestStore.store[:shard_name] = "enrollments_shard_one"
=> "enrollments_shard_one"
1.9.3-p327 :002 > current_user = User.find(99)
User Load (4.6ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 99]]
=> #<User id: 99, email: "rondo-custadmin@thinkthroughmath.com", encrypted_password: "$2a$10$7enmwB6QbwEjp9Ae6mjC4O3iySBxU3UBEIEeJxzw84hb...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 9, current_sign_in_at: "2013-01-15 16:37:02", last_sign_in_at: "2012-12-21 18:28:36", current_sign_in_ip: "204.16.243.194", last_sign_in_ip: "204.16.243.194", created_at: "2012-08-01 16:44:01", updated_at: "2013-01-15 16:37:02", role: "customer admin", username: nil, first_name: "Ryan", last_name: "Ondo", max_students: nil, nickname: nil, second_language: nil, state_id: nil, invitation_accepted_at: nil, invitation_token: nil, account_sponsor_email: nil, account_sponsor_name: nil, active: true, zip_code: nil, phone_number: nil, street_address: nil, city: nil, ip_address: nil, school_district_provider_id: nil>
1.9.3-p327 :003 > state = State.find_by_code('PA'); grade_level_id = GradeLevel.first.id
State Load (0.6ms) SELECT "states".* FROM "states" WHERE "states"."code" = 'PA' LIMIT 1
GradeLevel Load (0.3ms) SELECT "grade_levels".* FROM "grade_levels" LIMIT 1
=> 1
1.9.3-p327 :004 > pathway = Pathway.create!(name: 'mine', state: state, demo: true, creator: current_user, grade_level_id: grade_level_id)
[enrollments_shard_four] (0.3ms) BEGIN
(0.5ms) SELECT NEXTVAL('pathways_id_seq')
[enrollments_shard_four] SQL (0.8ms) INSERT INTO "pathways" ("allow_test_out", "created_at", "creator_id", "customer_id", "demo", "grade_level_id", "id", "name", "published", "require_pre_quiz", "skip_problem_solving_process", "state_id", "updated_at", "use_placement_test", "use_remediation") VALUES ('t', '2013-01-26 12:11:51.328186', 99, 1, 't', 1, 45234, 'mine', 'f', 'f', 'f', 40, '2013-01-26 12:11:51.328186', 't', 't') RETURNING "id"
[enrollments_shard_four] (0.1ms) COMMIT
=> #<Pathway id: 45234, created_at: "2013-01-26 12:11:51", updated_at: "2013-01-26 12:11:51", name: "mine", grade_level_id: 1, state_id: 40, use_placement_test: true, skip_problem_solving_process: false, allow_test_out: true, require_pre_quiz: false, creator_id: 99, customer_id: 1, use_remediation: true, published: false, demo: true>
But, querying for Lesson first switches to the right shard:
Loading development environment (Rails 3.2.11)
1.9.3-p327 :001 > RequestStore.store[:shard_name] = "enrollments_shard_one"
=> "enrollments_shard_one"
1.9.3-p327 :002 > current_user = User.find(99)
User Load (4.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 99]]
=> #<User id: 99, email: "rondo-custadmin@thinkthroughmath.com", encrypted_password: "$2a$10$7enmwB6QbwEjp9Ae6mjC4O3iySBxU3UBEIEeJxzw84hb...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 9, current_sign_in_at: "2013-01-15 16:37:02", last_sign_in_at: "2012-12-21 18:28:36", current_sign_in_ip: "204.16.243.194", last_sign_in_ip: "204.16.243.194", created_at: "2012-08-01 16:44:01", updated_at: "2013-01-15 16:37:02", role: "customer admin", username: nil, first_name: "Ryan", last_name: "Ondo", max_students: nil, nickname: nil, second_language: nil, state_id: nil, invitation_accepted_at: nil, invitation_token: nil, account_sponsor_email: nil, account_sponsor_name: nil, active: true, zip_code: nil, phone_number: nil, street_address: nil, city: nil, ip_address: nil, school_district_provider_id: nil>
1.9.3-p327 :003 > state = State.find_by_code('PA'); grade_level_id = GradeLevel.first.id
State Load (0.7ms) SELECT "states".* FROM "states" WHERE "states"."code" = 'PA' LIMIT 1
GradeLevel Load (0.4ms) SELECT "grade_levels".* FROM "grade_levels" LIMIT 1
=> 1
1.9.3-p327 :004 > Lesson.first.id
(0.4ms) set application_name = 'apangeas_without_pool';
[enrollments_shard_one] (0.1ms) set application_name = 'apangeas_with_pool_1';
[enrollments_shard_one] Lesson Load (1.2ms) SELECT "lessons".* FROM "lessons" LIMIT 1
=> 20
1.9.3-p327 :005 > pathway = Pathway.create!(name: 'mine', state: state, demo: true, creator: current_user, grade_level_id: grade_level_id)
[enrollments_shard_one] (0.2ms) BEGIN
(0.6ms) SELECT NEXTVAL('pathways_id_seq')
[enrollments_shard_one] SQL (4.9ms) INSERT INTO "pathways" ("allow_test_out", "created_at", "creator_id", "customer_id", "demo", "grade_level_id", "id", "name", "published", "require_pre_quiz", "skip_problem_solving_process", "state_id", "updated_at", "use_placement_test", "use_remediation") VALUES ('t', '2013-01-26 12:13:18.180138', 99, 1, 't', 1, 45235, 'mine', 'f', 'f', 'f', 40, '2013-01-26 12:13:18.180138', 't', 't') RETURNING "id"
[enrollments_shard_one] (0.2ms) COMMIT
=> #<Pathway id: 45235, created_at: "2013-01-26 12:13:18", updated_at: "2013-01-26 12:13:18", name: "mine", grade_level_id: 1, state_id: 40, use_placement_test: true, skip_problem_solving_process: false, allow_test_out: true, require_pre_quiz: false, creator_id: 99, customer_id: 1, use_remediation: true, published: false, demo: true>
Changing Pathway so that all the belongs_to are belongs_to_in_shard:
Loading development environment (Rails 3.2.11)
1.9.3-p327 :001 > RequestStore.store[:shard_name] = "enrollments_shard_one"
=> "enrollments_shard_one"
1.9.3-p327 :002 > current_user = User.find(99)
User Load (4.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 99]]
=> #<User id: 99, email: "rondo-custadmin@thinkthroughmath.com", encrypted_password: "$2a$10$7enmwB6QbwEjp9Ae6mjC4O3iySBxU3UBEIEeJxzw84hb...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 9, current_sign_in_at: "2013-01-15 16:37:02", last_sign_in_at: "2012-12-21 18:28:36", current_sign_in_ip: "204.16.243.194", last_sign_in_ip: "204.16.243.194", created_at: "2012-08-01 16:44:01", updated_at: "2013-01-15 16:37:02", role: "customer admin", username: nil, first_name: "Ryan", last_name: "Ondo", max_students: nil, nickname: nil, second_language: nil, state_id: nil, invitation_accepted_at: nil, invitation_token: nil, account_sponsor_email: nil, account_sponsor_name: nil, active: true, zip_code: nil, phone_number: nil, street_address: nil, city: nil, ip_address: nil, school_district_provider_id: nil>
1.9.3-p327 :003 > state = State.find_by_code('PA'); grade_level_id = GradeLevel.first.id
State Load (0.8ms) SELECT "states".* FROM "states" WHERE "states"."code" = 'PA' LIMIT 1
GradeLevel Load (0.5ms) SELECT "grade_levels".* FROM "grade_levels" LIMIT 1
=> 1
1.9.3-p327 :004 > pathway = Pathway.create!(name: 'mine', state: state, demo: true, creator: current_user, grade_level_id: grade_level_id)
[enrollments_shard_four] (0.3ms) BEGIN
(0.5ms) SELECT NEXTVAL('pathways_id_seq')
(0.2ms) set application_name = 'apangeas_without_pool';
[enrollments_shard_one] (0.1ms) set application_name = 'apangeas_with_pool_1';
[enrollments_shard_one] SQL (1.2ms) INSERT INTO "pathways" ("allow_test_out", "created_at", "creator_id", "customer_id", "demo", "grade_level_id", "id", "name", "published", "require_pre_quiz", "skip_problem_solving_process", "state_id", "updated_at", "use_placement_test", "use_remediation") VALUES ('t', '2013-01-26 12:22:04.859104', 99, 1, 't', 1, 45239, 'mine', 'f', 'f', 'f', 40, '2013-01-26 12:22:04.859104', 't', 't') RETURNING "id"
[enrollments_shard_four] (0.1ms) COMMIT
=> #<Pathway id: 45239, created_at: "2013-01-26 12:22:04", updated_at: "2013-01-26 12:22:04", name: "mine", grade_level_id: 1, state_id: 40, use_placement_test: true, skip_problem_solving_process: false, allow_test_out: true, require_pre_quiz: false, creator_id: 99, customer_id: 1, use_remediation: true, published: false, demo: true>
The shard was never set in RequestStore, but a Pathway can still be created:
Loading development environment (Rails 3.2.11)
1.9.3-p327 :001 > current_user = User.find(6)
User Load (4.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 6]]
=> #<User id: 6, email: "teacher@example.com", encrypted_password: "$2a$10$tCfwHNgdfElvY/7MV49hIev5e3Zj8D7K/dUttQwtQ7gf...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 121, current_sign_in_at: "2013-01-22 22:34:15", last_sign_in_at: "2013-01-14 21:37:26", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "204.16.243.194", created_at: "2012-07-18 18:46:44", updated_at: "2013-01-22 22:34:15", role: "teacher", username: nil, first_name: "Seeded", last_name: "Teacher", max_students: nil, nickname: nil, second_language: nil, state_id: nil, invitation_accepted_at: nil, invitation_token: nil, account_sponsor_email: nil, account_sponsor_name: nil, active: true, zip_code: nil, phone_number: nil, street_address: nil, city: nil, ip_address: nil, school_district_provider_id: nil>
1.9.3-p327 :002 > state = State.find_by_code('PA'); grade_level_id = GradeLevel.first.id
State Load (0.7ms) SELECT "states".* FROM "states" WHERE "states"."code" = 'PA' LIMIT 1
GradeLevel Load (0.4ms) SELECT "grade_levels".* FROM "grade_levels" LIMIT 1
=> 1
1.9.3-p327 :003 > pathway = Pathway.create!(name: 'mine', state: state, demo: true, creator: current_user, grade_level_id: grade_level_id)
[enrollments_shard_four] (0.3ms) BEGIN
(0.4ms) SELECT customer_id FROM "customer_administrations" WHERE "customer_administrations"."user_id" = 6
(0.7ms) SELECT customer_id FROM "districts" INNER JOIN "district_administrations" ON "districts"."id" = "district_administrations"."district_id" WHERE "district_administrations"."user_id" = 6
(0.7ms) SELECT customer_id FROM "schools" INNER JOIN "school_administrations" ON "schools"."id" = "school_administrations"."school_id" WHERE "school_administrations"."user_id" = 6
(1.1ms) SELECT customer_id FROM "schools" INNER JOIN "classrooms" ON "schools"."id" = "classrooms"."school_id" INNER JOIN "classroom_teachings" ON "classrooms"."id" = "classroom_teachings"."classroom_id" WHERE "classroom_teachings"."user_id" = 6
(0.6ms) SELECT customer_id FROM "schools" INNER JOIN "school_assignments" ON "schools"."id" = "school_assignments"."school_id" WHERE "school_assignments"."user_id" = 6
(0.4ms) SELECT NEXTVAL('pathways_id_seq')
[enrollments_shard_four] SQL (0.8ms) INSERT INTO "pathways" ("allow_test_out", "created_at", "creator_id", "customer_id", "demo", "grade_level_id", "id", "name", "published", "require_pre_quiz", "skip_problem_solving_process", "state_id", "updated_at", "use_placement_test", "use_remediation") VALUES ('t', '2013-01-26 12:54:24.720507', 6, 1, 't', 1, 45244, 'mine', 'f', 'f', 'f', 40, '2013-01-26 12:54:24.720507', 't', 't') RETURNING "id"
[enrollments_shard_four] (0.2ms) COMMIT
=> #<Pathway id: 45244, created_at: "2013-01-26 12:54:24", updated_at: "2013-01-26 12:54:24", name: "mine", grade_level_id: 1, state_id: 40, use_placement_test: true, skip_problem_solving_process: false, allow_test_out: true, require_pre_quiz: false, creator_id: 6, customer_id: 1, use_remediation: true, published: false, demo: true>
1.9.3-p327 :004 >
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment