congqixia fa2c3c404c
enhance: Forbid writing V1 format and always use StorageV2 (#46791)
Related to #46595

Remove the EnableStorageV2 config option and enforce StorageV2 format
across all write paths including compaction, import, write buffer, and
streaming segment allocation. V1 format write tests are now skipped as
writing V1 format is no longer supported.

---------

Signed-off-by: Congqi Xia <congqi.xia@zilliz.com>
2026-01-06 11:55:23 +08:00
..
2025-09-16 16:32:01 +08:00
2025-09-16 16:32:01 +08:00

WAL

wal package is the basic defination of wal interface of milvus streamingnode. wal use github.com/milvus-io/milvus/pkg/streaming/walimpls to implement the final wal service.

Project arrangement

  • wal
    • /: only define exposed interfaces.
    • /adaptor/: adaptors to implement wal interface from walimpls interface
    • /utility/: A utility code for common logic or data structure.
  • github.com/milvus-io/milvus/pkg/streaming/walimpls
    • /: define the underlying message system interfaces need to be implemented.
    • /registry/: A static lifetime registry to regsiter new implementation for inverting dependency.
    • /helper/: A utility used to help developer to implement walimpls conveniently.
    • /impls/: A official implemented walimpls sets.

Lifetime Of Interfaces

  • OpenerBuilder has a static lifetime in a programs:
  • Opener keep same lifetime with underlying resources (such as mq client).
  • WAL keep same lifetime with underlying writer of wal, and it's lifetime is always included in related Opener.
  • Scanner keep same lifetime with underlying reader of wal, and it's lifetime is always included in related WAL.

Add New Implemetation Of WAL

developper who want to add a new implementation of wal should implements the github.com/milvus-io/milvus/pkg/streaming/walimpls package interfaces. following interfaces is required:

  • walimpls.OpenerBuilderImpls
  • walimpls.OpenerImpls
  • walimpls.ScannerImpls
  • walimpls.WALImpls

OpenerBuilderImpls create OpenerImpls; OpenerImpls creates WALImpls; WALImpls create ScannerImpls. Then register the implmentation of walimpls.OpenerBuilderImpls into github.com/milvus-io/milvus/pkg/streaming/walimpls/registry package.

import "github.com/milvus-io/milvus/pkg/streaming/walimpls/registry"

var _ OpenerBuilderImpls = b{};
registry.RegisterBuilder(b{})

All things have been done.

Use WAL

import "github.com/milvus-io/milvus/internal/streamingnode/server/wal/registry"

name := "your builder name"
var yourCh *options.PChannelInfo

opener, err := registry.MustGetBuilder(name).Build()
if err != nil {
    panic(err)
}
ctx := context.Background()
logger, err := opener.Open(ctx, wal.OpenOption{
    Channel: yourCh  
})
if err != nil {
    panic(err)
}

Adaptor

package adaptor is used to adapt walimpls and wal together. common wal function should be implement by it. Such as:

  • lifetime management
  • interceptor implementation
  • scanner wrapped up
  • write ahead cache implementation