Skip to content

Commit b866160

Browse files
committed
Acronlinx and build fixes
1 parent fea6fc4 commit b866160

File tree

2 files changed

+39
-35
lines changed

2 files changed

+39
-35
lines changed

articles/iot-operations/connect-to-cloud/howto-dataflow-graph-wasm.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ Azure IoT Operations data flow graphs support WebAssembly (WASM) modules for cus
2424

2525
- Deploy an Azure IoT Operations instance on an Arc-enabled Kubernetes cluster. For more information, see [Deploy Azure IoT Operations](../deploy-iot-ops/howto-deploy-iot-operations.md).
2626
- Use Azure Container Registry (ACR) to store WASM modules and graphs.
27-
- Install the ORAS CLI to push WASM modules to the registry.
28-
- To develop custom WASM modules, see [Develop WebAssembly modules for data flow graphs](howto-develop-wasm-modules.md).
27+
- Install the OCI Registry As Storage (ORAS) CLI to push WASM modules to the registry.
28+
- Develop custom WASM modules by following guidance in [Develop WebAssembly modules for data flow graphs](howto-develop-wasm-modules.md).
2929

3030
## Overview
3131

@@ -551,7 +551,7 @@ Branch operations enable parallel processing of different sensor inputs, allowin
551551

552552
### Configure the complex data flow graph
553553

554-
This configuration implements the multi-sensor processing workflow using the `graph-complex:1.0.0` artifact. Notice how the data flow graph deployment is similar to Example 1 - both use the same three-node pattern (source, graph processor, destination) even though the processing logic is completely different.
554+
This configuration implements the multi-sensor processing workflow using the `graph-complex:1.0.0` artifact. Notice how the data flow graph deployment is similar to Example 1 - both use the same three-node pattern (source, graph processor, destination) even though the processing logic is different.
555555

556556
This similarity occurs because the data flow graph resource acts as a host environment that loads and executes graph definitions. The actual processing logic resides in the graph definition artifact (`graph-simple:1.0.0` vs `graph-complex:1.0.0`), which contains the YAML specification of operations and connections between WASM modules. The data flow graph resource provides the runtime infrastructure to pull the artifact, instantiate the modules, and route data through the defined workflow.
557557

@@ -855,7 +855,7 @@ spec:
855855

856856
### Disk persistence
857857

858-
Disk persistence allows data flow graphs to maintain state across restarts. When enabled, the graph can recover processing state if pods are restarted. This is useful for stateful processing scenarios where losing intermediate data would be problematic.
858+
Disk persistence allows data flow graphs to maintain state across restarts. When enabled, the graph can recover processing state if pods are restarted. The storage capability is useful for stateful processing scenarios where losing intermediate data would be problematic.
859859

860860
The setting accepts `Enabled` or `Disabled` (case-insensitive), with `Disabled` as the default.
861861

@@ -1047,7 +1047,7 @@ For storage destinations like Azure Data Lake or Fabric OneLake, you can specify
10471047

10481048
Node connections define the data flow path between nodes. Each connection specifies a source node and destination node, creating the processing pipeline. Connections can optionally include schema validation to ensure data integrity between processing stages.
10491049

1050-
When you specify schema validation, the system validates data format and structure as it flows between nodes. This helps catch data inconsistencies early and ensures WASM modules receive data in the expected format.
1050+
When you specify schema validation, the system validates data format and structure as it flows between nodes. The validation helps catch data inconsistencies early and ensures WASM modules receive data in the expected format.
10511051

10521052
# [Bicep](#tab/bicep)
10531053

@@ -1131,7 +1131,7 @@ Storage endpoints typically require output schema settings to define data serial
11311131

11321132
#### Registry endpoints
11331133

1134-
Registry endpoints provide access to container registries for pulling WASM modules and graph definitions. They're not used directly in data flow but are referenced by graph processing nodes.
1134+
Registry endpoints provide access to container registries for pulling WASM modules and graph definitions. They're not used directly in data flow but graph processing nodes reference them.
11351135

11361136
For detailed configuration information, see [Configure registry endpoints](howto-configure-registry-endpoint.md).
11371137

articles/iot-operations/connect-to-cloud/howto-develop-wasm-modules.md

Lines changed: 33 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,7 @@ ai-usage: ai-assisted
1818
>
1919
> See the [Supplemental Terms of Use for Microsoft Azure Previews](https://azure.microsoft.com/support/legal/preview-supplemental-terms/) for legal terms that apply to Azure features that are in beta, preview, or not yet released into general availability.
2020
21-
This article shows you how to develop custom WebAssembly (WASM) modules and graph definitions for Azure IoT Operations data flow graphs. You can create modules in Rust or Python to implement custom data processing logic, and define graph configurations that specify how your modules connect into complete processing workflows.
22-
23-
## Prerequisites
24-
25-
Complete the setup in [Use WebAssembly with data flow graphs](howto-dataflow-graph-wasm.md) to understand the basic concepts and deployment process. Choose your development language: [Rust](#tab/rust) or [Python](#tab/python). You also need access to a container registry for storing your compiled modules.
21+
This article shows you how to develop custom WebAssembly (WASM) modules and graph definitions for Azure IoT Operations data flow graphs. You can create modules in Rust or Python to implement custom processing logic. You can also define graph configurations that specify how your modules connect into complete processing workflows.
2622

2723
## Overview
2824

@@ -40,19 +36,23 @@ Azure IoT Operations data flow graphs process streaming data through configurabl
4036

4137
Data flow graphs build on the [Timely dataflow](https://docs.rs/timely/latest/timely/dataflow/operators/index.html) computational model, which originated from Microsoft Research's Naiad project. This approach ensures:
4238

43-
- Deterministic processing: Same input always produces the same output
44-
- Progress tracking: The system knows when computations are complete
45-
- Distributed coordination: Multiple processing nodes stay synchronized
39+
- **Deterministic processing**: Same input always produces the same output
40+
- **Progress tracking**: The system knows when computations are complete
41+
- **Distributed coordination**: Multiple processing nodes stay synchronized
4642

4743
### Why timely dataflow?
4844

49-
Traditional stream processing systems face challenges with out-of-order data where events arrive later than expected, partial results where you don't know when computations are complete, and coordination issues when synchronizing distributed processing.
45+
Traditional stream processing systems face challenges with several issues. Out-of-order data can cause events to arrive later than expected. Partial results make it difficult to know when computations are complete. Coordination issues arise when synchronizing distributed processing.
5046

51-
Timely dataflow solves these problems through:
47+
Timely dataflow solves problems through:
5248

5349
#### Timestamps and progress tracking
5450

55-
Every data item carries a timestamp representing its logical time. The system tracks progress through these timestamps, enabling deterministic processing where same input always produces same output, exactly-once semantics where there's no duplicate or missed processing, and watermarks that let you know when no more data will arrive for a given time.
51+
Every data item carries a timestamp representing its logical time. The system tracks progress through timestamps, enabling several key capabilities:
52+
53+
- **Deterministic processing**: Same input always produces same output
54+
- **Exactly once semantics**: No duplicate or missed processing
55+
- **Watermarks**: Know when no more data will arrive for a given time
5656

5757
#### Hybrid logical clock
5858

@@ -64,7 +64,11 @@ pub struct HybridLogicalClock {
6464
}
6565
```
6666

67-
This ensures causal ordering where effects follow causes, progress guarantees where the system knows when processing is complete, and distributed coordination where multiple nodes stay synchronized.
67+
The hybrid logical clock approach ensures several capabilities:
68+
69+
- **Causal ordering**: Effects follow causes
70+
- **Progress guarantees**: The system knows when processing is complete
71+
- **Distributed coordination**: Multiple nodes stay synchronized
6872

6973
## Understanding operators and modules
7074

@@ -92,18 +96,18 @@ Modules are the implementation of operator logic as WASM code. A single module c
9296

9397
### The relationship
9498

95-
The relationship between graph definitions, modules, and operators follows this pattern:
99+
The relationship between graph definitions, modules, and operators follows a specific pattern:
96100

97101
```
98102
Graph Definition → References Module → Provides Operator → Processes Data
99103
↓ ↓ ↓ ↓
100104
"temperature:1.0.0" → temperature.wasm → map function → °F to °C
101105
```
102106

103-
This separation allows you to:
104-
- Reuse modules: Deploy the same WASM module in different graph configurations
105-
- Version independently: Update graph definitions without rebuilding modules
106-
- Configure dynamically: Pass different parameters to the same module for different behaviors
107+
The separation allows you to:
108+
- **Module reuse**: Deploy the same WASM module in different graph configurations
109+
- **Independent versioning**: Update graph definitions without rebuilding modules
110+
- **Dynamic configuration**: Pass different parameters to the same module for different behaviors
107111

108112
### WebAssembly Interface Types (WIT)
109113

@@ -164,7 +168,7 @@ interface accumulate {
164168
}
165169
```
166170

167-
## Development prerequisites
171+
## Prerequisites
168172

169173
Choose your development language and set up the required tools:
170174

@@ -192,7 +196,7 @@ export CARGO_REGISTRIES_AZURE_VSCODE_TINYKUBE_INDEX="sparse+https://pkgs.dev.azu
192196
export CARGO_NET_GIT_FETCH_WITH_CLI=true
193197
```
194198

195-
Add these to your shell profile for persistent access:
199+
Add the following environment variables to your shell profile for persistent access:
196200

197201
```bash
198202
echo 'export CARGO_REGISTRIES_AZURE_VSCODE_TINYKUBE_INDEX="sparse+https://pkgs.dev.azure.com/azure-iot-sdks/iot-operations/_packaging/preview/Cargo/index/"' >> ~/.bashrc
@@ -202,7 +206,7 @@ source ~/.bashrc
202206

203207
# [Python](#tab/python)
204208

205-
Python development uses componentize-py with WebAssembly Interface Types (WIT) for code generation. No additional environment configuration is required beyond installing the prerequisites.
209+
Python development uses componentize-py with WebAssembly Interface Types (WIT) for code generation. No other environment configuration is required beyond installing the prerequisites.
206210

207211
---
208212

@@ -242,7 +246,7 @@ Create a Python file for your operator. The filename should match your module na
242246
touch temperature_converter.py
243247
```
244248

245-
Python WASM modules don't require additional project configuration files. The module structure is defined through the Python class that implements the operator interface.
249+
Python WASM modules don't require other project configuration files. The Python class that implements the operator interface defines the module structure.
246250

247251
---
248252

@@ -473,7 +477,7 @@ Use local builds for fastest iteration during development and when you need full
473477

474478
### Docker build
475479

476-
Build using a containerized environment with all dependencies pre-installed:
480+
Build using a containerized environment with all dependencies preinstalled:
477481

478482
```bash
479483
# Build release version (default)
@@ -510,7 +514,7 @@ Use local builds for fastest iteration during development and when you need to d
510514

511515
### Docker build
512516

513-
Build using a containerized environment with schema paths pre-configured:
517+
Build using a containerized environment with schema paths preconfigured:
514518

515519
```bash
516520
# Build release version (app-name should match your Python filename without .py extension)
@@ -537,7 +541,7 @@ For comprehensive examples of map, filter, branch, accumulate, and delay operato
537541
- **Delay operators**: Time-based processing control
538542
- **Complex workflows**: Multi-operator configurations with state management
539543

540-
For a complete implementation example, see the [branch module](https://github.com/Azure-Samples/explore-iot-operations/tree/wasm/samples/wasm/rust/examples/branch) which demonstrates parameter usage for conditional routing logic.
544+
For a complete implementation example, see the [branch module](https://github.com/Azure-Samples/explore-iot-operations/tree/wasm/samples/wasm/rust/examples/branch), which demonstrates parameter usage for conditional routing logic.
541545

542546
# [Python](#tab/python)
543547

@@ -651,14 +655,14 @@ graph LR
651655

652656
### Registry deployment
653657

654-
Both graph definitions and WASM modules must be uploaded to a container registry as OCI artifacts before they can be referenced by data flow graphs:
658+
Both graph definitions and WASM modules must upload to a container registry as Open Container Initiative (OCI) artifacts before data flow graphs can reference them:
655659

656660
- **Graph definitions**: Packaged as OCI artifacts with media type `application/vnd.oci.image.config.v1+json`
657661
- **WASM modules**: Packaged as OCI artifacts containing the compiled WebAssembly binary
658-
- **Versioning**: Use semantic versioning (e.g., `my-graph:1.0.0`, `temperature-converter:2.1.0`) for proper dependency management
662+
- **Versioning**: Use semantic versioning (such as `my-graph:1.0.0`, `temperature-converter:2.1.0`) for proper dependency management
659663
- **Registry support**: Compatible with Azure Container Registry, Docker Hub, and other OCI-compliant registries
660664

661-
This separation enables reusable logic where the same graph definition can be deployed with different endpoints, environment independence where development, staging, and production can use different data sources, and modular deployment where you can update endpoint configurations without changing processing logic.
665+
The separation enables reusable logic where the same graph definition deploys with different endpoints. It provides environment independence where development, staging, and production use different data sources. It also supports modular deployment where you update endpoint configurations without changing processing logic.
662666

663667
For detailed instructions on uploading graph definitions and WASM modules to registries, see [Use WebAssembly with data flow graphs](howto-dataflow-graph-wasm.md).
664668

@@ -722,11 +726,11 @@ def temperature_converter_init(configuration):
722726

723727
---
724728

725-
For a complete implementation example, see the [branch module](https://github.com/Azure-Samples/explore-iot-operations/tree/wasm/samples/wasm/rust/examples/branch) which demonstrates parameter usage for conditional routing logic.
729+
For a complete implementation example, see the [branch module](https://github.com/Azure-Samples/explore-iot-operations/tree/wasm/samples/wasm/rust/examples/branch), which demonstrates parameter usage for conditional routing logic.
726730

727731
## Next steps
728732

729-
- For complete examples and advanced patterns, see the [Azure IoT Operations WASM samples](https://github.com/Azure-Samples/explore-iot-operations/tree/wasm/samples/wasm) repository.
733+
- See complete examples and advanced patterns in the [Azure IoT Operations WASM samples](https://github.com/Azure-Samples/explore-iot-operations/tree/wasm/samples/wasm) repository.
730734
- Learn how to deploy your modules in [Use WebAssembly with data flow graphs](howto-dataflow-graph-wasm.md).
731735
- Configure your data flow endpoints in [Configure data flow endpoints](howto-configure-dataflow-endpoint.md).
732736

0 commit comments

Comments
 (0)