Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GenServer Tzdata.EtsHolder terminating when update #79

Closed
ishikawa opened this issue Mar 27, 2019 · 9 comments
Closed

GenServer Tzdata.EtsHolder terminating when update #79

ishikawa opened this issue Mar 27, 2019 · 9 comments

Comments

@ishikawa
Copy link

I got a Tzdata.EtsHolder error when updating tzdata. It seems downloading succeeded, but parsing failed.

  • Elixir 1.7
  • tzdata 0.5.19

Log is a bit long because we use Sentry logger.

Interactive Elixir (1.7.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> 
03:57:49.652 [debug] Tzdata polling for update.
 
03:57:50.863 [info]  tzdata release in place is from a file last modified Mon, 31 Dec 2018 01:25:12 GMT. Release file on server was last modified Tue, 26 Mar 2019 05:40:14 GMT.
2019-03-27T12:57:50.864 [info] tzdata release in place is from a file last modified Mon, 31 Dec 2018 01:25:12 GMT. Release file on server was last modified Tue, 26 Mar 2019 05:40:14 GMT.

03:57:50.869 [debug] Tzdata downloading new data from https://data.iana.org/time-zones/tzdata-latest.tar.gz
 
03:57:52.029 [debug] Tzdata data downloaded. Release version 20198.
 
03:57:53.020 [error] GenServer Tzdata.EtsHolder terminating
** (MatchError) no match of right hand side value: {:error, :cannot_create_table}
    (tzdata) lib/tzdata/ets_holder.ex:59: Tzdata.EtsHolder.load_ets_table/1
    (tzdata) lib/tzdata/ets_holder.ex:52: Tzdata.EtsHolder.load_release/0
    (tzdata) lib/tzdata/ets_holder.ex:23: Tzdata.EtsHolder.handle_cast/2
    (stdlib) gen_server.erl:637: :gen_server.try_dispatch/4
    (stdlib) gen_server.erl:711: :gen_server.handle_msg/6
    (stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3
Last message: {:"$gen_cast", :new_release_has_been_downloaded}
State: "2018i"
2019-03-27T12:57:53.118 [error] GenServer Tzdata.EtsHolder terminating
** (MatchError) no match of right hand side value: {:error, :cannot_create_table}
    (tzdata) lib/tzdata/ets_holder.ex:59: Tzdata.EtsHolder.load_ets_table/1
    (tzdata) lib/tzdata/ets_holder.ex:52: Tzdata.EtsHolder.load_release/0
    (tzdata) lib/tzdata/ets_holder.ex:23: Tzdata.EtsHolder.handle_cast/2
    (stdlib) gen_server.erl:637: :gen_server.try_dispatch/4
    (stdlib) gen_server.erl:711: :gen_server.handle_msg/6
    (stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3
Last message: {:"$gen_cast", :new_release_has_been_downloaded}
State: "2018i"

03:57:53.117 [error] :gen_event handler Sentry.LoggerBackend installed in Logger terminating
** (FunctionClauseError) no function clause matching in URI.parse/1
    (elixir) lib/uri.ex:414: URI.parse(nil)
    (sentry) lib/sentry/client.ex:226: Sentry.Client.get_dsn/0
    (sentry) lib/sentry/client.ex:329: Sentry.Client.get_headers_and_endpoint/0
    (sentry) lib/sentry/client.ex:92: Sentry.Client.do_send_event/3
    (sentry) lib/sentry/logger_backend.ex:38: Sentry.LoggerBackend.handle_event/2
    (stdlib) gen_event.erl:577: :gen_event.server_update/4
    (stdlib) gen_event.erl:559: :gen_event.server_notify/4
    (stdlib) gen_event.erl:300: :gen_event.handle_msg/6
Last message: {:error, #PID<0.327.0>, {Logger, [["GenServer ", "Tzdata.EtsHolder", " terminating", [[10 | "** (MatchError) no match of right hand side value: {:error, :cannot_create_table}"], ["\n    " | "(tzdata) lib/tzdata/ets_holder.ex:59: Tzdata.EtsHolder.load_ets_table/1"], ["\n    " | "(tzdata) lib/tzdata/ets_holder.ex:52: Tzdata.EtsHolder.load_release/0"], ["\n    " | "(tzdata) lib/tzdata/ets_holder.ex:23: Tzdata.EtsHolder.handle_cast/2"], ["\n    " | "(stdlib) gen_server.erl:637: :gen_server.try_dispatch/4"], ["\n    " | "(stdlib) gen_server.erl:711: :gen_server.handle_msg/6"], ["\n    " | "(stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3"]], "\nLast message", [], ": ", "{:\"$gen_cast\", :new_release_has_been_downloaded}"], "\nState: ", "\"2018i\""], {{2019, 3, 27}, {3, 57, 53, 20}}, [registered_name: Tzdata.EtsHolder, crash_reason: {%MatchError{term: {:error, :cannot_create_table}}, [{Tzdata.EtsHolder, :load_ets_table, 1, [file: 'lib/tzdata/ets_holder.ex', line: 59]}, {Tzdata.EtsHolder, :load_release, 0, [file: 'lib/tzdata/ets_holder.ex', line: 52]}, {Tzdata.EtsHolder, :handle_cast, 2, [file: 'lib/tzdata/ets_holder.ex', line: 23]}, {:gen_server, :try_dispatch, 4, [file: 'gen_server.erl', line: 637]}, {:gen_server, :handle_msg, 6, [file: 'gen_server.erl', line: 711]}, {:proc_lib, :init_p_do_apply, 3, [file: 'proc_lib.erl', line: 249]}]}, function: "error_info/7", module: :gen_server, line: 888, file: "gen_server.erl", pid: #PID<0.330.0>]}}
State: %Sentry.LoggerBackend{level: nil}
2019-03-27T12:57:53.118 [error] :gen_event handler Sentry.LoggerBackend installed in Logger terminating
** (FunctionClauseError) no function clause matching in URI.parse/1
    (elixir) lib/uri.ex:414: URI.parse(nil)
    (sentry) lib/sentry/client.ex:226: Sentry.Client.get_dsn/0
    (sentry) lib/sentry/client.ex:329: Sentry.Client.get_headers_and_endpoint/0
    (sentry) lib/sentry/client.ex:92: Sentry.Client.do_send_event/3
    (sentry) lib/sentry/logger_backend.ex:38: Sentry.LoggerBackend.handle_event/2
    (stdlib) gen_event.erl:577: :gen_event.server_update/4
    (stdlib) gen_event.erl:559: :gen_event.server_notify/4
    (stdlib) gen_event.erl:300: :gen_event.handle_msg/6
Last message: {:error, #PID<0.327.0>, {Logger, [["GenServer ", "Tzdata.EtsHolder", " terminating", [[10 | "** (MatchError) no match of right hand side value: {:error, :cannot_create_table}"], ["\n    " | "(tzdata) lib/tzdata/ets_holder.ex:59: Tzdata.EtsHolder.load_ets_table/1"], ["\n    " | "(tzdata) lib/tzdata/ets_holder.ex:52: Tzdata.EtsHolder.load_release/0"], ["\n    " | "(tzdata) lib/tzdata/ets_holder.ex:23: Tzdata.EtsHolder.handle_cast/2"], ["\n    " | "(stdlib) gen_server.erl:637: :gen_server.try_dispatch/4"], ["\n    " | "(stdlib) gen_server.erl:711: :gen_server.handle_msg/6"], ["\n    " | "(stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3"]], "\nLast message", [], ": ", "{:\"$gen_cast\", :new_release_has_been_downloaded}"], "\nState: ", "\"2018i\""], {{2019, 3, 27}, {3, 57, 53, 20}}, [registered_name: Tzdata.EtsHolder, crash_reason: {%MatchError{term: {:error, :cannot_create_table}}, [{Tzdata.EtsHolder, :load_ets_table, 1, [file: 'lib/tzdata/ets_holder.ex', line: 59]}, {Tzdata.EtsHolder, :load_release, 0, [file: 'lib/tzdata/ets_holder.ex', line: 52]}, {Tzdata.EtsHolder, :handle_cast, 2, [file: 'lib/tzdata/ets_holder.ex', line: 23]}, {:gen_server, :try_dispatch, 4, [file: 'gen_server.erl', line: 637]}, {:gen_server, :handle_msg, 6, [file: 'gen_server.erl', line: 711]}, {:proc_lib, :init_p_do_apply, 3, [file: 'proc_lib.erl', line: 249]}]}, function: "error_info/7", module: :gen_server, line: 888, file: "gen_server.erl", pid: #PID<0.330.0>]}}
State: %Sentry.LoggerBackend{level: nil}

03:57:53.120 [error] GenServer #PID<0.538.0> terminating
** (stop) {:EXIT, {:function_clause, [{URI, :parse, [nil], [file: 'lib/uri.ex', line: 414]}, {Sentry.Client, :get_dsn, 0, [file: 'lib/sentry/client.ex', line: 226]}, {Sentry.Client, :get_headers_and_endpoint, 0, [file: 'lib/sentry/client.ex', line: 329]}, {Sentry.Client, :do_send_event, 3, [file: 'lib/sentry/client.ex', line: 92]}, {Sentry.LoggerBackend, :handle_event, 2, [file: 'lib/sentry/logger_backend.ex', line: 38]}, {:gen_event, :server_update, 4, [file: 'gen_event.erl', line: 577]}, {:gen_event, :server_notify, 4, [file: 'gen_event.erl', line: 559]}, {:gen_event, :handle_msg, 6, [file: 'gen_event.erl', line: 300]}]}}
Last message: {:gen_event_EXIT, Sentry.LoggerBackend, {:EXIT, {:function_clause, [{URI, :parse, [nil], [file: 'lib/uri.ex', line: 414]}, {Sentry.Client, :get_dsn, 0, [file: 'lib/sentry/client.ex', line: 226]}, {Sentry.Client, :get_headers_and_endpoint, 0, [file: 'lib/sentry/client.ex', line: 329]}, {Sentry.Client, :do_send_event, 3, [file: 'lib/sentry/client.ex', line: 92]}, {Sentry.LoggerBackend, :handle_event, 2, [file: 'lib/sentry/logger_backend.ex', line: 38]}, {:gen_event, :server_update, 4, [file: 'gen_event.erl', line: 577]}, {:gen_event, :server_notify, 4, [file: 'gen_event.erl', line: 559]}, {:gen_event, :handle_msg, 6, [file: 'gen_event.erl', line: 300]}]}}}
State: {Logger, Sentry.LoggerBackend}
2019-03-27T12:57:53.121 [error] GenServer #PID<0.538.0> terminating
** (stop) {:EXIT, {:function_clause, [{URI, :parse, [nil], [file: 'lib/uri.ex', line: 414]}, {Sentry.Client, :get_dsn, 0, [file: 'lib/sentry/client.ex', line: 226]}, {Sentry.Client, :get_headers_and_endpoint, 0, [file: 'lib/sentry/client.ex', line: 329]}, {Sentry.Client, :do_send_event, 3, [file: 'lib/sentry/client.ex', line: 92]}, {Sentry.LoggerBackend, :handle_event, 2, [file: 'lib/sentry/logger_backend.ex', line: 38]}, {:gen_event, :server_update, 4, [file: 'gen_event.erl', line: 577]}, {:gen_event, :server_notify, 4, [file: 'gen_event.erl', line: 559]}, {:gen_event, :handle_msg, 6, [file: 'gen_event.erl', line: 300]}]}}
Last message: {:gen_event_EXIT, Sentry.LoggerBackend, {:EXIT, {:function_clause, [{URI, :parse, [nil], [file: 'lib/uri.ex', line: 414]}, {Sentry.Client, :get_dsn, 0, [file: 'lib/sentry/client.ex', line: 226]}, {Sentry.Client, :get_headers_and_endpoint, 0, [file: 'lib/sentry/client.ex', line: 329]}, {Sentry.Client, :do_send_event, 3, [file: 'lib/sentry/client.ex', line: 92]}, {Sentry.LoggerBackend, :handle_event, 2, [file: 'lib/sentry/logger_backend.ex', line: 38]}, {:gen_event, :server_update, 4, [file: 'gen_event.erl', line: 577]}, {:gen_event, :server_notify, 4, [file: 'gen_event.erl', line: 559]}, {:gen_event, :handle_msg, 6, [file: 'gen_event.erl', line: 300]}]}}}
State: {Logger, Sentry.LoggerBackend}

I also try 1.0.0-rc.0 (though on Elixir 1.7) but same error:

Interactive Elixir (1.7.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> 
13:16:46.050 [debug] Tzdata polling for update.
 
13:16:46.772 [info]  tzdata release in place is from a file last modified Mon, 31 Dec 2018 01:25:12 GMT. Release file on server was last modified Tue, 26 Mar 2019 05:40:14 GMT.
 
13:16:46.772 [debug] Tzdata downloading new data from https://data.iana.org/time-zones/tzdata-latest.tar.gz
 
13:16:47.461 [debug] Tzdata data downloaded. Release version 20198.
 
13:16:48.556 [error] GenServer Tzdata.EtsHolder terminating
** (MatchError) no match of right hand side value: {:error, :cannot_create_table}
    (tzdata) lib/tzdata/ets_holder.ex:63: Tzdata.EtsHolder.load_ets_table/1
    (tzdata) lib/tzdata/ets_holder.ex:56: Tzdata.EtsHolder.load_release/0
    (tzdata) lib/tzdata/ets_holder.ex:27: Tzdata.EtsHolder.handle_cast/2
    (stdlib) gen_server.erl:637: :gen_server.try_dispatch/4
    (stdlib) gen_server.erl:711: :gen_server.handle_msg/6
    (stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3
Last message: {:"$gen_cast", :new_release_has_been_downloaded}
State: "2018i"
@bernardd
Copy link

We had the same issue crop up in our system today. It also happened whenever I ran a local copy, but only on the first run. It seems like there was some kind of issue updating previous data sets to the one released today, but the crash/restart loop of the EtsHolder GenServer resolved it.

@lau
Copy link
Owner

lau commented Mar 27, 2019

This is due to a typo in the 2019a tz data. I plan to release a fix Wednesday.

@lau
Copy link
Owner

lau commented Mar 27, 2019

1.0.0-rc.1 has been released which fixes this. Recommended for Elixir 1.8.

0.5.20 also fixes it. Recommended for older Elixir versions.

@benwilson512
Copy link

@lau is calendar 0.17.4 compatible with 1.0.0-rc.1 tzdata?

@lau
Copy link
Owner

lau commented Mar 28, 2019

@benwilson512 It is compatible as is. I should release a new version of Calendar so that you don't have to use override in mix. The biggest difference between 0.5.20 and 1.0.0 (rc1) is that 1.0 has the new module for the built in TimeZoneDatabase functions in Elixir 1.8.

@benwilson512
Copy link

good to know thanks. I figured this was the case but given how long ago the last release of Calendar was (which is fine in and of itself), I was nervous about using override.

@lau
Copy link
Owner

lau commented Mar 28, 2019

@benwilson512 Yeah, it was a good question. I'm all about being being explicit and making sure over making assumptions :)

@lasseebert
Copy link

Can confirm. I'm running latest stable calendar with rc tzdata in production 👍

@ishikawa
Copy link
Author

Thanks! Updating to the version 0.5.20 fixed errors 😄

paulswartz added a commit to paulswartz/api that referenced this issue Apr 5, 2019
mydearxym added a commit to coderplanets/timex that referenced this issue Apr 10, 2019
mydearxym added a commit to coderplanets/coderplanets_server that referenced this issue Apr 10, 2019
mydearxym added a commit to coderplanets/coderplanets_server that referenced this issue Apr 10, 2019
paulswartz added a commit to mbta/api that referenced this issue Apr 11, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants