mirror of
https://github.com/kestra-io/kestra.git
synced 2025-12-19 18:05:41 -05:00
feat(ns-files): add a metadata layer on top for better performance & versioned ns files
part of https://github.com/kestra-io/kestra/issues/5617
This commit is contained in:
committed by
brian-mulier-p
parent
d20f7039c7
commit
682d258e7b
@@ -0,0 +1,23 @@
|
||||
package io.kestra.repository.h2;
|
||||
|
||||
import io.kestra.core.models.namespaces.files.NamespaceFileMetadata;
|
||||
import io.kestra.jdbc.repository.AbstractJdbcNamespaceFileMetadataRepository;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Named;
|
||||
import jakarta.inject.Singleton;
|
||||
import org.jooq.Condition;
|
||||
|
||||
@Singleton
|
||||
@H2RepositoryEnabled
|
||||
public class H2NamespaceFileMetadataRepository extends AbstractJdbcNamespaceFileMetadataRepository {
|
||||
@Inject
|
||||
public H2NamespaceFileMetadataRepository(@Named("namespaceFileMetadata") H2Repository<NamespaceFileMetadata> repository) {
|
||||
super(repository);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected Condition findCondition(String query) {
|
||||
return H2NamespaceFileMetadataRepositoryService.findCondition(jdbcRepository, query);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package io.kestra.repository.h2;
|
||||
|
||||
import io.kestra.core.models.namespaces.files.NamespaceFileMetadata;
|
||||
import io.kestra.jdbc.AbstractJdbcRepository;
|
||||
import org.jooq.Condition;
|
||||
import org.jooq.impl.DSL;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class H2NamespaceFileMetadataRepositoryService {
|
||||
public static Condition findCondition(AbstractJdbcRepository<NamespaceFileMetadata> jdbcRepository, String query) {
|
||||
List<Condition> conditions = new ArrayList<>();
|
||||
|
||||
if (query != null) {
|
||||
conditions.add(jdbcRepository.fullTextCondition(List.of("fulltext"), query));
|
||||
}
|
||||
|
||||
return conditions.isEmpty() ? DSL.trueCondition() : DSL.and(conditions);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE kv_metadata ALTER COLUMN "created" TIMESTAMP NOT NULL GENERATED ALWAYS AS (PARSEDATETIME(LEFT(COALESCE(JQ_STRING("value", '.created'), JQ_STRING("value", '.updated')), 23) || '+00:00', 'yyyy-MM-dd''T''HH:mm:ss.SSSXXX'))
|
||||
@@ -0,0 +1,21 @@
|
||||
CREATE TABLE IF NOT EXISTS namespace_file_metadata (
|
||||
"key" VARCHAR(768) NOT NULL PRIMARY KEY,
|
||||
"value" TEXT NOT NULL,
|
||||
"tenant_id" VARCHAR(250) GENERATED ALWAYS AS (JQ_STRING("value", '.tenantId')),
|
||||
"namespace" VARCHAR(150) NOT NULL GENERATED ALWAYS AS (JQ_STRING("value", '.namespace')),
|
||||
"path" VARCHAR(350) NOT NULL GENERATED ALWAYS AS (JQ_STRING("value", '.path')),
|
||||
"parent_path" VARCHAR(350) GENERATED ALWAYS AS (JQ_STRING("value", '.parentPath')),
|
||||
"version" INT NOT NULL GENERATED ALWAYS AS (JQ_INTEGER("value", '.version')),
|
||||
"last" BOOL NOT NULL GENERATED ALWAYS AS (JQ_BOOLEAN("value", '.last')),
|
||||
"size" BIGINT NOT NULL GENERATED ALWAYS AS (JQ_LONG("value", '.size')),
|
||||
"created" TIMESTAMP NOT NULL GENERATED ALWAYS AS (PARSEDATETIME(LEFT(JQ_STRING("value", '.created'), 23) || '+00:00', 'yyyy-MM-dd''T''HH:mm:ss.SSSXXX')),
|
||||
"updated" TIMESTAMP NOT NULL GENERATED ALWAYS AS (PARSEDATETIME(LEFT(JQ_STRING("value", '.updated'), 23) || '+00:00', 'yyyy-MM-dd''T''HH:mm:ss.SSSXXX')),
|
||||
"deleted" BOOL NOT NULL GENERATED ALWAYS AS (JQ_BOOLEAN("value", '.deleted')),
|
||||
"fulltext" TEXT NOT NULL GENERATED ALWAYS AS (JQ_STRING("value", '.path'))
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS ix_last_deleted_tenant_namespace_path_version ON namespace_file_metadata ("last", "deleted", "tenant_id", "namespace", "path", "version");
|
||||
CREATE INDEX IF NOT EXISTS ix_last_deleted_tenant_namespace_path ON namespace_file_metadata ("last", "deleted", "tenant_id", "namespace", "path");
|
||||
CREATE INDEX IF NOT EXISTS ix_last_deleted_tenant_namespace_parent_path ON namespace_file_metadata ("last", "deleted", "tenant_id", "namespace", "parent_path");
|
||||
CREATE INDEX IF NOT EXISTS ix_last_deleted_tenant_namespace_version ON namespace_file_metadata ("last", "deleted", "tenant_id", "namespace", "version");
|
||||
CREATE INDEX IF NOT EXISTS ix_last_deleted_tenant_path_version ON namespace_file_metadata ("last", "deleted", "tenant_id", "path", "version");
|
||||
@@ -0,0 +1,7 @@
|
||||
package io.kestra.repository.h2;
|
||||
|
||||
import io.kestra.jdbc.repository.AbstractJdbcNamespaceFileMetadataRepositoryTest;
|
||||
|
||||
public class H2NamespaceFileMetadataRepositoryTest extends AbstractJdbcNamespaceFileMetadataRepositoryTest {
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user