src/common/persistence/AllExtentsAsyncIterator.ts (32 lines of code) (raw):
import { DEFAULT_EXTENT_GC_PROTECT_TIME_IN_MS } from "../utils/constants";
import IExtentMetadataStore from "./IExtentMetadataStore";
/**
* Async iterator to enumerate all extent IDs.
*
* @export
* @class AllExtentsAsyncIterator
* @implements {AsyncIterator<string[]>}
*/
export default class AllExtentsAsyncIterator
implements AsyncIterator<string[]> {
private unit: number = 1000;
private done: boolean = false;
private marker?: number;
private readonly time: Date;
constructor(private readonly extentMetadata: IExtentMetadataStore) {
this.time = new Date();
}
public async next(): Promise<IteratorResult<string[]>> {
if (this.done) {
return { done: true, value: [] };
}
const [extents, nextMarker] = await this.extentMetadata.listExtents(
undefined,
this.unit,
this.marker,
this.time,
DEFAULT_EXTENT_GC_PROTECT_TIME_IN_MS
);
this.marker = nextMarker;
if (nextMarker === undefined) {
this.done = true;
}
return {
done: false,
value: extents.map(val => val.id)
};
}
}