Skip to content

Commit 3eb7c30

Browse files
committed
switch to old school approach for the async manager loosing scope in UDFs
1 parent c6e3299 commit 3eb7c30

File tree

1 file changed

+47
-26
lines changed

1 file changed

+47
-26
lines changed

models/AmazonS3.cfc

+47-26
Original file line numberDiff line numberDiff line change
@@ -832,33 +832,54 @@ component accessors="true" singleton {
832832
}
833833
try {
834834

835-
function processPart( part ){
836-
var channel = part.channel.position( part.offset );
837-
var buffer = createObject( "java", "java.nio.ByteBuffer" ).allocate( part.limit );
838-
channel.read( buffer );
839-
840-
return {
841-
"partNumber" : part.partNumber,
842-
"size" : part.limit,
843-
"channel" : part.channel,
844-
"response" : s3Request(
845-
method = "PUT",
846-
resource = bucketName & "/" & uri,
847-
body = buffer.array(),
848-
timeout = part.timeout,
849-
parameters = {
850-
"uploadId" : part.uploadId,
851-
"partNumber" : part.partNumber
852-
},
853-
headers = { "content-type" : "binary/octet-stream" }
854-
)
855-
};
856-
}
857-
// Alow for using outside of `box` context
858-
if( structKeyExists( variables, "asyncManager" ) ){
859-
parts = variables.asyncManager.allApply( parts, processPart );
835+
// We have to do this manually due to the async manager losing scope when we use it as a UDF
836+
// TODO: Move this to a function and pass in the all of the args used
837+
if( !isNull( variables.asyncManager ) ){
838+
parts = variables.asyncManager.allApply( parts, function( part ){
839+
var channel = part.channel.position( part.offset );
840+
var buffer = createObject( "java", "java.nio.ByteBuffer" ).allocate( part.limit );
841+
channel.read( buffer );
842+
843+
return {
844+
"partNumber" : part.partNumber,
845+
"size" : part.limit,
846+
"channel" : part.channel,
847+
"response" : s3Request(
848+
method = "PUT",
849+
resource = bucketName & "/" & uri,
850+
body = buffer.array(),
851+
timeout = part.timeout,
852+
parameters = {
853+
"uploadId" : part.uploadId,
854+
"partNumber" : part.partNumber
855+
},
856+
headers = { "content-type" : "binary/octet-stream" }
857+
)
858+
};
859+
} );
860860
} else {
861-
parts = parts.map( processPart );
861+
parts = parts.map( function( part ){
862+
var channel = part.channel.position( part.offset );
863+
var buffer = createObject( "java", "java.nio.ByteBuffer" ).allocate( part.limit );
864+
channel.read( buffer );
865+
866+
return {
867+
"partNumber" : part.partNumber,
868+
"size" : part.limit,
869+
"channel" : part.channel,
870+
"response" : s3Request(
871+
method = "PUT",
872+
resource = bucketName & "/" & uri,
873+
body = buffer.array(),
874+
timeout = part.timeout,
875+
parameters = {
876+
"uploadId" : part.uploadId,
877+
"partNumber" : part.partNumber
878+
},
879+
headers = { "content-type" : "binary/octet-stream" }
880+
)
881+
};
882+
} );
862883
}
863884

864885
var finalizeBody = "<?xml version=""1.0"" encoding=""UTF-8""?><CompleteMultipartUpload xmlns=""http://s3.amazonaws.com/doc/2006-03-01/"">";

0 commit comments

Comments
 (0)