@@ -116,6 +116,7 @@ export class CSIController extends TypedEmitter<Events> {
116116 apiInputEnabled = true ;
117117
118118 executionTime : number = - 1 ;
119+ inputHeadersSent = false ;
119120
120121 /**
121122 * Topic to which the output stream should be routed
@@ -222,7 +223,8 @@ export class CSIController extends TypedEmitter<Events> {
222223 this . logger . info ( "Instance status: errored" , e ) ;
223224
224225 this . status ||= InstanceStatus . ERRORED ;
225- this . executionTime = ( Date . now ( ) - this . info . created ! . getTime ( ) ) / 1000 ;
226+
227+ this . executionTime = this . info . created ? ( Date . now ( ) - this . info . created ! . getTime ( ) ) / 1000 : - 1 ;
226228
227229 this . setExitInfo ( e . exitcode , e . message ) ;
228230
@@ -403,9 +405,10 @@ export class CSIController extends TypedEmitter<Events> {
403405 . pipe ( this . upStreams [ CC . CONTROL ] ) ;
404406
405407 this . communicationHandler . addMonitoringHandler ( RunnerMessageCode . PING , async ( message ) => {
406- const { status, payload } = message [ 1 ] ;
408+ const { status, payload, inputHeadersSent } = message [ 1 ] ;
407409
408410 this . status = status || InstanceStatus . RUNNING ;
411+ this . inputHeadersSent = inputHeadersSent ;
409412
410413 if ( ! payload ) {
411414 this . emit ( "error" , "No payload in ping!" ) ;
@@ -485,6 +488,10 @@ export class CSIController extends TypedEmitter<Events> {
485488 this . logger . trace ( "Received a PING message with ports config" ) ;
486489 }
487490
491+ this . inputHeadersSent = ! ! message [ 1 ] . inputHeadersSent ;
492+
493+ this . logger . info ( "Headers already sent for input?" , this . inputHeadersSent ) ;
494+
488495 if ( this . instanceAdapter . setRunner ) {
489496 await this . instanceAdapter . setRunner ( {
490497 ...message [ 1 ] . payload . system ,
@@ -537,8 +544,6 @@ export class CSIController extends TypedEmitter<Events> {
537544 }
538545
539546 createInstanceAPIRouter ( ) {
540- let inputHeadersSent = false ;
541-
542547 if ( ! this . upStreams ) {
543548 throw new AppError ( "UNATTACHED_STREAMS" ) ;
544549 }
@@ -551,11 +556,11 @@ export class CSIController extends TypedEmitter<Events> {
551556 * @experimental
552557 */
553558 this . router . duplex ( "/inout" , ( duplex , _headers ) => {
554- if ( ! inputHeadersSent ) {
559+ if ( ! this . inputHeadersSent ) {
555560 this . downStreams ! [ CC . IN ] . write ( `Content-Type: ${ _headers [ "content-type" ] } \r\n` ) ;
556561 this . downStreams ! [ CC . IN ] . write ( "\r\n" ) ;
557562
558- inputHeadersSent = true ;
563+ this . inputHeadersSent = true ;
559564 }
560565
561566 ( duplex as unknown as DuplexStream ) . input . pipe ( this . downStreams ! [ CC . IN ] , { end : false } ) ;
@@ -597,15 +602,15 @@ export class CSIController extends TypedEmitter<Events> {
597602 const contentType = req . headers [ "content-type" ] ;
598603
599604 // @TODO : Check if subsequent requests have the same content-type.
600- if ( ! inputHeadersSent ) {
605+ if ( ! this . inputHeadersSent ) {
601606 if ( contentType === undefined ) {
602607 return { opStatus : ReasonPhrases . NOT_ACCEPTABLE , error : "Content-Type must be defined" } ;
603608 }
604609
605610 stream . write ( `Content-Type: ${ contentType } \r\n` ) ;
606611 stream . write ( "\r\n" ) ;
607612
608- inputHeadersSent = true ;
613+ this . inputHeadersSent = true ;
609614 }
610615
611616 return stream ;
0 commit comments