From d2caa5e20295a7e74b09d3a32ef112eb8b23e995 Mon Sep 17 00:00:00 2001 From: Gagan Bhullar Date: Wed, 14 Aug 2024 09:53:53 -0600 Subject: [PATCH] feat(nodejs): add delete unverified (#1530) PR fixes part of #1527 --- nodejs/__test__/table.test.ts | 15 +++++++++++++++ nodejs/lancedb/table.ts | 6 +++++- nodejs/src/table.rs | 8 ++++++-- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/nodejs/__test__/table.test.ts b/nodejs/__test__/table.test.ts index 7cc9556a..34773094 100644 --- a/nodejs/__test__/table.test.ts +++ b/nodejs/__test__/table.test.ts @@ -726,6 +726,21 @@ describe("when optimizing a dataset", () => { expect(stats.prune.bytesRemoved).toBeGreaterThan(0); expect(stats.prune.oldVersionsRemoved).toBe(3); }); + + it("delete unverified", async () => { + const version = await table.version(); + const versionFile = `${tmpDir.name}/${table.name}.lance/_versions/${version - 1}.manifest`; + fs.rmSync(versionFile); + + let stats = await table.optimize({ deleteUnverified: false }); + expect(stats.prune.oldVersionsRemoved).toBe(0); + + stats = await table.optimize({ + cleanupOlderThan: new Date(), + deleteUnverified: true, + }); + expect(stats.prune.oldVersionsRemoved).toBeGreaterThan(1); + }); }); describe.each([arrow13, arrow14, arrow15, arrow16, arrow17])( diff --git a/nodejs/lancedb/table.ts b/nodejs/lancedb/table.ts index 83758b39..11a76e9c 100644 --- a/nodejs/lancedb/table.ts +++ b/nodejs/lancedb/table.ts @@ -84,6 +84,7 @@ export interface OptimizeOptions { * tbl.cleanupOlderVersions(new Date()); */ cleanupOlderThan: Date; + deleteUnverified: boolean; } /** @@ -671,7 +672,10 @@ export class LocalTable extends Table { cleanupOlderThanMs = new Date().getTime() - options.cleanupOlderThan.getTime(); } - return await this.inner.optimize(cleanupOlderThanMs); + return await this.inner.optimize( + cleanupOlderThanMs, + options?.deleteUnverified, + ); } async listIndices(): Promise { diff --git a/nodejs/src/table.rs b/nodejs/src/table.rs index 90925d1d..e0a17565 100644 --- a/nodejs/src/table.rs +++ b/nodejs/src/table.rs @@ -265,7 +265,11 @@ impl Table { } #[napi(catch_unwind)] - pub async fn optimize(&self, older_than_ms: Option) -> napi::Result { + pub async fn optimize( + &self, + older_than_ms: Option, + delete_unverified: Option, + ) -> napi::Result { let inner = self.inner_ref()?; let older_than = if let Some(ms) = older_than_ms { @@ -292,7 +296,7 @@ impl Table { let prune_stats = inner .optimize(OptimizeAction::Prune { older_than, - delete_unverified: None, + delete_unverified, error_if_tagged_old_versions: None, }) .await