antlr / antlr4-tools

Tools to run antlr4 w/o needing to install java or antlr4!
MIT License
81 stars 19 forks source link

antlr4 isn't robust with slow links. #13

Open kaby76 opened 1 year ago

kaby76 commented 1 year ago

I've noticed this on my machines and now over in github actions build for grammars-v4. When the link is bad, the antlr4 tool fails.

Traceback (most recent call last):
  File "/opt/hostedtoolcache/Python/3.10.11/x64/lib/python3.10/site-packages/antlr4_tool_runner.py", line 26, in latest_version
    with urlopen(f"https://search.maven.org/solrsearch/select?q=a:antlr4-master+g:org.antlr") as response:
  File "/opt/hostedtoolcache/Python/3.10.11/x64/lib/python3.10/urllib/request.py", line 216, in urlopen
    return opener.open(url, data, timeout)
  File "/opt/hostedtoolcache/Python/3.10.11/x64/lib/python3.10/urllib/request.py", line 525, in open
    response = meth(req, response)
  File "/opt/hostedtoolcache/Python/3.10.11/x64/lib/python3.10/urllib/request.py", line 634, in http_response
    response = self.parent.error(
  File "/opt/hostedtoolcache/Python/3.10.11/x64/lib/python3.10/urllib/request.py", line 563, in error
    return self._call_chain(*args)
  File "/opt/hostedtoolcache/Python/3.10.11/x64/lib/python3.10/urllib/request.py", line 496, in _call_chain
    result = func(*args)
  File "/opt/hostedtoolcache/Python/3.10.11/x64/lib/python3.10/urllib/request.py", line 643, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 504: Gateway Time-out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/hostedtoolcache/Python/3.10.11/x64/bin/antlr4", line 8, in <module>
    sys.exit(tool())
  File "/opt/hostedtoolcache/Python/3.10.11/x64/lib/python3.10/site-packages/antlr4_tool_runner.py", line 131, in tool
    args, version = get_version_arg(args)
  File "/opt/hostedtoolcache/Python/3.10.11/x64/lib/python3.10/site-packages/antlr4_tool_runner.py", line 123, in get_version_arg
    version = latest_version()
  File "/opt/hostedtoolcache/Python/3.10.11/x64/lib/python3.10/site-packages/antlr4_tool_runner.py", line 36, in latest_version
    version_dirs = list(filter(lambda directory: re.match(r"[0-9]+\.[0-9]+\.[0-9]+", directory), os.listdir(mvn_repo)))
FileNotFoundError: [Errno 2] No such file or directory: '/home/runner/.m2/repository/org/antlr/antlr4'
Could not get latest version number, attempting to fall back to latest downloaded version...
Build failed
Build completed, time: 00:01:02.4911135
./fortran/fortran90 failed
finished in 00:01:02.5069344
Write-Error: /home/runner/work/grammars-v4/grammars-v4/_scripts/test.ps1:384
Line |
 384 |      Test-AllGrammars -Target $target -PreviousCommit $pc -CurrentComm …
     |      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Failed grammars: ./fortran/fortran90

This is happening because it is trying to get the latest version of the Antlr tool. https://github.com/antlr/antlr4-tools/blob/787e7a500e56d17566086b5d5c04eeea84a387e8/antlr4_tool_runner.py#L26

I can program around this by looking at the output of the tool and grep'ing for some string that says the link is bad. But, the better way would be to loop over the call (maybe 5 times) and catching link errors.

claus-topholt-private commented 10 months ago

Still SUPER annoying today, it attempts to get latest version every time and the maven link takes 30 secs to respond 504 bad gateway timeout. Please fix.

parrt commented 10 months ago

Is this the fix? https://github.com/antlr/antlr4-tools/pull/11 Actually maybe this fixes it: https://github.com/antlr/antlr4-tools/pull/9

parrt commented 10 months ago

0.2.1 released :)

claus-topholt-private commented 10 months ago

I'm using the TypeScript target, so ANTLR4 is installed with npm. I continue to see this today when running this:

antlr4 -visitor -Dlanguage=TypeScript ./src/antlr/athenaGrammar.g4

(30 sec delay)

Could not get latest version number, attempting to fall back to latest downloaded version...
Found version '4.13.0', this version may be out of date

Is that not the same problem?

parrt commented 10 months ago

I didn't check what the time out was... maybe it's thirty seconds? sorry I don't have a huge amount of time to look at this. Actually it looks like that PR set timeout=10. Hmm...

btw antlr4 via npm is not going to be the tool itself just the runtime library for the generated code