This Hackfest is an intensive, hands-on technical workshop focused on the Data Lab Module Development Group (MDG) of OpenOP, based on contributions by 6G-DALI, the Flagship SNS-JU Project on 6G AI & Data.
Participants will explore how OpenOP is evolving beyond service exposure and orchestration towards a platform for data- and AI-driven service ecosystems, enabling trusted sharing and consumption of datasets, analytics services, and AI models across federated operator environments.
The 6G-DALI Data Lab is a set of data infrastructure components designed for 6G research and experimentation within OpenOP. It provides a complete data lifecycle β from raw measurement ingestion through processing to discovery and sharing β built on open standards and sovereign data exchange.
6G research generates large volumes of measurement data across distributed testbeds: RAN measurements, network KPIs, spectrum analytics, ML training datasets. Today this data lives in silos β each testbed has its own storage, its own format, its own access model. Sharing data between research teams, across testbeds, or with external partners requires manual coordination and ad-hoc file transfers.
A data space solves this by providing:
- Sovereign data sharing β data owners keep control over who can access their data and under what conditions, enforced through contract negotiation rather than open file shares
- Standardised metadata β every dataset is described using DCAT-AP and the 6G-DALI Metadata Application Profile (MAP), making datasets discoverable and comparable across testbeds
- Interoperable storage β S3-compatible object stores (RustFS, MinIO, SeaweedFS) mean any testbed can host data without vendor lock-in
- Automated processing β DataOps pipelines can discover, pull, transform, and re-publish datasets without manual intervention
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 6G-DALI Data Lab β
β β
β βββββββββββββββββββ βββββββββββββββββββ ββββββββββββββββββ β
β β EDC Connector β β S3 Storage β β DataOps β β
β β β β (RustFS) β β (Airflow) β β
β β - Catalogue β β β β β β
β β - Negotiation βββββΊβ - Raw data βββββΊβ - Ingest β β
β β - Transfer β β - Processed β β - Validate β β
β β - Policies β β - Derived β β - Augment β β
β β - Catalog UI β β β β - Publish β β
β ββββββββββ¬ββββββββββ βββββββββββββββββββ ββββββββββββββββββ β
β β β
β β Dataspace Protocol (DSP) β
β β β
βββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
Other connectors, testbeds, partners
Eclipse Dataspace Connector (EDC) β the core component. Each participant runs their own connector which acts as both a catalogue (listing their datasets) and a transfer agent (negotiating access and moving data). Connectors communicate via the Dataspace Protocol (DSP), an open standard for data space interoperability.
S3-compatible storage (RustFS) β datasets are stored as objects in S3 buckets. The EDC reads from and writes to storage using presigned URLs, so S3 credentials never leave the data owner's infrastructure.
DataOps pipelines β automated workflows that pull raw data from the data space, run transformations and quality checks, and publish derived datasets back. The same flow is demonstrated two ways in this hackfest: as plain Python scripts (Task 3), and as repeatable Apache Airflow DAGs (Task 4) β a lightweight standalone Airflow ships with each participant's stack at http://<MY_HOST>:21006.
Every dataset registered in the data space carries metadata following the 6G-DALI MAP, which extends DCAT-AP 3.0 with 5G/6G-specific fields:
| Layer | Fields | Purpose |
|---|---|---|
| DCAT-AP | title, description, license, keywords, access rights | Standard EU open data discovery |
| 6G-DALI Identity | SNS project name, GDPR/FAIR compliance | Project-level tracking |
| Testbed Context | environment, network domain, 3GPP release, frequency band, RAN type, compute infrastructure | Characterise the measurement setup |
| Experimentation | observation points, measurement family, tools, measured variables | Describe what was measured and how |
| Provenance | wasDerivedFrom, wasGeneratedBy, wasAttributedTo | Track dataset lineage through processing |
Hackfest Venue
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β Central EDC (hosted once) β
β ββββββββββββββββ βββββββββββ ββββββββββββββββ β
β β EDC β β RustFS β β PostgreSQL β β
β β :20000 UI β β :9000 β β β β
β β :20001 Mgmt β β :9001 β β β β
β β :20002 DSP β β β β β β
β ββββββββ¬βββββββββ βββββββββββ ββββββββββββββββ β
β β DSP protocol β
β β β
β ββββββββ΄βββββββββββββββββββββββββββββββββββ β
β β LAN / Wi-Fi β β
β ββββββββ¬βββββββββββ¬ββββββββββββ¬ββββββββββββ β
β β β β β
β Participant A Participant B Participant C ... β
β ββββββββββββββββββββββββββββββββββββββββββββββββ β
β β EDC :21000 ββ EDC :21000 ββ EDC :21000 β β
β β RustFS :21004ββ RustFS :21004ββ RustFS :21004β β
β β Airflow:21006ββ Airflow:21006ββ Airflow:21006β β
β β PG ββ PG ββ PG β β
β ββββββββββββββββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Each participant needs:
- Docker and Docker Compose
- Python 3.9+ with pip
- A terminal / command line
- Network access to the central EDC host
| Guide | Who | Description |
|---|---|---|
| Setup β Central EDC | Organiser | Start the central stack and register sample assets |
| Setup β Participant | Each participant | Start your local stack, configure .env, verify connectivity |
Objective: Operate in the data space through the Catalog UI β register datasets, browse the federated catalogue, and download data, all without writing code.
The organisers will present the Data Lab components, the Dataspace Protocol, the 6G-DALI Metadata Application Profile, the Catalog UI, and the Dataset Submission Portal. Participants will then deploy their local stack and work through the UI.
| Task | Tool | What you will learn |
|---|---|---|
| Setup β Participant | Docker Compose | Deploy your local EDC + RustFS + PostgreSQL stack |
| Task 1 β Bring your own data | Catalog UI: Submit Dataset | Register a dataset via the 4-step wizard, then browse assets, metadata and lineage, and download datasets from the Catalog UI |
Topics covered: Data Lab architecture (EDC, RustFS, DataOps), Catalog UI (assets, metadata, lineage, agreements, negotiations, transfers, per-asset Preview and Validation buttons), Dataset Submission Portal (metadata wizard, file upload, quality checks, structured JSON-LD dataset description), catalogue discovery and dataset download.
Expected outcomes: Run the Data Lab locally, register a dataset through the web portal, discover and inspect data assets across the federated data space, and download datasets through the Catalog UI.
Objective: Perform the same data space operations programmatically, via the EDC Management API and Python scripts: register datasets, pull from the central connector, and exchange data with other participants.
Participants will register a dataset via Python, pull a dataset from the central connector, and discover and pull datasets from other participants β all through the Management API.
| Task | Tool | What you will learn |
|---|---|---|
| Task 2 β Register a dataset | tr02_s1_register.py |
Programmatic registration: upload to S3, create asset with MAP metadata, create policy and contract |
| Task 3 β Pull from central EDC | tr02_s2_pull_central.py |
Discover the central catalogue, negotiate a contract, transfer a dataset to your local storage |
| Task 3 β Pull from a peer | tr02_s3_pull_peer.py |
Browse another participant's catalogue, negotiate and pull their dataset |
| Task 3 β Pull from your own connector | tr02_s4_pull_local.py |
Self-transfer: negotiate with your own connector and pull one of your assets locally |
Topics covered: Programmatic asset registration via the Management API, 6G-DALI MAP metadata, catalogue discovery, contract negotiation and data transfer, cross-domain peer-to-peer exchange, policies and governance.
Expected outcomes: Register datasets via scripts using standardised metadata, pull datasets from the central connector via contract negotiation, and exchange datasets directly with other participants.
Objective: Execute data processing workflows and build custom extensions on top of the Data Lab.
Participants will run a DataOps pipeline that pulls data, augments it, and publishes derived datasets with provenance metadata. They will then build their own custom pipelines and extensions.
| Task | Tool | What you will learn |
|---|---|---|
| Task 3 β Pull, process, push | tr02_s5_pull_process_push.py |
Full DataOps lifecycle: negotiate β transfer β augment β publish with provenance and lineage |
| Task 4 β Airflow DataOps DAGs | Airflow at :21006 |
The same pull/process/validate lifecycle as repeatable, triggerable Airflow DAGs, plus automated Great Expectations quality checks |
| Task 5 β Build your own extensions | Guide | Custom pipelines, multi-source composition, AI features, custom policies |
Topics covered: DataOps architecture (pull β process β publish), data augmentation, provenance tracking (PROV-O), dataset lineage visualisation, versioned derived datasets, Airflow-based pipeline orchestration, automated data quality validation (Great Expectations), custom pipeline development.
Development opportunities:
- DataOps Services β data quality checks, feature engineering, aggregation, multi-source joins
- Dataspace Extensions β custom policies, restricted access, multi-domain workflows
- AI-Driven Features β auto-metadata generation, anomaly detection, data summarisation
- Proof-of-Concept Development β autonomous DataOps workflows, intent-driven data management
Expected outcomes: Execute pull β process β publish pipelines (as scripts and as Airflow DAGs), track dataset lineage through provenance, produce versioned derived assets, validate data quality automatically, build custom extensions on the Data Lab infrastructure.
Contributions developed during the Hackfest may become candidates for future integration into OpenOP.
| Service | Port | Purpose |
|---|---|---|
| EDC UI | 20000 | Catalog UI at /api/catalog |
| EDC Mgmt | 20001 | Management API |
| EDC DSP | 20002 | Dataspace Protocol endpoint |
| EDC Control | 20003 | Internal control plane |
| RustFS API | 9000 | S3-compatible storage |
| RustFS UI | 9001 | Storage web console |
| Service | Port | Purpose |
|---|---|---|
| EDC UI | 21000 | Catalog UI at /api/catalog |
| EDC Mgmt | 21001 | Management API |
| EDC DSP | 21002 | Dataspace Protocol endpoint |
| EDC Control | 21003 | Internal control plane |
| RustFS API | 21004 | S3-compatible storage |
| RustFS UI | 21005 | Storage web console |
| Type | Data Address | Use case |
|---|---|---|
MinioAsset |
Source: reads from S3-compatible storage | Provider-side dataset storage |
PresignedHttpData |
Destination: HTTP PUT to presigned URL | Consumer-side S3 ingestion |
Consumer Provider
β β
β POST /catalog/request β
β βββββββββββββββββββββββββββββββββΊβ Discover datasets
β βββββ dcat:Catalog βββββββββββββ
β β
β POST /contractnegotiations β
β βββββββββββββββββββββββββββββββββΊβ Negotiate access
β βββββ agreement ID ββββββββββββ
β β
β generate presigned PUT URL β
β (on consumer's S3) β
β β
β POST /transferprocesses β
β βββββββββββββββββββββββββββββββββΊβ Start transfer
β β
β Provider reads from β
β its S3 and PUTs β
β to the presigned URL β
β β
β βββββ file arrives in S3 ββββββ
β β
# List assets
curl -X POST http://<MY_HOST>:21001/management/v3/assets/request \
-H "Content-Type: application/json" -d '{}'
# Browse a remote catalogue
curl -X POST http://<MY_HOST>:21001/management/v3/catalog/request \
-H "Content-Type: application/json" \
-d '{
"@context": {"@vocab": "https://w3id.org/edc/v0.0.1/ns/"},
"counterPartyAddress": "http://<PROVIDER>:20002/protocol",
"protocol": "dataspace-protocol-http"
}'
# Check negotiation status
curl http://<MY_HOST>:21001/management/v3/contractnegotiations/<ID>
# Check transfer status
curl http://<MY_HOST>:21001/management/v3/transferprocesses/<ID>| Problem | Solution |
|---|---|
No dataplane found |
The EDC data plane didn't register at startup. Restart the connector. |
411 Length Required |
The transfer destination must use PresignedHttpData type, not HttpData. |
Asset not found in provider catalogue |
The provider has no contract definition. Run setup-assets.sh on the central EDC. |
409 Conflict on asset creation |
Asset already exists. Task scripts handle this gracefully β re-run is safe. |
Negotiation stuck in REQUESTED |
Check that both connectors can reach each other's DSP endpoint (central 20002 / participant 21002). |
| Presigned URL expired | URLs expire after 5 minutes. Re-run the task script. |
UnknownHostException |
The EDC container can't resolve the storage hostname. Ensure RustFS is running on the same Docker network. |
ghcr.io/sparkworksnet/6gdali-testbed-connector:latest
Custom extensions included:
- MinioAssetDataSource β one-shot read from S3-compatible storage (no polling)
- PresignedHttpData Sink β HTTP PUT with explicit Content-Length for presigned URLs
- Catalog UI β web dashboard at
/api/catalogwith assets, contracts, policies, agreements, negotiations, transfers, and lineage tree - Data plane self-registration β automatic registration with
MinioAssetsource andPresignedHttpData-PUSHtransfer type
- Pre-configured central OpenOP / Data Lab instance
- Participant deployment packages (Docker Compose)
- Documentation and task guides
- Sample 5G measurement datasets (CSV)
- Metadata catalogues with 6G-DALI MAP examples
- Pre-registered assets with contract definitions
- DataOps processing scripts (pull β augment β publish)
- Dataspace exchange scenarios (local and cross-domain)
- Asset registration templates with MAP metadata