Skip to content

Commit 3a5b147

Browse files
authored
fix: RDS Dataloader uses single connection to DB (#133)
1 parent d035ca2 commit 3a5b147

File tree

2 files changed

+99
-81
lines changed

2 files changed

+99
-81
lines changed

src/data-loaders/RelationalDataLoader.js

Lines changed: 43 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -132,40 +132,55 @@ const executeSqlStatements = async (client, req) =>
132132
export default class RelationalDataLoader {
133133
constructor(config) {
134134
this.config = config;
135+
this.client = null;
136+
}
137+
138+
async getClient() {
139+
if (this.client) {
140+
return this.client;
141+
}
142+
143+
const requiredKeys = [
144+
'dbDialect',
145+
'dbUsername',
146+
'dbPassword',
147+
'dbHost',
148+
'dbName',
149+
'dbPort',
150+
];
151+
if (!this.config.rds) {
152+
throw new Error('RDS configuration not passed');
153+
}
154+
const missingKey = requiredKeys.find((key) => {
155+
return !this.config.rds[key];
156+
});
157+
if (missingKey) {
158+
throw new Error(`${missingKey} is required.`);
159+
}
160+
161+
const dbConfig = {
162+
host: this.config.rds.dbHost,
163+
user: this.config.rds.dbUsername,
164+
password: this.config.rds.dbPassword,
165+
database: this.config.rds.dbName,
166+
port: this.config.rds.dbPort,
167+
};
168+
const res = {};
169+
if (this.config.rds.dbDialect === 'mysql') {
170+
this.client = await mysql.createConnection(dbConfig);
171+
} else if (this.config.rds.dbDialect === 'postgres') {
172+
this.client = new Client(dbConfig);
173+
await this.client.connect();
174+
}
175+
return this.client;
135176
}
136177

137178
async load(req) {
138179
try {
139-
const requiredKeys = [
140-
'dbDialect',
141-
'dbUsername',
142-
'dbPassword',
143-
'dbHost',
144-
'dbName',
145-
'dbPort',
146-
];
147-
if (!this.config.rds) {
148-
throw new Error('RDS configuration not passed');
149-
}
150-
const missingKey = requiredKeys.find((key) => {
151-
return !this.config.rds[key];
152-
});
153-
if (missingKey) {
154-
throw new Error(`${missingKey} is required.`);
155-
}
156-
157-
const dbConfig = {
158-
host: this.config.rds.dbHost,
159-
user: this.config.rds.dbUsername,
160-
password: this.config.rds.dbPassword,
161-
database: this.config.rds.dbName,
162-
port: this.config.rds.dbPort,
163-
};
180+
const client = await this.getClient();
164181
const res = {};
182+
const results = await executeSqlStatements(client, req);
165183
if (this.config.rds.dbDialect === 'mysql') {
166-
const client = await mysql.createConnection(dbConfig);
167-
const results = await executeSqlStatements(client, req);
168-
169184
res.sqlStatementResults = results.map((result) => {
170185
if (result.length < 2) {
171186
return {};
@@ -184,9 +199,6 @@ export default class RelationalDataLoader {
184199
};
185200
});
186201
} else if (this.config.rds.dbDialect === 'postgres') {
187-
const client = new Client(dbConfig);
188-
await client.connect();
189-
const results = await executeSqlStatements(client, req);
190202
res.sqlStatementResults = results.map((result) => {
191203
return {
192204
numberOfRecordsUpdated: result.rowCount,

yarn.lock

Lines changed: 56 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1728,13 +1728,13 @@ all-contributors-cli@^6.19.0:
17281728
yargs "^15.0.1"
17291729

17301730
amplify-appsync-simulator@^1.27.4:
1731-
version "1.27.4"
1732-
resolved "https://registry.yarnpkg.com/amplify-appsync-simulator/-/amplify-appsync-simulator-1.27.4.tgz#2163eefda771fc4d58a95e14ef9b1dc14f995566"
1733-
integrity sha512-Prj2odFYORNFScmHiJhXrF34krr9xMuxpfJ7PWpDucKQoT04hqBnOlQ+ys3PTI5n5SWzFLojXP/cQST9ASkNzQ==
1731+
version "1.27.7"
1732+
resolved "https://registry.yarnpkg.com/amplify-appsync-simulator/-/amplify-appsync-simulator-1.27.7.tgz#ac22569572d3845d4bd8b04d5da0d37cec6cc861"
1733+
integrity sha512-xHTpqGUj7Xcnvy+ecW7fpYvrcNm9b9tmebn1zE0SkInI6+dbkbxJLJ4tMJ7i6J0gNUbIFsmSw4V3HA+8Mc9FCA==
17341734
dependencies:
17351735
amplify-velocity-template "1.4.5"
1736-
aws-sdk "^2.919.0"
1737-
chalk "^3.0.0"
1736+
aws-sdk "^2.963.0"
1737+
chalk "^4.1.1"
17381738
cors "^2.8.5"
17391739
dataloader "^2.0.0"
17401740
event-to-promise "^0.8.0"
@@ -1754,7 +1754,7 @@ amplify-appsync-simulator@^1.27.4:
17541754
moment-timezone "0.5.27"
17551755
mqtt-connection "4.0.0"
17561756
nanoid "2.1.10"
1757-
pino "5.16.0"
1757+
pino "^6.13.0"
17581758
portfinder "^1.0.25"
17591759
qlobber "3.1.0"
17601760
retimer "2.0.0"
@@ -2076,10 +2076,10 @@ aws-sdk@^2.792.0:
20762076
uuid "3.3.2"
20772077
xml2js "0.4.19"
20782078

2079-
aws-sdk@^2.919.0:
2080-
version "2.939.0"
2081-
resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.939.0.tgz#c07c9d726bcb2ffdb69016f880ae310ad72f36a5"
2082-
integrity sha512-2KEAtTlVMDcpHP6+P9JU+mXTNhX3KZ0StW0Qi87oh8EUoRITZj64FrUylNvrCg69thCliAcNzBdlA1g5Iq+qEA==
2079+
aws-sdk@^2.963.0:
2080+
version "2.999.0"
2081+
resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.999.0.tgz#2d71882fd9ba31c12a4281ae45ffe2b857f4307e"
2082+
integrity sha512-OcnD7m+HCZv2qDzmS7TgABGf26mVPfIyah0Dgz7hHAxBtx78qFWi/s9U6BDxVBKWLg7OKWVHf0opiMG4ujteqg==
20832083
dependencies:
20842084
buffer "4.9.2"
20852085
events "1.1.1"
@@ -2491,9 +2491,9 @@ camelcase@^6.0.0:
24912491
integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==
24922492

24932493
caniuse-lite@^1.0.30001208:
2494-
version "1.0.30001208"
2495-
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001208.tgz#a999014a35cebd4f98c405930a057a0d75352eb9"
2496-
integrity sha512-OE5UE4+nBOro8Dyvv0lfx+SRtfVIOM9uhKqFmJeUbGriqhhStgp1A0OyBpgy3OUF8AhYCT+PVwPC1gMl2ZcQMA==
2494+
version "1.0.30001263"
2495+
resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001263.tgz"
2496+
integrity sha512-doiV5dft6yzWO1WwU19kt8Qz8R0/8DgEziz6/9n2FxUasteZNwNNYSmJO3GLBH8lCVE73AB1RPDPAeYbcO5Cvw==
24972497

24982498
capture-exit@^2.0.0:
24992499
version "2.0.0"
@@ -2532,14 +2532,6 @@ chalk@^2.0.0, chalk@^2.3.2:
25322532
escape-string-regexp "^1.0.5"
25332533
supports-color "^5.3.0"
25342534

2535-
chalk@^3.0.0:
2536-
version "3.0.0"
2537-
resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
2538-
integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
2539-
dependencies:
2540-
ansi-styles "^4.1.0"
2541-
supports-color "^7.1.0"
2542-
25432535
chalk@^4.0.0, chalk@^4.1.0:
25442536
version "4.1.0"
25452537
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
@@ -2548,6 +2540,14 @@ chalk@^4.0.0, chalk@^4.1.0:
25482540
ansi-styles "^4.1.0"
25492541
supports-color "^7.1.0"
25502542

2543+
chalk@^4.1.1:
2544+
version "4.1.2"
2545+
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
2546+
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
2547+
dependencies:
2548+
ansi-styles "^4.1.0"
2549+
supports-color "^7.1.0"
2550+
25512551
char-regex@^1.0.2:
25522552
version "1.0.2"
25532553
resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
@@ -3666,15 +3666,15 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
36663666
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
36673667
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
36683668

3669-
fast-redact@^2.0.0:
3670-
version "2.1.0"
3671-
resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-2.1.0.tgz#dfe3c1ca69367fb226f110aa4ec10ec85462ffdf"
3672-
integrity sha512-0LkHpTLyadJavq9sRzzyqIoMZemWli77K2/MGOkafrR64B9ItrvZ9aT+jluvNDsv0YEHjSNhlMBtbokuoqii4A==
3669+
fast-redact@^3.0.0:
3670+
version "3.0.2"
3671+
resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.0.2.tgz#c940ba7162dde3aeeefc522926ae8c5231412904"
3672+
integrity sha512-YN+CYfCVRVMUZOUPeinHNKgytM1wPI/C/UCLEi56EsY2dwwvI00kIJHJoI7pMVqGoMew8SMZ2SSfHKHULHXDsg==
36733673

3674-
fast-safe-stringify@^2.0.7:
3675-
version "2.0.7"
3676-
resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743"
3677-
integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==
3674+
fast-safe-stringify@^2.0.8:
3675+
version "2.1.1"
3676+
resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884"
3677+
integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==
36783678

36793679
fastfall@^1.5.0:
36803680
version "1.5.1"
@@ -3683,6 +3683,11 @@ fastfall@^1.5.0:
36833683
dependencies:
36843684
reusify "^1.0.0"
36853685

3686+
fastify-warning@^0.2.0:
3687+
version "0.2.0"
3688+
resolved "https://registry.yarnpkg.com/fastify-warning/-/fastify-warning-0.2.0.tgz#e717776026a4493dc9a2befa44db6d17f618008f"
3689+
integrity sha512-s1EQguBw/9qtc1p/WTY4eq9WMRIACkj+HTcOIK1in4MV5aFaQC9ZCIt0dJ7pr5bIf4lPpHvAtP2ywpTNgs7hqw==
3690+
36863691
fastparallel@^2.2.0:
36873692
version "2.4.0"
36883693
resolved "https://registry.yarnpkg.com/fastparallel/-/fastparallel-2.4.0.tgz#65fbec1a5e5902494be772cf5765cbaaece08688"
@@ -6828,22 +6833,23 @@ pify@^5.0.0:
68286833
resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f"
68296834
integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==
68306835

6831-
pino-std-serializers@^2.4.2:
6832-
version "2.5.0"
6833-
resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-2.5.0.tgz#40ead781c65a0ce7ecd9c1c33f409d31fe712315"
6834-
integrity sha512-wXqbqSrIhE58TdrxxlfLwU9eDhrzppQDvGhBEr1gYbzzM4KKo3Y63gSjiDXRKLVS2UOXdPNR2v+KnQgNrs+xUg==
6836+
pino-std-serializers@^3.1.0:
6837+
version "3.2.0"
6838+
resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz#b56487c402d882eb96cd67c257868016b61ad671"
6839+
integrity sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==
68356840

6836-
pino@5.16.0:
6837-
version "5.16.0"
6838-
resolved "https://registry.yarnpkg.com/pino/-/pino-5.16.0.tgz#94d01cb38b5f4a16dd4d7c47aa489fbfe40c3c06"
6839-
integrity sha512-k9cDzHd9S/oYSQ9B9g9+7RXkfsZX78sQXERC8x4p2XArECZXULx9nqNwZvJHsLj779wPCt+ybN+dG8jFR70p6Q==
6841+
pino@^6.13.0:
6842+
version "6.13.3"
6843+
resolved "https://registry.yarnpkg.com/pino/-/pino-6.13.3.tgz#60b93bcda1541f92fb37b3f2be0a25cf1d05b6fe"
6844+
integrity sha512-tJy6qVgkh9MwNgqX1/oYi3ehfl2Y9H0uHyEEMsBe74KinESIjdMrMQDWpcZPpPicg3VV35d/GLQZmo4QgU2Xkg==
68406845
dependencies:
6841-
fast-redact "^2.0.0"
6842-
fast-safe-stringify "^2.0.7"
6846+
fast-redact "^3.0.0"
6847+
fast-safe-stringify "^2.0.8"
6848+
fastify-warning "^0.2.0"
68436849
flatstr "^1.0.12"
6844-
pino-std-serializers "^2.4.2"
6845-
quick-format-unescaped "^3.0.3"
6846-
sonic-boom "^0.7.5"
6850+
pino-std-serializers "^3.1.0"
6851+
quick-format-unescaped "^4.0.3"
6852+
sonic-boom "^1.0.2"
68476853

68486854
pirates@^4.0.1:
68496855
version "4.0.1"
@@ -7054,10 +7060,10 @@ queue-microtask@^1.2.2:
70547060
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
70557061
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
70567062

7057-
quick-format-unescaped@^3.0.3:
7058-
version "3.0.3"
7059-
resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-3.0.3.tgz#fb3e468ac64c01d22305806c39f121ddac0d1fb9"
7060-
integrity sha512-dy1yjycmn9blucmJLXOfZDx1ikZJUi6E8bBZLnhPG5gBrVhHXx2xVyqqgKBubVNEXmx51dBACMHpoMQK/N/AXQ==
7063+
quick-format-unescaped@^4.0.3:
7064+
version "4.0.4"
7065+
resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7"
7066+
integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==
70617067

70627068
quick-lru@^4.0.1:
70637069
version "4.0.1"
@@ -7737,10 +7743,10 @@ socks@^2.3.3:
77377743
ip "^1.1.5"
77387744
smart-buffer "^4.1.0"
77397745

7740-
sonic-boom@^0.7.5:
7741-
version "0.7.7"
7742-
resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-0.7.7.tgz#d921de887428208bfa07b0ae32c278de043f350a"
7743-
integrity sha512-Ei5YOo5J64GKClHIL/5evJPgASXFVpfVYbJV9PILZQytTK6/LCwHvsZJW2Ig4p9FMC2OrBrMnXKgRN/OEoAWfg==
7746+
sonic-boom@^1.0.2:
7747+
version "1.4.1"
7748+
resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-1.4.1.tgz#d35d6a74076624f12e6f917ade7b9d75e918f53e"
7749+
integrity sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==
77447750
dependencies:
77457751
atomic-sleep "^1.0.0"
77467752
flatstr "^1.0.12"

0 commit comments

Comments
 (0)