///
import { StorageType } from './../common/types';
import { WorkerClient } from '../worker/WorkerClient';
import { Request, Response } from '../client/Client';
import { SerializedFunction } from '../common/SerializeFunction';
declare type InArgs = {
type: 'value' | 'partitions' | 'parts';
args?: any[];
partitions?: string[];
parts?: string[][];
};
declare type OutArgs = {
type: 'reduce' | 'partitions' | 'parts' | 'saveFile';
storageType?: StorageType;
saveFunc?: SerializedFunction<(data: any[], filename: string) => void | Promise>;
partitionFunc?: SerializedFunction<(v: any[], arg: any, partitionIndex: number) => any[][]>;
args?: any[];
};
declare type Partition = [number, string];
declare type CacheRecord = {
storageType: StorageType;
partitions: Partition[];
};
export interface FileLoader {
canHandleUrl(baseUrl: string, type: 'load' | 'save'): boolean | Promise;
listFiles(baseUrl: string, recursive?: boolean): string[] | Promise;
createDataLoader(baseUrl: string): SerializedFunction<(filename: string) => Buffer | Promise>;
initSaveProgress(baseUrl: string, overwrite?: boolean): void | Promise;
createDataSaver(baseUrl: string): SerializedFunction<(filename: string, buffer: Buffer) => void | Promise>;
markSaveSuccess(baseUrl: string): void | Promise;
}
interface TaskDetail {
index: number;
total: number;
}
export declare class MasterServer {
workers: WorkerClient[];
caches: CacheRecord[];
cacheIdCounter: number;
fileLoaderRegistry: FileLoader[];
constructor();
registerFileLoader(loader: FileLoader): void;
init(): Promise;
dispose(): Promise;
send(m: Response): void;
onTaskBegin(task: TaskDetail, progressTotal: number): void;
processRequest(m: Request): Promise;
getSplitIndecies(count: number): number[][];
splitByWorker(args: T[]): T[][];
mergeWorkerResult(resps: T[][]): T[];
finalWork(ins: InArgs[], indecies: number[][], out: OutArgs | OutArgs[], mappers: SerializedFunction<(arg: any, partitionIndex: number) => any>[], task: TaskDetail, progressTotal: number): Promise;
createRDD(args: any[], out: OutArgs | OutArgs[], mappers: SerializedFunction<(arg: any, partitionIndex: number) => any>[], task: TaskDetail): Promise;
addCache(storageType: StorageType, partitions: Partition[]): number;
loadCache(id: number, out: OutArgs | OutArgs[], mappers: SerializedFunction<(arg: any, partitionIndex: number) => any>[], task: TaskDetail): Promise;
releaseCache(id: number): Promise;
joinPieces(numPartitions: number, parts: string[][], out: OutArgs | OutArgs[], mappers: SerializedFunction<(arg: any, partitionIndex: number) => any>[], task: TaskDetail): Promise;
getPartitionCount(dependWork: Request): Promise;
getFileLoader(baseUrl: string, type: 'load' | 'save'): Promise;
loadFile(baseUrl: string, recursive: boolean, out: OutArgs | OutArgs[], mappers: SerializedFunction<(arg: any, partitionIndex: number) => any>[], task: TaskDetail): Promise;
getTaskDetail(dependWork: Request, out?: TaskDetail): TaskDetail;
runWork(dependWork: Request, out: OutArgs | OutArgs[], mappers?: SerializedFunction<(arg: any, partitionIndex: number) => any>[], task?: TaskDetail): Promise;
}
export {};