mirror of https://github.com/milvus-io/milvus.git
2.5 KiB
2.5 KiB
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 implementwal
interface fromwalimpls
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 implementwalimpls
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 relatedOpener
.Scanner
keep same lifetime with underlying reader of wal, and it's lifetime is always included in relatedWAL
.
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