summaryrefslogtreecommitdiffstats
path: root/core
AgeCommit message (Collapse)AuthorFilesLines
2022-05-05fixed data race in core.Connection.Close().Sergey Elantsev2-5/+32
The problem is triggered by the following events: 1. VPP stops. 2. core.Connection.healthCheckLoop() detects it and calls disconnectVPP(), which does close healthCheckDone channel for the first time. At this point Connection becomes unusable - re-entrance to connectLoop() will return immediately because of a closed healthCheckDone channel. But, the race is that connection may set c.vppConnected = 1 before terminating the connect loop. 3. User calls Connection.Close(), who seed c.vppConnected = 1, and tries to close already closed channel, which leads to a panic. This commit fixes this race by telling disconnectVPP() whether it is a terminal stop triggered via Close(), or a temporary one from connectLoop(). Change-Id: I555149da35ca3dc2b606bad59f2101266c0ef6b9 Signed-off-by: Sergey Elantsev <elantsev.s@yandex.ru>
2022-05-02read memory stats from per-heap coutersVladimir Lavor1-15/+45
Signed-off-by: Vladimir Lavor <vlavor@cisco.com> Change-Id: Ic4a500ea83b392eb9720575d95597bc48b44c759
2022-01-31connection: prevent channel ID overlapLukas Vogel3-11/+27
When creating a new channel and the channel ID wraps around, make sure to not re-use a channel ID that is still in use. Re-using the channel ID usually means that the connection health check will stop working and other things might break as well. Also rename maxChannelID to nextChannelID and use a lock to guard access instead of using an atomic. The lock does anyway need to be acquired because to put the entry in the map. This commit was inspired by the following PR on Github: https://github.com/FDio/govpp/pull/14. Change-Id: I8c1a4ca63a53d07a6482b6047a3005065168c0b4 Signed-off-by: Lukas Vogel <vogel@anapaya.net>
2021-10-19Fix memory leak in health checkVladimir Lavor1-51/+56
1. On connection disconnect, health check loop ends immediately and independently on probe interval setup 2. Proper resource cleanup On disconnect, health check terminates itself with a delay based on the probe interval. It causes memory usage going up if AsyncConnect() & Disconnect() are called in a loop. Signed-off-by: Vladimir Lavor <vlavor@cisco.com> Change-Id: Ibcdfec9d2d7736f9390e21039d9a917228114273
2021-09-27core: close Stream after Connection.InvokeVladimir Popov1-0/+1
Fixes core.Stream leaking on every core.(*Connection).Invoke() https://lists.fd.io/g/govpp-dev/topic/govpp_is_leaking_channels_on/85836420 Signed-off-by: Vladimir Popov <vladimir.popov@xored.com> Change-Id: I8d5bcb3c3aa40ccda3fb249ee80bb82809f284b1
2021-09-07Refactoring and fixesmhalaj13-26/+21
* refactor creation of new channel * add missing closing of created streams * correct documentation regarding thread safety of stream Signed-off-by: mhalaj1 <matus.halaj@pantheon.tech> Change-Id: Ic601efff298fcbdecaafab83fa236253af69de21
2021-07-22feat: api-traceVladimir Lavor4-55/+386
Signed-off-by: Vladimir Lavor <vlavor@cisco.com> Change-Id: I7de363dfb3930db13a30e97f154c57d75c07f01c
2021-03-03Provide error counters per worker for statsclientVladimir Lavor1-1/+5
Instead of a single value, the ErrorCounter now contains an array representing couter values per workers. Change-Id: I2b869e5b228bcb3e155b1fef08a4cd00e7d2e16a Signed-off-by: Vladimir Lavor <vlavor@cisco.com>
2021-02-23Added asynchronous connection for stats socketVladimir Lavor1-22/+93
The stats socket now allows an option to connect asynchronously in the same manner as the api socket connection. New method AsyncConnectStats returns a channel where notificaitons of type ConnectionEvent will be sent. Fixed the stats reconnect procedure which sometimes failed to re-eneable the connection. Change-Id: I0bdb19f0d57e3a1ea259b8b1ba0a5e5fa49a09db Signed-off-by: Vladimir Lavor <vlavor@cisco.com>
2021-02-01Rework test for binary API union sizesVladimir Lavor1-1/+1
The test now generates various unions from union.api.json and tests correct sizes of generated types. Change-Id: Ifaf18a8ce650e71a8ca8b2d5cfb9d7eed2d757c6 Signed-off-by: Vladimir Lavor <vlavor@cisco.com>
2020-12-03Decode message context using the message type onlyVladimir Lavor2-26/+11
In order to prevent potential future issues, the method returning message based on its ID but ignoring its package was optimized. Change-Id: I12aa2b243f32f38cb3dbc7731613c7ed9fc66539 Signed-off-by: Vladimir Lavor <vlavor@cisco.com>
2020-12-03Fixed incorrect message error in the stream APIVladimir Lavor4-45/+80
The message package is passed to the stream object and used to evaluate correct reply message type Change-Id: I2c9844d6447d024af1693205efd5721e2f89f22d Signed-off-by: Vladimir Lavor <vlavor@cisco.com>
2020-10-30Stats API: added GetMemory()Vladimir Lavor1-0/+27
Retrieved numbers relate to the statseg heap. Change-Id: I72750183db3524481918c71c993b39e65c28ddb6 Signed-off-by: Vladimir Lavor <vlavor@cisco.com>
2020-10-23Fix panic for Retval fields with uint kindsOndrej Fabry1-1/+9
Change-Id: I5e588d48461a0cf551552a5068218a58920e52aa Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2020-10-15Stream API optionsVladimir Lavor1-16/+42
* Stream API uses the same default values as the Channel API * request size, reply size and reply timeout settable using functional options * Added stream client example to show the stream API usage Change-Id: Id599134a7f520fc19f7d770ed5e3de74a7936829 Signed-off-by: Vladimir Lavor <vlavor@cisco.com>
2020-09-07Fix decoding messages of identical types in streamOndrej Fabry1-17/+24
Change-Id: Id6f6bc3de5b9ff7230108a4171810207c94f9a38 Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2020-09-04Increase default health check parametersOndrej Fabry1-2/+2
Change-Id: I0b5fbbd98fc1bb6fc9d86ed81cb1b3f9755fed67 Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2020-09-04Stats APIv2Vladimir Lavor1-0/+3
* Compatible with stats v2 API * Compatibility with stats v1 was persisted * 19.04 (legacy) dropped Change-Id: I91a3ab0c007fed6d972eee01d7caf69af29305d1 Signed-off-by: Vladimir Lavor <vlavor@cisco.com>
2020-07-17Added VPP state 'NotResponding'Vladimir Lavor1-14/+30
This change allows informing client about the current VPP state in more detail. * In case the VPP is overloaded but keeps its configuration, client received 'NotResponding' event message * If the VPP process dies (the socket is closed), the client receives 'Disconnected' event message Additional fix: event messages are discarded if the buffer is full. This could cause GoVPP to hang after some time in case the client was not receiveing events. Change-Id: I94a4647f6643f1d97bf52e5d7996d70229b0577d Signed-off-by: Vladimir Lavor <vlavor@cisco.com>
2020-07-17Improve binapi generatorOndrej Fabry3-11/+27
- simplified Size/Marshal/Unmarshal methods - replace struc in unions with custom marshal/unmarshal - fix imports in generated files - fix mock adapter - generate rpc service using low-level stream API (dumps generate control ping or stream msg..) - move examples/binapi to binapi and generate all API for latest release - add binapigen.Plugin for developing custom generator plugins - optionally generate HTTP handlers (REST API) for RPC services - add govpp program for browsing VPP API Change-Id: I092e9ed2b0c17972b3476463c3d4b14dd76ed42b Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2020-07-02Binary API generator improvementsVladimir Lavor2-6/+7
* Many aliases removed, aliased types reference original types via import instead * Added various helper methods for simpler conversion between go and vpp types Change-Id: I7999ac8d524cece4da03e6447b13421659765095 Signed-off-by: Vladimir Lavor <vlavor@cisco.com>
2020-06-25Introduce Stream - experimental API for low-level access to VPP APIOndrej Fabry4-79/+277
Change-Id: I2698e11b76ff55d9730b47d4fee990be93349516 Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2020-06-24Fix codec fallback and generate type importsOndrej Fabry2-4/+4
Change-Id: Idd76c7f19d952939caf153928ac60175845078ff Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2020-06-16Optimize socketclient adapter and add various code improvementsOndrej Fabry5-23/+52
This commit includes: Features - optimized [socketclient](adapter/socketclient) adapter and add method to set client name - added list of compatible messages to `CompatibilityError` Fixes - `MsgCodec` will recover panic occurring during a message decoding - calling `Unsubscibe` will close the notification channel Other - improved log messages to provide more relevant info Examples - added more code samples of working with unions in [union example](examples/union-example) - added profiling mode to [perf bench](examples/perf-bench) example - improved [simple client](examples/simple-client) example to work properly even with multiple runs Dependencies - updated `github.com/sirupsen/logrus` dep to `v1.6.0` - updated `github.com/lunixbochs/struc` dep to `v0.0.0-20200521075829-a4cb8d33dbbe` Change-Id: I136a3968ccf9e93760d7ee2b9902fc7e6390a09d Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2020-05-18Fix stats data errors and panic for VPP 20.05Ondrej Fabry1-2/+2
- fixes panic occurring when updating error counters - fixes stat data length errors when updating stats Change-Id: If2d4bcb7df084bf1999ba469f128b7a01aa6be5e Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2020-03-18Fix import path in examples/binapiv0.3.1Ondrej Fabry2-16/+18
Change-Id: I6af1ae2778b73f37be09c64a2948417e576f02ab Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2020-03-18Release 0.3.0v0.3.0Ondrej Fabry1-1/+1
- regenerate examples/binapi for latest VPP from stable/2001 - add import-prefix flag to set custom prefix (fallbacks to using go list) Change-Id: Ib09f134cf9662e348be2575448964de2b9e5c1ee Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2019-11-15Improve compatibility checkingOndrej Fabry2-8/+18
- added CompatibilityError to api package to represent error with list of incompatible messages - added UnknownMsgError to adapter package to represent error for unknown message - added list of registered message types Change-Id: I2623b45135521d52612ba91e4605fc064a7fc76e Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2019-10-30fix data races in proxy serverMatus Mrekaj3-15/+22
Signed-off-by: Matus Mrekaj <matus.mrekaj@pantheon.tech> Change-Id: I932d560548ee816e28683243a7318a2a7fbbb24a
2019-10-15fix: Add guards for converting Stat interface (might be nil)Ondrej Fabry1-28/+33
Change-Id: I54cd9ca6fb6607a70031ba5e6318a9ea58db7e6c Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2019-10-03Optimizations for statsclientOndrej Fabry2-257/+242
- this dramatically improves performance for stats data collection - memory allocation is now done only when stat dirs change - updating prepared stat dir does not need to allocate memory - created integration test for testing stats client - added NumWorkerThreads and VectorRatePerWorker to SystemStats - added ReduceSimpleCounterStatIndex, ReduceCombinedCounterStatIndex for aggregating specific index Change-Id: I702731a69024ab5dd0832bb5cfe2773a987359e5 Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2019-09-09Use new default binapi socket with fallback to legacyOndrej Fabry1-1/+1
Change-Id: I1a6839e3bbb8d599fcbdbc2b1aff7c81f7d263c9 Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2019-08-01Fix unit testsOndrej Fabry1-130/+13
Change-Id: I49e0ec8420cf2563b77ec2b5a9cf9674286d5e5d Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2019-07-30Use common logger in core packageOndrej Fabry1-3/+3
Change-Id: If9da8381212273f8f2655d7b0a3077b5ba32921f Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2019-07-10Fix socketclient for VPP 19.08Ondrej Fabry3-10/+18
- in VPP 19.08 the socket type has changed to STREAM and data has to be writtento VPP with single flush, otherwise msg might get mixed with next header and cause VPP to stop responding - this also fixes WaitReady for socketclient and vppapiclient Change-Id: I022724c0c09c9b92d4c695d1cf2be15994fff717 Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2019-07-03Fix error counters for VPP 19.04Ondrej Fabry1-1/+1
Change-Id: I87251362668bbe9a31f52c1b5e9b3ab596f7b2f3 Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2019-06-27Improvements for binapi-generator and support VPP 19.04 in statsclientOndrej Fabry2-3/+8
- RPC service client implementation for dumps requests now streams responses - RPC service generation is now enabled by default - examples now allow setting binapi socket address - input dir flag for binapi-generator will recursively look into dirs to support core/plugins in /usr/share/vpp/api - minor improvements in debug logs - add support for VPP 19.04 for statsclient Change-Id: I0939ee3aa6e9f850d073fc5c87aff4ccc56b0d70 Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2019-06-06Add various generator improvementsOndrej Fabry2-6/+6
- generate service implementation for modules - generate conversion maps and String() method for enums - generate module name and version as constants - rename Union_data field to XXX_UnionData for consistency - generate constant GoVppAPIPackageIsVersionN for checking compatibility with API - add example for using service clients - add some documentation to socketclient adapter - cleanup gen.go file used for generating binapi - regenerate binapi with latest VPP release (19.04.1) - change global variables Messages into a function AllMessages Change-Id: Id1ef97764570759eaa3e5a4dc14ecda7a168ee39 Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2019-04-18Add buffer pool statsOndrej Fabry1-3/+47
Change-Id: I15d1df825b4d4fc760da83d9c878a621936bb6fa Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2019-04-16Fix crash in stats for removed interfaces/nodesOndrej Fabry1-0/+6
Change-Id: I36b4cd2625c7f0c5846fe402be7b2aeece4707f8 Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2019-04-11Add support for names vector and fill name in interface/node statsOndrej Fabry1-1/+34
Change-Id: I3a6bcb635701c0f00e47d04fce2113e1ac23b67b Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2019-04-04socketclient: wait for socket to be createdVladimir Lavor2-12/+27
domain sockets are checked/watched for existence in same manner as shm prefixes also the connection attempts and timeout in between can be configured for async-connect Change-Id: I084a3efaefea10d106866968deab90d3fda77cfe Signed-off-by: Vladimir Lavor <vlavor@cisco.com>
2019-03-20fixup race on ch.reqChanNicolas PLANEL1-4/+1
git.fd.io/govpp.git/core/request_handler.go:37 git.fd.io/govpp.git/core/channel.go:188 Change-Id: I5be8be5e3ca105822ea4bb3b9690938634950d78 Signed-off-by: Nicolas PLANEL <nplanel@redhat.com>
2019-03-08Add socketclient implementationOndrej Fabry2-5/+8
Change-Id: Ibf9edc0e5911d08229ac590b37c5afbc27f424a0 Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2019-02-19Introduce higer-level API for retrieving statisticsOndrej Fabry3-10/+420
- see stats-api example Change-Id: I11d29d32b60d25238e75cb6b86ee34842348ab38 Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2019-02-08Add support for using multiple generated versionsOndrej Fabry4-84/+109
- added CheckCompatibility for checking if given messages are compatible - generating Messages global for easier usage of compatibility check - added ReconnectInterval and MaxReconnectAttempts for reconnecting - added Failed state that is sent after exceeding max reconnect attempts Change-Id: I1062ba453f22657c1a2a31aa64cb103ef1223b0f Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2019-02-08Generator improvements and cleanupOndrej Fabry1-21/+0
- generator now supports include-comments flag (as opt-in) - minor code cleanup in binapi-generator - remove obsolete unit tests - flatten examples from examples/cmd folder - introduce constant for checking compatibility in future versions Change-Id: I3545f2ba4b869a3b51d6d0de7e742f3f1e1be392 Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2019-01-31Generator improvementsOndrej Fabry2-2/+2
- all objects are now sorted alphabetically for more consistent output - unions now have constructor generated - log level for warnings was changed to debug - GetAllMessages renamed to GetRegisteredMessages Change-Id: I976453004a2fd8b6cb95ca0acfcef56913bf8d38 Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2018-10-23Remove the global variable for connectionOndrej Fabry2-52/+20
- this also fixes issue where after connect failure all following connects failed 'with only one connection per process is supported' - this global was used to limit to single connection, but the actual limitation is for the adapter and with different adapter implementation multiple connections could actually be supported - the global defined in the vppapiclient package will continue to limit to single connection via VppClient implementation of the adapter Change-Id: Id06dd6e80b51d1d43f6f75bbcc6e01c6f21c605a Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
2018-10-22Introduce StatsAPI and it's initial implementationOndrej Fabry2-25/+26
- this implementation is basically Go wrapper around VPP's vppapiclient C library Change-Id: I6f53dc3e228868834bf3a8a00c686ad05e22f3dd Signed-off-by: Ondrej Fabry <ofabry@cisco.com>