release: v0.5.1 — 存储后端生产级硬化(CRC-32/全库加密/WAL分片/页面化存储/多标签页锁/e2e)+ 深度审查修复(假实现接线/死代码清理)
This commit is contained in:
@@ -34,6 +34,7 @@
|
||||
*/
|
||||
|
||||
import { BloomFilter } from './bloom';
|
||||
import { crc32 } from '../crc32';
|
||||
import type { IndexEntry } from '../types';
|
||||
|
||||
/** v1 格式魔数("SSTB",u16 长度字段,兼容旧文件读取) */
|
||||
@@ -137,7 +138,15 @@ export class SSTableBuilder {
|
||||
view.setUint32(footerOffset + 16, bloomFilter.getHashCount(), false);
|
||||
view.setUint32(footerOffset + 20, this.entries.length, false);
|
||||
view.setUint32(footerOffset + 24, SSTABLE_MAGIC_V2, false);
|
||||
view.setUint32(footerOffset + 28, 0, false); // checksum (simplified: 0)
|
||||
// checksum 字段先写 0,全部字节就绪后计算整文件 CRC32 再回填
|
||||
view.setUint32(footerOffset + 28, 0, false);
|
||||
|
||||
// v0.4.5: 真实 CRC-32 校验和 — 覆盖除自身(最后 4 字节)外的全部内容。
|
||||
// checksum 永远非 0(计算结果为 0 时用 1 代替),读取端以 0 识别旧版无校验文件
|
||||
const all = new Uint8Array(buf);
|
||||
let checksum = crc32(all.subarray(0, all.byteLength - 4));
|
||||
if (checksum === 0) checksum = 1;
|
||||
view.setUint32(footerOffset + 28, checksum, false);
|
||||
|
||||
return {
|
||||
sstableData: new Uint8Array(buf),
|
||||
|
||||
Reference in New Issue
Block a user