| <svg xmlns="http://www.w3.org/2000/svg" width="960" height="534" viewBox="0 0 960 534" role="img" aria-labelledby="title desc"> | |
| <!-- | |
| 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. | |
| --> | |
| <title id="title">Plan once, read the assigned splits</title> | |
| <desc id="desc">A coordinator configures a ReadBuilder and plans splits. Worker readers use the same read configuration. A streaming checkpoint must also account for pending splits and reader progress.</desc> | |
| <defs><marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" fill="#526277"/></marker></defs> | |
| <g font-family="Arial, Helvetica, sans-serif"> | |
| <rect x="1" y="1" width="958" height="532" rx="12" fill="#ffffff" stroke="#d7dfeb" stroke-width="1.5"/> | |
| <text x="28" y="44" font-size="27" fill="#172b4d" font-weight="700" text-anchor="start">Plan once, read the assigned splits</text> | |
| <text x="28" y="76" font-size="18" fill="#526277" font-weight="400" text-anchor="start">Use the same filter and projection when planning and reading.</text> | |
| <rect x="28" y="110" width="282" height="118" rx="8" fill="#eaf2ff" stroke="#2463b4" stroke-width="1.5"/> | |
| <text x="169.0" y="143" font-size="21" fill="#2463b4" font-weight="700" text-anchor="middle">Coordinator</text> | |
| <text x="169.0" y="171" font-size="17" fill="#526277" font-weight="400" text-anchor="middle">ReadBuilder</text> | |
| <text x="169.0" y="196" font-size="17" fill="#526277" font-weight="400" text-anchor="middle">scan.plan().splits()</text> | |
| <rect x="385" y="110" width="200" height="118" rx="8" fill="#f5f7fb" stroke="#d7dfeb" stroke-width="1.5"/> | |
| <text x="485.0" y="143" font-size="21" fill="#172b4d" font-weight="700" text-anchor="middle">Splits</text> | |
| <text x="485.0" y="171" font-size="17" fill="#526277" font-weight="400" text-anchor="middle">Split A</text> | |
| <text x="485.0" y="196" font-size="17" fill="#526277" font-weight="400" text-anchor="middle">Split B</text> | |
| <rect x="660" y="110" width="272" height="93" rx="8" fill="#e8f7f2" stroke="#087f6e" stroke-width="1.5"/> | |
| <text x="796.0" y="143" font-size="21" fill="#087f6e" font-weight="700" text-anchor="middle">Reader task 1</text> | |
| <text x="796.0" y="171" font-size="17" fill="#526277" font-weight="400" text-anchor="middle">Read Split A</text> | |
| <rect x="660" y="235" width="272" height="93" rx="8" fill="#e8f7f2" stroke="#087f6e" stroke-width="1.5"/> | |
| <text x="796.0" y="268" font-size="21" fill="#087f6e" font-weight="700" text-anchor="middle">Reader task 2</text> | |
| <text x="796.0" y="296" font-size="17" fill="#526277" font-weight="400" text-anchor="middle">Read Split B</text> | |
| <path d="M 310 167 H 385" fill="none" stroke="#526277" stroke-width="2" marker-end="url(#arrow)"/> | |
| <path d="M 585 147 H 660" fill="none" stroke="#526277" stroke-width="2" marker-end="url(#arrow)"/> | |
| <path d="M 585 192 H 622 V 278 H 660" fill="none" stroke="#526277" stroke-width="2" marker-end="url(#arrow)"/> | |
| <text x="28" y="273" font-size="20" fill="#172b4d" font-weight="700" text-anchor="start">Each reader</text> | |
| <text x="28" y="305" font-size="18" fill="#526277" font-weight="400" text-anchor="start">newRead() → createReader(assigned splits)</text> | |
| <text x="28" y="336" font-size="18" fill="#526277" font-weight="400" text-anchor="start">executeFilter() adds per-row filtering.</text> | |
| <text x="28" y="367" font-size="18" fill="#526277" font-weight="400" text-anchor="start">Release batches and close readers after use.</text> | |
| <rect x="28" y="408" width="904" height="95" rx="8" fill="#fff6e8" stroke="#c5862b" stroke-width="1.5"/> | |
| <text x="48" y="440" font-size="21" fill="#172b4d" font-weight="700" text-anchor="start">Streaming recovery needs more than the scan position</text> | |
| <text x="48" y="470" font-size="18" fill="#526277" font-weight="400" text-anchor="start">Save next snapshot ID + pending splits + reader and downstream progress.</text> | |
| </g> | |
| </svg> |