/// /// 状態機械関連メッセージのスキーマ定義 /// syntax = "proto3"; package frugalos.cluster.state; import "config.proto"; // 状態機械に適用されるコマンド message Command { oneof command { PutBucket put_bucket = 1; DeleteBucket delete_bucket = 2; PutDevice put_device = 3; DeleteDevice delete_device = 4; PutServer put_server = 5; DeleteServer delete_server = 6; } } message PutBucket { frugalos.cluster.config.Bucket bucket = 1; } message DeleteBucket { string id = 1; } message PutServer { frugalos.cluster.config.Server server = 1; } message DeleteServer { string id = 1; } message PutDevice { frugalos.cluster.config.Device device = 1; } message DeleteDevice { string id = 1; } // 状態機械のスナップショット message Snapshot { // NOTE: 将来的にoneofを使って拡張したくなるかもしれないので、一段メッセージを被せておく MachineState state = 1; } message MachineState { NextSeqNo next_seqno = 1; repeated frugalos.cluster.config.Bucket buckets = 2; repeated frugalos.cluster.config.Device devices = 3; repeated frugalos.cluster.config.Server servers = 4; repeated SegmentTable segment_tables = 5; } message NextSeqNo { uint32 bucket = 1; uint32 device = 2; uint32 server = 3; } /// /// セグメント系 /// message SegmentTable { string bucket = 1; repeated Segment segments = 2; } message Segment { // NOTE: // 構成変更時のデータ移行用に過去の情報も保持しておく. // 最新構成のメンバ全員(or 規定数以上)がデータ同期に // 完了している場合は、最新のものを除いて削除可能. // なお、メタデータバケツの場合は常に最新のみ保持で良い. // // 要素は新しい順に並んでいるものとする. repeated DeviceGroup groups = 1; } // セグメントに対応するデバイス群(e.g., Raftクラスタのメンバ群) message DeviceGroup { repeated uint32 members = 1; // デバイス番号のリスト }