-
Notifications
You must be signed in to change notification settings - Fork 324
Conversation
Have done some research since running into the CI build failure on go1.7. It appears that It is indeed possible to get a conn in a < go1.9 way, however, it will require significant updates to the queries used in this package. the I will await further guidance on this issue as to your preference. thanks! |
THANK YOU @rdallman for this PR. Great work!
What if we just drop support for < go1.9? |
Sounds great to me, I will update the PR to reflect this (today, I hope) |
Have hit a snag here in dependency hell :( I did manage to update CI to use go1.9.1 and added a build tag. It appears that go-sql-driver/mysql#657 is blocking in order for this to work with the latest mysql driver, as it stands I imagine that I don't see glide or dep files in repo, simply using Sorry for this being such a pill! |
Originally from mattes/migrate#299
Originally from mattes/migrate#299
I believe this closes mattes#297 as well. I have been working on adding testing of migrations and it requires acquiring the lock in mysql multiple times to go up and down. After nailing this down to GET_LOCK returning a failure for every subsequent GET_LOCK call after the first, I decided it was time to rtfm and lo and behold: https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_release-lock RELEASE_LOCK will not work if called from a different thread than GET_LOCK. The simplest solution using the golang database/sql pkg appears to be to just get a single conn to use for every operation. since migrations are happening sequentially, I don't think this will be a performance hit (possible improvement). now calling Lock() and Unlock() multiple times will work; prior to this patch, every call to RELEASE_LOCK would fail. this required minimal changes to use the *sql.Conn methods instead of the *sql.DB methods. other changes: * upped time out to 10s on GET_LOCK, 1s timeout can too easily leave us in a state where we think we have the lock but it has timed out (during the operation). * fixes SetVersion which was not using the tx it was intending to, and fixed a bug where the transaction could have been left open since Rollback or Commit may never have been called. I added a test but it does not seem to come up in the previous patch, at least easily, I tried some shenanigans. At least, this behavior should be fixed with this patch and hopefully the test / comment is advisory enough. thank you for maintaining this library, it has been relatively easy to integrate with and most stuff works (pg works great :)
ae20887
to
0698623
Compare
Hi @mattes, happy new year, I have some good news. Have managed to fix the issue in the mysql driver and landed it in go-sql-driver/mysql#736 -- this no longer causes a conn that was acquired via the Quick summary:
and the bad news: CI apt-get does not seem happy today. I'm unable to kick rebuilds off myself (it appears). the tests pass for me with the latest mysql driver locally and don't see many changes in master so expect this to go green. thanks again! |
1352623
to
8383637
Compare
Had some spare time today, I fixed the build 8383637 yay. it seems other branches are facing this, too, feel free to steal if this is still blocked. |
Fixed in forked release v3.2.0 |
I believe this closes #297 as well.
I have been working on adding testing of migrations and it requires acquiring
the lock in mysql multiple times to go up and down. After nailing this down to
GET_LOCK returning a failure for every subsequent GET_LOCK call after the
first, I decided it was time to rtfm and lo and behold:
https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_release-lock
RELEASE_LOCK will not work if called from a different thread than GET_LOCK.
The simplest solution using the golang database/sql pkg appears to be to just
get a single conn to use for every operation. since migrations are happening
sequentially, I don't think this will be a performance hit (possible
improvement). now calling Lock() and Unlock() multiple times will work;
prior to this patch, every call to RELEASE_LOCK would fail. this required
minimal changes to use the *sql.Conn methods instead of the *sql.DB methods.
other changes:
state where we think we have the lock but it has timed out (during the
operation).
bug where the transaction could have been left open since Rollback or Commit
may never have been called.
I added a test but it does not seem to come up in the previous patch, at least
easily, I tried some shenanigans. At least, this behavior should be fixed with
this patch and hopefully the test / comment is advisory enough.
thank you for maintaining this library, it has been relatively easy to
integrate with and most stuff works (pg works great :)