Wenn ich den neuesten Entwicklungszweig verwende, erhalte ich diesen Fehler, wenn ich versuche, PEcAn.data.atmosphere::download.CRUNCEP() zu verwenden.
> 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
Bug-Fix. Ich denke, das Problem ist die Verwendung von "verbose" im Aufruf von ncdf4::ncvar_def
Es sollte verbose= TRUE/FALSE sein, aber derzeit in der Funktion ist es:
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)
Was zu diesem Fehler führt:
> 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
Aber wenn Sie zu ausführlich = WAHR wechseln
> 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"
Aber wir wollen wahrscheinlich ausführlich = FALSCH?
Bug-Fix
N / A
Mit Ausführlichem an
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"
Okay, das Einschalten von Ausführlichem hat es also ein Jahr lang geholfen, aber im nächsten scheiterte es?
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
Und wenn ich zur Ausgabe gehe, kann ich die Dateien sehen:
-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
Seltsam, wenn ich versuche, die nächste Datei zu überprüfen, 2002 lwdown, schlägt es vor, dass sie nicht vorhanden ist?
> 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
Aber im Web kann ich die Datei sehen?
Pfui! Warten Sie jetzt, dass Dateien, die funktioniert haben, nicht funktionieren
> 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
OK, ich bin mir nicht wirklich sicher, was der Deal ist, aber es scheint ziemlich fleckig zu sein
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
Müssen wir eine Art von Try/Catch oder Verzögerung hinzufügen? Es scheint, als ob THREDDS abstürzt, wenn es eine leichte Verzögerung gibt, vielleicht?
Der Funktion wurde eine Verzögerung von 3 Sekunden hinzugefügt:
# This throws an error if file not found
dap <- ncdf4::nc_open(dap_file, verbose=FALSE)
Sys.sleep(3)
in Zeile 101
Damit hat es 2 Jahre lang funktioniert
-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
Okay, es gibt definitiv ein Problem, zumindest bei Modex, wo ein einzelnes Jahr abstürzt, aber wenn ich es weiter versuche, wird es funktionieren
[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 Irgendwelche Gedanken dazu? Run-down, wenn ich es erneut ausführe, werden die Daten schließlich abgerufen .... aber in einigen Fällen kann es einige Versuche dauern ... zu sagen, dass die Datei nicht da ist, obwohl sie es tatsächlich ist ..... vielleicht ist das nur ein Modex-Problem aufgrund der Firewall?
Aber wenn ich es immer wieder neu starte, scheint es irgendwann die Daten zu bekommen, bei denen es fehlgeschlagen ist
Vielleicht hatten wir eine robuste Fehlerbehandlung, um ein paar Mal zu versuchen und neu zu starten, bevor wir letztendlich fehlschlugen, wenn THREDDS tatsächlich ausgefallen ist?
Ich habe diesen Fehler auch auf der VM erhalten. Und als ich von rstudio erneut gestartet wurde, bekam ich immer noch den gleichen Fehler.
Habe das gerade gesehen. Wir sind hier schon einmal darauf gestoßen: #1546 und wir würden es einfach erneut ausführen und es würde ohne Fehler herunterladen, was es schwierig macht, zu replizieren und herauszufinden, was falsch ist. Wir dachten, es könnte ein spezifisches Problem für unsere Maschine sein. Gut zu wissen, dass es nicht so ist.
Ich bin damit einverstanden, eine robuste Fehlerbehandlung zu erstellen.
Ich denke, es hat genauso viel damit zu tun, dass der DOE THREDDS-Server entweder die maximale Anzahl von Verbindungen begrenzt oder eine schnelle Anzahl von Anrufen an den Server verhindert, um Denial-of-Service-Angriffe oder ähnliches zu verhindern. Ich weiß, dass @jsimkins2 in der Vergangenheit mit ihnen über nicht zuverlässige Anrufe
Eine Idee wäre, den Schlaf hinzuzufügen, Fehler zu erkennen und es dreimal zu versuchen, bevor Sie aufgeben?
@ankurdesai Ich stimme dieser Einschätzung zu. Ich habe bereits eine Sys.sleep hinzugefügt, was geholfen hat, aber ich möchte der Funktion einen 10-Wiederholungsversuch hinzufügen, um genügend Chancen für einen erfolgreichen Download zu geben.
@ankurdesai @serbinsh Bedeutet das, dass es eine bessere Tageszeit gibt, um es zu versuchen? Sollte ich beispielsweise nachts und nicht mitten am Tag herunterladen?
@araiho Nicht sicher ... Ich denke, es ist wirklich ein IT-Problem. Wie Ankur erwähnte, mögen Server keine schnellen Multi-File-Requests, da dies wie ein DoS-Angriff aussehen kann
Was ist mit sowas wie:
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)
}
wo du es nennst
dap <- retry(ncdf4::nc_open(dap_file, verbose=FALSE),maxErrors=10, sleep=2)
Produziert so etwas wie
> 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
>
Scheint zu funktionieren
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"]]
Seine Handhabung ruckelt in der Funktion und läuft bisher weiter
@serbinsh wo hast du diese Wiederholungsfunktion platziert?
Hier ist ein Beispiel, bei dem es mehrmals wiederholt wird
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 Ich habe es in base/utils.R in meinem Entwicklungszweig abgelegt. Ich werde bald eine PR für Kommentare senden
Schließen, weil ich denke, dass es durch eine Kombination des Wiederholungscodes # 1651 von <method>ncss</method>
in der PEcAn-XML) von . gelöst wurde ich in #2153.