なるようになるブログ

読書感想文かrailsについてかrubyについてか

rails commit log流し読み(2017/04/13)

2017/04/13分のコミットです。

CHANGELOGへの追加はありませんでした。


Merge pull request #28712 from kamipo/tweaks_28678

activerecord/lib/active_record/schema_dumper.rbの修正です。

schema.rbの先頭に表示するschemaのバージョンをフォーマットした値を表示するよう修正した、Merge pull request #28678 from hedgesky/use_formatted_number_as_schema_versionのフォローアップとして、

  • formatted_versionメソッドのコメントの内容が実際の結果と違っていたのを修正
  • version Stringの生成処理をメソッドに切り出し
  • 重複していたガード処理を削除

を行っています。


Merge pull request #28726 from matthewd/transaction-locking

Active Recordの修正です。

DBトランザクション処理全体に対して、スレッドのロック処理を追加しています。

一部diff。

      def begin_transaction(options = {})
-        run_commit_callbacks = !current_transaction.joinable?
-        transaction =
-          if @stack.empty?
-            RealTransaction.new(@connection, options, run_commit_callbacks: run_commit_callbacks)
-          else
-            SavepointTransaction.new(@connection, "active_record_#{@stack.size}", options,
-                                     run_commit_callbacks: run_commit_callbacks)
-          end
+        @connection.lock.synchronize do
+          run_commit_callbacks = !current_transaction.joinable?
+          transaction =
+            if @stack.empty?
+              RealTransaction.new(@connection, options, run_commit_callbacks: run_commit_callbacks)
+            else
+              SavepointTransaction.new(@connection, "active_record_#{@stack.size}", options,
+                                       run_commit_callbacks: run_commit_callbacks)
+            end

-        @stack.push(transaction)
-        transaction
+          @stack.push(transaction)
+          transaction
+        end
       end

(@connection.lockはMonitorクラスのインスタンス)

Merge pull request #28083 from eileencodes/ensure-test-threads-shared-db-connで、テスト実行時に異なるスレッドで同じDB connectionを使うようにしたになったのですが、その影響でデッドロックが発生する場合がある為、スレッドロックを追加したようです。


:scissors:

各ファイルの先頭から不要な空行を削除しています。