Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 25 additions & 4 deletions .claude/skills/documentation-writing/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,13 @@ so write `NVMe devices`.
`behavior`, `labeled`, `enroll`, `artifact`, `program`, `license`, `gray`. Note
that `Fibre Channel` is the name of a standard and keeps its spelling.

**A compound with two accepted spellings is written the house way.** `datacenter`
is one word, never "data center" or "data-center". Neither spelling is wrong,
which is exactly why one of them is picked: a page that alternates between them
reads as two pages. The list is `ONE_WORD_COMPOUNDS` in
`scripts/check-prose.py`, and a new pair is added there rather than settled per
page.

**The Oxford comma** goes before the final `and`, `or`, or `nor` of a series of
three or more items: "storage nodes, volumes, and snapshots". It belongs to a
series and nowhere else. A comma before an `and` that joins two sentences is
Expand All @@ -216,16 +223,30 @@ nothing to insert.

## Punctuation to avoid

Three habits make a page read as though nobody chose the words. The punctuation
gate reports all of them. The first two are warnings, because what replaces them
depends on the sentence and is a decision for the writer. The list item form and
the placement of a mark have one right answer and are errors that `--fix`
A handful of habits make a page read as though nobody chose the words, and the
gates report all of them. The semicolon and the em dash below are warnings,
because what replaces them depends on the sentence and is a decision for the
writer. Everything else has one right answer and is an error that `--fix`
resolves.

**A missing comma after an abbreviation.** American usage writes "e.g.," and
"i.e.," and "for example," with the comma, since each of them introduces the
example that follows.

**A missing comma after an opening connective or sentence adverb.** "However,",
"Therefore,", "Otherwise,", "Internally,", "By default,", "Today,". The comma is
what marks the word as a comment on the whole sentence rather than as part of
it, and without it the reader parses the word as the subject and has to start
over. The full list is in `scripts/check-prose.py`.

The comma belongs to the word only where the word opens a clause. "Instead of",
"Now that", "Together with" and "In addition to" are prepositions and
conjunctions that carry the comma behind the whole phrase, and "Initially
developed by Google" is an adverb modifying a participle. The check knows all
three shapes and leaves them alone. "Then" and "First" are absent from it
entirely, because they number the steps of a procedure: "Then apply the change"
takes no comma.

**A comma and a full stop go inside the closing quotation mark**, whatever the
quoted words are: "docking points," and never "docking points",. A colon and a
semicolon stay outside, and a question mark belongs to whichever sentence asks
Expand Down
17 changes: 11 additions & 6 deletions docs/architecture/concepts/failure-domains.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,14 @@ distribution unit, or an availability zone. When failure domains are enabled, si
journal copies, and failover paths across the domains so that the loss of one entire domain does not interrupt
the availability of the cluster.

Failure domains are identified by a non-negative integer chosen by the operator. Simplyblock does not detect the
physical topology itself: every storage node is explicitly tagged with the id of the domain it belongs to when it
is added to the cluster.
Each domain is identified by a label, such as `RACK1`, `AZ2`, or `HOST1`. Simplyblock does not detect the
physical topology itself: every storage node is explicitly tagged with the label of the domain it belongs to when
it is added to the cluster. The domain is created by the first node carrying a given label, and every later node
naming that label joins it.

Internally, each label maps to a cluster-unique integer id, which is what placement and the data plane key off.
That id is assigned automatically and does not have to be tracked. It surfaces only in low-level logs and in the
`failure_domain` field of the API, which keeps its integer type for compatibility.

!!! important
Failure-domain support is a deploy-time decision. It is enabled when the storage cluster is created and cannot
Expand All @@ -22,7 +27,7 @@ is added to the cluster.
With failure domains enabled, placement decisions consider the domain tag in four independent dimensions:

1. **Data and parity chunks:** The distributed erasure coding spreads the chunks of each stripe across distinct
failure domains, so that a full domain outage leaves enough chunks to reconstruct all data within the configured
failure domains so that a full domain outage leaves enough chunks to reconstruct all data within the configured
erasure coding scheme.
2. **Journal copies:** The copies of the high-availability write journal are balanced across domains with a
per-domain cap, so that losing a whole domain always leaves enough journal copies to maintain the journal quorum.
Expand Down Expand Up @@ -66,7 +71,7 @@ a same-domain secondary path, and its tertiary path is still guaranteed to be cr

!!! note
Balance is counted in physical hosts, not storage nodes. On multi-socket hosts running two storage nodes, both
nodes count as one host and must carry the same failure-domain id. Dedicated secondary nodes are not counted
nodes count as one host and must carry the same failure-domain label. Dedicated secondary nodes are not counted
toward the balance.

## Failure Domains and Erasure Coding Schemes
Expand All @@ -85,7 +90,7 @@ its loss would break the journal quorum.
## Domain Membership Is Immutable

A host's failure domain cannot be changed while the host is part of the cluster. Moving a host between domains
requires removing the node, restoring the domain balance, and re-adding it with the new failure-domain id. This
requires removing the node, restoring the domain balance, and re-adding it with the new failure-domain label. This
prevents accidental topology changes that would silently invalidate the placement of existing data.

## Recovery Behavior
Expand Down
2 changes: 1 addition & 1 deletion docs/architecture/concepts/hyper-converged.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Key characteristics and benefits of hyper-converged storage include:
New nodes can be added seamlessly, increasing both compute and storage capacity without complex
reconfiguration. Storage capacity and performance grows and shrinks seamlessly with the size of the cluster.
This provides a great deal of flexibility for customers with strong and unknown dynamics as well as those with a variety of different sizing
requirements from small edge clusters to large data center clusters.
requirements from small edge clusters to large datacenter clusters.
- **De-coupling from Hardware Lifecycle** Individual hardware components or units can be replaced choosing from different vendors
without service interruption or degradation. Gradual replacement of hardware is supported.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ In simplyblock this process is either automated (CSI, OpenStack, or Proxmox) or

It’s roughly equivalent to an NVMe controller or logical device that can contain one or more namespaces.

Now subsystems are backed by multiple queue pairs, each of which is backed by a network connection such as a TCP socket.
Now, subsystems are backed by multiple queue pairs, each of which is backed by a network connection such as a TCP socket.
More queue pairs require more resources from the cluster but make the volumes faster.

Namespaces on the other side are actual block storage regions that hold user data.
Expand Down
2 changes: 1 addition & 1 deletion docs/architecture/storage-performance-and-qos.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ bottlenecks specific to mixed I/O patterns on other protocols (such as iSCSI) an
### Support for ROCEv2

Simplyblock also supports NVMe over RDMA (ROCEv2). RDMA, as a transport layer, offers significant latency and tail
latency advantages over TCP. Today, RDMA can be used in most data center environments because it requires only specific
latency advantages over TCP. Today, RDMA can be used in most datacenter environments because it requires only specific
hardware features from NICs, which are available across a broad range of models. It runs over UDP/IP and, as such, does
not require any changes to the networking.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Amazon EBS is not recommended for high-performance clusters.

!!! important
If local NVMe devices are chosen, make sure that the nodes in the cluster are provisioned into a placement group of type
_Spread_! Otherwise there is no guarantee that multiple storage nodes won't be located in the same failure domain.
_Spread_! Otherwise, there is no guarantee that multiple storage nodes won't be located in the same failure domain.

Generally, with AWS, there are three considerations when selecting virtual machine types:

Expand Down
8 changes: 4 additions & 4 deletions docs/important-notes/terminology.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ fault-tolerant, and high-performance storage system. Unlike traditional single-n
distribute data across multiple nodes, ensuring redundancy, load balancing, and resilience against hardware failures. To
optimize data availability and efficiency, these clusters can be configured using different architectures, including
replication and erasure coding. Storage clusters are commonly used in cloud storage, high-performance computing (HPC),
and enterprise data centers, enabling seamless scalability and improved data accessibility across distributed
and enterprise datacenters, enabling seamless scalability and improved data accessibility across distributed
environments.

### Storage Node
Expand Down Expand Up @@ -67,7 +67,7 @@ infrastructures, providing fast and efficient remote storage access.
NVMe/TCP (NVMe over TCP) is a transport protocol that extends NVMe over Fabrics (NVMe-oF) using standard TCP/IP networks
to enable high-performance, low-latency access to remote NVMe storage. By leveraging existing Ethernet infrastructure,
NVMe/TCP eliminates the need for specialized networking hardware such as RDMA (RoCE or iWARP) or Fibre Channel (FC),
making it a cost-effective and easily deployable solution for cloud, enterprise, and data center storage environments.
making it a cost-effective and easily deployable solution for cloud, enterprise, and datacenter storage environments.
It maintains the efficiency of NVMe, providing scalable, high-throughput, and low-latency remote storage access while
ensuring broad compatibility with modern network architectures.

Expand Down Expand Up @@ -309,7 +309,7 @@ software-defined system. Unlike traditional architectures that rely on separate
hyper-converged infrastructure (HCI) leverages virtualization and centralized management to streamline operations,
improve scalability, and reduce complexity. This approach enhances performance, fault tolerance, and resource efficiency
by distributing workloads across multiple nodes, allowing seamless scaling by adding more nodes. HCI is widely
used in cloud environments, virtual desktop infrastructure (VDI), and enterprise data centers for its ease of
used in cloud environments, virtual desktop infrastructure (VDI), and enterprise datacenters for its ease of
deployment, automation capabilities, and cost-effectiveness.

### Disaggregated
Expand All @@ -319,5 +319,5 @@ independent components rather than tightly integrated within the same physical s
for example, storage resources are managed independently of compute nodes, allowing for flexible scaling, improved
resource utilization, and reduced hardware dependencies. This contrasts with traditional or hyper-converged
architectures, where these resources are combined. Disaggregated architectures are widely used in cloud computing,
high-performance computing (HPC), and modern data centers to enhance scalability, cost-efficiency, and operational
high-performance computing (HPC), and modern datacenters to enhance scalability, cost-efficiency, and operational
flexibility while optimizing performance for dynamic workloads.
2 changes: 1 addition & 1 deletion docs/kubernetes/usage/removing.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ When the PVC is deleted, the PersistentVolume state must be checked. It should b
kubectl get pv
```

Now the PV can be deleted:
Now, the PV can be deleted:

```bash title="Delete a PersistentVolume"
kubectl delete pv <pv-name>
Expand Down
2 changes: 1 addition & 1 deletion docs/kubernetes/usage/snapshotting.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ simplyblock's [copy-on-write](../../important-notes/terminology.md#cow-copy-on-w

In simplyblock, a snapshot is comparable to the table of contents in a book, meaning that the snapshot refers to the same
data as the original volume. If the volume diverges from the snapshot, the mutated data segment is duplicated, changed,
and stored as a new data block. Now the volume refers to the new block, while the snapshot refers to the old one.
and stored as a new data block. Now, the volume refers to the new block, while the snapshot refers to the old one.

A deeper explanation can be found here:

Expand Down
Loading
Loading