Svc/Subtopologies/DataProducts/docs/sdd.md
The DataProducts subtopology packages the standard F´ data product services — product management, product writing, product cataloging, and the buffer infrastructure that connects them — into a single pre-wired subtopology. Client components that produce data products connect to the exposed topology ports; the subtopology handles buffer allocation, accumulation, writing products to the filesystem, and cataloging written products for prioritized downlink.
| ID | Description | Validation |
|---|---|---|
| SVC-DATAPRODUCTS-001 | The subtopology shall provide data product buffer management for client components requesting product buffers. | Inspection |
| SVC-DATAPRODUCTS-002 | The subtopology shall provide data product writing functionality to store filled products on the filesystem. | Inspection |
| SVC-DATAPRODUCTS-003 | The subtopology shall provide data product cataloging functionality for prioritized downlink of stored products. | Inspection |
| SVC-DATAPRODUCTS-004 | The subtopology shall provide buffer accumulation between product management and product writing. | Inspection |
| SVC-DATAPRODUCTS-005 | The subtopology shall support configurable instance properties (IDs, queue sizes, stack sizes, priorities). | Inspection |
| SVC-DATAPRODUCTS-006 | The subtopology shall expose rate-group connection points for components requiring scheduling. | Inspection |
| Instance name | Type (Svc) | Kind | Purpose (core function) |
|---|---|---|---|
dpMgr | DpManager | Active | Services product get/request/send ports from client components. |
dpWriter | DpWriter | Active | Writes filled product buffers to files in the data product directory. |
dpCat | DpCatalog | Active | Catalogs written products; commands prioritized downlink. |
dpBufferAccumulator | BufferAccumulator | Active | Buffers filled products between dpMgr and dpWriter. |
dpBufferManager | BufferManager | Passive | Allocates data product buffers. |
dpMgr.bufferGetOut -> dpBufferManager.bufferGetCallee — product buffer allocation.dpMgr.productSendOut -> dpBufferAccumulator.bufferSendInFill — filled products enter the accumulator.dpBufferAccumulator.bufferSendOutDrain -> dpWriter.bufferSendIn — accumulated products drain to the writer.dpWriter.deallocBufferSendOut -> dpBufferAccumulator.bufferSendInReturn and dpBufferAccumulator.bufferSendOutReturn -> dpBufferManager.bufferSendIn — written buffers return to the buffer manager.dpWriter.dpWrittenOut -> dpCat.addToCat — written products are added to the catalog.DataProductsConfig::Paths::dpDir) is created at startup and dpCat.configure() is called with the directory, state file (DataProductsConfig::Paths::dpState), and the subtopology memory allocator.dpWriter.configure() is called with the data product directory.DRAIN) and deallocated at teardown, sized by DataProductsConfig::BufferAccumulator::maxNumBuffers.DataProductsConfig::BuffMgr (buffer size and count); the manager is cleaned up (and dpCat.shutdown() called) at teardown.The DataProducts subtopology is not a stand-alone application. It requires connections from the including deployment topology:
productGetIn / productRequestIn / productSendIn / productResponseOut.dpMgrSchedIn, dpWriterSchedIn, and dpBufferManagerSchedIn for telemetry output.dpCatFileOut / dpCatFileDone to a file downlink component (e.g., via the FileHandling subtopology) so cataloged products can be downlinked.dpWriterProcOut provides a hook for processing product buffers before they are written (e.g., compression via the DpCompression subtopology).| Port | Direction | Underlying port | Purpose |
|---|---|---|---|
productGetIn | input | dpMgr.productGetIn | Synchronous product buffer get requests from clients |
productRequestIn | input | dpMgr.productRequestIn | Asynchronous product buffer requests from clients |
productSendIn | input | dpMgr.productSendIn | Filled product buffers from clients |
productResponseOut | output | dpMgr.productResponseOut | Requested product buffers back to clients |
dpCatFileOut | output | dpCat.fileOut | File downlink requests |
dpCatFileDone | input | dpCat.fileDone | File downlink completion notifications |
dpWriterProcOut | output | dpWriter.procBufferSendOut | Product processing hook |
dpMgrSchedIn / dpWriterSchedIn / dpBufferManagerSchedIn | input | respective schedIn ports | Rate-group scheduling for telemetry |
topology Flight {
instance DataProducts.Subtopology
connections RateGroups {
rg1Hz.RateGroupMemberOut[0] -> DataProducts.Subtopology.dpMgrSchedIn
rg1Hz.RateGroupMemberOut[1] -> DataProducts.Subtopology.dpWriterSchedIn
rg1Hz.RateGroupMemberOut[2] -> DataProducts.Subtopology.dpBufferManagerSchedIn
}
connections Producers {
myProducer.productGetOut -> DataProducts.Subtopology.productGetIn
myProducer.productSendOut -> DataProducts.Subtopology.productSendIn
}
connections Downlink {
DataProducts.Subtopology.dpCatFileOut -> FileHandling.Subtopology.fileDownlinkSendIn
FileHandling.Subtopology.fileDownlinkCompleteOut -> DataProducts.Subtopology.dpCatFileDone
}
}
Configure the instance properties for the static instances owned by the subtopology. All knobs live under Svc/Subtopologies/DataProducts/DataProductsConfig/DataProductsConfig.fpp:
dpCat, dpMgr, dpWriter, dpBufferAccumulator).The memory allocator used by the subtopology is provided by DataProductsSubtopologyConfig.cpp (DataProducts::Allocation::memAllocator).
| Requirement ID | Satisfied by |
|---|---|
| SVC-DATAPRODUCTS-001 | dpMgr — Svc.DpManager, dpBufferManager |
| SVC-DATAPRODUCTS-002 | dpWriter — Svc.DpWriter |
| SVC-DATAPRODUCTS-003 | dpCat — Svc.DpCatalog |
| SVC-DATAPRODUCTS-004 | dpBufferAccumulator — Svc.BufferAccumulator |
| SVC-DATAPRODUCTS-005 | DataProductsConfig (instance properties) |
| SVC-DATAPRODUCTS-006 | Exposed *SchedIn topology ports |