aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2014-08-29Clarify error for slow `cpu_sup` port initLuca Favatella
I noticed that running an R16B03-1 node on an overloaded host produced log entries like the following ones: ``` 2014-08-22 21:52:31 =ERROR REPORT==== Error in process <0.24112.3> on node '[email protected]' with exit value: {{case_clause,{data,4711}},[{cpu_sup,get_uint32_measurement,2,[{file,"cpu_sup.erl"},{line,227}]},{cpu_sup,measurement_server_loop,1,[{file,"cpu_sup.erl"},{line,585}]}]} ``` ``` ===== ALIVE Fri Aug 22 21:50:14 CEST 2014 [os_mon] cpu supervisor port (cpu_sup): Erlang has closed [os_mon] cpu supervisor port (cpu_sup): Erlang has closed [os_mon] cpu supervisor port (cpu_sup): Erlang has closed [os_mon] cpu supervisor port (cpu_sup): Erlang has closed ===== ALIVE Fri Aug 22 22:07:46 CEST 2014 ``` I performed a code inspection on the `cpu_sup` module and I concluded that the `case_clause` error shows a small issue in the `cpu_sup` module, that happens when the port used in `cpu_sup` is slow to start - as it may happen on an overloaded node. The `cpu_sup` `gen_server` process keeps in its state the pid of an unlinked process (called "measurement server" - see `cpu_sup:init/1`), in order to do dirty stuff (e.g. reading the filesystem, running OS commands) and start_link-ing & managing the connected process to a port (called "port server" - see `measurement_server_init/0`). So the process organization looks like this: ``` cpu_sup - measurement server - port server - port ``` When the measurement server start_links the port server (see `port_server_start/0`) it sends a `{self(), ?ping}` message to it and expects an answer within 6s, otherwise it returns `{error, timeout}` rather than the pid. This has two issues: * The measurement server keeps `{error, ...}` in its state as if it were a pid - that makes no sense; * A late `{Pid, {data,4711}}` response may arrive in the mailbox of the measurement server, that will believe it to be a request to be processed, causing a `case_clause` error. This commit teaches the measurement server to check the success of the initialization of the port server by matching on the return value of `port_server_start/0` (renamed to `port_server_start_link/0` for the sake of clarity) in order to fail earlier and with an error clearer than `{case_clause,{data,4711}}`. In such case I expect the measurement server to be restarted by the `cpu_sup` `gen_server` (see `handle_call/3`) - as before. BTW It is not clear to me when the `handle_info({'EXIT', _Port, Reason}, State)` may be called (the `cpu_sup` `gen_server` does not link to the measurement server) but I am leaving it.
2014-08-26Merge branch 'ia/public_key/PBES2/OTP-11915' into maintIngela Anderton Andin
* ia/public_key/PBES2/OTP-11915: public_key: Add encodeing functionality for PBES1 and PBES2 public_key: Add PBES1 decoding support
2014-08-25Merge branch 'vladdu/jinterface_fun_equals' into maintBruce Yinhe
OTP-12121 * vladdu/jinterface_fun_equals: jinterface: fix bug in equality for OtpErlangFun
2014-08-25Merge branch 'ia/inets/ipv6-tests' into maintIngela Anderton Andin
* ia/inets/ipv6-tests: inets: Enable ipv6 tests for httpd
2014-08-25public_key: Add encodeing functionality for PBES1 and PBES2Ingela Anderton Andin
2014-08-22inets: Enable ipv6 tests for httpdIngela Anderton Andin
2014-08-22public_key: Add PBES1 decoding supportIngela Anderton Andin
2014-08-22DevelopmentMarcus Arendt
2014-08-22Merge branch 'marcus/OTP-17.2.1/mergefix' into maintMarcus Arendt
* marcus/OTP-17.2.1/mergefix: Updated OTP version Update release notes
2014-08-22Updated OTP versionErlang/OTP
2014-08-22Update release notesErlang/OTP
2014-08-21Merge branch 'egil/proc_lib-optimizations/OTP-12060' into maintBjörn-Egil Dahlberg
* egil/proc_lib-optimizations/OTP-12060: stdlib: Update dependencies to erts-6.2 erts: Update preloaded erlang.beam stdlib: Use erlang:fun_info_mfa/1 in proc_lib:init_p/3 erts: Test erlang:fun_info_mfa/1 erts: Introduce erlang:fun_info_mfa/1
2014-08-21Merge branch 'nox/reedr-logging/OTP-12115' into maintLukas Larsson
* nox/reedr-logging/OTP-12115: Add number of entries to mnesia copy debug message Add thread index to allocator enomem dump slogan Add run queue index to process dump info Add missing error string to syslog logging in epmd Demote rare debug slogan of message discarding to debug build
2014-08-21Merge branch 'maint-17' into maintMarcus Arendt
2014-08-21Merge branch 'ia/ssl/dialyzer-certificate_requests' into maintIngela Anderton Andin
* ia/ssl/dialyzer-certificate_requests: ssl: Fix boolean expression ssl: Fix broken contract
2014-08-21Merge branch 'lucafavatella/accept-ip-in-net_adm-names' into maintMarcus Arendt
* lucafavatella/accept-ip-in-net_adm-names: Refactor erl_epmd:names/1 Accept inet:ip_address() in net_adm:names/1
2014-08-21Merge branch 'hb/dialyzer/bugfixes/OTP-12018' into maintHans Bolinder
* hb/dialyzer/bugfixes/OTP-12018: dialyzer, hipe: Fix a bug concerning is_record/2,3
2014-08-21dialyzer, hipe: Fix a bug concerning is_record/2,3Hans Bolinder
Also fixed some cases where Dialyzer could crash due to reaching system limits.
2014-08-21Merge branch 'hb/dialyzer/bugfix/OTP-12111' into maintHans Bolinder
* hb/dialyzer/bugfix/OTP-12111: dialyzer: fix a -Wunderspecs bug
2014-08-20dialyzer: fix a -Wunderspecs bugHans Bolinder
Sometimes bogus warnings were generated for parametrized types. Thanks to Krzesimir Sarnecki for pointing the bug out. Also corrected warnings where the structure of opaque types were exposed (thanks to Kostis for pointing the bug out).
2014-08-20Updated OTP versionOTP-17.2.1Erlang/OTP
2014-08-20Update release notesErlang/OTP
2014-08-20Merge branch 'hans/ssh/patch-17.0.2' into maint-17Erlang/OTP
* hans/ssh/patch-17.0.2: ssh: Updated vsn.mk ssh: negotiation_timeout bug fixed ssh: Negotiation_timeout testcase
2014-08-20ssh: Updated vsn.mkHans Nilsson
2014-08-20ssh: negotiation_timeout bug fixedHans Nilsson
2014-08-20ssh: Negotiation_timeout testcaseHans Nilsson
2014-08-19ssl: Fix boolean expressionIngela Anderton Andin
2014-08-18stdlib: Update dependencies to erts-6.2Björn-Egil Dahlberg
2014-08-18ssl: Fix broken contractIngela Anderton Andin
2014-08-14Merge branch 'rickard/+swct/OTP-12102' into maintRickard Green
* rickard/+swct/OTP-12102: Fix +swct doc
2014-08-14Fix +swct docRickard Green
2014-08-14Add number of entries to mnesia copy debug messageRick Reed
2014-08-14Refactor erl_epmd:names/1Luca Favatella
Simplify erl_epmd:names/1, keeping the same functionalities, relying on inet:gethostbyname/1 being able to handle both atoms and strings.
2014-08-14Accept inet:ip_address() in net_adm:names/1Luca Favatella
This change also simplifies the code avoiding a double (conditional) call to inet:gethostbyname/1 (in net_adm:names/1 and then erl_epmd:names/1).
2014-08-14Merge branch 'hans/ssh/new_test_case' into maintHans Nilsson
* hans/ssh/new_test_case: ssh: Add testcases for max_sessions option
2014-08-14ssh: Add testcases for max_sessions optionHans Nilsson
Now checks that if we have max_session sessions we could close one session and open a new one. That is checked both for parallel and non-parallel logins.
2014-08-14Merge branch 'ia/ssl/certificate_types/certificate_requests/OTP-12026' into ↵Ingela Anderton Andin
maint * ia/ssl/certificate_types/certificate_requests/OTP-12026: public_key: Updated User Guide with ECC records ssl: Make sure the correct ROOT-cert is used ssl: Test ECDSA and improve test suite maintainability public_key: Correct ASN1-type EcpkParameters in PEM handling public_key: Correct ASN-1 spec ssl: Correct handling of certificate_types in Certificate Requests
2014-08-14public_key: Updated User Guide with ECC recordsIngela Anderton Andin
2014-08-14Merge branch 'lukas/erts/fix_neg_of_int64_min/OTP-12097' into maintLukas Larsson
* lukas/erts/fix_neg_of_int64_min/OTP-12097: erts: Fix neg int overflow when sint is min size
2014-08-14Merge branch 'nox/clang-ubsan/OTP-12097' into maintLukas Larsson
* nox/clang-ubsan/OTP-12097: Properly handle SINT_MIN in small_to_big() Use offsetof() in io.c
2014-08-13Merge branch 'pascalchap/observer_issue' into maintMarcus Arendt
* pascalchap/observer_issue: correction of huge status bar
2014-08-11Merge branch 'hans/ssh/prepare-release' into maintHans Nilsson
* hans/ssh/prepare-release: ssh: Updated vsn.mk
2014-08-11ssh: Updated vsn.mkHans Nilsson
2014-08-11Merge branch 'hans/ssh/negotiation_timeout_bug/OTP-12057' into maintHans Nilsson
* hans/ssh/negotiation_timeout_bug/OTP-12057: ssh: negotiation_timeout bug fixed ssh: Negotiation_timeout testcase
2014-08-11ssh: negotiation_timeout bug fixedHans Nilsson
2014-08-11ssh: Negotiation_timeout testcaseHans Nilsson
2014-08-11ssl: Make sure the correct ROOT-cert is usedIngela Anderton Andin
When dealing with older certificates that does not indicate its signer with a certificate extension, we must search the database for the issure. Finding the issuer is not enough, we need to verify the signature with the key in the found issuer cert.
2014-08-11ssl: Test ECDSA and improve test suite maintainabilityIngela Anderton Andin
Use generated certs instead of hard coded
2014-08-11Merge branch 'rickard/nosuspend-bug/OTP-12082' into maintRickard Green
* rickard/nosuspend-bug/OTP-12082: Fix build of test port program Update Makefile.src Add async_ports test Fix abort of nosuspend-tasks in erts_port_task_schedule()
2014-08-08erts: Fix neg int overflow when sint is min sizeLukas Larsson
When INT64_MIN is the value of a Sint64 we have to first cast it to an Uint64 before negating it. Otherwise we get an integer overflow which is undefined behaviour and in gcc 4.9 this results in -0 instead of -9223372036854775808 in gcc 4.8.