blob: 228b69f9ebe9e6ac456651fef138a9f08e24061e [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
digraph Replication {
graph [ label="Replication Pipeline", fontsize=24, fontname=Helvetica];
node [fontsize=12, fontname=Helvetica];
edge [fontsize=9, fontcolor=blue, fontname=ArialMT];
subgraph cluster_zookeeper {
label = "ZooKeeper"
"DistributedWorkQueue" [ label = "DistributedWorkQueue" ];
}
subgraph cluster_tables {
label = "Tables"
"MetadataTable" [ label = "Metadata Table" ];
"ReplicationTable" [ label = "Replication Table" ];
}
subgraph cluster_tserver {
label = "TabletServer"
"WalCreated" [ label = "'New' WAL used" ];
"WalCreated" -> "MetadataTable" [ label = "Create record for WAL\nand local table id" ];
"WalMinC" [ label = "Minor Compaction" ];
"WalMinC" -> "MetadataTable" [ label = "Update record for data available to replicate" ];
"ReplicaSystem" [ label = "ReplicaSystem" ];
"DistributedWorkQueue" -> "ReplicaSystem" [ label = "ReplicaSystem accepts Work" ];
"ReplicaSystem" -> "ReplicaSystem" [ label = "Replicate data in chunks to peer" ];
"ReplicaSystem" -> "ReplicationTable" [ label = "Update Work record with\ntotal data replicated" ];
}
subgraph cluster_master {
label = "Master"
"StatusMaker" [ label = "StatusMaker" ];
"MetadataTable" -> "StatusMaker" [ label = "Reads records" ];
"StatusMaker" -> "ReplicationTable" [ label = "Makes Status records" ];
"WorkMaker" [ label = "WorkMaker" ];
"ReplicationTable" -> "WorkMaker" [ label = "Read Status records" ];
"WorkMaker" -> "ReplicationTable" [ label = "Write Work record for each peer\nwhen work is needed" ];
"FinishedWorkUpdater" [ label = "FinishedWorkUpdater" ];
"ReplicationTable" -> "FinishedWorkUpdater" [ label = "Read all Work records for file" ];
"FinishedWorkUpdater" -> "ReplicationTable" [ label = "Record new Status with\nminimum replication progress" ];
"FinishedWorkUpdater" -> "ReplicationTable" [ label = "Delete Work records when\nall are fully replicated" ];
"WorkAssigner" [ label = "WorkAssigner" ];
"ReplicationTable" -> "WorkAssigner" [ label = "Read Work records" ];
"WorkAssigner" -> "DistributedWorkQueue" [ label = "Make Work available\nvia ZooKeeper" ];
"RemoveCompleteRecords" [ label = "RemoveCompleteReplicationRecords" ];
"ReplicationTable" -> "RemoveCompleteRecords" [ label = "Read all Status and Work\nrecords by file" ];
"RemoveCompleteRecords" -> "ReplicationTable" [ label = "Delete records for file if\nall are fully replicated" ];
}
subgraph cluster_gc {
label = "Garbage Collector";
"CloseWALs" [ label = "CloseWriteAheadLogs" ];
"MetadataTable" -> "CloseWALs" [ label = "Find all referenced WALs by tserver" ];
"CloseWALs" -> "MetadataTable" [ label = "Close replication records\nfor unreferenced WALs" ];
}
}