Skip to content

Latest commit

 

History

History
265 lines (181 loc) · 8.76 KB

CHANGELOG.md

File metadata and controls

265 lines (181 loc) · 8.76 KB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

0.10.0 - 2024-09-24

Added

  • Added journal.Interval type, to represent a half-open range of positions.
  • Added journal.RecordNotFoundError, ValueNotFoundError and ConflictError.

Changed

  • [BC] journal.Journal.Bounds() now returns an Interval instead of a two Position values.
  • [BC] journal.Search(), RangeFromSearchResult(), Scan() and ScanFromSearchResult() now accept an Interval parameter instead of two Position values.

Removed

  • [BC] Removed journal.ErrConflict and ErrNotFound. Use IsConflict() and IsNotFound() to test for specific errors instead.

0.9.3 - 2024-04-03

Added

  • Added journal.AppendWithConflictResolution().
  • Added journal.IgnoreNotFound().

0.9.2 - 2024-03-27

Added

  • Added journal.RangeFromSearchResult()

0.9.1 - 2024-03-19

Added

  • Added property-based tests for journal and key/value store implementations using rapid. These new tests uncovered the bugs described below.

Fixed

  • Fixed issue with memoryjournal Range() implementation that would pass the wrong position to the RangeFunc after the journal was truncated.
  • Fixed issue with dynamojournal Bounds() implementation that could potentially report the wrong lower bound after truncating (as of 0.9.0).

Changed

  • dynamojournal now cleans up (hard-deletes) records that have been marked as truncated when scanning for lower bounds.

0.9.0 - 2024-03-18

Added

  • Added dynamojournal.NewBinaryStore() and dynamokv.NewBinaryStore().
  • Added Option type and WithRequestHook() option to dynamojournal and dynamokv. The request hook is a more flexible replacement for the request-type-specific decorator fields that were on the BinaryStore structs, which were removed in this release.

Removed

  • [BC] Removed dynamojournal.BinaryStore and dynamokv.BinaryStore use each package's NewBinaryStore() function instead.
  • [BC] Removed dynamojournal.CreateTable() and dynamokv.CreateTable(). The table creation is now managed at runtime by the journal and keyspace stores.

Fixed

  • The pgjournal and dynamojournal implementations can now correctly truncate all journal records. Previously they would only allow truncation up to but not including the most recent record.

0.8.0 - 2024-03-17

This release changes the journal.Store and journal.Journal interfaces to be generic types, parameterized over records of type T, and the kv.Store and kv.Keyspace to be parameterized over types K and V, thereby making the typedjournal and typedkv packages obsolete.

This eliminates the need for duplicating all of the generic algorithms (such as Search(), LastRecord(), etc) for both binary and typed implementations.

Added

  • Added journal.BinaryStore, BinaryJournal and BinaryRangeFunc aliases, equivalent to prior (non-generic) definitions of Store, Journal and RangeFunc, respectively.
  • Added kv.BinaryStore, BinaryKeyspace and BinaryRangeFunc aliases, equivalent to prior (non-generic) definitions of Store, Keyspace and RangeFunc, respectively.
  • Added marshaler.ProtocolBuffers marshaler.
  • Added marshaler.Bool marshaler.
  • Added journal.NewMarshalingStore() and kv.NewMarshalingStore(), which wrap binary implementations with a marshaler.Marshaler, serving as a replacement for the typedjournal and typedkv packages, respectively.
  • Added journal.Scan() and ScanFromSearchResult()

Changed

  • [BC] Changed journal and kv interfaces to be generic.
  • [BC] Moved typedmarshaler package to marshaler at the root of the module.

Removed

  • [BC] Removed typedjournal, typedkv and typedmarshaler packages.

0.7.0 - 2024-03-17

Changed

  • [BC] The pgjournal implementation now supports the full range of unsigned journal.Position values. The uint64 value-space is "mapped" onto the int64 space such that uint64(0) == math.MinInt64, thereby preserving order. The journal_record.position column has been renamed to encoded_position to make it clearer that the value can not be used as-is.

Fixed

  • Calling Range() on an empty journal now correctly returns journal.ErrNotFound. This issue affected all journal implementations.

Removed

  • [BC] Removed journal.MaxPosition. All implementations now support the full unsigned 64-bit range of journal.Position values. Technically, the memoryjournal implementation is limited to math.MaxInt non-truncated records at any given time, but this is not practical anyway.

0.6.0 - 2024-03-16

Added

  • Added journal.RunBenchmarks() and kv.RunBenchmarks() to run generic benchmarks for a journal or key-value store implementation.

Changed

  • [BC] The PostgreSQL drivers pgjournal and pgkv now assign each journal and keyspace a sequential ID to avoid repeating the journal/keyspace name in every row.

Removed

  • [BC] Removed pgjournal.CreateSchema() and pgkv.CreateSchema(). The schema creation is now managed at runtime by the journal and keyspace stores. This change is in preparation for the stores also managing other schema changes, such as table partitioning.

Fixed

  • PostgreSQL schema creation is now performed within a transaction.

0.5.0 - 2024-03-12

Added

  • Added typedjournal.IsEmpty(), which returns true if a journal currently has no records.
  • Added typedjournal.IsFresh(), which returns true if a journal has never been written to.
  • Added typedjournal.FirstRecord() and LastRecord().
  • Added typedmarshaler.Zero()

Changed

  • [BC] Changed typedjournal.Journal to use pointer receivers
  • [BC] Changed typedkv.Keyspace to use pointer receivers

0.4.0 - 2024-03-11

Changed

  • [BC] Moved typedjournal and typedkv packages into adaptor directory.

Added

  • Added typedmarshaler package.
  • Added journal.IsEmpty(), which returns true if a journal currently has no records.
  • Added journal.IsFresh(), which returns true if a journal has never been written to.
  • Added journal.FirstRecord() and LastRecord().

Removed

  • [BC] Removed typedjournal.Marshaler and typedkv.Marshaler. Use typedmarshaler.Marshaler instead.

0.3.0 - 2024-03-09

Added

  • Added journal.BinarySearch()
  • Added typedjournal package, a generic wrapper around a journal.Store
  • Added typedkv package, a generic wrapper around a kv.Store

0.2.1 - 2024-03-02

Added

  • Added journal.WithTelemetry() and kv.WithTelemetry(), which add logging, tracing and metrics to an existing journal or key-value store, respectively.

0.2.0 - 2024-03-02

Changed

  • [BC] Moved postgres.JournalStore to pgjournal.Store
  • [BC] Moved postgres.KeyValueStore to pgkv.Store
  • [BC] Moved memory.JournalStore to memoryjournal.Store
  • [BC] Moved memory.KeyValueStore to memorykv.Store
  • [BC] Moved dynamodb.JournalStore to dynamojournal.Store
  • [BC] Moved dynamodb.KeyValueStore to dynamokv.Store

0.1.0 - 2023-10-16

Added

  • Added journal abstraction
  • Added kv abstraction
  • Added DynamoDB implementations
  • Added PostgreSQL implementations
  • Added in-memory test implementations