Skip to content

Add transaction support #1904

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 51 commits into from
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
e54408a
add transaction support, requires mongodb version V4.0 or more and de…
klinson Jan 8, 2020
9a01d23
format code
klinson Jan 8, 2020
64b4156
add mongodb(replica set) environment into docker configuration
klinson Jan 9, 2020
34b1a98
must be compatible with Illuminate\Database\Connection::rollBack($toL…
klinson Jan 9, 2020
84850a9
add transaction usage into readme.md
klinson Jan 9, 2020
bedaaa8
update .travis.yml
klinson Jan 10, 2020
b030914
update database.conf
klinson Jan 13, 2020
163b41d
update .travis.yml
klinson Jan 13, 2020
92c1e07
update docker-compose.yml
klinson Jan 13, 2020
caa61ea
Update src/Jenssegers/Mongodb/Connection.php
klinson Jan 17, 2020
7d96c3e
fixbug Connection.php
klinson Feb 7, 2020
776492d
Merge remote-tracking branch 'remotes/upstream/master'
klinson Feb 7, 2020
10bda05
add transaction into README.md
klinson Feb 7, 2020
85a0be8
add replset mongodb tag
klinson Feb 7, 2020
b39251c
Remove travis from PR please
klinson Feb 9, 2020
fe61056
remove author tag and comments in Chinese language
klinson Feb 13, 2020
3029e36
improved function docblocks of transaction
klinson Feb 13, 2020
4ce523f
merge update
klinson Feb 15, 2020
44cb7a7
Merge remote-tracking branch 'upstream/master'
klinson Jun 28, 2020
7221417
add another testsuite for transactional tests in phpunit.xml
klinson Jun 28, 2020
1b90047
optimized code
klinson Jul 1, 2020
a5d0858
update ci and tests configs
klinson Jul 21, 2020
add9516
update tests configs
klinson Jul 21, 2020
14b3ad7
update tests configs
klinson Jul 21, 2020
0c22e4a
update ci.yml
klinson Jul 21, 2020
0b840db
update tests
klinson Jul 21, 2020
cf88a03
update tests
klinson Jul 21, 2020
2664bd5
update tests
klinson Jul 21, 2020
44bd081
update tests
klinson Jul 21, 2020
850d034
Merge branch 'master' into master
klinson Jul 21, 2020
83f45c9
delete links of docker-compose.yaml
klinson Jul 23, 2020
5eb6f42
Merge remote-tracking branch 'origin/master'
klinson Jul 23, 2020
84186f1
Merge branch 'master' into master
divine Jul 23, 2020
7741acb
optimize code
klinson Jul 23, 2020
72dbdcb
Merge remote-tracking branch 'origin/master'
klinson Jul 23, 2020
c14bd44
Merge branch 'master' into master
divine Aug 28, 2020
5773597
Merge branch 'master' into master
divine Sep 9, 2020
9e0cfd2
Merge branch 'master' into master
divine Sep 16, 2020
b2d1740
Merge branch 'master' into master
divine Oct 14, 2020
8cc01d5
Merge branch 'master' into master
klinson Nov 20, 2020
dafee61
remove testInsertWithId
klinson Nov 20, 2020
0fd27ba
update build-ci.yml
klinson Nov 23, 2020
6e89c8b
add return info to phpdoc
klinson Nov 23, 2020
5645fc7
format code
klinson Feb 19, 2021
9cd8bb2
update README.md
klinson Feb 19, 2021
551c184
Merge remote-tracking branch 'upstream/master'
klinson Feb 19, 2021
49307e2
remove excess $option
klinson Mar 27, 2021
59020fb
divide testUpdate on two methods testUpdateWithRollback and testUpda…
klinson Mar 27, 2021
97f9b4b
update ci part
klinson Mar 27, 2021
9c90125
update ci part
klinson Mar 27, 2021
041d02b
Merge remote-tracking branch 'upstream/master'
klinson Mar 27, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
add mongodb(replica set) environment into docker configuration
  • Loading branch information
klinson committed Jan 9, 2020
commit 64b415611a41c1531c5fdf2773224bc75268fab6
5 changes: 5 additions & 0 deletions MongoReplsetDockerFile
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
FROM mongo

ADD mongo-replset-init.sh /usr/local/bin/

RUN chmod +x /usr/local/bin/mongo-replset-init.sh
46 changes: 46 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ services:
depends_on:
- mongodb
- mysql
- mongo1
- mongo2
- mongo3

mysql:
container_name: mysql
Expand All @@ -30,3 +33,46 @@ services:
- 27017:27017
logging:
driver: none

mongo1:
hostname: mongo1
container_name: mongo1
image: mongo
restart: always
expose:
- 27017
ports:
- 27018:27017
command: '--quiet --bind_ip_all --replSet rs0'

mongo2:
hostname: mongo2
container_name: mongo2
image: mongo
restart: always
expose:
- 27017
ports:
- 27019:27017
command: '--quiet --bind_ip_all --replSet rs0'

mongo3:
hostname: mongo3
container_name: mongo3
image: mongo
restart: always
expose:
- 27017
ports:
- 27020:27017
command: '--quiet --bind_ip_all --replSet rs0'

mongoreplret:
build:
context: .
dockerfile: MongoReplsetDockerFile
depends_on:
- mongo1
- mongo2
- mongo3
entrypoint: ["sh", "-c", "mongo-replset-init.sh"]
23 changes: 23 additions & 0 deletions mongo-replset-init.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#!/bin/bash

echo "prepare rs initiating"

check_db_status() {
mongo1=$(mongo --host mongo1 --port 27017 --eval "db.stats().ok" | tail -n1 | grep -E '(^|\s)1($|\s)')
mongo2=$(mongo --host mongo2 --port 27017 --eval "db.stats().ok" | tail -n1 | grep -E '(^|\s)1($|\s)')
mongo3=$(mongo --host mongo3 --port 27017 --eval "db.stats().ok" | tail -n1 | grep -E '(^|\s)1($|\s)')
if [[ $mongo1 == 1 ]] && [[ $mongo2 == 1 ]] && [[ $mongo3 == 1 ]]; then
init_rs
else
check_db_status
fi
}

init_rs() {
ret=$(mongo --host mongo1 --port 27017 --eval "rs.initiate({ _id: 'rs0', members: [{ _id: 0, host: 'mongo1:27017' }, { _id: 1, host: 'mongo2:27017' }, { _id: 2, host: 'mongo3:27017' } ] })" > /dev/null 2>&1)
}

check_db_status > /dev/null 2>&1

echo "rs initiating finished"
exit 0
1 change: 1 addition & 0 deletions tests/TestCase.php
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ protected function getEnvironmentSetUp($app)
$app['config']->set('database.connections.mongodb', $config['connections']['mongodb']);
$app['config']->set('database.connections.mongodb2', $config['connections']['mongodb']);
$app['config']->set('database.connections.dsn_mongodb', $config['connections']['dsn_mongodb']);
$app['config']->set('database.connections.mongodb_replset', $config['connections']['mongodb_replset']);

$app['config']->set('auth.model', 'User');
$app['config']->set('auth.providers.users.model', 'User');
Expand Down
7 changes: 7 additions & 0 deletions tests/TransactionBuilderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,25 @@ class TransactionBuilderTest extends TestCase
{
protected $insertData = ['name' => 'klinson', 'age' => 20, 'title' => 'admin'];
protected $originData = ['name' => 'users', 'age' => 20, 'title' => 'user'];
protected $connection = 'mongodb_replset';
protected $originConnection = 'mongodb';

public function setUp(): void
{
parent::setUp();

/** change connection to seplset? because the transaction needs */
$this->originConnection = DB::getDefaultConnection();
DB::setDefaultConnection($this->connection);

DB::collection('users')->truncate();
DB::collection('users')->insert($this->originData);
}

public function tearDown(): void
{
DB::collection('users')->truncate();
DB::setDefaultConnection($this->originConnection);
parent::tearDown();
}

Expand Down
9 changes: 9 additions & 0 deletions tests/TransactionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,26 @@ class TransactionTest extends TestCase
{
protected $insertData = ['name' => 'klinson', 'age' => 20, 'title' => 'admin'];
protected $originData = ['name' => 'users', 'age' => 20, 'title' => 'user'];
protected $connection = 'mongodb_replset';
protected $originConnection = 'mongodb';

public function setUp(): void
{
parent::setUp();

/** change connection to seplset? because the transaction needs */
$this->originConnection = DB::getDefaultConnection();
DB::setDefaultConnection($this->connection);

User::truncate();
User::create($this->originData);
}

public function tearDown(): void
{
User::truncate();
DB::setDefaultConnection($this->originConnection);

parent::tearDown();
}

Expand Down
13 changes: 13 additions & 0 deletions tests/config/database.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,19 @@
'database' => env('MONGO_DATABASE', 'unittest'),
],

'mongodb_replset' => [
'driver' => 'mongodb',
'host' => [
'mongo1:27017',
'mongo2:27017',
'mongo3:27017',
],
'database' => env('MONGO_DATABASE', 'unittest'),
'options' => [
'replicaSet' => 'rs0'
]
],

'dsn_mongodb' => [
'driver' => 'mongodb',
'dsn' => "mongodb://$mongoHost:$mongoPort",
Expand Down
2 changes: 1 addition & 1 deletion tests/models/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class User extends Eloquent implements AuthenticatableContract, CanResetPassword
{
use Authenticatable, CanResetPassword, HybridRelations, Notifiable;

protected $connection = 'mongodb';
// protected $connection = 'mongodb';
protected $dates = ['birthday', 'entry.date'];
protected static $unguarded = true;

Expand Down