log

package
v0.0.0-...-aa36858 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 9, 2023 License: MIT Imports: 20 Imported by: 0

Documentation

Index

Constants

View Source
const RaftRPC = 1

Variables

This section is empty.

Functions

This section is empty.

Types

type Config

type Config struct {
	Raft struct {
		raft.Config
		BindAddr    string
		StreamLayer *StreamLayer
		Bootstrap   bool
	}
	Segment struct {
		MaxStoreBytes uint64
		MaxIndexBytes uint64
		InitialOffset uint64
	}
}

type DistributedLog

type DistributedLog struct {
	// contains filtered or unexported fields
}

DistributedLog は分散ログサーバが保持するログ情報を管理する。

func NewDistributedLog

func NewDistributedLog(dataDir string, config Config) (*DistributedLog, error)

func (*DistributedLog) Append

func (l *DistributedLog) Append(record *api.Record) (uint64, error)

Append はログにレコードを追加する。

func (*DistributedLog) Close

func (l *DistributedLog) Close() error

Close はRaftインスタンスをシャットダウンし、Raftのログストア及びローカルのログを閉じる。

func (*DistributedLog) GetServers

func (l *DistributedLog) GetServers() ([]*api.Server, error)

GetServers はクラスタのサーバ情報一覧を返却する。 サーバ情報にはクライアントが接続すべきサーバアドレスと、リーダかどうかのフラグを含む。

NOTE:
 Raftの設定はクラスタ内のサーバで構成され、その設定には各サーバのID,アドレス,投票権(※)が含まれている。
 ※当該システムでは投票権は利用しない。
 そのためRaftは、クラスタ内のリーダーのアドレスを教えることができる。

func (*DistributedLog) Join

func (l *DistributedLog) Join(id, addr string) error

Join はRaftクラスタにサーバを追加する。(すべてのサーバは投票者として追加される)

NOTE:
 Raftは AddNonVoter API で非投票者としてサーバ追加することもサポートしている。数多くのサーバに
 状態を複製し、最終的に一貫性のある読み取り専用の状態を提供したい場合、非投票者サーバが有用となる。
 なぜなら投票権を持つサーバを追加する度に、リーダーは過半数を得るために多くのサーバと通信する必要があり、
 レプリケーションや選出に時間がかかる可能性が高くなるためである。

func (*DistributedLog) Leave

func (l *DistributedLog) Leave(id string) error

Leave はサーバをRaftクラスタから除去する。リーダーを除去した場合、新たな選出が行われる。

func (*DistributedLog) Read

func (l *DistributedLog) Read(offset uint64) (*api.Record, error)

Read はサーバのログからオフセットで指定されたレコードを読み出す。 緩やかな一貫性 (relaxed consistency) のため、Raftを経由せずに読み出し操作を行う。

NOTE:
 強い一貫性 (strong consistency) が必要な場合、読み出しは書き込みに対して
 最新でなければならないためRaftを経由する必要があるが、読み出し効率が悪くなり性能が落ちる。

func (*DistributedLog) WaitForLeader

func (l *DistributedLog) WaitForLeader(timeout time.Duration) error

WaitForLeader はクラスタがリーダーを選出するか、タイムアウトするまで待機する。

type Log

type Log struct {
	Dir    string
	Config Config
	// contains filtered or unexported fields
}

Log はセグメントの集合体であるsegmentsと書き込み対象のactiveSegmentを保持する。 Dirにセグメントを保存する。

func NewLog

func NewLog(dir string, c Config) (*Log, error)

NewLog はLogインスタンスを作成する。引数のConfigの値が未指定の場合はデフォルト値を設定する。

func (*Log) Append

func (l *Log) Append(record *api.Record) (uint64, error)

Append はログにレコードを追加する。 アクティブセグメントが最大サイズに到達していた場合、新たなセグメントを作成する。

func (*Log) Close

func (l *Log) Close() error

Close はセグメントをすべて閉じる。

func (*Log) HighestOffset

func (l *Log) HighestOffset() (uint64, error)

HighestOffset は現時点で最新のオフセット(nextOffsetの直前)を返却する。

func (*Log) LowestOffset

func (l *Log) LowestOffset() (uint64, error)

LowestOffset は最古のオフセットを返却する。

func (*Log) Read

func (l *Log) Read(off uint64) (*api.Record, error)

Read は指定されたオフセットに保存されているレコードをセグメントから読み出す。

func (*Log) Reader

func (l *Log) Reader() io.Reader

Reader はログ全体を読み込むためのio.Readerを返却する。 合意形成の連携においてスナップショット、およびログの復旧ををサポートする場合に利用する。

func (*Log) Remove

func (l *Log) Remove() error

Remove はログを閉じて、そのログのデータを削除する。

func (*Log) Reset

func (l *Log) Reset() error

Reset はログを削除して、置き換える新たなログを作成する。

func (*Log) Truncate

func (l *Log) Truncate(lowest uint64) error

Truncate は最大オフセットがlowestよりも小さいセグメントをすべて削除する。 ディスク容量を空けるためのメンテナンス用途として使用が想定される。

type RequestType

type RequestType uint8
const (
	AppendRequestType RequestType = 0
)

type StreamLayer

type StreamLayer struct {
	// contains filtered or unexported fields
}

StreamLayer はRaftサーバと接続するにあたって低レベルなストリーム抽象化を提供するための、 トランスポートのStreamLayerインタフェースを満たすメソッドを実装する。

func NewStreamLayer

func NewStreamLayer(ln net.Listener, serverTLSConfig, peerTLSConfig *tls.Config) *StreamLayer

func (*StreamLayer) Accept

func (s *StreamLayer) Accept() (net.Conn, error)

Accept はDialメソッドに対応し、入ってくるコネクションを受け入れ、 コネクション種別を識別するバイトを読み出し、サーバ側のTLS接続を作成する。

func (*StreamLayer) Addr

func (s *StreamLayer) Addr() net.Addr

Addr はリスナーのアドレスを返却する。

func (*StreamLayer) Close

func (s *StreamLayer) Close() error

Close はリスナーをクローズする。

func (*StreamLayer) Dial

func (s *StreamLayer) Dial(addr raft.ServerAddress, timeout time.Duration) (net.Conn, error)

Dial はRaftクラスタ内における他サーバへの新たな発信コネクションを作成する。

NOTE:
 サーバ接続の際、コネクション種別を識別するためにRaftRPCバイトを書き込み、
 ログのgRPCリクエストと同じポートでRaftを多重化できる。
 ストリームレイヤをピアTLSで設定することで、TLSクライアント側の接続が行われる。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL