Skip to content

Commit

Permalink
fix: deadlock during caddy config reload
Browse files Browse the repository at this point in the history
  • Loading branch information
Geoffroy Empain committed Dec 7, 2020
1 parent 3d86b54 commit ac8ba64
Show file tree
Hide file tree
Showing 12 changed files with 72 additions and 12 deletions.
7 changes: 6 additions & 1 deletion src/entities/sites/handlers/branches/add-branch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import { $channelName, Branch } from '../../branch';
import { uuid } from '../../../../utils/uuid';
import slugify from 'slugify';
import { configureSiteBranchInCaddy } from '../../../../caddy/configuration';
import { Logger } from '../../../../commons/logger/logger';

const validators = [
body(object({
Expand All @@ -22,6 +23,8 @@ const validators = [
})),
];

const logger = new Logger('meli.api:addBranch');

async function handler(req: Request, res: Response): Promise<void> {
const { siteId } = req.params;

Expand Down Expand Up @@ -71,7 +74,9 @@ async function handler(req: Request, res: Response): Promise<void> {
_id: siteId,
});

await configureSiteBranchInCaddy(site, branch);
configureSiteBranchInCaddy(site, branch).catch(err => {
logger.error(err);
});

emitEvent(EventType.site_branch_added, {
site,
Expand Down
7 changes: 6 additions & 1 deletion src/entities/sites/handlers/branches/delete-branch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { canAdminSiteGuard } from '../../guards/can-admin-site-guard';
import { EventType } from '../../../../events/event-type';
import { branchExistsGuard } from '../../guards/branch-exists-guard';
import { removeSiteBranchFromCaddy } from '../../../../caddy/configuration';
import { Logger } from '../../../../commons/logger/logger';

const validators = [
params(object({
Expand All @@ -19,6 +20,8 @@ const validators = [
})),
];

const logger = new Logger('meli.api:deleteBranch');

async function handler(req: Request, res: Response): Promise<void> {
const { siteId, branchId } = req.params;

Expand Down Expand Up @@ -61,7 +64,9 @@ async function handler(req: Request, res: Response): Promise<void> {
},
});

await removeSiteBranchFromCaddy(site, branch);
removeSiteBranchFromCaddy(site, branch).catch(err => {
logger.error(err);
});

emitEvent(EventType.site_branch_deleted, {
site,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { params } from '../../../../commons/express-joi/params';
import { $id } from '../../../../utils/id';
import { serializeBranch } from '../../serialize-branch';
import { configureSiteBranchInCaddy } from '../../../../caddy/configuration';
import { Logger } from '../../../../commons/logger/logger';

const validators = [
params(object({
Expand All @@ -18,6 +19,8 @@ const validators = [
})),
];

const logger = new Logger('meli.api:removeBranchPassword');

async function handler(req: Request, res: Response): Promise<void> {
const { siteId, branchId } = req.params;

Expand All @@ -38,7 +41,9 @@ async function handler(req: Request, res: Response): Promise<void> {
});
const branch = site.branches.find(brch => brch._id === branchId);

await configureSiteBranchInCaddy(site, branch);
configureSiteBranchInCaddy(site, branch).catch(err => {
logger.error(err);
});

emitEvent(EventType.site_branch_password_removed, {
site,
Expand Down
7 changes: 6 additions & 1 deletion src/entities/sites/handlers/branches/rename-branch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { params } from '../../../../commons/express-joi/params';
import { $id } from '../../../../utils/id';
import { $channelName } from '../../branch';
import { configureSiteInCaddy } from '../../../../caddy/configuration';
import { Logger } from '../../../../commons/logger/logger';

const validators = [
params(object({
Expand All @@ -23,6 +24,8 @@ const validators = [
})),
];

const logger = new Logger('meli.api:removeBranch');

async function handler(req: Request, res: Response): Promise<void> {
const { siteId, branchId } = req.params;
const newName = req.body.name;
Expand All @@ -44,7 +47,9 @@ async function handler(req: Request, res: Response): Promise<void> {
});
const branch = site.branches.find(brch => brch._id === branchId);

await configureSiteInCaddy(site);
configureSiteInCaddy(site).catch(err => {
logger.error(err);
});

emitEvent(EventType.site_branch_updated, {
site,
Expand Down
7 changes: 6 additions & 1 deletion src/entities/sites/handlers/branches/set-branch-password.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { $id } from '../../../../utils/id';
import { hashPassword } from '../../hash-password';
import { serializeBranch } from '../../serialize-branch';
import { configureSiteBranchInCaddy } from '../../../../caddy/configuration';
import { Logger } from '../../../../commons/logger/logger';

const validators = [
params(object({
Expand All @@ -23,6 +24,8 @@ const validators = [
})),
];

const logger = new Logger('meli.api:setBranchPassword');

async function handler(req: Request, res: Response): Promise<void> {
const { siteId, branchId } = req.params;
const { password: plain } = req.body;
Expand All @@ -46,7 +49,9 @@ async function handler(req: Request, res: Response): Promise<void> {
});
const branch = site.branches.find(brch => brch._id === branchId);

await configureSiteBranchInCaddy(site, branch);
configureSiteBranchInCaddy(site, branch).catch(err => {
logger.error(err);
});

emitEvent(EventType.site_branch_password_set, {
site,
Expand Down
7 changes: 6 additions & 1 deletion src/entities/sites/handlers/branches/set-branch-redirects.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import { getBranchFilePath, getBranchFilesDir } from '../../get-site-dir';
import { Branch } from '../../branch';
import { serializeRedirect } from '../../serialize-redirect';
import { $redirect, FileRedirectConfig, Redirect, RedirectType } from '../../redirect';
import { Logger } from '../../../../commons/logger/logger';

async function storeBranchFilesToFs(siteId: string, branch: Branch, redirects: Redirect<FileRedirectConfig>[]) {
const dir = getBranchFilesDir(siteId, branch);
Expand Down Expand Up @@ -53,6 +54,8 @@ const validators = [
})),
];

const logger = new Logger('meli.api:setBranchRedirects');

async function handler(req: Request, res: Response): Promise<void> {
const { siteId, branchId } = req.params;
const { redirects } = req.body;
Expand Down Expand Up @@ -91,7 +94,9 @@ async function handler(req: Request, res: Response): Promise<void> {
// do this in memory to avoid querying db again
branch.redirects = redirects;

await configureSiteBranchInCaddy(site, branch);
configureSiteBranchInCaddy(site, branch).catch(err => {
logger.error(err);
});

emitEvent(EventType.site_branch_redirects_set, {
site,
Expand Down
7 changes: 6 additions & 1 deletion src/entities/sites/handlers/branches/set-branch-release.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import { params } from '../../../../commons/express-joi/params';
import { serializeBranch } from '../../serialize-branch';
import { linkBranchToRelease } from '../../link-branch-to-release';
import { configureSiteBranchInCaddy } from '../../../../caddy/configuration';
import { Logger } from '../../../../commons/logger/logger';

const validators = [
params(object({
Expand All @@ -25,6 +26,8 @@ const validators = [
})),
];

const logger = new Logger('meli.api:setBranchRelease');

async function handler(req: Request, res: Response): Promise<void> {
const { siteId, branchId } = req.params;
const { release: releaseId } = req.body;
Expand Down Expand Up @@ -62,7 +65,9 @@ async function handler(req: Request, res: Response): Promise<void> {

await linkBranchToRelease(site, branch, release);

await configureSiteBranchInCaddy(site, branch);
configureSiteBranchInCaddy(site, branch).catch(err => {
logger.error(err);
});

emitEvent(EventType.site_branch_release_set, {
site,
Expand Down
7 changes: 6 additions & 1 deletion src/entities/sites/handlers/branches/update-branch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { canAdminSiteGuard } from '../../guards/can-admin-site-guard';
import { Sites } from '../../site';
import { serializeBranch } from '../../serialize-branch';
import { configureSiteBranchInCaddy } from '../../../../caddy/configuration';
import { Logger } from '../../../../commons/logger/logger';

async function releaseExists(siteId: string, branchId: string): Promise<boolean> {
const count = await Sites().countDocuments({
Expand All @@ -28,6 +29,8 @@ const validators = [
})),
];

const logger = new Logger('meli.api:updateBranch');

async function handler(req: Request, res: Response): Promise<void> {
const { siteId, branchId } = req.params;

Expand All @@ -50,7 +53,9 @@ async function handler(req: Request, res: Response): Promise<void> {
});
const branch = site.branches.find(brch => brch._id === branchId);

await configureSiteBranchInCaddy(site, branch);
configureSiteBranchInCaddy(site, branch).catch(err => {
logger.error(err);
});

emitEvent(EventType.site_updated, {
site,
Expand Down
7 changes: 6 additions & 1 deletion src/entities/sites/handlers/delete-site.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,16 @@ import { emitEvent } from '../../../events/emit-event';
import { canAdminSiteGuard } from '../guards/can-admin-site-guard';
import { $id } from '../../../utils/id';
import { EventType } from '../../../events/event-type';
import { Logger } from '../../../commons/logger/logger';

const validators = [
params(object({
siteId: $id,
})),
];

const logger = new Logger('meli.api:deleteSite');

async function handler(req: Request, res: Response): Promise<void> {
const { siteId } = req.params;

Expand All @@ -27,7 +30,9 @@ async function handler(req: Request, res: Response): Promise<void> {
_id: siteId,
});

await removeSiteFromCaddy(siteId);
removeSiteFromCaddy(siteId).catch(err => {
logger.error(err);
});

emitEvent(EventType.site_deleted, {
site,
Expand Down
7 changes: 6 additions & 1 deletion src/entities/sites/handlers/releases/upload-release.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import { body } from '../../../../commons/express-joi/body';
import slugify from 'slugify';
import { getBranchUrl } from '../../get-branch-url';
import { configureSiteInCaddy } from '../../../../caddy/configuration';
import { Logger } from '../../../../commons/logger/logger';

async function createOrGetBranch(site: Site, branchName: string): Promise<Branch> {
let branch: Branch = site.branches.find(c => c.name === branchName);
Expand Down Expand Up @@ -72,6 +73,8 @@ async function setBranchRelease(site: Site, branch: Branch, release: Release): P
});
}

const logger = new Logger('meli.api:uploadRelease');

async function handler(req: Request, res: Response): Promise<void> {
const { file } = req;
const { siteId } = req.params;
Expand Down Expand Up @@ -105,7 +108,9 @@ async function handler(req: Request, res: Response): Promise<void> {
}),
);

await configureSiteInCaddy(site);
configureSiteInCaddy(site).catch(err => {
logger.error(err);
});

emitEvent(EventType.site_release_created, {
site,
Expand Down
7 changes: 6 additions & 1 deletion src/entities/sites/handlers/update-site.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { canAdminSiteGuard } from '../guards/can-admin-site-guard';
import { EventType } from '../../../events/event-type';
import { BadRequestError } from '../../../commons/errors/bad-request-error';
import { configureSiteInCaddy } from '../../../caddy/configuration';
import { Logger } from '../../../commons/logger/logger';

async function branchExists(siteId: string, branchId: string): Promise<boolean> {
const count = await Sites().countDocuments({
Expand All @@ -24,6 +25,8 @@ const validators = [
body($site),
];

const logger = new Logger('meli.api:updateSite');

async function handler(req: Request, res: Response): Promise<void> {
const { siteId } = req.params;

Expand Down Expand Up @@ -52,7 +55,9 @@ async function handler(req: Request, res: Response): Promise<void> {
_id: siteId,
});

await configureSiteInCaddy(site);
configureSiteInCaddy(site).catch(err => {
logger.error(err);
});

emitEvent(EventType.site_updated, {
site,
Expand Down
7 changes: 6 additions & 1 deletion src/entities/teams/handlers/sites/add-site.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { teamExistsGuard } from '../../guards/team-exists-guard';
import { EventType } from '../../../../events/event-type';
import { Teams } from '../../team';
import { generateTokenValue } from '../../../../utils/generate-token-value';
import { Logger } from '../../../../commons/logger/logger';

const validators = [
params(object({
Expand All @@ -25,6 +26,8 @@ const validators = [
})),
];

const logger = new Logger('meli.api:addSite');

async function handler(req: Request, res: Response): Promise<void> {
const { teamId } = req.params;

Expand All @@ -47,7 +50,9 @@ async function handler(req: Request, res: Response): Promise<void> {
};

await Sites().insertOne(site);
await configureSiteInCaddy(site);
configureSiteInCaddy(site).catch(err => {
logger.error(err);
});

emitEvent(EventType.team_site_added, {
team: await Teams().findOne({
Expand Down

0 comments on commit ac8ba64

Please sign in to comment.