Commit ea91553
Dmitry Lenev
Implement new type-of-operation-aware metadata locks.
Add a wait-for graph based deadlock detector to the
MDL subsystem.
Fixes bug #46272 "MySQL 5.4.4, new MDL: unnecessary deadlock" and
bug #37346 "innodb does not detect deadlock between update and
alter table".
The first bug manifested itself as an unwarranted abort of a
transaction with ER_LOCK_DEADLOCK error by a concurrent ALTER
statement, when this transaction tried to repeat use of a
table, which it has already used in a similar fashion before
ALTER started.
The second bug showed up as a deadlock between table-level
locks and InnoDB row locks, which was "detected" only after
innodb_lock_wait_timeout timeout.
A transaction would start using the table and modify a few
rows.
Then ALTER TABLE would come in, and start copying rows
into a temporary table. Eventually it would stumble on
the modified records and get blocked on a row lock.
The first transaction would try to do more updates, and get
blocked on thr_lock.c lock.
This situation of circular wait would only get resolved
by a timeout.
Both these bugs stemmed from inadequate solutions to the
problem of deadlocks occurring between different
locking subsystems.
In the first case we tried to avoid deadlocks between metadata
locking and table-level locking subsystems, when upgrading shared
metadata lock to exclusive one.
Transactions holding the shared lock on the table and waiting for
some table-level lock used to be aborted too aggressively.
We also allowed ALTER TABLE to start in presence of transactions
that modify the subject table. ALTER TABLE acquires
TL_WRITE_ALLOW_READ lock at start, and that block all writes
against the table (naturally, we don't want any writes to be lost
when switching the old and the new table). TL_WRITE_ALLOW_READ
lock, in turn, would block the started transaction on thr_lock.c
lock, should they do more updates. This, again, lead to the need
to abort such transactions.
The second bug occurred simply because we didn't have any
mechanism to detect deadlocks between the table-level locks
in thr_lock.c and row-level locks in InnoDB, other than
innodb_lock_wait_timeout.
This patch solves both these problems by moving lock conflicts
which are causing these deadlocks into the metadata locking
subsystem, thus making it possible to avoid or detect such
deadlocks inside MDL.
To do this we introduce new type-of-operation-aware metadata
locks, which allow MDL subsystem to know not only the fact that
transaction has used or is going to use some object but also what
kind of operation it has carried out or going to carry out on the
object.
This, along with the addition of a special kind of upgradable
metadata lock, allows ALTER TABLE to wait until all
transactions which has updated the table to go away.
This solves the second issue.
Another special type of upgradable metadata lock is acquired
by LOCK TABLE WRITE. This second lock type allows to solve the
first issue, since abortion of table-level locks in event of
DDL under LOCK TABLES becomes also unnecessary.
Below follows the list of incompatible changes introduced by
this patch:
- From now on, ALTER TABLE and CREATE/DROP TRIGGER SQL (i.e. those
statements that acquire TL_WRITE_ALLOW_READ lock)
wait for all transactions which has *updated* the table to
complete.
- From now on, LOCK TABLES ... WRITE, REPAIR/OPTIMIZE TABLE
(i.e. all statements which acquire TL_WRITE table-level lock) wait
for all transaction which *updated or read* from the table
to complete.
As a consequence, innodb_table_locks=0 option no longer applies
to LOCK TABLES ... WRITE.
- DROP DATABASE, DROP TABLE, RENAME TABLE no longer abort
statements or transactions which use tables being dropped or
renamed, and instead wait for these transactions to complete.
- Since LOCK TABLES WRITE now takes a special metadata lock,
not compatible with with reads or writes against the subject table
and transaction-wide, thr_lock.c deadlock avoidance algorithm
that used to ensure absence of deadlocks between LOCK TABLES
WRITE and other statements is no longer sufficient, even for
MyISAM. The wait-for graph based deadlock detector of MDL
subsystem may sometimes be necessary and is involved. This may
lead to ER_LOCK_DEADLOCK error produced for multi-statement
transactions even if these only use MyISAM:
session 1: session 2:
begin;
update t1 ... lock table t2 write, t1 write;
-- gets a lock on t2, blocks on t1
update t2 ...
(ER_LOCK_DEADLOCK)
- Finally, support of LOW_PRIORITY option for LOCK TABLES ... WRITE
was abandoned.
LOCK TABLE ... LOW_PRIORITY WRITE from now on has the same
priority as the usual LOCK TABLE ... WRITE.
SELECT HIGH PRIORITY no longer trumps LOCK TABLE ... WRITE in
the wait queue.
- We do not take upgradable metadata locks on implicitly
locked tables. So if one has, say, a view v1 that uses
table t1, and issues:
LOCK TABLE v1 WRITE;
FLUSH TABLE t1; -- (or just 'FLUSH TABLES'),
an error is produced.
In order to be able to perform DDL on a table under LOCK TABLES,
the table must be locked explicitly in the LOCK TABLES list.
--BZR--
revision-id: [email protected]
property-branch-nick: mysql-next-4284-nl-push
property-file-info: ld7:file_id65:sp1f-handler.test-20010406221832-gfvg6n4rp4py6lunazzembziuu5qxvi57:message601:Adjusted test case to trigger an execution path on which bug 41110
property-file-info: "crash with handler command when used concurrently with alter
property-file-info: table" and bug 41112 "crash in mysql_ha_close_table/get_lock_data
property-file-info: with alter table" were originally discovered. Left old test case
property-file-info: which no longer triggers this execution path for the sake of
property-file-info: coverage.
property-file-info: Added test coverage for HANDLER SQL statements and type-aware
property-file-info: metadata locks.
property-file-info: Added a test for the global shared lock and HANDLER SQL.
property-file-info: Updated tests to take into account that the old simple deadlock
property-file-info: detection heuristics was replaced with a graph-based deadlock
property-file-info: detector.4:path30:mysql-test/include/handler.inced7:file_id51:debug_sync.result-20090925124518-2m0htks1bbp5jaf5-27:message38:Updated results (see debug_sync.test).4:path30:mysql-test/r/debug_sync.resulted7:file_id73:sp1f-innodb_handler.resul-20020821205505-jopsqbjuqwwxb5hvf3r2wn37vobunxru7:message39:Updated results (see handler.inc test).4:path34:mysql-test/r/handler_innodb.resulted7:file_id67:sp1f-handler.result-20010406221832-ybo3cgjo6qapqc6776ivjpdngwmk6plu7:message39:Updated results (see handler.inc test).4:path34:mysql-test/r/handler_myisam.resulted7:file_id70:sp1f-innodblock.result-20040429134230-i3dq3yx3lvsutqlypaqgv45wtanr6s6r7:message39:Updated results (see innodb-lock.test).4:path31:mysql-test/r/innodb-lock.resulted7:file_id54:innodb_mysql_lock.re-20090708120319-55a6h1vcofl3qyco-17:message45:Updated results (see innodb_mysql_lock.test).4:path37:mysql-test/r/innodb_mysql_lock.resulted7:file_id64:sp1f-lock.result-20010327100548-v7vnhudpyvpujzoumsnowmqxa26ojsji7:message32:Updated results (see lock.test).4:path24:mysql-test/r/lock.resulted7:file_id70:sp1f-lock_multi.result-20011008015806-j56mw7cxenwk7wmwzgciunzotxn2oopp7:message38:Updated results (see lock_multi.test).4:path30:mysql-test/r/lock_multi.resulted7:file_id50:lock_sync.result-20091026185321-a3yhtolup4w2s1qf-17:message37:Updated results (see lock_sync.test).4:path29:mysql-test/r/lock_sync.resulted7:file_id49:mdl_sync.result-20090302184602-k11i6o8vh2s5umno-17:message36:Updated results (see mdl_sync.test).4:path28:mysql-test/r/mdl_sync.resulted7:file_id69:sp1f-spthreads.result-20040806161110-wbricurkbmq374o7blz3jumgdb67bqwu7:message133:SHOW PROCESSLIST output has changed due to the fact that waiting
property-file-info: for LOCK TABLES WRITE now happens within metadata locking
property-file-info: subsystem.4:path30:mysql-test/r/sp-threads.resulted7:file_id54:truncate_coverage.re-20090721163847-yburwvu68nh9l5ds-17:message45:Updated results (see truncate_coverage.test).4:path37:mysql-test/r/truncate_coverage.resulted7:file_id72:sp1f-processlist_val.inc-20070815194641-3hfsmyh3jr2gjhvgms52iydpkamdbnoz7:message140:SELECT FROM I_S.PROCESSLIST output has changed due to fact that
property-file-info: waiting for LOCK TABLES WRITE now happens within metadata locking
property-file-info: subsystem.4:path53:mysql-test/suite/funcs_1/datadict/processlist_val.inced7:file_id73:sp1f-a_processlist_val_no-20070815194641-puz2vi6caqirb4nqzumushorqyuniraq7:message140:SELECT FROM I_S.PROCESSLIST output has changed due to fact that
property-file-info: waiting for LOCK TABLES WRITE now happens within metadata locking
property-file-info: subsystem.4:path57:mysql-test/suite/funcs_1/r/processlist_val_no_prot.resulted7:file_id64:sp1f-rpl_sp.test-20050505122048-sfpoerdz7zbb5decjlbpxcme6ew43qcp7:message45:Updated to a new SHOW PROCESSLIST state name.4:path34:mysql-test/suite/rpl/t/rpl_sp.tested7:file_id49:debug_sync.test-20090925124518-2m0htks1bbp5jaf5-47:message205:Use LOCK TABLES READ instead of LOCK TABLES WRITE as the latter
property-file-info: no longer allows to trigger execution path involving waiting on
property-file-info: thr_lock.c lock and therefore reaching debug sync-point covered
property-file-info: by this test.4:path28:mysql-test/t/debug_sync.tested7:file_id68:sp1f-innodblock.test-20040429134230-ml3z54sjjeakf7rmih6oauxeqq67337r7:message159:Adjusted test case to the fact that innodb_table_locks=0 option is
property-file-info: no longer supported, since LOCK TABLES WRITE handles all its
property-file-info: conflicts within MDL subsystem.4:path29:mysql-test/t/innodb-lock.tested7:file_id54:innodb_mysql_lock.te-20090708120331-rlixkpo3dev1mlo7-17:message91:Added test for bug #37346 "innodb does not detect deadlock between
property-file-info: update and alter table".4:path35:mysql-test/t/innodb_mysql_lock.tested7:file_id62:sp1f-lock.test-20010327100548-76bepwa6zhtmrjdgc6vpqv36ggjvnp3t7:message171:Added test coverage which checks the fact that we no longer support
property-file-info: DDL under LOCK TABLES on tables which were locked implicitly.
property-file-info: Adjusted existing test cases accordingly.4:path22:mysql-test/t/lock.tested7:file_id68:sp1f-lock_multi.test-20011008015806-67rpwlsigaymaevma2l42r5edbtot3fp7:message201:Added test for bug #46272 "MySQL 5.4.4, new MDL: unnecessary
property-file-info: deadlock". Adjusted other test cases to take into account the
property-file-info: fact that waiting for LOCK TABLES ... WRITE now happens within MDL
property-file-info: subsystem.4:path28:mysql-test/t/lock_multi.tested7:file_id48:lock_sync.test-20091026185315-9p2a80gl4ah39te2-17:message225:Since LOCK TABLES ... WRITE now takes SNRW metadata lock for
property-file-info: tables locked explicitly we have to implicitly lock InnoDB tables
property-file-info: (through view) to trigger the table-level lock conflict between
property-file-info: TL_WRITE and TL_WRITE_ALLOW_WRITE.4:path27:mysql-test/t/lock_sync.tested7:file_id47:mdl_sync.test-20090302184558-2nfnp7wh7pj6ra6e-17:message244:Added basic test coverage for type-of-operation-aware metadata
property-file-info: locks. Also covered with tests some use cases involving HANDLER
property-file-info: statements in which a deadlock could arise.
property-file-info: Adjusted existing tests to take type-of-operation-aware MDL into
property-file-info: account.4:path26:mysql-test/t/mdl_sync.tested7:file_id70:sp1f-multi_update.test-20010611232825-wkkm3vvyawipiowjzwqmkqegx6wd6aiw7:message44:Update to a new SHOW PROCESSLIST state name.4:path30:mysql-test/t/multi_update.tested7:file_id54:truncate_coverage.te-20090721163847-yburwvu68nh9l5ds-27:message172:Adjusted test case after making LOCK TABLES WRITE to wait until
property-file-info: transactions that use the table to be locked are completed.
property-file-info: Updated to the changed name of DEBUG_SYNC point.4:path35:mysql-test/t/truncate_coverage.tested7:file_id63:sp1f-handler.cc-19700101030959-ta6zfrlbxzucylciyro3musjsdpocrdh7:message59:Global read lock functionality has been
property-file-info: moved into a class.4:path14:sql/handler.cced7:file_id60:sp1f-lock.cc-19700101030959-lzrt5tyolna3dcihuenjh7nlicr7llt77:message96:Global read lock functionality has been
property-file-info: moved into a class.
property-file-info: Updated code to use the new MDL API.4:path11:sql/lock.cced7:file_id40:mdl.cc-20080523121737-j62pi0m62eaw1hq6-17:message1601:Introduced new type-of-operation aware metadata locks.
property-file-info: To do this:
property-file-info: - Changed MDL_lock to use one list for waiting requests and one
property-file-info: list for granted requests. For each list, added a bitmap
property-file-info: that holds information what lock types a list contains.
property-file-info: Added a helper class MDL_lock::List to manipulate with granted
property-file-info: and waited lists while keeping the bitmaps in sync
property-file-info: with list contents.
property-file-info: - Changed lock-compatibility functions to use bitmaps that
property-file-info: define compatibility.
property-file-info: - Introduced a graph based deadlock detector inspired by
property-file-info: waiting_threads.c from Maria implementation.
property-file-info: - Now that we have a deadlock detector, and no longer have
property-file-info: a global lock to protect individual lock objects, but rather
property-file-info: use an rw lock per object, removed redundant code for upgrade,
property-file-info: and the global read lock. Changed the MDL API to
property-file-info: no longer require the caller to acquire the global
property-file-info: intention exclusive lock by means of a separate method.
property-file-info: Removed a few more methods that became redundant.
property-file-info: - Removed deadlock detection heuristic, it has been made
property-file-info: obsolete by the deadlock detector.
property-file-info: - With operation-type-aware metadata locks, MDL subsystem has
property-file-info: become aware of potential conflicts between DDL and open
property-file-info: transactions. This made it possible to remove calls to
property-file-info: mysql_abort_transactions_with_shared_lock() from acquisition
property-file-info: paths for exclusive lock and lock upgrade. Now we can simply
property-file-info: wait for these transactions to complete without fear of
property-file-info: deadlock. Function mysql_lock_abort() has also become
property-file-info: unnecessary for all conflicting cases except when a DDL
property-file-info: conflicts with a connection that has an open HANDLER.4:path10:sql/mdl.cced7:file_id39:mdl.h-20080523121748-o4y2wcq3maotb9do-17:message301:Introduced new type-of-operation aware metadata locks.
property-file-info: Introduced a graph based deadlock detector and supporting
property-file-info: methods.
property-file-info: Added comments.
property-file-info: God rid of redundant API calls.
property-file-info: Renamed m_lt_or_ha_sentinel to m_trans_sentinel,
property-file-info: since now it guards the global read lock as well as
property-file-info: LOCK TABLES and HANDLER locks.4:path9:sql/mdl.hed7:file_id65:sp1f-mysql_priv.h-19700101030959-4fl65tqpop5zfgxaxkqotu2fa2ree5ci7:message334:Moved the global read lock functionality into a
property-file-info: class.
property-file-info: Added MYSQL_OPEN_FORCE_SHARED_MDL flag which forces
property-file-info: open_tables() to take MDL_SHARED on tables instead of
property-file-info: metadata locks specified in the parser. We use this to
property-file-info: allow PREPARE run concurrently in presence of
property-file-info: LOCK TABLES ... WRITE.
property-file-info: Added signature for find_table_for_mdl_ugprade().4:path16:sql/mysql_priv.hed7:file_id63:sp1f-set_var.cc-20020723153119-nwbpg2pwpz55pfw7yfzaxt7hsszzy7y37:message59:Global read lock functionality has been
property-file-info: moved into a class.4:path14:sql/set_var.cced7:file_id63:sp1f-sp_head.cc-20021208185920-jtgc5wvyqdnu2gvcdus3gazrfhxbofxd7:message171:When creating TABLE_LIST elements for prelocking or
property-file-info: system tables set the type of request for metadata
property-file-info: lock according to the operation that will be performed
property-file-info: on the table.4:path14:sql/sp_head.cced7:file_id64:sp1f-sql_base.cc-19700101030959-w7tul2gb2n4jzayjwlslj3ybmf3uhk6a7:message988:- Updated code to use the new MDL API.
property-file-info: - In order to avoid locks starvation we take upgradable
property-file-info: locks all at once. As result implicitly locked tables no
property-file-info: longer get an upgradable lock. Consequently DDL and FLUSH
property-file-info: TABLES for such tables is prohibited.
property-file-info: find_write_locked_table() was replaced by
property-file-info: find_table_for_mdl_upgrade() function.
property-file-info: open_table() was adjusted to return TABLE instance with
property-file-info: upgradable ticket when necessary.
property-file-info: - We no longer wait for all locks on OT_WAIT back off
property-file-info: action -- only on the lock that caused the wait
property-file-info: conflict. Moreover, now we distinguish cases when we
property-file-info: have to wait due to conflict in MDL and old version
property-file-info: of table in TDC.
property-file-info: - Upate mysql_notify_threads_having_share_locks()
property-file-info: to only abort thr_lock.c waits of threads that
property-file-info: have open HANDLERs, since lock conflicts with only
property-file-info: these threads now can lead to deadlocks not detectable
property-file-info: by the MDL deadlock detector.
property-file-info: - Remove mysql_abort_transactions_with_shared_locks()
property-file-info: which is no longer needed.4:path15:sql/sql_base.cced7:file_id65:sp1f-sql_class.cc-19700101030959-rpotnweaff2pikkozh3butrf7mv3oero7:message114:Global read lock functionality has been moved into a class.
property-file-info: Re-arranged code in THD::cleanup() to simplify assert.4:path16:sql/sql_class.cced7:file_id64:sp1f-sql_class.h-19700101030959-jnqnbrjyqsvgncsibnumsmg3lyi7pa5s7:message190:Introduced class to incapsulate global read lock
property-file-info: functionality.
property-file-info: Now sentinel in MDL subsystem guards the global read lock
property-file-info: as well as LOCK TABLES and HANDLER locks. Adjusted code
property-file-info: accordingly.4:path15:sql/sql_class.hed7:file_id62:sp1f-sql_db.cc-19700101030959-hyw6zjuisjyda5cj5746a2zzuzz5yibr7:message59:Global read lock functionality has been moved into a class.4:path13:sql/sql_db.cced7:file_id66:sp1f-sql_delete.cc-19700101030959-ch2a6r6ushvc2vfwxt7ehcjuplelwthr7:message200:We no longer acquire upgradable metadata locks on tables
property-file-info: which are locked by LOCK TABLES implicitly. As result
property-file-info: TRUNCATE TABLE is no longer allowed for such tables.
property-file-info: Updated code to use the new MDL API.4:path17:sql/sql_delete.cced7:file_id67:sp1f-sql_handler.cc-20010406221833-l4tsiortoyipmoyajcoz2tcdppvyeltl7:message281:Inform MDL_context about presence of open HANDLERs.
property-file-info: Since HANLDERs break MDL protocol by acquiring table-level
property-file-info: lock while holding only S metadata lock on a table MDL
property-file-info: subsystem should take special care about such contexts (Now
property-file-info: this is the only case when mysql_lock_abort() is used).4:path18:sql/sql_handler.cced7:file_id65:sp1f-sql_parse.cc-19700101030959-ehcre3rwhv5l3mlxqhaxg36ujenxnrcd7:message530:Global read lock functionality has been moved into a class.
property-file-info: Do not take upgradable metadata locks when opening tables
property-file-info: for CREATE TABLE SELECT as it is not necessary and limits
property-file-info: concurrency.
property-file-info: When initializing TABLE_LIST objects before adding them
property-file-info: to the table list set the type of request for metadata lock
property-file-info: according to the operation that will be performed on the
property-file-info: table.
property-file-info: We no longer acquire upgradable metadata locks on tables
property-file-info: which are locked by LOCK TABLES implicitly. As result FLUSH
property-file-info: TABLES is no longer allowed for such tables.4:path16:sql/sql_parse.cced7:file_id67:sp1f-sql_prepare.cc-20020612210720-gtqjjiu7vpmfxb5xct2qke7urmqcabli7:message150:Use MYSQL_OPEN_FORCE_SHARED_MDL flag when opening
property-file-info: tables during PREPARE. This allows PREPARE to run
property-file-info: concurrently in presence of LOCK TABLES ... WRITE.4:path18:sql/sql_prepare.cced7:file_id66:sp1f-sql_rename.cc-20000821000147-ltbepgfv52umnrkaxzycedl5p2tlr3fp7:message59:Global read lock functionality has been moved into a class.4:path17:sql/sql_rename.cced7:file_id64:sp1f-sql_show.cc-19700101030959-umlljfnpplg452h7reeyqr4xnbmlkvfj7:message36:Updated code to use the new MDL API.4:path15:sql/sql_show.cced7:file_id65:sp1f-sql_table.cc-19700101030959-tzdkvgigezpuaxnldqh3fx2h7h2ggslu7:message256:Global read lock functionality has been moved into a class.
property-file-info: We no longer acquire upgradable metadata locks on tables
property-file-info: which are locked by LOCK TABLES implicitly. As result DROP
property-file-info: TABLE is no longer allowed for such tables.
property-file-info: Updated code to use the new MDL API.4:path16:sql/sql_table.cced7:file_id67:sp1f-sql_trigger.cc-20040907122911-35k3wamrp6g7qsupxe7hisftpobcwin57:message265:Global read lock functionality has been moved into a class.
property-file-info: We no longer acquire upgradable metadata locks on tables
property-file-info: which are locked by LOCK TABLES implicitly. As result
property-file-info: CREATE/DROP TRIGGER is no longer allowed for such tables.
property-file-info: Updated code to use the new MDL API.4:path18:sql/sql_trigger.cced7:file_id64:sp1f-sql_view.cc-20040715221517-nw4p4mja6nzzlvwwhzfgfqb4umxqobe47:message168:Global read lock functionality has been moved into a class.
property-file-info: Fixed results of wrong merge that led to misuse of GLR API.
property-file-info: CREATE VIEW statement is not a commit statement.4:path15:sql/sql_view.cced7:file_id61:sp1f-table.cc-19700101030959-nsxtem2adyqzwe6nz4cgrpcmts3o54v77:message252:When resetting TABLE_LIST objects for PS or SP re-execution
property-file-info: set the type of request for metadata lock according to the
property-file-info: operation that will be performed on the table. Do the same
property-file-info: in auxiliary function initializing metadata lock requests
property-file-info: in a table list.4:path12:sql/table.cced7:file_id60:sp1f-table.h-19700101030959-dv72bajftxj5fbdjuajquappanuv2ija7:message142:When initializing TABLE_LIST objects set the type of request
property-file-info: for metadata lock according to the operation that will be
property-file-info: performed on the table.4:path11:sql/table.hed7:file_id48:transaction.cc-20080807231139-0scowboulgaz4j08-17:message59:Global read lock functionality has been moved into a class.4:path18:sql/transaction.ccee
testament3-sha1: 8d45c0a2701c7477d33c106611e1f97c4c824a8c1 parent dea880d commit ea91553
File tree
47 files changed
+6707
-1810
lines changed- mysql-test
- include
- r
- suite
- funcs_1
- datadict
- r
- rpl/t
- t
- sql
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
47 files changed
+6707
-1810
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
732 | 732 | | |
733 | 733 | | |
734 | 734 | | |
735 | | - | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
736 | 738 | | |
737 | 739 | | |
738 | 740 | | |
| 741 | + | |
739 | 742 | | |
740 | 743 | | |
741 | 744 | | |
742 | 745 | | |
743 | 746 | | |
744 | 747 | | |
745 | 748 | | |
| 749 | + | |
746 | 750 | | |
747 | 751 | | |
748 | 752 | | |
749 | 753 | | |
| 754 | + | |
| 755 | + | |
| 756 | + | |
| 757 | + | |
| 758 | + | |
| 759 | + | |
| 760 | + | |
| 761 | + | |
| 762 | + | |
| 763 | + | |
| 764 | + | |
| 765 | + | |
| 766 | + | |
| 767 | + | |
| 768 | + | |
| 769 | + | |
| 770 | + | |
| 771 | + | |
| 772 | + | |
| 773 | + | |
| 774 | + | |
| 775 | + | |
| 776 | + | |
750 | 777 | | |
751 | 778 | | |
752 | 779 | | |
| |||
1228 | 1255 | | |
1229 | 1256 | | |
1230 | 1257 | | |
1231 | | - | |
| 1258 | + | |
1232 | 1259 | | |
1233 | 1260 | | |
| 1261 | + | |
| 1262 | + | |
| 1263 | + | |
| 1264 | + | |
| 1265 | + | |
| 1266 | + | |
| 1267 | + | |
| 1268 | + | |
1234 | 1269 | | |
1235 | | - | |
1236 | | - | |
1237 | | - | |
| 1270 | + | |
| 1271 | + | |
| 1272 | + | |
| 1273 | + | |
| 1274 | + | |
| 1275 | + | |
1238 | 1276 | | |
1239 | 1277 | | |
| 1278 | + | |
1240 | 1279 | | |
1241 | 1280 | | |
1242 | 1281 | | |
| |||
1256 | 1295 | | |
1257 | 1296 | | |
1258 | 1297 | | |
| 1298 | + | |
1259 | 1299 | | |
1260 | 1300 | | |
1261 | 1301 | | |
| |||
1265 | 1305 | | |
1266 | 1306 | | |
1267 | 1307 | | |
1268 | | - | |
| 1308 | + | |
| 1309 | + | |
| 1310 | + | |
| 1311 | + | |
| 1312 | + | |
| 1313 | + | |
| 1314 | + | |
| 1315 | + | |
| 1316 | + | |
| 1317 | + | |
| 1318 | + | |
| 1319 | + | |
| 1320 | + | |
| 1321 | + | |
| 1322 | + | |
| 1323 | + | |
| 1324 | + | |
| 1325 | + | |
| 1326 | + | |
| 1327 | + | |
| 1328 | + | |
| 1329 | + | |
| 1330 | + | |
| 1331 | + | |
| 1332 | + | |
1269 | 1333 | | |
1270 | 1334 | | |
1271 | 1335 | | |
| |||
1279 | 1343 | | |
1280 | 1344 | | |
1281 | 1345 | | |
1282 | | - | |
1283 | | - | |
1284 | 1346 | | |
1285 | | - | |
1286 | | - | |
1287 | | - | |
1288 | | - | |
1289 | | - | |
1290 | | - | |
1291 | | - | |
| 1347 | + | |
| 1348 | + | |
| 1349 | + | |
| 1350 | + | |
1292 | 1351 | | |
1293 | 1352 | | |
1294 | 1353 | | |
1295 | 1354 | | |
1296 | | - | |
| 1355 | + | |
1297 | 1356 | | |
1298 | 1357 | | |
1299 | | - | |
1300 | | - | |
1301 | | - | |
1302 | | - | |
1303 | | - | |
1304 | | - | |
1305 | 1358 | | |
1306 | 1359 | | |
1307 | 1360 | | |
| |||
1357 | 1410 | | |
1358 | 1411 | | |
1359 | 1412 | | |
| 1413 | + | |
| 1414 | + | |
| 1415 | + | |
| 1416 | + | |
| 1417 | + | |
| 1418 | + | |
| 1419 | + | |
| 1420 | + | |
| 1421 | + | |
| 1422 | + | |
| 1423 | + | |
| 1424 | + | |
| 1425 | + | |
| 1426 | + | |
| 1427 | + | |
| 1428 | + | |
| 1429 | + | |
| 1430 | + | |
| 1431 | + | |
| 1432 | + | |
| 1433 | + | |
| 1434 | + | |
| 1435 | + | |
| 1436 | + | |
| 1437 | + | |
| 1438 | + | |
| 1439 | + | |
| 1440 | + | |
| 1441 | + | |
| 1442 | + | |
| 1443 | + | |
| 1444 | + | |
| 1445 | + | |
| 1446 | + | |
| 1447 | + | |
| 1448 | + | |
| 1449 | + | |
| 1450 | + | |
| 1451 | + | |
| 1452 | + | |
| 1453 | + | |
| 1454 | + | |
| 1455 | + | |
| 1456 | + | |
| 1457 | + | |
| 1458 | + | |
| 1459 | + | |
| 1460 | + | |
| 1461 | + | |
| 1462 | + | |
| 1463 | + | |
| 1464 | + | |
| 1465 | + | |
| 1466 | + | |
| 1467 | + | |
| 1468 | + | |
| 1469 | + | |
| 1470 | + | |
| 1471 | + | |
| 1472 | + | |
| 1473 | + | |
| 1474 | + | |
| 1475 | + | |
| 1476 | + | |
| 1477 | + | |
| 1478 | + | |
| 1479 | + | |
| 1480 | + | |
| 1481 | + | |
| 1482 | + | |
| 1483 | + | |
| 1484 | + | |
| 1485 | + | |
| 1486 | + | |
| 1487 | + | |
| 1488 | + | |
| 1489 | + | |
| 1490 | + | |
| 1491 | + | |
| 1492 | + | |
| 1493 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
263 | 263 | | |
264 | 264 | | |
265 | 265 | | |
266 | | - | |
| 266 | + | |
267 | 267 | | |
268 | 268 | | |
269 | 269 | | |
| |||
0 commit comments