@@ -1820,6 +1820,64 @@ export class C2DEngineDocker extends C2DEngine {
18201820 }
18211821 containerInfo . Env = envVars
18221822 }
1823+ // persistent Storage: bind-mount bucket files into the job container (localfs backend)
1824+ for ( const i in job . assets ) {
1825+ const asset = job . assets [ i ]
1826+ if ( ! asset . fileObject || asset . fileObject . type !== 'nodePersistentStorage' ) {
1827+ continue
1828+ }
1829+ const fo = asset . fileObject as { bucketId ?: string ; fileName ?: string }
1830+ if ( ! fo . bucketId || ! fo . fileName ) {
1831+ CORE_LOGGER . error (
1832+ `Job ${ job . jobId } asset ${ i } : nodePersistentStorage requires bucketId and fileName`
1833+ )
1834+ job . status = C2DStatusNumber . DataProvisioningFailed
1835+ job . statusText = C2DStatusText . DataProvisioningFailed
1836+ job . isRunning = false
1837+ job . dateFinished = String ( Date . now ( ) / 1000 )
1838+ await this . db . updateJob ( job )
1839+ await this . cleanupJob ( job )
1840+ return
1841+ }
1842+ const ps = OceanNode . getInstance ( ) . getPersistentStorage ( )
1843+ if ( ! ps ) {
1844+ CORE_LOGGER . error (
1845+ `Job ${ job . jobId } asset ${ i } : persistent storage is not configured on this node`
1846+ )
1847+ job . status = C2DStatusNumber . DataProvisioningFailed
1848+ job . statusText = C2DStatusText . DataProvisioningFailed
1849+ job . isRunning = false
1850+ job . dateFinished = String ( Date . now ( ) / 1000 )
1851+ await this . db . updateJob ( job )
1852+ await this . cleanupJob ( job )
1853+ return
1854+ }
1855+ try {
1856+ const bindMount = await ps . getDockerMountObject (
1857+ fo . bucketId ,
1858+ fo . fileName ,
1859+ job . owner
1860+ )
1861+ CORE_LOGGER . debug (
1862+ `Mounting bucket ${ fo . bucketId } to folder ${ bindMount . Target } `
1863+ )
1864+ hostConfig . Mounts . push ( bindMount )
1865+ mountVols [ bindMount . Target ] = { }
1866+ } catch ( e ) {
1867+ const errMsg = e instanceof Error ? e . message : String ( e )
1868+ CORE_LOGGER . error (
1869+ `Job ${ job . jobId } asset ${ i } : failed to resolve persistent storage bind: ${ errMsg } `
1870+ )
1871+ job . status = C2DStatusNumber . DataProvisioningFailed
1872+ job . statusText = C2DStatusText . DataProvisioningFailed
1873+ job . isRunning = false
1874+ job . dateFinished = String ( Date . now ( ) / 1000 )
1875+ await this . db . updateJob ( job )
1876+ await this . cleanupJob ( job )
1877+ return
1878+ }
1879+ }
1880+
18231881 const container = await this . createDockerContainer ( containerInfo , true )
18241882 if ( container ) {
18251883 job . status = C2DStatusNumber . Provisioning
@@ -2767,6 +2825,10 @@ export class C2DEngineDocker extends C2DEngine {
27672825 if ( asset . fileObject ) {
27682826 try {
27692827 if ( asset . fileObject . type ) {
2828+ if ( asset . fileObject . type === 'nodePersistentStorage' ) {
2829+ // local storage is handled later, when we start the container and create the binds
2830+ continue
2831+ }
27702832 storage = Storage . getStorageClass ( asset . fileObject , config )
27712833 } else {
27722834 CORE_LOGGER . info ( 'asset file object seems to be encrypted, checking it...' )
0 commit comments