You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@arrow.apache.org by "Will Jones (Jira)" <ji...@apache.org> on 2022/03/21 15:59:00 UTC

[jira] [Commented] (ARROW-15964) [R] `arrow::write_*` causes R session hard abort on Mac OSX Monterey

    [ https://issues.apache.org/jira/browse/ARROW-15964?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17509971#comment-17509971 ] 

Will Jones commented on ARROW-15964:
------------------------------------

Hi Stephen,

First, it looks like you are running the x86_64 version of R on M1 using Rosetta2. If that's unintentional, consider downloading the arm64/Apple Silicon version of R, which is better tested and will be much faster :)

I haven't reproduced this yet, but can confirm there is an issue here; for me that command just freezes R.

 

> [R] `arrow::write_*` causes R session hard abort on Mac OSX Monterey
> --------------------------------------------------------------------
>
>                 Key: ARROW-15964
>                 URL: https://issues.apache.org/jira/browse/ARROW-15964
>             Project: Apache Arrow
>          Issue Type: Bug
>         Environment: Mac OSX Monterey 12.2.1
> Chip: Apple M1 Pro
>            Reporter: Stephen Holsenbeck
>            Priority: Major
>              Labels: arrow, bug, crash, r
>
> The Reprex is super simple.
> ```
> arrow::write_feather(data.frame(1:2), compression = "uncompressed")
> ```
> This causes R to hard abort with the "Start a new session" prompt
> <details>
> <summary>Sys.info</summary>
> ```
> sysname  "Darwin"
> release  "21.3.0"
> version  "Darwin Kernel Version 21.3.0: Wed Jan  5 21:37:58 PST 2022; root:xnu-8019.80.24~20/RELEASE_ARM64_T6000"     
> nodename     "MacBook-Pro.local"                                                                                                machine   "x86_64" 
> login "root" 
> </details>
> <details>
> <summary>sessionInfo</summary>
> ```
> R version 4.1.2 (2021-11-01) Platform: x86_64-apple-darwin17.0 (64-bit) Running under: macOS Monterey 12.2.1 Matrix products: default LAPACK: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRlapack.dylib locale: [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 attached base packages: [1] stats     graphics  grDevices datasets  utils     methods   base      loaded via a namespace (and not attached):   [1] fs_1.5.2                 usethis_2.1.5            bit64_4.0.5                [4] lubridate_1.8.0          devtools_2.4.3           httr_1.4.2                 [7] rprojroot_2.0.2          tools_4.1.2              bslib_0.3.1               [10] utf8_1.2.2               R6_2.5.1                 DT_0.21                   [13] DBI_1.1.2                lazyeval_0.2.2           colorspace_2.0-3          [16] withr_2.5.0              tidyselect_1.1.2         prettyunits_1.1.1         [19] processx_3.5.2           bit_4.0.4                curl_4.3.2                [22] compiler_4.1.2           cli_3.2.0                xml2_1.3.3                [25] desc_1.4.0               plotly_4.9.4.1           sass_0.4.0                [28] scales_1.1.1             bs4Dash_2.0.3            arrow_7.0.0               [31] callr_3.7.0              stringr_1.4.0            digest_0.6.29             [34] shinydashboardPlus_2.0.3 rmarkdown_2.11           pkgconfig_2.0.3           [37] htmltools_0.5.2          sessioninfo_1.2.2        attempt_0.3.1             [40] highr_0.9                fastmap_1.1.0            htmlwidgets_1.5.4         [43] rlang_1.0.2              rstudioapi_0.13          shiny_1.7.1               [46] jquerylib_0.1.4          generics_0.1.2           jsonlite_1.8.0            [49] dplyr_1.0.8              zip_2.2.0                config_0.3.1              [52] magrittr_2.0.2           Rcpp_1.0.8               munsell_0.5.0             [55] fansi_1.0.2              clipr_0.8.0              shinycssloaders_1.0.0     [58] lifecycle_1.0.1          stringi_1.7.6            yaml_2.3.5                [61] snakecase_0.11.0         brio_1.1.3               pkgbuild_1.3.1            [64] grid_4.1.2               promises_1.2.0.1         shinydashboard_0.7.2      [67] crayon_1.5.0             knitr_1.37               ps_1.6.0                  [70] pillar_1.7.0             pkgload_1.2.4            reprex_2.0.1              [73] glue_1.6.2               evaluate_0.15            golem_0.3.1               [76] data.table_1.14.2        remotes_2.4.2            renv_0.15.2               [79] vctrs_0.3.8              httpuv_1.6.5             testthat_3.1.2            [82] gtable_0.3.0             purrr_0.3.4              tidyr_1.2.0               [85] assertthat_0.2.1         cachem_1.0.6             ggplot2_3.3.5             [88] xfun_0.29                mime_0.12                xtable_1.8-4              [91] roxygen2_7.1.2           UU_0.0.0.9003            later_1.3.0               [94] googledrive_2.0.0        viridisLite_0.4.0        gargle_1.2.0              [97] dockerfiler_0.1.4        tibble_3.1.6             memoise_2.0.1            [100] shinyWidgets_0.6.3       ellipsis_0.3.2  
> ```
> </details>
> <details>
> <summary>Extended STDOUT from the \{reprex} package</summary>
> This reprex appears to crash R.
> See standard output and standard error for more details.
>  # 
>  ## 
>  ### 
>  #### Standard output and error
> ``` sh
> x Install the styler package in order to use `style = TRUE`.
>  *** caught illegal operation ***
> address 0x114c7b741, cause 'illegal opcode'
> Traceback:
>  1: Table__from_dots(dots, schema, option_use_threads())
>  2: Table$create(x)
>  3: arrow::write_feather(data.frame(1:2), compression = "uncompressed")
>  4: eval(expr, envir, enclos)
>  5: eval(expr, envir, enclos)
>  6: eval_with_user_handlers(expr, envir, enclos, user_handlers)
>  7: withVisible(eval_with_user_handlers(expr, envir, enclos, user_handlers))
>  8: withCallingHandlers(withVisible(eval_with_user_handlers(expr,     envir, enclos, user_handlers)), warning = wHandler, error = eHandler,     message = mHandler)
>  9: doTryCatch(return(expr), name, parentenv, handler)
> 10: tryCatchOne(expr, names, parentenv, handlers[[1L]])
> 11: tryCatchList(expr, classes, parentenv, handlers)
> 12: tryCatch(expr, error = function(e) {    call <- conditionCall(e)    if (!is.null(call))
> {        if (identical(call[[1L]], quote(doTryCatch)))             call <- sys.call(-4L)        dcall <- deparse(call, nlines = 1L)        prefix <- paste("Error in", dcall, ": ")        LONG <- 75L        sm <- strsplit(conditionMessage(e), "\n")[[1L]]        w <- 14L + nchar(dcall, type = "w") + nchar(sm[1L], type = "w")        if (is.na(w))             w <- 14L + nchar(dcall, type = "b") + nchar(sm[1L],                 type = "b")        if (w > LONG)             prefix <- paste0(prefix, "\n  ")    }
>    else prefix <- "Error : "    msg <- paste0(prefix, conditionMessage(e), "\n")    .Internal(seterrmessage(msg[1L]))    if (!silent && isTRUE(getOption("show.error.messages")))
> {        cat(msg, file = outFile)        .Internal(printDeferredWarnings())    }
>    invisible(structure(msg, class = "try-error", condition = e))})
> 13: try(f, silent = TRUE)
> 14: handle(ev <- withCallingHandlers(withVisible(eval_with_user_handlers(expr,     envir, enclos, user_handlers)), warning = wHandler, error = eHandler,     message = mHandler))
> 15: timing_fn(handle(ev <- withCallingHandlers(withVisible(eval_with_user_handlers(expr,     envir, enclos, user_handlers)), warning = wHandler, error = eHandler,     message = mHandler)))
> 16: evaluate_call(expr, parsed$src[[i]], envir = envir, enclos = enclos,     debug = debug, last = i == length(out), use_try = stop_on_error !=         2L, keep_warning = keep_warning, keep_message = keep_message,     output_handler = output_handler, include_timing = include_timing)
> 17: evaluate::evaluate(...)
> 18: evaluate(code, envir = env, new_device = FALSE, keep_warning = !isFALSE(options$warning),     keep_message = !isFALSE(options$message), stop_on_error = if (is.numeric(options$error)) options$error else
> {        if (options$error && options$include)             0L        else 2L    }
> , output_handler = knit_handlers(options$render, options))
> 19: in_dir(input_dir(), evaluate(code, envir = env, new_device = FALSE,     keep_warning = !isFALSE(options$warning), keep_message = !isFALSE(options$message),     stop_on_error = if (is.numeric(options$error)) options$error else \{        if (options$error && options$include)             0L        else 2L    }
> , output_handler = knit_handlers(options$render, options)))
> 20: eng_r(options)
> 21: block_exec(params)
> 22: call_block(x)
> 23: process_group.block(group)
> 24: process_group(group)
> 25: withCallingHandlers(if (tangle) process_tangle(group) else process_group(group),     error = function(e)
> {        setwd(wd)        cat(res, sep = "\n", file = output %n% "")        message("Quitting from lines ", paste(current_lines(i),             collapse = "-"), " (", knit_concord$get("infile"),             ") ")    }
> )
> 26: process_file(text, output)
> 27: knitr::knit(knit_input, knit_output, envir = envir, quiet = quiet)
> 28: rmarkdown::render(input, quiet = TRUE, envir = globalenv(), encoding = "UTF-8")
> 29: (function (input)
> {    rmarkdown::render(input, quiet = TRUE, envir = globalenv(),         encoding = "UTF-8")}
> )(input = base::quote("bonny-fox_reprex.R"))
> 30: (function (what, args, quote = FALSE, envir = parent.frame())
> {    if (!is.list(args))         stop("second argument must be a list")    if (quote)         args <- lapply(args, enquote)    .Internal(do.call(what, args, envir))}
> )(base::quote(function (input)
> {    rmarkdown::render(input, quiet = TRUE, envir = globalenv(),         encoding = "UTF-8")}
> ), base::quote(list(input = "bonny-fox_reprex.R")), envir = base::quote(<environment>),     quote = base::quote(TRUE))
> 31: do.call(do.call, c(readRDS("/var/folders/s8/yv0hmbdj5pq2g88v8qs7v82c0000gn/T//RtmphMqH7S/callr-fun-120e5fef59ef"),     list(envir = .GlobalEnv, quote = TRUE)), envir = .GlobalEnv,     quote = TRUE)
> 32: saveRDS(do.call(do.call, c(readRDS("/var/folders/s8/yv0hmbdj5pq2g88v8qs7v82c0000gn/T//RtmphMqH7S/callr-fun-120e5fef59ef"),     list(envir = .GlobalEnv, quote = TRUE)), envir = .GlobalEnv,     quote = TRUE), file = "/var/folders/s8/yv0hmbdj5pq2g88v8qs7v82c0000gn/T//RtmphMqH7S/callr-res-120e5af98b1d")
> 33: withCallingHandlers(
> {    NULL    saveRDS(do.call(do.call, c(readRDS("/var/folders/s8/yv0hmbdj5pq2g88v8qs7v82c0000gn/T//RtmphMqH7S/callr-fun-120e5fef59ef"),         list(envir = .GlobalEnv, quote = TRUE)), envir = .GlobalEnv,         quote = TRUE), file = "/var/folders/s8/yv0hmbdj5pq2g88v8qs7v82c0000gn/T//RtmphMqH7S/callr-res-120e5af98b1d")    flush(stdout())    flush(stderr())    NULL    invisible()}
> , error = function(e) {    {        callr_data <- as.environment("tools:callr")$`{_}{{_}}callr_data{_}{{_}}`        err <- callr_data$err        assign(".Traceback", .traceback(4), envir = callr_data)        dump.frames("{_}{{_}}callr_dump{_}{{_}}")        assign(".Last.dump", .GlobalEnv$`{_}{{_}}callr_dump{_}{{_}}`, envir = callr_data)        rm("{_}{{_}}callr_dump{_}{{_}}", envir = .GlobalEnv)        e$call <- deparse(conditionCall(e), nlines = 6)        e2 <- err$new_error(conditionMessage(e), call. = conditionCall(e))        class(e2) <- c("callr_remote_error", class(e2))        e2$error <- e        calls <- sys.calls()        dcframe <- which(vapply(calls, function(x) length(x) >=             1 && identical(x[[1]], quote(do.call)), logical(1)))[1]        if (!is.na(dcframe))             e2$`{_}ignore` <- list(c(1, dcframe + 1L))        e2$`_pid` <- Sys.getpid()        e2$`_timestamp` <- Sys.time()        if (inherits(e, "rlib_error_2_0"))             e2$parent <- e$parent        e2 <- err$add_trace_back(e2, embed = FALSE)        saveRDS(list("error", e2), file = paste0("/var/folders/s8/yv0hmbdj5pq2g88v8qs7v82c0000gn/T//RtmphMqH7S/callr-res-120e5af98b1d",             ".error"))    }}, interrupt = function(e) {    {        callr_data <- as.environment("tools:callr")$`{_}{_}callr_data{_}{_}`        err <- callr_data$err        assign(".Traceback", .traceback(4), envir = callr_data)        dump.frames("{_}{_}callr_dump{_}{_}")        assign(".Last.dump", .GlobalEnv$`{_}{_}callr_dump{_}{_}`, envir = callr_data)        rm("{_}{_}callr_dump{_}_", envir = .GlobalEnv)        e$call <- deparse(conditionCall(e), nlines = 6)        e2 <- err$new_error(conditionMessage(e), call. = conditionCall(e))        class(e2) <- c("callr_remote_error", class(e2))        e2$error <- e        calls <- sys.calls()        dcframe <- which(vapply(calls, function(x) length(x) >=             1 && identical(x[[1]], quote(do.call)), logical(1)))[1]        if (!is.na(dcframe))             e2$`_ignore` <- list(c(1, dcframe + 1L))        e2$`_pid` <- Sys.getpid()        e2$`_timestamp` <- Sys.time()        if (inherits(e, "rlib_error_2_0"))             e2$parent <- e$parent        e2 <- err$add_trace_back(e2, embed = FALSE)        saveRDS(list("error", e2), file = paste0("/var/folders/s8/yv0hmbdj5pq2g88v8qs7v82c0000gn/T//RtmphMqH7S/callr-res-120e5af98b1d",             ".error"))    }}, callr_message = function(e) \{    try(signalCondition(e))})
> 34: doTryCatch(return(expr), name, parentenv, handler)
> 35: tryCatchOne(expr, names, parentenv, handlers[[1L]])
> 36: tryCatchList(expr, names[-nh], parentenv, handlers[-nh])
> 37: doTryCatch(return(expr), name, parentenv, handler)
> 38: tryCatchOne(tryCatchList(expr, names[-nh], parentenv, handlers[-nh]),     names[nh], parentenv, handlers[[nh]])
> 39: tryCatchList(expr, classes, parentenv, handlers)
> 40: tryCatch(withCallingHandlers(\{    NULL    saveRDS(do.call(do.call, c(readRDS("/var/folders/s8/yv0hmbdj5pq2g88v8qs7v82c0000gn/T//RtmphMqH7S/callr-fun-120e5fef59ef"),         list(envir = .GlobalEnv, quote = TRUE)), envir = .GlobalEnv,         quote = TRUE), file = "/var/folders/s8/yv0hmbdj5pq2g88v8qs7v82c0000gn/T//RtmphMqH7S/callr-res-120e5af98b1d")    flush(stdout())    flush(stderr())    NULL    invisible()}
> , error = function(e) {    {        callr_data <- as.environment("tools:callr")$`{_}{{_}}callr_data{_}{{_}}`        err <- callr_data$err        assign(".Traceback", .traceback(4), envir = callr_data)        dump.frames("{_}{{_}}callr_dump{_}{{_}}")        assign(".Last.dump", .GlobalEnv$`{_}{{_}}callr_dump{_}{{_}}`, envir = callr_data)        rm("{_}{{_}}callr_dump{_}{{_}}", envir = .GlobalEnv)        e$call <- deparse(conditionCall(e), nlines = 6)        e2 <- err$new_error(conditionMessage(e), call. = conditionCall(e))        class(e2) <- c("callr_remote_error", class(e2))        e2$error <- e        calls <- sys.calls()        dcframe <- which(vapply(calls, function(x) length(x) >=             1 && identical(x[[1]], quote(do.call)), logical(1)))[1]        if (!is.na(dcframe))             e2$`{_}ignore` <- list(c(1, dcframe + 1L))        e2$`_pid` <- Sys.getpid()        e2$`_timestamp` <- Sys.time()        if (inherits(e, "rlib_error_2_0"))             e2$parent <- e$parent        e2 <- err$add_trace_back(e2, embed = FALSE)        saveRDS(list("error", e2), file = paste0("/var/folders/s8/yv0hmbdj5pq2g88v8qs7v82c0000gn/T//RtmphMqH7S/callr-res-120e5af98b1d",             ".error"))    }}, interrupt = function(e) {    {        callr_data <- as.environment("tools:callr")$`{_}{_}callr_data{_}{_}`        err <- callr_data$err        assign(".Traceback", .traceback(4), envir = callr_data)        dump.frames("{_}{_}callr_dump{_}{_}")        assign(".Last.dump", .GlobalEnv$`{_}{_}callr_dump{_}{_}`, envir = callr_data)        rm("{_}{_}callr_dump{_}_", envir = .GlobalEnv)        e$call <- deparse(conditionCall(e), nlines = 6)        e2 <- err$new_error(conditionMessage(e), call. = conditionCall(e))        class(e2) <- c("callr_remote_error", class(e2))        e2$error <- e        calls <- sys.calls()        dcframe <- which(vapply(calls, function(x) length(x) >=             1 && identical(x[[1]], quote(do.call)), logical(1)))[1]        if (!is.na(dcframe))             e2$`_ignore` <- list(c(1, dcframe + 1L))        e2$`_pid` <- Sys.getpid()        e2$`_timestamp` <- Sys.time()        if (inherits(e, "rlib_error_2_0"))             e2$parent <- e$parent        e2 <- err$add_trace_back(e2, embed = FALSE)        saveRDS(list("error", e2), file = paste0("/var/folders/s8/yv0hmbdj5pq2g88v8qs7v82c0000gn/T//RtmphMqH7S/callr-res-120e5af98b1d",             ".error"))    }}, callr_message = function(e)
> {    try(signalCondition(e))}
> ), error = function(e)
> {    NULL    try(stop(e))}
> , interrupt = function(e)
> {    NULL    e}
> )
> An irrecoverable exception occurred. R is aborting now ...
> ```
> </details>



--
This message was sent by Atlassian Jira
(v8.20.1#820001)