You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README-Leios-October-demo.md
+10-10Lines changed: 10 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -88,7 +88,7 @@ This is where you might see messages about, eg, the missing `genesis-*.json` fil
88
88
89
89
## The topology
90
90
91
-
For this first iteration, the demo topology is a simple linear chain.
91
+
For this first iteration, the demo topology is a simple linear graph.
92
92
93
93
```mermaid
94
94
flowchart TD
@@ -100,7 +100,7 @@ In this iteration of the demo, the mocked downstream peer (see section below) is
100
100
101
101
## The Praos traffic and Leios traffic
102
102
103
-
In this iteration of the demo, the Praos data and traffic is very simple.
103
+
In this iteration of the demo, the data and traffic is very simple.
104
104
105
105
- The Praos data is a simple chain provided by the Performance&Tracing team.
106
106
- The mocked upstream peer serves each Praos block when the mocked wall-clock reaches the onset of their slots.
@@ -157,7 +157,7 @@ That would not be a well-formed EB, but the prototype's behavior in response to
157
157
158
158
The mocked upstream peer is a patched variant of `immdb-server`.
159
159
160
-
- It runs incomplete variant of LeiosNotify and LeiosFetch: just EBs and EB closures, nothing else (no EB announcements, no votes, no range requests).
160
+
- It runs incomplete variants of LeiosNotify and LeiosFetch: just EBs and EB closures, nothing else (no EB announcements, no votes, no range requests).
161
161
- It serves the EBs present in the given `--leios-db`; it sends Leios notificaitons offering the data according to the given `--leios-schedule`.
162
162
See the demo tool section above for how to generate those files.
163
163
@@ -166,15 +166,15 @@ The mocked upstream peer is a patched variant of `immdb-server`.
166
166
The patched node is a patched variant of `cardano-node`.
167
167
All of the material changes were made in the `ouroboros-consensus` repo; the `cardano-node` changes are merely for integration.
168
168
169
-
- It runs the same incomplete variant of LeiosNotify and LeiosFetch as the mocked upstream peer.
170
-
- The Leios fetch request logic is a fully fledged first draft, with four primary shortcomings.
169
+
- It runs the same incomplete variants of LeiosNotify and LeiosFetch as the mocked upstream peer.
170
+
- The Leios fetch request logic is a fully fledged first draft, with following primary shortcomings.
171
171
- It only handles EBs and EB closures, not votes and not range requests.
172
172
- It retains a number of heap objects in proportion with the number of txs in EBs it has acquired.
173
173
The real node---and so subsequent iterations of this prototype---must instead keep that data on disk.
174
-
This first draft was intended to do so, but we struggled to invent the fetch logic algorithm with the constraint that some of its state was on-disk; that's currently presumed to be possible, but has been deferred to a iteration of the prototype.
174
+
This first draft was intended to do so, but we struggled to invent the fetch logic algorithm with the constraint that some of its state was on-disk; that's currently presumed to be possible, but has been deferred to a subsequent iteration of the prototype.
175
175
- It never discards any information.
176
-
The real node---and so subsequent iterations of this prototype---must instead discard EBs and EB closures once their old enough, unless they are needed for the immutable chain.
177
-
- Once it decides to fetch a set of txs from an upstream peer for the sake of some EB closure, it does not necessarily compose those into an optimal set of requests for that peer.
176
+
The real node---and so subsequent iterations of this prototype---must instead discard EBs and EB closures once they're old enough, unless they are needed for the immutable chain.
177
+
- Once it decides to fetch a set of txs from an upstream peer for the sake of some EB closure(s), it does not necessarily compose those into an optimal set of requests for that peer.
178
178
We had not identified the potential for an optimizing algorithm here until writing this first prototype, so it just does something straight-forward and naive for now (which might be sufficient even for the real-node---we'll have to investigate later).
179
179
180
180
There are no other changes.
@@ -186,7 +186,7 @@ Some examples includes the following.
186
186
- The prototype uses SQLite3 with entirely default settings.
187
187
Maybe Write-Ahead Log mode would be much preferable, etc.
188
188
- The prototype uses a mutex to completely isolate every SQLite3 invocation---that's probably excessive, but was useful for some debugging during initial development (see the Engineering Notes appendix)
189
-
- The prototype chooses several _magic numbers_ for resource utilization limits (eg max-bytes per reqeusted, max outsanding bytes per peer, fetch decision logic rate-limiting, txCache disk-bandwidth rate-limiting, etc).
189
+
- The prototype chooses several _magic numbers_ for resource utilization limits (eg maxbytes per reqeust, max outsanding bytes per peer, fetch decision logic rate-limiting, txCache disk-bandwidth rate-limiting, etc).
190
190
These all ultimately need to be tuned for the intended behvaiors on `mainnet`.
191
191
- The prototype does not deduplicate the storage of EBs' closures when they share txs.
192
192
This decision makes the LeiosFetch server a trivial single-pass instead of a join.
@@ -200,7 +200,7 @@ In the future, it could be comparatively lightweight and moreover could replay a
200
200
201
201
# Appendix: Engineering Notes
202
202
203
-
This section summaries some lessons learned during the development of this prototype.
203
+
This section summarizes some lessons learned during the development of this prototype.
204
204
205
205
- Hypothesis: A SQLite connection will continue to hold SQLite's internal EXCLUSIVE lock _even after the transaction is COMMITed_ when the write transaction involved a prepared statement that was accidentally not finalized.
206
206
That hypothesis was inferred from a painstaking debugging session, but I haven't not yet confirmed it in isolation.
0 commit comments