Commit 343bd0d8 authored by nanahira's avatar nanahira

remove redlock

parent d9138762
Pipeline #39003 passed with stages
in 5 minutes and 16 seconds
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
"@nestjs/typeorm": "^8.0.2", "@nestjs/typeorm": "^8.0.2",
"@sesamecare-oss/redlock": "^1.4.0", "@sesamecare-oss/redlock": "^1.4.0",
"axios": "^0.21.1", "axios": "^0.21.1",
"better-lock": "^3.2.0",
"busboy": "^0.2.14", "busboy": "^0.2.14",
"class-transformer": "^0.4.0", "class-transformer": "^0.4.0",
"class-validator": "^0.13.1", "class-validator": "^0.13.1",
...@@ -35,7 +36,6 @@ ...@@ -35,7 +36,6 @@
"mustache-express": "^1.3.1", "mustache-express": "^1.3.1",
"p-queue": "6.6.2", "p-queue": "6.6.2",
"pg": "^8.7.3", "pg": "^8.7.3",
"pg-native": "^3.5.2",
"readdirp": "^3.6.0", "readdirp": "^3.6.0",
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
...@@ -4204,6 +4204,12 @@ ...@@ -4204,6 +4204,12 @@
} }
] ]
}, },
"node_modules/better-lock": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/better-lock/-/better-lock-3.2.0.tgz",
"integrity": "sha512-Wm6j7yKyEjXBCIhjRTVOEScyxOtwFNCuGnQ63bRIwialPQSGcltmMc319t4AWuI8xr/INSfAs7I6x9oN+o2fqA==",
"license": "MIT"
},
"node_modules/binary-extensions": { "node_modules/binary-extensions": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
...@@ -15172,6 +15178,11 @@ ...@@ -15172,6 +15178,11 @@
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
}, },
"better-lock": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/better-lock/-/better-lock-3.2.0.tgz",
"integrity": "sha512-Wm6j7yKyEjXBCIhjRTVOEScyxOtwFNCuGnQ63bRIwialPQSGcltmMc319t4AWuI8xr/INSfAs7I6x9oN+o2fqA=="
},
"binary-extensions": { "binary-extensions": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
......
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
"@nestjs/typeorm": "^8.0.2", "@nestjs/typeorm": "^8.0.2",
"@sesamecare-oss/redlock": "^1.4.0", "@sesamecare-oss/redlock": "^1.4.0",
"axios": "^0.21.1", "axios": "^0.21.1",
"better-lock": "^3.2.0",
"busboy": "^0.2.14", "busboy": "^0.2.14",
"class-transformer": "^0.4.0", "class-transformer": "^0.4.0",
"class-validator": "^0.13.1", "class-validator": "^0.13.1",
......
...@@ -20,7 +20,7 @@ import { ArchiveMirror } from './entities/ArchiveMirror.entity'; ...@@ -20,7 +20,7 @@ import { ArchiveMirror } from './entities/ArchiveMirror.entity';
import { MirrorService } from './mirror/mirror.service'; import { MirrorService } from './mirror/mirror.service';
import { HttpModule } from '@nestjs/axios'; import { HttpModule } from '@nestjs/axios';
import { RedisModule } from '@nestjs-modules/ioredis'; import { RedisModule } from '@nestjs-modules/ioredis';
import { LockService } from './lock/lock.service'; // import { LockService } from './lock/lock.service';
@Module({ @Module({
imports: [ imports: [
...@@ -60,6 +60,6 @@ import { LockService } from './lock/lock.service'; ...@@ -60,6 +60,6 @@ import { LockService } from './lock/lock.service';
}), }),
], ],
controllers: [AppController, AdminController, UpdateController], controllers: [AppController, AdminController, UpdateController],
providers: [AppService, PackagerService, AssetsS3Service, PackageS3Service, UpdateService, MirrorService, LockService], providers: [AppService, PackagerService, AssetsS3Service, PackageS3Service, UpdateService, MirrorService, /*LockService*/],
}) })
export class AppModule {} export class AppModule {}
...@@ -12,6 +12,7 @@ import _ from 'lodash'; ...@@ -12,6 +12,7 @@ import _ from 'lodash';
import delay from 'delay'; import delay from 'delay';
import { LockService } from 'src/lock/lock.service'; import { LockService } from 'src/lock/lock.service';
import { createCIDR } from 'ip6addr'; import { createCIDR } from 'ip6addr';
import BetterLock from 'better-lock';
export interface Middleware { export interface Middleware {
url: string; url: string;
...@@ -46,7 +47,7 @@ export class MirrorService extends ConsoleLogger implements OnApplicationBootstr ...@@ -46,7 +47,7 @@ export class MirrorService extends ConsoleLogger implements OnApplicationBootstr
private config: ConfigService, private config: ConfigService,
private http: HttpService, private http: HttpService,
private packageS3: PackageS3Service, private packageS3: PackageS3Service,
private redlock: LockService // private redlock: LockService
) { ) {
super('mirror'); super('mirror');
} }
...@@ -181,11 +182,13 @@ export class MirrorService extends ConsoleLogger implements OnApplicationBootstr ...@@ -181,11 +182,13 @@ export class MirrorService extends ConsoleLogger implements OnApplicationBootstr
} }
} }
private lock = new BetterLock();
private async uploadWithMiddleware(uploadInfo: UploadInfo, middleware: Middleware): Promise<UploadResult> { private async uploadWithMiddleware(uploadInfo: UploadInfo, middleware: Middleware): Promise<UploadResult> {
if (!middleware.singleton) { if (!middleware.singleton) {
return this.uploadWithMiddlewareProcess(uploadInfo, middleware); return this.uploadWithMiddlewareProcess(uploadInfo, middleware);
} }
return this.redlock.using([`mirror:${middleware.identifier}`], 5000, () => this.uploadWithMiddlewareProcess(uploadInfo, middleware)); return this.lock.acquire([`mirror:${middleware.identifier}`], () => this.uploadWithMiddlewareProcess(uploadInfo, middleware));
} }
async uploadWithRandomMiddleware(uploadInfo: UploadInfo, middlewares = Array.from(this.middlewares.values())) { async uploadWithRandomMiddleware(uploadInfo: UploadInfo, middlewares = Array.from(this.middlewares.values())) {
......
...@@ -17,6 +17,7 @@ import { createHash } from 'crypto'; ...@@ -17,6 +17,7 @@ import { createHash } from 'crypto';
import PQueue from 'p-queue'; import PQueue from 'p-queue';
import { LockService } from 'src/lock/lock.service'; import { LockService } from 'src/lock/lock.service';
import { InjectRedis, Redis } from '@nestjs-modules/ioredis'; import { InjectRedis, Redis } from '@nestjs-modules/ioredis';
import BetterLock from 'better-lock';
interface FileWithHash { interface FileWithHash {
file: readdirp.EntryInfo; file: readdirp.EntryInfo;
...@@ -91,7 +92,7 @@ export class PackagerService extends ConsoleLogger { ...@@ -91,7 +92,7 @@ export class PackagerService extends ConsoleLogger {
@Inject(forwardRef(() => AppService)) private readonly appService: AppService, @Inject(forwardRef(() => AppService)) private readonly appService: AppService,
private s3: PackageS3Service, private s3: PackageS3Service,
config: ConfigService, config: ConfigService,
private redlock: LockService, // private redlock: LockService,
@InjectRedis() private readonly redis: Redis @InjectRedis() private readonly redis: Redis
) { ) {
super('packager'); super('packager');
...@@ -251,6 +252,8 @@ export class PackagerService extends ConsoleLogger { ...@@ -251,6 +252,8 @@ export class PackagerService extends ConsoleLogger {
]); ]);
} }
private lock = new BetterLock();
async archive(root: string, archiveTask: ArchiveTask): Promise<Archive> { async archive(root: string, archiveTask: ArchiveTask): Promise<Archive> {
const archive = archiveTask.archive; const archive = archiveTask.archive;
const archiveName = archiveTask.archiveFullPath; const archiveName = archiveTask.archiveFullPath;
...@@ -264,7 +267,7 @@ export class PackagerService extends ConsoleLogger { ...@@ -264,7 +267,7 @@ export class PackagerService extends ConsoleLogger {
return archive; return archive;
} }
} }
return this.redlock.using([`archive:${archiveTask.path}`], 30000, async () => this.archiveProcess(root, archiveTask)); return this.lock.acquire([`archive:${archiveTask.path}`], async () => this.archiveProcess(root, archiveTask));
} }
private archiveQueue = new PQueue({ concurrency: parseInt(process.env.PACKAGE_COCURRENCY) || os.cpus().length }); private archiveQueue = new PQueue({ concurrency: parseInt(process.env.PACKAGE_COCURRENCY) || os.cpus().length });
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment