Skip to content

Commit c651c22

Browse files
committed
transactions support
1 parent f2bf9dc commit c651c22

9 files changed

Lines changed: 288 additions & 67 deletions

File tree

bin/init-mongo-replica-set.sh

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#!/bin/sh
2+
3+
set -e
4+
5+
echo "Waiting for MongoDB to be ready..."
6+
until docker compose exec mongo mongosh --eval "print('MongoDB is ready')" > /dev/null 2>&1; do
7+
sleep 1
8+
done
9+
10+
echo "Initializing MongoDB replica set..."
11+
12+
# First, initialize the replica set without authentication
13+
echo "Initializing replica set..."
14+
docker compose exec mongo mongosh --eval 'rs.initiate({_id: "rs0", members: [{_id: 0, host: "mongo:27017"}]})'
15+
16+
# Wait for the replica set to be ready
17+
echo "Waiting for replica set to be ready..."
18+
until docker compose exec mongo mongosh --eval "rs.status().ok" | grep -q "1"; do
19+
sleep 2
20+
done
21+
22+
echo "Replica set initialized successfully!"
23+
24+
# Now create the admin user and enable authentication
25+
echo "Creating admin user and enabling authentication..."
26+
docker compose exec mongo mongosh --eval 'use admin; db.createUser({user: "root", pwd: "password", roles: [{role: "root", db: "admin"}]})'
27+
28+
# Test authentication
29+
echo "Testing authentication..."
30+
docker compose exec mongo mongosh admin -u root -p password --eval 'db.runCommand({ping: 1})'
31+
32+
echo "MongoDB replica set is ready for transactions!"

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
"utopia-php/framework": "0.33.*",
4040
"utopia-php/cache": "0.13.*",
4141
"utopia-php/pools": "0.8.*",
42-
"utopia-php/mongo": "dev-feat-bulk-writes as 0.3.1"
42+
"utopia-php/mongo": "dev-feat-mongo-transactions as 0.3.1"
4343
},
4444
"require-dev": {
4545
"fakerphp/faker": "1.23.*",

composer.lock

Lines changed: 14 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docker-compose.yml

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,19 @@ services:
7979
- database
8080
ports:
8181
- "9706:27017"
82+
volumes:
83+
- ./mongo-keyfile:/etc/mongo-keyfile:ro
84+
- mongo-data:/data/db
8285
environment:
8386
MONGO_INITDB_DATABASE: utopia_testing
8487
MONGO_INITDB_ROOT_USERNAME: root
85-
MONGO_INITDB_ROOT_PASSWORD: password
88+
MONGO_INITDB_ROOT_PASSWORD: password
89+
command: >
90+
mongod --replSet rs0
91+
--auth
92+
--keyFile /etc/mongo-keyfile
93+
# Manyally initate the replica set
94+
#docker compose exec mongo mongosh admin -u root -p password --eval 'rs.initiate({_id: "rs0", members: [{_id: 0, host: "mongo:27017"}]})'
8695

8796
mongo-express:
8897
image: mongo-express
@@ -146,5 +155,7 @@ services:
146155
networks:
147156
- database
148157

158+
volumes:
159+
mongo-data:
149160
networks:
150161
database:

mongo-keyfile

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
ydIuYSvU/9QLt7fkH32IdXbP2z2+w+fzSEoolW8Q1Z8nLhRyrZF0Zq7a0KzeNI7K
2+
gPIl1ikI6ob6h0+RxYmGeOOUjjkcBlkvYrmABDKsRipTkTTp4z0fUBTIUJV0lVvs
3+
N9+VpM0/pLLIhI8jb38aa7pmsoufBQ3uiNR68ZFykPqzZQ4d5VfMqfZk7z3dpFlh
4+
DURPOOG0HAFe68MLXVFYdaHGW4yomuTPrpzWSiUhFAPFEBYg4elARQc4CaiinFds
5+
SQi/SrUsYMGODPr+on9/lboia/SInaSP+dzDqpsbL29atvIVHtU29RlPJdZ2V1ub
6+
Oe2O1xN9F59TtjNUgDiAtMGKTMS/0S1mbPC6Og5JAR7U4xZ7/6S5n3+p0RjYyTlH
7+
fhssJ7pc/bveN6mShNrsIKK0Z50YYjablzm07EDJYhfEWMG5Wu1AvEVqEH68ioDl
8+
JL5QO63A2bXvMN7dXS69+E0hHn6xaZYu+CnKedvgWdyhraCT1Q01ZyDyv2y7isGD
9+
1BAlNLlt+cPMCitETcxZne+JHdkL/mDKffHUPM4Drtzchg4DbiG49uC9Ib7zTws+
10+
NcburXY+9B8j7WN7ZHXhiB7/OWJ/IHJCZTdKz70mEPH4AHoRFpZNM5eMnYxYdbQD
11+
40MhAS7fuOYhtFIQiQ+SCeFMucE3KYvp1JpTVQwT4SNrIlHPqfPn5xFBcgDjhvwT
12+
hHJCgXP4HrRuf47Ta6kHy2UFQ7r5JOqSZSOFwP+tUyfhjEB5ZWJ1qCUZxFagoc9A
13+
//9SoyulZwCxEr2ijmes1Nzv56hSTjYb6pPjFWd92G87w+VZv4R/vF5nwcYUyuIS
14+
iQWPs/kOzb4NeJW24lNzR2zH2BsJt3OI+BFY64cc8O0o6EtFWcoabwyJYKe6RXPX
15+
0S4ngcnGzRP+tVa6LsrjAYrNpmZDrP9x93pXQHfByTS2oSaI1eGeAagFTu/HS2kC
16+
uCJ0HfH99sRSgJ1Ab+2C8G8305meDAbtdCtvl/1anPnV6ISy

src/Database/Adapter.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -374,10 +374,7 @@ public function withTransaction(callable $callback): mixed
374374
for ($attempts = 0; $attempts < 3; $attempts++) {
375375
try {
376376
$this->startTransaction();
377-
//var_dump($attempts);
378377
$result = $callback();
379-
//var_dump($result);
380-
381378
$this->commitTransaction();
382379

383380
return $result;

src/Database/Adapter/MariaDB.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1173,7 +1173,6 @@ public function createOrUpdateDocuments(
11731173
$bindValues = [];
11741174
$documentIds = [];
11751175
$documentTenants = [];
1176-
11771176
foreach ($changes as $change) {
11781177
$document = $change->getNew();
11791178
$attributes = $document->getAttributes();

0 commit comments

Comments
 (0)