Optimize bug fix

This commit is contained in:
Eli-Class
2026-02-04 08:01:29 +00:00
parent 339e2d37e3
commit 132189da48
2 changed files with 40 additions and 40 deletions

View File

@@ -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>[] = [];
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,
});
}
let first = this.getByIndex(0);
if (first == null) {
return [];
}
results.push(first);
do {
const entry = this.readNext();
if (!entry) break;
results.push(entry);
} while (true);
return results;
}
*/
getRecordCount(): number {
return this.indexReader.getHeader().writtenCnt;

View File

@@ -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 });