FIX: sp_execute_external_script may fail to run R scripts that use the RxLocalParallel compute context or the doParallel R package in SQL Server 2019

Applies to: SQL Server 2019 on Windows

Symptoms


Assumethat you run R scripts that use the RxLocalParallelcompute context or the doParallel R package. When you use sp_execute_external_script to run scripts which are written in R, you notice that the query may hangwhile running the parallel functions.

Status


Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the "Applies to" section. 

Resolution


This issue is fixed in the following cumulative update for SQL Server:
About cumulative updates for SQL Server:
Each new cumulative update for SQL Server contains all the hotfixes and all the security fixes that were included with the previous cumulative update. Check out the latest cumulative updates for SQL Server:

Workaround


To workaround the issue without updating, you can include some additional R code atthe top of your script in sp_execute_external_script. Thecode is as follows: 
parallel <- getNamespace("parallel")
unlockBinding("makePSOCKcluster",parallel)
internalMakePSOCKcluster <-parallel::makePSOCKcluster
wrapperMakePSOCKcluster = function(...) {
 args <- list(...)
 if (!("outfile" %in%names(args)) || is.null(args[["outfile"]]))
 {
   args[["outfile"]] <-tempfile()
 }
 do.call(internalMakePSOCKcluster, args)
}
parallel$makePSOCKcluster <-wrapperMakePSOCKcluster
lockBinding("makePSOCKcluster",parallel)

References


Learn about the terminology that Microsoft uses to describe software updates.