Pecan: Ошибка в PEcAn.data.atmosphere :: download.CRUNCEP ()

Созданный на 13 сент. 2017  ·  21Комментарии  ·  Источник: PecanProject/pecan

При использовании последней ветки разработки я получаю эту ошибку при попытке использовать PEcAn.data.atmosphere :: download.CRUNCEP ()

> remotefunc <- function() {PEcAn.data.atmosphere::download.CRUNCEP(site_id=1000000105, lat.in=9.154, lon.in=-79.848, model=NULL, scenario=NULL, ensemble_member=NULL, overwrite=FALSE, outfolder='/data/Model_Output/pecan.output/dbfiles/CRUNCEP_site_1-105/', start_date='1990-01-01', end_date='2004-12-31')}
> remoteout <- remotefunc()
2017-09-13 08:30:22 INFO   [PEcAn.logger::logger.info] : 
   Downloading 
   /data/Model_Output/pecan.output/dbfiles/CRUNCEP_site_1-105//CRUNCEP.1990.nc 
2017-09-13 08:30:22 INFO   [PEcAn.logger::logger.info] : 
   https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_tair_1990_v1.nc4 
2017-09-13 08:30:32 INFO   [PEcAn.logger::logger.info] : 
   https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_lwdown_1990_v1.nc4 
2017-09-13 08:30:40 INFO   [PEcAn.logger::logger.info] : 
   https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_press_1990_v1.nc4 
2017-09-13 08:30:47 INFO   [PEcAn.logger::logger.info] : 
   https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_swdown_1990_v1.nc4 
2017-09-13 08:30:52 INFO   [PEcAn.logger::logger.info] : 
   https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_uwind_1990_v1.nc4 
2017-09-13 08:30:59 INFO   [PEcAn.logger::logger.info] : 
   https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_vwind_1990_v1.nc4 
Error in Rsx_nc4_get_vara_double: NetCDF: Index exceeds dimension bound
Var: time  Ndims: 1   Start: 0 Count: 1460
Error in ncvar_get_inner(d$dimvarid$group_id, d$dimvarid$id, default_missval_ncdf4(),  : 
  C function R_nc4_get_vara_double returned error
Calls: remotefunc -> <Anonymous> -> <Anonymous> -> ncvar_get_inner
Execution halted

Описание

Исправлена ​​ошибка. Я думаю, проблема в использовании "подробного" при вызове ncdf4 :: ncvar_def

Он должен быть подробным = ИСТИНА / ЛОЖЬ, но в настоящее время в функции это:

      var.list[[j]] <- ncdf4::ncvar_def(name = as.character(var$CF.name[j]),
                                 units = as.character(var$units[j]),
                                 dim = dim,
                                 missval = -999,
                                 verbose = verbose)

Что приводит к этой ошибке:

>       var.list[[j]] <- ncdf4::ncvar_def(name = as.character(var$CF.name[j]),
+                                  units = as.character(var$units[j]),
+                                  dim = dim,
+                                  missval = -999,
+                                  verbose = verbose)
Error in ncdf4::ncvar_def(name = as.character(var$CF.name[j]), units = as.character(var$units[j]),  :
  object 'verbose' not found

Но если вы измените на подробный = ИСТИНА

>       var.list[[j]] <- ncdf4::ncvar_def(name = as.character(var$CF.name[j]),
+                                  units = as.character(var$units[j]),
+                                  dim = dim,
+                                  missval = -999,
+                                  verbose = TRUE)
[1] "ncvar_def: entering"
[1] "ncvar_def: prec= float"
[1] "ncvar_def: making ncvar object for var eastward_wind"

Но мы, вероятно, хотим, чтобы verbose = FALSE?

Контекст

Исправлена ​​ошибка

Возможная реализация

Нет данных

Все 21 Комментарий

С подробным включением

Loading required package: PEcAn.benchmark
>  download.CRUNCEP(site_id=2000000003, lat.in=9.280225, lon.in=-79.975527, model=NULL, scenario=NULL, ensemble_member=NULL, overwrite=TRUE, outfolder='/data/Model_Output/p2017-09-13 09:16:10 INFO   [PEcAn.logger::logger.info] : 01/01', end_date='2002/12/31')
   Downloading
   /data/Model_Output/pecan.output/dbfiles/CRUNCEP_site_2-3//CRUNCEP.2001.nc
2017-09-13 09:16:10 INFO   [PEcAn.logger::logger.info] :
   https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_tair_2001_v1.nc4
[1] "ncvar_def: entering"
[1] "ncvar_def: prec= float"
[1] "ncvar_def: making ncvar object for var air_temperature"
2017-09-13 09:16:17 INFO   [PEcAn.logger::logger.info] :
   https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_lwdown_2001_v1.nc4
[1] "ncvar_def: entering"
[1] "ncvar_def: prec= float"
[1] "ncvar_def: making ncvar object for var surface_downwelling_longwave_flux_in_air"

Хорошо, значит, тьюринг на подробном объяснении помог ему в течение одного года, но затем потерпел неудачу в следующем?

2017-09-13 09:16:55 INFO   [PEcAn.logger::logger.info] :
   https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_qair_2001_v1.nc4
[1] "ncvar_def: entering"
[1] "ncvar_def: prec= float"
[1] "ncvar_def: making ncvar object for var specific_humidity"
2017-09-13 09:17:05 INFO   [PEcAn.logger::logger.info] :
   https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_rain_2001_v1.nc4
[1] "ncvar_def: entering"
[1] "ncvar_def: prec= float"
[1] "ncvar_def: making ncvar object for var precipitation_flux"
2017-09-13 09:17:14 INFO   [PEcAn.logger::logger.info] :
   Downloading
   /data/Model_Output/pecan.output/dbfiles/CRUNCEP_site_2-3//CRUNCEP.2002.nc
2017-09-13 09:17:14 INFO   [PEcAn.logger::logger.info] :
   https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_tair_2002_v1.nc4
Error in Rsx_nc4_get_vara_double: NetCDF: file not found
Var: time  Ndims: 1   Start: 0 Count: 1460
Error in ncvar_get_inner(d$dimvarid$group_id, d$dimvarid$id, default_missval_ncdf4(),  :
  C function R_nc4_get_vara_double returned error

И если я перейду к выходу, я могу увидеть файлы:

-rw-rw-r--. 1 apache test 59760 Sep 13 09:17 CRUNCEP.2001.nc
-rw-rw-r--. 1 apache test 59732 Dec  5  2016 CRUNCEP.2002.nc
-rw-rw-r--. 1 apache test 59732 Dec  5  2016 CRUNCEP.2003.nc
-rw-rw-r--. 1 apache test 59892 Dec  5  2016 CRUNCEP.2004.nc
-rw-rw-r--. 1 apache test 59732 Dec  5  2016 CRUNCEP.2005.nc
-rw-rw-r--. 1 apache test 59732 Dec  5  2016 CRUNCEP.2006.nc

Странно, если я попытаюсь проверить следующий файл, 2002 lwdown, он действительно предполагает, что его там нет?

> ncdf4::nc_open('https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_lwdown_2002_v1.nc4')
Error in Rsx_nc4_get_vara_double: NetCDF: file not found
Var: time  Ndims: 1   Start: 0 Count: 1460
Error in ncvar_get_inner(d$dimvarid$group_id, d$dimvarid$id, default_missval_ncdf4(),  :
  C function R_nc4_get_vara_double returned error

А в сети я могу увидеть файл?

screen shot 2017-09-13 at 9 23 17 am

Фу! Подождите, файлы, которые работали, не работают

> ncdf4::nc_open('https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_tair_2001_v1.nc4')
Error in Rsx_nc4_get_vara_double: NetCDF: file not found
Var: time  Ndims: 1   Start: 0 Count: 1460
Error in ncvar_get_inner(d$dimvarid$group_id, d$dimvarid$id, default_missval_ncdf4(),  :
  C function R_nc4_get_vara_double returned error

Хорошо, не совсем уверен, в чем дело, но это кажется довольно неоднородным

2017-09-13 09:26:18 INFO   [PEcAn.logger::logger.info] :
   Downloading
   /data/Model_Output/pecan.output/dbfiles/CRUNCEP_site_2-3//CRUNCEP.2002.nc
2017-09-13 09:26:18 INFO   [PEcAn.logger::logger.info] :
   https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_tair_2002_v1.nc4
[1] "ncvar_def: entering"
[1] "ncvar_def: prec= float"
[1] "ncvar_def: making ncvar object for var air_temperature"
2017-09-13 09:26:24 INFO   [PEcAn.logger::logger.info] :
   https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_lwdown_2002_v1.nc4
[1] "ncvar_def: entering"
[1] "ncvar_def: prec= float"
[1] "ncvar_def: making ncvar object for var surface_downwelling_longwave_flux_in_air"
2017-09-13 09:26:30 INFO   [PEcAn.logger::logger.info] :
   https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_press_2002_v1.nc4
Error in Rsx_nc4_get_vara_double: NetCDF: file not found
Var: press  Ndims: 3   Start: 0,161,200 Count: 1460,1,1
Error in ncvar_get_inner(ncid2use, varid2use, nc$var[[li]]$missval, addOffset,  :
  C function R_nc4_get_vara_double returned error

Нам нужно добавить что-то вроде попытки / отлова или задержки? Кажется, если есть небольшая задержка от THREDDS, возможно, вылетает?

Добавлена ​​3-секундная задержка функции:

      # This throws an error if file not found
      dap <- ncdf4::nc_open(dap_file, verbose=FALSE)
      Sys.sleep(3)

в строке 101

Это заставило его работать в течение 2 лет

-rw-rw-r--. 1 apache test 59760 Sep 13 09:36 CRUNCEP.2001.nc
-rw-rw-r--. 1 apache test 59760 Sep 13 09:37 CRUNCEP.2002.nc

Хорошо, так что определенно есть проблема, по крайней мере, в modex, когда один год вылетает, но если я буду продолжать пытаться, он будет работать

[1] "ncvar_def: making ncvar object for var air_temperature"
2017-09-13 09:38:37 INFO   [PEcAn.logger::logger.info] :
   https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_lwdown_1999_v1.nc4
Error in Rsx_nc4_get_vara_double: NetCDF: file not found
Var: time  Ndims: 1   Start: 0 Count: 1460
Error in ncvar_get_inner(d$dimvarid$group_id, d$dimvarid$id, default_missval_ncdf4(),  :
  C function R_nc4_get_vara_double returned error
>  download.CRUNCEP(site_id=2000000003, lat.in=9.280225, lon.in=-79.975527, model=NULL, scenario=NULL, ensemble_member=NULL, overwrite=TRUE, outfolder='/data/Model_Output/p2017-09-13 09:38:46 INFO   [PEcAn.logger::logger.info] : 01/01', end_date='2002/12/31')
   Downloading
   /data/Model_Output/pecan.output/dbfiles/CRUNCEP_site_2-3//CRUNCEP.1999.nc
2017-09-13 09:38:46 INFO   [PEcAn.logger::logger.info] :
   https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_tair_1999_v1.nc4
Error in Rsx_nc4_get_vara_double: NetCDF: file not found
Var: time  Ndims: 1   Start: 0 Count: 1460
Error in ncvar_get_inner(d$dimvarid$group_id, d$dimvarid$id, default_missval_ncdf4(),  :
  C function R_nc4_get_vara_double returned error
>  download.CRUNCEP(site_id=2000000003, lat.in=9.280225, lon.in=-79.975527, model=NULL, scenario=NULL, ensemble_member=NULL, overwrite=TRUE, outfolder='/data/Model_Output/p2017-09-13 09:38:49 INFO   [PEcAn.logger::logger.info] : 01/01', end_date='2002/12/31')
   Downloading
   /data/Model_Output/pecan.output/dbfiles/CRUNCEP_site_2-3//CRUNCEP.1999.nc
2017-09-13 09:38:49 INFO   [PEcAn.logger::logger.info] :
   https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_tair_1999_v1.nc4
[1] "ncvar_def: entering"
[1] "ncvar_def: prec= float"
[1] "ncvar_def: making ncvar object for var air_temperature"
2017-09-13 09:38:59 INFO   [PEcAn.logger::logger.info] :
   https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_lwdown_1999_v1.nc4

@robkooper @mdietze @ashiklom @ jsimkins2 Есть мысли по этому

Но если я продолжу перезапуск, кажется, что в конечном итоге он получит данные, на которых произошел сбой.

Возможно, у нас была надежная обработка ошибок, чтобы попытаться перезапустить несколько раз, прежде чем окончательно потерпеть неудачу, если действительно THREDDS не работает?

Я также получал эту ошибку на виртуальной машине. И когда я перезагружался из rstudio, я все еще получал ту же ошибку.

Только что видел это. Мы уже сталкивались с этим раньше здесь: # 1546, и мы просто перезапускали его, и он загружался без ошибок, что затрудняло воспроизведение и выяснение, что не так. Мы думали, что это может быть проблема, связанная с нашей машиной. Приятно знать, что это не так.

Я согласен с созданием надежной обработки ошибок.

Я думаю, что это так же связано с сервером DOE THREDDS, который либо делает что-то вроде ограничения максимального количества подключений, либо предотвращает быстрое количество обращений к серверу, чтобы предотвратить атаки отказа в обслуживании или что-то в этом роде. Я знаю, что @ jsimkins2 в прошлом общался с ними по поводу ненадежных звонков. Я думаю, что функция не делает ничего плохого.

Одна идея - добавить засыпание, обнаружить ошибку и попробовать трижды, прежде чем сдаваться?

@ankurdesai Я согласен с этой оценкой. Я уже добавил Sys.sleep, который действительно помог, но я хочу добавить 10 повторных попыток к функции, чтобы дать ей достаточно шансов на успешную загрузку.

@ankurdesai @serbinsh Означает ли это, что сейчас лучшее время дня, чтобы попробовать это сделать? Как мне скачивать ночью, а не посреди дня?

@araiho Не уверен ... Я думаю, что это действительно проблема ИТ. Как упоминал Анкур, серверам не нравятся быстрые многофайловые запросы, поскольку это может выглядеть как DoS-атака.

Как насчет чего-то вроде:

retry <- function(expr, isError=function(x) "try-error" %in% class(x), maxErrors=5, sleep=0) {
  attempts = 0
  retval = try(eval(expr))
  while (isError(retval)) {
    attempts = attempts + 1
    if (attempts >= maxErrors) {
      msg = sprintf("retry: too many retries [[%s]]", capture.output(str(retval)))
      PEcAn.logger::logger.warn(msg)
      stop(msg)
    } else {
      msg = sprintf("retry: error in attempt %i/%i [[%s]]", attempts, maxErrors, 
                    capture.output(str(retval)))
      PEcAn.logger::logger.warn(msg)
      #warning(msg)
    }
    if (sleep > 0) Sys.sleep(sleep)
    retval = try(eval(expr))
  }
  return(retval)
}

где вы называете это как

dap <- retry(ncdf4::nc_open(dap_file, verbose=FALSE),maxErrors=10, sleep=2)

Производит что-то вроде

> retry(ncdf4::nc_open('https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_lwdown_1999_v1.Error in Rsx_nc4_get_vara_double: NetCDF: file not found
Var: time  Ndims: 1   Start: 0 Count: 1460
Error in ncvar_get_inner(d$dimvarid$group_id, d$dimvarid$id, default_missval_ncdf4(),  :
  C function R_nc4_get_vara_double returned error
2017-09-13 10:50:17 WARN   [#13: PEcAn.logger::logger.warn] :
   retry: error in attempt 1/10 [[Class 'try-error' atomic [1:1] Error in
   ncvar_get_inner(d$dimvarid$group_id, d$dimvarid$id,
   default_missval_ncdf4(), : ]] retry: error in attempt 1/10 [[ C function
   R_nc4_get_| __truncated__]] retry: error in attempt 1/10 [[ ..- attr(*,
   "condition")=List of 2]] retry: error in attempt 1/10 [[ .. ..$ message:
   chr "C function R_nc4_get_vara_double returned error"]] retry: error in
   attempt 1/10 [[ .. ..$ call : language
   ncvar_get_inner(d$dimvarid$group_id, d$dimvarid$id,
   default_missval_ncdf4(), verbose = verbose)]] retry: error in attempt
   1/10 [[ .. ..- attr(*, "class")= chr [1:3] "simpleError" "error"
   "condition"]]
File https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_lwdown_1999_v1.nc4 (NC_FORMAT_CLASSIC):

     6 variables (excluding dimension variables):
        int crs[]
            semi_major_axis: 6370997
            grid_mapping_name: latitude_longitude
            inverse_flattening: 0
        double lat_bnds[nv,lat]
            _ChunkSizes: 360
             _ChunkSizes: 2
        double lon_bnds[nv,lon]
            _ChunkSizes: 720
             _ChunkSizes: 2
        double time_bnds[nv,time]
            _ChunkSizes: 1
             _ChunkSizes: 2
        float lwdown[lon,lat,time]
            cell_methods: area:mean time:sum
            grid_mapping: crs
            long_name: Incoming_Long_Wave_Radiation
            units: W/m2
            missing_value: -999
            _FillValue: -999
            _ChunkSizes: 1
             _ChunkSizes: 360
             _ChunkSizes: 720
        int mask[lon,lat]
            _ChunkSizes: 360
             _ChunkSizes: 720

     4 dimensions:
        time  Size:1460   *** is unlimited ***
            bounds: time_bnds
            long_name: time
            units: days since 1700-01-01T00:00:00Z
            standard_name: time
            calendar: gregorian
            _ChunkSizes: 1
        lat  Size:360
            units: degrees_north
            standard_name: latitude
            bounds: lat_bnds
            _ChunkSizes: 360
        lon  Size:720
            units: degrees_east
            standard_name: longitude
            bounds: lon_bnds
            _ChunkSizes: 720
        nv  Size:2

    4 global attributes:
        model_name: STOMATE-SECHIBA-LPJ
        history: Tue Mar  1 10:57:59 2011: ncks -d time_counter,143176,144635 ncep9_lwdown_1901_2010_2D.nc cruncepV4_leap_lwdown_1999.nc
        Conventions: CF-1.4
        DODS_EXTRA.Unlimited_Dimension: time
Warning message:
In eval(expr) : restarting interrupted promise evaluation
>

Кажется, работает

2017-09-13 11:12:28 INFO   [PEcAn.logger::logger.info] :
   https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_lwdown_2000_v1.nc4
Error in Rsx_nc4_get_vara_double: NetCDF: file not found
Var: time  Ndims: 1   Start: 0 Count: 1464
Error in ncvar_get_inner(d$dimvarid$group_id, d$dimvarid$id, default_missval_ncdf4(),  :
  C function R_nc4_get_vara_double returned error
In addition: Warning message:
In eval(expr) : restarting interrupted promise evaluation
2017-09-13 11:12:29 WARN   [PEcAn.logger::logger.warn] :
   retry: error in attempt 1/10 [[Class 'try-error' atomic [1:1] Error in
   ncvar_get_inner(d$dimvarid$group_id, d$dimvarid$id,
   default_missval_ncdf4(), : ]] retry: error in attempt 1/10 [[ C function
   R_nc4_get_| __truncated__]] retry: error in attempt 1/10 [[ ..- attr(*,
   "condition")=List of 2]] retry: error in attempt 1/10 [[ .. ..$ message:
   chr "C function R_nc4_get_vara_double returned error"]] retry: error in
   attempt 1/10 [[ .. ..$ call : language
   ncvar_get_inner(d$dimvarid$group_id, d$dimvarid$id,
   default_missval_ncdf4(), verbose = verbose)]] retry: error in attempt
   1/10 [[ .. ..- attr(*, "class")= chr [1:3] "simpleError" "error"
   "condition"]]

Его обработка икает в функции и продолжает работать, пока

@serbinsh, где вы разместили эту функцию повтора?

Вот пример, когда он повторяет несколько раз

In eval(expr) : restarting interrupted promise evaluation
2017-09-13 11:12:55 WARN   [PEcAn.logger::logger.warn] :
   retry: error in attempt 5/10 [[Class 'try-error' atomic [1:1] Error in
   ncvar_get_inner(d$dimvarid$group_id, d$dimvarid$id,
   default_missval_ncdf4(), : ]] retry: error in attempt 5/10 [[ C function
   R_nc4_get_| __truncated__]] retry: error in attempt 5/10 [[ ..- attr(*,
   "condition")=List of 2]] retry: error in attempt 5/10 [[ .. ..$ message:
   chr "C function R_nc4_get_vara_double returned error"]] retry: error in
   attempt 5/10 [[ .. ..$ call : language
   ncvar_get_inner(d$dimvarid$group_id, d$dimvarid$id,
   default_missval_ncdf4(), verbose = verbose)]] retry: error in attempt
   5/10 [[ .. ..- attr(*, "class")= chr [1:3] "simpleError" "error"
   "condition"]]
2017-09-13 11:13:10 INFO   [PEcAn.logger::logger.info] :
   https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_swdown_2000_v1.nc4
2017-09-13 11:13:19 INFO   [PEcAn.logger::logger.info] :
   https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_uwind_2000_v1.nc4
2017-09-13 11:13:32 INFO   [PEcAn.logger::logger.info] :
   https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_vwind_2000_v1.nc4
2017-09-13 11:13:43 INFO   [PEcAn.logger::logger.info] :
   https://thredds.daac.ornl.gov/thredds/dodsC/ornldaac/1220/mstmip_driver_global_hd_climate_qair_2000_v1.nc4

@araiho Я положил его в base / utils.R в своей ветке разработки. Скоро пришлю PR для комментариев

Закрытие, потому что я думаю, что это было решено комбинацией кода повтора <method>ncss</method> в PEcAn XML) мне в # 2153.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги