aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Merge pull request #31035 from BrentWheeldon/bmw-db-load-deadlockMatthew Draper2017-11-183-1/+74
|\ | | | | Prevent deadlocks with load interlock and DB lock.
| * Prevent deadlocks with load interlock and DB lock.Brent Wheeldon2017-11-093-1/+74
| | | | | | | | | | | | | | | | | | | | This fixes an issue where competing threads deadlock each other. - Thread A holds the load interlock but is blocked on getting the DB lock - Thread B holds the DB lock but is blocked on getting the load interlock (for example when there is a `Model.transaction` block that needs to autoload) This solution allows for dependency loading in other threads while a thread is waiting to acquire the DB lock. Fixes #31019
* | Merge pull request #28742 from quixoten/stack_conn_poolMatthew Draper2017-11-172-6/+11
|\ \ | | | | | | Switch to LIFO for the connection pool
| * | Fix typosDevin Christensen2017-04-132-2/+2
| | |
| * | Improve documentation and add testDevin Christensen2017-04-132-7/+12
| | |
| * | Switch to LIFO for the connection poolDevin Christensen2017-04-121-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | Using a FIFO for the connection pool can lead to issues when there are upstream components (pgbouncer, haproxy, etc.) that terminate connections that are idle after a period of time. Switching to a LIFO reduces the probability that a thread will checkout a connection that is about to be closed by an idle timeout in an upstream component.
* | | Merge pull request #28869 from eugeneius/query_cache_all_poolsMatthew Draper2017-11-172-6/+18
|\ \ \ | | | | | | | | Enable query cache on all connection pools
| * | | Enable query cache on all connection poolsEugene Kenny2017-04-242-6/+18
| | | | | | | | | | | | | | | | | | | | | | | | Since the query cache no longer eagerly checks out a connection, we can enable it on all connection pools at the start of every request, and it will only take effect for requests that actually use those pools.
* | | | Merge pull request #30100 from kirs/doc-reloaderMatthew Draper2017-11-171-0/+3
|\ \ \ \ | | | | | | | | | | Document public hooks in AS::Reloader
| * | | | Document public hooks in AS::Reloader [ci skip]Kir Shatrov2017-08-141-0/+3
| | | | |
* | | | | Move back to resque-scheduler mainline now that ↵Jeremy Daer2017-11-162-12/+11
| | | | | | | | | | | | | | | | | | | | https://github.com/resque/resque-scheduler/pull/620 is merged
* | | | | Merge pull request #31169 from ydakuka/patch-1Ryuta Kamizono2017-11-171-2/+2
|\ \ \ \ \ | | | | | | | | | | | | Fix links [ci skip]
| * | | | | Fix links [ci skip]Yauheni Dakuka2017-11-161-2/+2
|/ / / / /
* | | | | Avoid creating extra `relation` and `build_arel` in `_create_record` and ↵Ryuta Kamizono2017-11-172-63/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `_update_record` (#29999) Currently `_create_record` and `_update_record` in `Persistence` are creating extra `unscoped` and calling `build_arel` in the relation. But `compile_insert` and `compile_update` can be done without those expensive operation for `SelectManager` creation. So I moved the implementation to `Persistence` to avoid creating extra relation and refactored to avoid calling `build_arel`. https://gist.github.com/kamipo/8ed73d760112cfa5f6263c9413633419 Before: ``` Warming up -------------------------------------- _update_record 150.000 i/100ms Calculating ------------------------------------- _update_record 1.548k (±12.3%) i/s - 7.650k in 5.042603s ``` After: ``` Warming up -------------------------------------- _update_record 201.000 i/100ms Calculating ------------------------------------- _update_record 2.002k (±12.8%) i/s - 9.849k in 5.027681s ``` 30% faster for STI classes.
* | | | | Merge pull request #27494 from matthewd/executor-guideMatthew Draper2017-11-172-0/+329
|\ \ \ \ \ | | | | | | | | | | | | Start on a guide for the Executor & Load Interlock
| * | | | | Add more detail on how the framework is actually configured by defaultMatthew Draper2017-11-171-5/+67
| | | | | |
| * | | | | Start on a guide for the Executor & Load InterlockMatthew Draper2017-11-162-0/+267
|/ / / / /
* | | | | Merge pull request #31166 from freeletics/fix-exampleKasper Timm Hansen2017-11-161-1/+1
|\ \ \ \ \ | | | | | | | | | | | | Fixed example of `Rails.application.encrypted` method usage
| * | | | | Fixed example of `Rails.application.encrypted` method usageWojciech Wnętrzak2017-11-161-1/+1
|/ / / / / | | | | | | | | | | | | | | | [ci skip]
* | | | | Add master key to `gitignore` on `rails new`yuuji.yaginuma2017-11-164-1/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We generate master key on `rails new`. Therefore, if do not add master key to `.gitginore` on `rails new`as well, there is a possibility that the master key will be committed accidentally.
* | | | | Bump resque-scheduler ahead of a new gem releaseJeremy Daer2017-11-151-2/+2
| | | | |
* | | | | Pass options onto key file generator.Kasper Timm Hansen2017-11-151-1/+1
| | | | |
* | | | | Merge branch 'freeletics-manage-multiple-credential-files'Kasper Timm Hansen2017-11-159-41/+337
|\ \ \ \ \ | | | | | | | | | | | | | | | | | | Fixes https://github.com/rails/rails/pull/30940
| * | | | | Add CLI to manage encrypted files/configs.Wojciech Wnętrzak2017-11-1510-50/+347
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | To edit/show encrypted file: ``` bin/rails encrypted:edit config/staging_tokens.yml.enc bin/rails encrypted:edit config/staging_tokens.yml.enc --key config/staging.key bin/rails encrypted:show config/staging_tokens.yml.enc ``` Also provides a backing Rails.application.encrypted API for Ruby access: ```ruby Rails.application.encrypted("config/staging_tokens.yml.enc").read Rails.application.encrypted("config/staging_tokens.yml.enc").config Rails.application.encrypted("config/staging_tokens.yml.enc", key: "config/staging.key") ```
* | | | | | Go through a single credentials instance.Kasper Timm Hansen2017-11-151-9/+10
| | | | | | | | | | | | | | | | | | | | | | | | Instead of stashing the values in constants.
* | | | | | Merge pull request #31160 from yahonda/ignored_column_case_insensitiveRafael França2017-11-151-1/+1
|\ \ \ \ \ \ | | | | | | | | | | | | | | Allow test_ignored_columns_not_included_in_SELECT column names case insensitive
| * | | | | | Allow test_ignored_columns_not_included_in_SELECT column names caseYasuo Honda2017-11-151-1/+1
|/ / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | insensitive i.e. Oracle database identifier is UPPERCASE unlike other databases. ```ruby (byebug) query = Developer.all.to_sql "SELECT \"DEVELOPERS\".\"ID\", \"DEVELOPERS\".\"NAME\", \"DEVELOPERS\".\"SALARY\", \"DEVELOPERS\".\"FIRM_ID\", \"DEVELOPERS\".\"MENTOR_ID\", \"DEVELOPERS\".\"CREATED_AT\", \"DEVELOPERS\".\"UPDATED_AT\", \"DEVELOPERS\".\"CREATED_ON\", \"DEVELOPERS\".\"UPDATED_ON\" FROM \"DEVELOPERS\"" ```
* | | | | | Merge pull request #31128 from rails/handle-ambigious-timesAndrew White2017-11-154-1/+66
|\ \ \ \ \ \ | | | | | | | | | | | | | | Handle `TZInfo::AmbiguousTime` errors
| * | | | | | Handle `TZInfo::AmbiguousTime` errorsAndrew White2017-11-154-1/+66
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Make `ActiveSupport::TimeWithZone` match Ruby's handling of ambiguous times by choosing the later period, e.g. Ruby: ``` ENV["TZ"] = "Europe/Moscow" Time.local(2014, 10, 26, 1, 0, 0) # => 2014-10-26 01:00:00 +0300 ``` Before: ``` >> "2014-10-26 01:00:00".in_time_zone("Moscow") TZInfo::AmbiguousTime: 26/10/2014 01:00 is an ambiguous local time. ``` After: ``` >> "2014-10-26 01:00:00".in_time_zone("Moscow") => Sun, 26 Oct 2014 01:00:00 MSK +03:00 ``` Fixes #17395.
* | | | | | | Merge pull request #29776 from mrj/fix-idlw-timezoneMatthew Draper2017-11-151-1/+1
|\ \ \ \ \ \ \ | |/ / / / / / |/| | | | | | Fix the "International Date Line West" timezone
| * | | | | | Change the "International Date Line West" TZInfo timezone from ↵Mark James2017-07-131-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | "Pacific/Midway" (-11) to "Etc/GMT+12" (-12).
* | | | | | | These strings should already be frozen where ruby accepts the magic-commentAkira Matsuda2017-11-151-2/+2
| | | | | | |
* | | | | | | Merge pull request #31156 from kwstannard/patch-1Rafael França2017-11-141-1/+1
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | Update configuring.md
| * | | | | | | Update configuring.mdKelly Stannard2017-11-141-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | It was brought to my attention that the Rails guide suggests using filenames to ensure code load order, so I thought I would suggest a better alternative.
* | | | | | | | Use released arelyuuji.yaginuma2017-11-156-6/+0
|/ / / / / / / | | | | | | | | | | | | | | | | | | | | | Related to 2e0fe5928f0d08f85b4796c85bd0b39f6be09079
* | | | | | | Fix asset url examples [ci skip]Ryuta Kamizono2017-11-151-6/+6
| | | | | | |
* | | | | | | Fix CI failure due to invalid `up_only` for MySQLRyuta Kamizono2017-11-151-5/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `oldie = 'true'` to `tinyint(1)` column is invalid value for MySQL: ``` Mysql2::Error: Incorrect integer value: 'true' for column 'oldie' at row 1: update horses set oldie = 'true' ```
* | | | | | | Fix typo s/only_up/up_only/ [ci skip]Ryuta Kamizono2017-11-151-1/+1
| | | | | | |
* | | | | | | Merge pull request #30004 from npenzin/patch-1Yuji Yaginuma2017-11-152-2/+3
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | Update plugin_generator.rb
| * | | | | | | Ensure plugin_generator adds to new line in GemfileNikita Penzin2017-11-142-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ensure plugin_generator adds to new line in Gemfile, even if the Gemfile does not end with an empty line. [Lisa Ugray, Nikita Penzin]
* | | | | | | | Merge pull request #31155 from bogdanvlviv/fix-activesupport-changelogRafael França2017-11-141-27/+29
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | Fix activesupport/CHANGELOG.md [ci skip]
| * | | | | | | | Fix activesupport/CHANGELOG.md [ci skip]bogdanvlviv2017-11-141-27/+29
| | | | | | | | |
* | | | | | | | | Merge pull request #31154 from ↵Rafael França2017-11-141-1/+1
|\ \ \ \ \ \ \ \ \ | |/ / / / / / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | bogdanvlviv/fix-migration-version-in-doc-of-up_only Fix migration version in doc of #up_only
| * | | | | | | | Fix migration version in doc of #up_onlybogdanvlviv2017-11-141-1/+1
|/ / / / / / / /
* | | | | | | | Use released sass-railsRafael Mendonça França2017-11-142-15/+9
| | | | | | | |
* | | | | | | | Use released arelRafael Mendonça França2017-11-144-17/+9
| | | | | | | |
* | | | | | | | Merge pull request #30963 from ↵Rafael França2017-11-141-1/+14
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | q-centrix/performance-improvements-add_method_to_attributes Performance improvements for add_method_to_attributes!
| * | | | | | | | Performance improvements for add_method_to_attributes!Dillon Welch2017-11-071-1/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Prevents two string allocations per method call for common REST verbs plus a ~1.5x speedup for :get in particular ```ruby begin require "bundler/inline" rescue LoadError => e $stderr.puts "Bundler version 1.10 or later is required. Please update your Bundler" raise e end gemfile(true) do source "https://rubygems.org" gem "benchmark-ips" gem "rails" end def allocate_count GC.disable before = ObjectSpace.count_objects yield after = ObjectSpace.count_objects after.each { |k,v| after[k] = v - before[k] } after[:T_HASH] -= 1 # probe effect - we created the before hash. GC.enable result = after.reject { |k,v| v == 0 } GC.start result end @html_options = {} def master_version if @method && @method.to_s.downcase != "get" && @html_options["rel".freeze] !~ /nofollow/ @html_options["rel".freeze] = "#{@html_options["rel".freeze]} nofollow".lstrip end @html_options["data-method".freeze] = @method end def fast_version if method_not_get_method?(@method) && @html_options["rel".freeze] !~ /nofollow/ @html_options["rel".freeze] = "#{@html_options["rel".freeze]} nofollow".lstrip end @html_options["data-method".freeze] = @method end STRINGIFIED_COMMON_METHODS = { get: 'get', delete: 'delete', patch: 'patch', post: 'post', put: 'put', }.freeze def method_not_get_method?(method) return false unless method (STRINGIFIED_COMMON_METHODS[method] || method.to_s.downcase) != 'get' end puts 'get' @method = :get puts "master_version" puts allocate_count { 1000.times { master_version } } puts "fast_version" puts allocate_count { 1000.times { fast_version } } Benchmark.ips do |x| x.report("master_version") { master_version } x.report("fast_version") { fast_version } x.compare! end puts 'delete' @method = :delete puts "master_version" puts allocate_count { 1000.times { master_version } } puts "fast_version" puts allocate_count { 1000.times { fast_version } } Benchmark.ips do |x| x.report("master_version") { master_version } x.report("fast_version") { fast_version } x.compare! end ``` ``` get master_version {:FREE=>-1819, :T_STRING=>2052} fast_version {:FREE=>-1} Warming up -------------------------------------- master_version 140.839k i/100ms fast_version 175.639k i/100ms Calculating ------------------------------------- master_version 2.683M (± 7.1%) i/s - 13.380M in 5.013447s fast_version 3.988M (±10.1%) i/s - 19.847M in 5.039580s Comparison: fast_version: 3988340.3 i/s master_version: 2683336.2 i/s - 1.49x slower delete master_version {:FREE=>-5003, :T_STRING=>3003, :T_MATCH=>999, :T_IMEMO=>1000} fast_version {:FREE=>-3002, :T_STRING=>1001, :T_MATCH=>1000, :T_IMEMO=>1000} Warming up -------------------------------------- master_version 47.221k i/100ms fast_version 44.153k i/100ms Calculating ------------------------------------- master_version 597.881k (±11.4%) i/s - 2.975M in 5.047200s fast_version 686.014k (±11.6%) i/s - 3.400M in 5.036564s Comparison: fast_version: 686014.5 i/s master_version: 597881.4 i/s - same-ish: difference falls within error ```
* | | | | | | | | Add a #populate method to migrations (#31082)Rich2017-11-143-0/+48
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Add a #populate method to migrations * Address rubocop issues * Rename to #up_only and use #execute in the examples intead of the model * Update CHANGELOG [Rich Daley & Rafael Mendonça França]
* | | | | | | | | Merge pull request #31153 from koic/ci_against_jruby_9_1_14_0Ryuta Kamizono2017-11-151-3/+3
|\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | CI against JRuby 9.1.14.0