Skip to content

Nessie content types

Nessie comes with built-in content types. Every content-type relates to a corresponding content-type ID (Java enum like string), a payload ID and an implementation of the org.projectnessie.model.Content interface.

Nessie clients and servers need to know about the used content types via instances of org.projectnessie.model.types.ContentTypeBundle. Instances of this interface are loaded via the standard Java services mechanism.

Nessie servers, and tools that directly access the Nessie repository, need the ContentTypeBundle and instances of org.projectnessie.versioned.store.ContentSerializerBundle, also provided via the Java services mechanism, that provide serialization code via instances of org.projectnessie.versioned.store.ContentSerializer.

Known and assigned content types

Payload ID Content Type Model class Description Implementor
0 n/a n/a Legacy fallback value if the payload is unknown. n/a
1 ICEBERG_TABLE org.projectnessie.model.IcebergTable Iceberg tables. Project Nessie
2 DELTA_LAKE_TABLE org.projectnessie.model.DeltaLakeTable Delta Lake tables. Project Nessie
3 ICEBERG_VIEW org.projectnessie.model.IcebergView Iceberg views. Project Nessie
4 NAMESPACE org.projectnessie.model.Namespace Namespaces. Project Nessie
5 UDF org.projectnessie.model.UDF UDFs. Project Nessie

Since the ID values for payloads and the namespace for content types must be globally unique, please register your Payload ID and Content Type via an issue.

Implementing your own content types

TBD

Content type bundle

ContentTypeBundles make content types available to Nessie clients and servers.

Needs a resource file META-INF/services/org.projectnessie.model.types.ContentTypeBundle, which contains the class name(s) that implement the org.projectnessie.model.types.ContentTypeBundle interface.

The ContentTypeBundle.register(ContentTypeRegistry contentTypeRegistry) implementation must call the given Registrar with name of each content type and the model interface type that extends org.projectnessie.model.Content.

Serializer bundle

ContentSerializers provide (de)serialization functionality using a space efficient binary representation for Nessie servers.

Needs a resource file META-INF/services/org.projectnessie.versioned.store.ContentSerializerBundle, which contains the class name(s) that implement the org.projectnessie.versioned.store.ContentSerializerBundle interface.

The ContentSerializerBundle.register(ContentSerializerRegistry registry) implementation must call the given ContentTypeRegistry with the ContentSerializer implementation for each content type serializer.

Distributing content type and serializer bundles

TBD

  • One jar for Nessie clients
  • One jar for Nessie servers/tools

Open questions:

  • Dependencies??