При использовании последней ветки разработки я получаю эту ошибку при попытке использовать 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?
Исправлена ошибка
Нет данных
С подробным включением
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
А в сети я могу увидеть файл?
Фу! Подождите, файлы, которые работали, не работают
> 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.