Optimize bug fix
This commit is contained in:
@@ -163,32 +163,24 @@ export class DataReader<T> {
|
||||
return results;
|
||||
}
|
||||
|
||||
/*
|
||||
getAllData(): DataEntry<T>[] {
|
||||
if (this.fd === null) throw new Error('Data file not opened');
|
||||
|
||||
const entries = this.indexReader.getAllEntries();
|
||||
const results: DataEntry<T>[] = [];
|
||||
let first = this.getByIndex(0);
|
||||
if (first == null) {
|
||||
return [];
|
||||
}
|
||||
results.push(first);
|
||||
|
||||
for (const entry of entries) {
|
||||
const buf = this.readRecordAt(this.fd, entry.offset, entry.length);
|
||||
const result = DataProtocol.deserializeRecord(
|
||||
buf,
|
||||
0,
|
||||
this.serializer
|
||||
);
|
||||
if (result) {
|
||||
results.push({
|
||||
sequence: entry.sequence,
|
||||
timestamp: entry.timestamp,
|
||||
data: result.data,
|
||||
});
|
||||
}
|
||||
}
|
||||
do {
|
||||
const entry = this.readNext();
|
||||
if (!entry) break;
|
||||
results.push(entry);
|
||||
} while (true);
|
||||
|
||||
return results;
|
||||
}
|
||||
*/
|
||||
|
||||
getRecordCount(): number {
|
||||
return this.indexReader.getHeader().writtenCnt;
|
||||
|
||||
@@ -11,8 +11,8 @@ export class IndexReader {
|
||||
private path: string | null = null;
|
||||
|
||||
// Sequential read state
|
||||
private currentIndex: number = 0;
|
||||
private currentSequence: number = 0;
|
||||
private currentIndex: number = -1;
|
||||
private currentSequence: number = -1;
|
||||
|
||||
// Reusable buffer for reading entries
|
||||
private entryBuffer: Buffer = Buffer.alloc(INDEX_ENTRY_SIZE);
|
||||
@@ -49,22 +49,6 @@ export class IndexReader {
|
||||
return this.readEntryAt(this.fd, index);
|
||||
}
|
||||
|
||||
findBySequenceRange(startSeq: number, endSeq: number): { index: number; entry: IndexEntry }[] {
|
||||
if (this.fd === null || !this.header) throw new Error('Index file not opened');
|
||||
|
||||
const results: { index: number; entry: IndexEntry }[] = [];
|
||||
const first = this.searchSequenceLowerBound(this.fd, this.header.writtenCnt, startSeq);
|
||||
if (first == null) return [];
|
||||
|
||||
results.push(first);
|
||||
for (let i = this.currentIndex; i < this.header.writtenCnt; i++) {
|
||||
const entry = this.readNextEntry(this.fd);
|
||||
if (entry == null || entry.sequence > endSeq) break;
|
||||
results.push({ index: this.currentIndex, entry });
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
/*
|
||||
getAllEntries(): IndexEntry[] {
|
||||
if (this.fd === null || !this.header) throw new Error('Index file not opened');
|
||||
@@ -78,15 +62,39 @@ export class IndexReader {
|
||||
}
|
||||
*/
|
||||
|
||||
findBySequenceRange(startSeq: number, endSeq: number): { index: number; entry: IndexEntry }[] {
|
||||
if (this.fd === null || !this.header) throw new Error('Index file not opened');
|
||||
|
||||
const results: { index: number; entry: IndexEntry }[] = [];
|
||||
const currIdx = this.currentIndex;
|
||||
const first = this.searchSequenceLowerBound(this.fd, this.header.writtenCnt, startSeq);
|
||||
if (first === null) {
|
||||
this.currentIndex = currIdx;
|
||||
return [];
|
||||
}
|
||||
|
||||
results.push(first);
|
||||
while (this.currentIndex < this.header.writtenCnt - 1) {
|
||||
const entry = this.readNextEntry(this.fd);
|
||||
if (entry == null || entry.sequence > endSeq) break;
|
||||
results.push({ index: this.currentIndex, entry });
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
findByTimeRange(startTs: bigint, endTs: bigint): { index: number; entry: IndexEntry }[] {
|
||||
if (this.fd === null || !this.header) throw new Error('Index file not opened');
|
||||
|
||||
const results: { index: number; entry: IndexEntry }[] = [];
|
||||
const currIdx = this.currentIndex;
|
||||
const first = this.searchTimestampLowerBound(this.fd, this.header.writtenCnt, startTs);
|
||||
if (first === null) return [];
|
||||
if (first === null) {
|
||||
this.currentIndex = currIdx;
|
||||
return [];
|
||||
}
|
||||
|
||||
results.push(first);
|
||||
for (let i = this.currentIndex; i < this.header.writtenCnt; i++) {
|
||||
while (this.currentIndex < this.header.writtenCnt - 1) {
|
||||
const entry = this.readNextEntry(this.fd);
|
||||
if (entry == null || entry.timestamp > endTs) break;
|
||||
results.push({ index: this.currentIndex, entry });
|
||||
|
||||
Reference in New Issue
Block a user