Commit 7e1abb5c authored by nanahira's avatar nanahira

singleton

parent db5fa01b
Pipeline #17470 passed with stages
in 1 minute and 30 seconds
...@@ -10,12 +10,14 @@ import { ArchiveMirror } from '../entities/ArchiveMirror.entity'; ...@@ -10,12 +10,14 @@ import { ArchiveMirror } from '../entities/ArchiveMirror.entity';
import { PackageS3Service } from '../package-s3/package-s3.service'; import { PackageS3Service } from '../package-s3/package-s3.service';
import _ from 'lodash'; import _ from 'lodash';
import delay from 'delay'; import delay from 'delay';
import { LockService } from 'src/lock/lock.service';
export interface Middleware { export interface Middleware {
url: string; url: string;
identifier: string; identifier: string;
maxSize?: number; maxSize?: number;
callback?: string; callback?: boolean;
singleton?: boolean;
} }
export interface UploadInfo { export interface UploadInfo {
...@@ -41,7 +43,8 @@ export class MirrorService extends ConsoleLogger { ...@@ -41,7 +43,8 @@ export class MirrorService extends ConsoleLogger {
private db: Connection, private db: Connection,
private config: ConfigService, private config: ConfigService,
private http: HttpService, private http: HttpService,
private packageS3: PackageS3Service private packageS3: PackageS3Service,
private redlock: LockService
) { ) {
super('mirror'); super('mirror');
this.init().then(); this.init().then();
...@@ -155,7 +158,7 @@ export class MirrorService extends ConsoleLogger { ...@@ -155,7 +158,7 @@ export class MirrorService extends ConsoleLogger {
return true; return true;
} }
private async uploadWithMiddleware(uploadInfo: UploadInfo, middleware: Middleware): Promise<UploadResult> { private async uploadWithMiddlewareProcess(uploadInfo: UploadInfo, middleware: Middleware): Promise<UploadResult> {
try { try {
this.log(`Uploading ${uploadInfo.url} with middleware ${middleware.identifier}.`); this.log(`Uploading ${uploadInfo.url} with middleware ${middleware.identifier}.`);
const { data } = await lastValueFrom( const { data } = await lastValueFrom(
...@@ -172,6 +175,13 @@ export class MirrorService extends ConsoleLogger { ...@@ -172,6 +175,13 @@ export class MirrorService extends ConsoleLogger {
} }
} }
private async uploadWithMiddleware(uploadInfo: UploadInfo, middleware: Middleware): Promise<UploadResult> {
if (!middleware.singleton) {
return this.uploadWithMiddlewareProcess(uploadInfo, middleware);
}
return this.redlock.using([`mirror:${middleware.identifier}`], 5000, () => this.uploadWithMiddlewareProcess(uploadInfo, middleware));
}
async uploadWithRandomMiddleware(uploadInfo: UploadInfo, middlewares = Array.from(this.middlewares.values())) { async uploadWithRandomMiddleware(uploadInfo: UploadInfo, middlewares = Array.from(this.middlewares.values())) {
if (!middlewares.length) { if (!middlewares.length) {
return null; return null;
......
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