-
Notifications
You must be signed in to change notification settings - Fork 11
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
pull latest content #12
Closed
Closed
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Added parent container span::Universe set ownership in own.mdl Added code to generate policy file with span artifacts Change-Id: I29b02a3c8a2d1f3b9bef8a36510f54eed6330156 Signed-off-by: tarbash <waris12@yahoo.com>
Avoid multiple includes of header Change-Id: Ia1df393b5317e8d61de72aa49e386fe9a510293a Signed-off-by: Tom Flynn <tom.flynn@gmail.com>
- Earlier commit 7a54783 added match on SIP before mapping EPGS in source table. These matches were added for any endpoint in promiscuous mode. This breaks DHCP since the responses come with a secondary ip of the DHCP interface that is not present in the EP file. - This fix limits the previous fix to only NAT endpoints. We add a new mode "nat-mode" that when true identifies and endpoint as a NAT endpoint. - For backward compatibility we also use the vm-name starting with prefix "snat|" to identify a NAT endpoint. (so that ep files do not need to be regenerated for existing deploymenyts) - neutron opflex agent changes to support nat-mode will be done via a separate commit. Change-Id: I7bc0ed30d2554e6c0998f221f388efbd8bd986e3 Signed-off-by: Madhu Challa <challa@gmail.com>
- Forgot to initialize the new natMode boolean. Change-Id: I254d8f180deef5d4e8be3ecc3162d7ea1d0eb52d Signed-off-by: Madhu Challa <challa@gmail.com>
1. add a session container for all span artifacts 2. add a reference to span/session instances from EPG Assumption: opflex proxy will add a reference to EPG pointing to the relevant span/sessions. When End points are declared, any references to EPGs will be resolved and any references from the EPG to other artifacts will be resolved. On removal of an end point, the EPG is updated by opflex proxy to add/remove span/session references. Added span manager to manage span artifacts and logic. Updated Policies.cpp to generate span artifacts for mock server and verified that span artifacts are indeed created and resolved by the agent. Change-Id: I42d18fb49ee3e18c6b19f123ef79ce3a5c11c474 Signed-off-by: tarbash <waris12@yahoo.com>
Change-Id: I49b8b2f579e9967cebfe53bb92e39168557ea124 Signed-off-by: Tom Flynn <tom.flynn@gmail.com>
Change-Id: I599da671764a7df93d4770e2d0451a3fef75995d Signed-off-by: Tom Flynn <tom.flynn@gmail.com>
Issue appeared if you defined a relation to a class that could be contained by multiple possible parents Do some minor cleanup of dead code and unused params. Change-Id: Ib3e14d92666535e4e08dfe4223e6ce30fec6e834 Signed-off-by: Tom Flynn <tom.flynn@gmail.com>
- Hence traffic between 2 different EPGs when they are on different compute nodes gets dropped at the receiving node. - This check should not match local traffic. We ensure this by matching on POLICY_APPLIED Change-Id: Id6cea9478665392aa1681abbbd4dd3b41a013a96 Signed-off-by: Madhu Challa <challa@gmail.com>
- Currently we use the EP multicast address for grat arp We should be using the mapped EPG multicast address. Change-Id: I1c0c4424e26cf9c3c22ae35f739938f38df84e0b Signed-off-by: Madhu Challa <challa@gmail.com>
Added relationship between source group and filter group. Enhanced Policies.cpp to generate filter entry in span. Changed debug level in peer.cpp to 7. Change-Id: Icc32d9e79c09316234e6c2b284697c221fabc047 Signed-off-by: tarbash <waris12@yahoo.com>
Change-Id: I2fe38edecf899d38b5f06400eaf90f2a5e0f333f Signed-off-by: Tom Flynn <tom.flynn@gmail.com>
Orchestrator needs to manage external node and path ExtEp File is required for every external endpoint Static Route is supported Local Route repository is a makeshift RIB that holds all known local routes for a given prefix including policy prefixes. Endpoint manager API for getting adjacency of an external EP. Removed Bgp support and dynamic routes for now Remote route repository should be on the opflex proxy Sample json for mock server updated with PBR and sclass Separate test file for PolicyManager IvLeaf cases Change-Id: I723ac76d780c01fd172bbb5fad2dcdc5e52e26ad Signed-off-by: Kiran Shastri <shastrinator@gmail.com>
Change-Id: I93187a9b95e1783a6216abf3befb03dac865dd3e Signed-off-by: Tom Flynn <tom.flynn@gmail.com>
Change-Id: I3d57796e289a085ac0d4aba04ffeb2221678a972 Signed-off-by: Tom Flynn <tom.flynn@gmail.com>
Local route delete should delete routes without exact matching prefix owners Local route update should handle idempotent case Added test case for remote route add, mod and delete Change-Id: Ied5441bbff099fd8eaade3973522659aa9a0e46a Signed-off-by: Kiran Shastri <shastrinator@gmail.com>
Change-Id: I773da4669939e500133592568f8a680f561da026 Signed-off-by: Deniz Ersoz <dersoz@cisco.com>
Policy prefix add/update is handled as a routing domain update Policy delete is handled as a external network delete since we don't get an update on the routing domain Change-Id: I03c854d1bd703df47d13f68f7c146e2cc1b54564 Signed-off-by: Kiran Shastri <shastrinator@gmail.com>
1. Arp responder so Remote EPs can talk across nodes without involvement of leaf. 2. Add a special interface veth-host-ac for host to reach pods without involvement of leaf. Change-Id: I947337973f0a7efeccf9f59cebc7b873c2a3fd37 Signed-off-by: Madhu Challa <challa@gmail.com>
- /usr/local/etc/opflex-server is used as the policy file repo. Change-Id: I9acb1ef8cf40c8f55cf3660d0c3b61956fcd0dbb Signed-off-by: Madhu Challa <challa@gmail.com> Restart mock server on policy change. - Delete hardcoded POLICY_DIR and derive using policy file. - Convert all tabs to spaces. Change-Id: Ibb65967d22c78286033e777412d35e08b6d6a2e5 Signed-off-by: Madhu Challa <challa@gmail.com>
Use the new field to get proxy addresses instead of overloading location field Change-Id: Iff4de7ef7559435f61da59d1b368207b14f74ac5 Signed-off-by: Tom Flynn <tom.flynn@gmail.com>
Change-Id: Ib47182afb1daf259fbfa01ee7bd3d1b989f78dc4 Signed-off-by: Ravi Ayyagari <ravayyag@cisco.com>
Change-Id: I35c92b835e7ede263f056a2d998ec58b8f2e2fd2 Signed-off-by: Tom Flynn <tom.flynn@gmail.com>
Change-Id: Ia838214c5f28cc0622b7284a618f6c733e975a04 Signed-off-by: Tom Flynn <tom.flynn@gmail.com>
Removed contained relationship between Member and Grp. This was causing both DstMember and SrcMember elements to show up in SrcGrp and DstGrp. Change-Id: Ic11dadf7787b36a8aef79c7dec362b44a303ef85 Signed-off-by: Mandeep S Sandhu <waris12@yahoo.com>
Change-Id: Ic80e4c59007a904878a01f2068e9820399574f3b Signed-off-by: Ravi Ayyagari <ravayyag@cisco.com>
This can be used to get the parent of an MO. Changed method to return URI. The std::out_of_range exception is handled in the implementation. Used the method on preocessor to get StoreClient reference. removed tabs. removed namespace qualifiers. Change-Id: I9255f99e7858f59d6d48f09bd684ec07fdb4edb7 Signed-off-by: Mandeep S Sandhu <waris12@yahoo.com>
Framework instances must be explicitly passed. Allowing it to be optional has been the source of confusion and bugs Change-Id: Ic6c44092862fb2049f53f2c088b35e595cfb7575 Signed-off-by: Tom Flynn <tom.flynn@gmail.com>
There is already a Direction enum in gbp. Change-Id: I875a55423959f42e7be66902fc9d54859fc8f09c Signed-off-by: Mandeep S Sandhu <waris12@yahoo.com>
Change-Id: Iba251e0450ee4e4fca312ec5b4d4b84102f9ccd7 Signed-off-by: Tom Flynn <tom.flynn@gmail.com>
This makes sure all communication is within the context of the uv_loop. Cleanup of debug messages. Refactored RpcConnection class to implement handleTransaction method. Change-Id: I04430b5101a67d55e57562dbfb7a50bf58911f76 Signed-off-by: Mandeep S Sandhu <waris12@yahoo.com>
Change-Id: I33e13b0ad1a90c45060fe1e9942fae35a2f8b561 Signed-off-by: Tom Flynn <tom.flynn@gmail.com>
Change-Id: If1ead2e170d7617601343472c8a4a4bcab61cb61 Signed-off-by: Tom Flynn <tom.flynn@gmail.com>
Minor code cleanups Change-Id: If1154202ec827021b812ecf683ff8ee93b16b9ae Signed-off-by: Tom Flynn <tom.flynn@gmail.com>
Log all dropped packets or dropped packets based on a flow Turn drop-logging on/off dynamically. Dropped packets are encapsulated with geneve and sent to the configured drop-log port. Explicit drops are handled in a separate table at the end Log-action will be updated in a subsequent update. Signed-off-by: Kiran Shastri <shastrinator@gmail.com> Change-Id: I6f64ac4c30baa4918d975542405b2ec842bf8bd4
Change-Id: I244c7d9babaf1afcdab8eef18fea930934692b76 Signed-off-by: Tom Flynn <tom.flynn@gmail.com>
- mock_server implements a GRPC client that uses server-side streaming RPC method ListObjects, where it sends a request to gbpserver and in response gets a GBPOperation message - This message contains a vector of GBPObjects - These are converted into RapidJson document that is passed to opflex engine to update policy in the mo db. - The update via deserialize() would trigger notifications to opflex agents. - GbpClient class starts a thread that is responsible for restarting the GRPC client should the server restart. - GbpClientImpl class starts the GRPC client thread that blocks waiting on a message on the channel or until the GRPC connection disconnects. - The GRPC feature is enabled ONLY when passing --enable-feature to configure when building agent-ovs - gbp.proto contains the protobuf defintion and the make process takes care of generating corresponding grpc and pb headers and .cc files. - In terms of functionality I verified the basics but have not tested all the scenarios. - There is more testing to be done on deserialize and the notifications generated to the agent. - This commit mostly handles the GRPC framework and basic functionality to push changes from gbpserver to mock_server without needing a restart. - It should not affect existing opflex builds (default off for GRPC) Signed-off-by: Madhu Challa <challa@gmail.com> Change-Id: I65bc291427262aa4ea32a3e4e357b1aab32531d3
Added logic to only update OVSDB span artifacts when there is a change in modb. Added hooks for configuring OVSDB IP, port and bridge for span. Change-Id: I808fab02a9049061fa59fdd42eb6a11116c3df17 Signed-off-by: Mandeep S Sandhu <waris12@yahoo.com>
Change-Id: I1193be21c3b0f0cc825768af47536929de090103 Signed-off-by: Tom Flynn <tom.flynn@gmail.com>
Change-Id: Ie164a8eb02cfe7c8a79d2b5f2c8f848d869affc0 Signed-off-by: Gautam Venkataramanan <gautam.chennai@gmail.com> Change-Id: I703f2b78a9743dfe7bb533d5f822b2f518e757b9
- This is part 2 of the grpc work. commit 71766d759f added grpc support for mock_server. - per agent (OpflexServerConnection instance) we maintain uri_map, and vectors of replace, merge, and deleted reference_t's - on agent resolve / un-resolve uri_map is updated - policy update from grpc side triggers deserialize on each mo that checks if the updated mo is of interest to any agent - if yes the replace, merge or deleted vectors are updated in grpc thread context which wakes up an update thread (per OpflexServerConnection) - update thread builds an OpflexMessage and sends it to corresponding agent and clears the vectors. - add gbp_server binary that takes a json policy file, deserializes it, converts it into GRPC policy and serves it to mock_server in configurable chunks with sleeps in between. - verified the flows are same with incremental updates - this completes most of the end to end integration between gbp server and opflex-agent as far as updates go. working on deletes, timeouts - address Tom Flynns code review comments - rename GbpServer.cpp to gbp_client_stress.cpp, this is test code to serve a policy-file to mock_server and is not a part of the shipped product. - add logic to delete policy. Signed-off-by: Madhu Challa <challa@gmail.com> Change-Id: I65367b2a310427644fafd88f4499862c0fbf12e2
Change-Id: Ibeb357efd022437a337cf59a268ca0a96b4a938e Signed-off-by: Tom Flynn <tom.flynn@gmail.com>
- a single prr_timer running in context of an io_service thread one per MockOpflexServer sends timeout messages to each OpflexConnection - The timeout is handled in the context of the same thread thats also responsible to send policyUpdate messages to opflex_agents. Thus no extra threads are needed per connection - The timeout handler clears any resolved URIs that have timed out - An extra optional arg to mock_server --prr_interval_secs to configure how often to trigger the timeouts, default 1 min - Tested by using a timeout trigger > prr_duration to verify the uri_map is cleared Signed-off-by: Madhu Challa <challa@gmail.com> Change-Id: I0f72fdc238259980be5bb8d42b51b1f3d1fdc436
If the log ever printed null the code would crash on the next line anyway Change-Id: Id7ad797f746404d67e2fb07cf5d88748d250f7d1 Signed-off-by: Tom Flynn <tom.flynn@gmail.com>
Added API to get parent by parsing the URI. Added comparator and has for source end points. Tests for both LocalEp and EPG as source emembers. Change-Id: I8f0e31fad07d4f6aa7a744c17e3ce39680641501 Signed-off-by: Mandeep S Sandhu <waris12@yahoo.com>
- In cloud env we route all pod to ext world traffic via veth_host_ac - Add flows to enable such traffic - These changes are merged from demo branch and bring master in sync with what was in demo. Signed-off-by: Madhu Challa <challa@gmail.com> Change-Id: I42f222359a0befb641f91ba977b52aac7219ca69
- add/clear flow depending on unenforced mode on RoutingDomain - Note: this flow will be the highest prio entry in POLICY table - added gtest to check the presence of the new flow - deleted unwanted flow in initExpRd() Change-Id: I70759c1e91980047b7a7f6b552991af392d64517 Change-Id: I666736ba0c3e4140a051fd81a4196526734583d2 Signed-off-by: Gautam Venkataramanan <gautam.chennai@gmail.com> Change-Id: I9699218949ff3faecabd37ddf122d0315a5653e7
gautvenk
added a commit
that referenced
this pull request
Jun 24, 2020
355 WARNING: ThreadSanitizer: data race (pid=8183) 356 Write of size 8 at 0x7b7800000548 by thread T11 (mutexes: write M1342): 357 #0 opflex::engine::internal::OpflexPool::setTunnelMac(opflex::modb::MAC const&) include/opflex/engine/internal/OpflexPool.h:338 (libopflex.so.0+0x115151) 358 #1 opflex::engine::Processor::setTunnelMac(opflex::modb::MAC const&) /home/noiro/work/opflex/libopflex/engine/Processor.cpp:584 (libopflex.so.0+0x115151) 359 #2 opflex::ofcore::OFFramework::setTunnelMac(opflex::modb::MAC const&) /home/noiro/work/opflex/libopflex/ofcore/OFFramework.cpp:103 (libopflex.so.0+0x18dcca) 360 #3 opflexagent::Agent::setUplinkMac(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) lib/Agent.cpp:795 (libopflex_agent.so.0+0x253e33) 361 #4 opflexagent::TunnelEpManager::on_timer(boost::system::error_code const&) lib/TunnelEpManager.cpp:281 (libopflex_agent.so.0+0x22c49f) 362 #5 boost::asio::detail::wait_handler<boost::_bi::bind_t<void, boost::_mfi::mf1<void, opflexagent::TunnelEpManager, boost::system::error_code const&>, boost::_bi::list2<boost::_bi::value<opflexagent::T 363 #6 boost::asio::detail::task_io_service_operation::complete(boost::asio::detail::task_io_service&, boost::system::error_code const&, unsigned long) /usr/include/boost/asio/detail/task_io_service_opera 364 #7 boost::asio::detail::task_io_service::do_run_one(boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>&, boost::asio::detail::task_io_service_thread_info&, boost::system::error_code co 365 #8 boost::asio::detail::task_io_service::run(boost::system::error_code&) /usr/include/boost/asio/detail/impl/task_io_service.ipp:149 (libopflex.so.0+0x16b982) 366 #9 boost::asio::io_service::run() /usr/include/boost/asio/impl/io_service.ipp:59 (libopflex_agent.so.0+0x256259) 367 #10 operator() lib/Agent.cpp:606 (libopflex_agent.so.0+0x256259) 368 #11 __invoke_impl<void, opflexagent::Agent::start()::<lambda()> > /usr/include/c++/9/bits/invoke.h:60 (libopflex_agent.so.0+0x256259) 369 #12 __invoke<opflexagent::Agent::start()::<lambda()> > /usr/include/c++/9/bits/invoke.h:95 (libopflex_agent.so.0+0x256259) 370 #13 _M_invoke<0> /usr/include/c++/9/thread:244 (libopflex_agent.so.0+0x256259) 371 #14 operator() /usr/include/c++/9/thread:251 (libopflex_agent.so.0+0x256259) 372 #15 _M_run /usr/include/c++/9/thread:195 (libopflex_agent.so.0+0x256259) 373 #16 <null> <null> (libstdc++.so.6+0xd086f) 374 375 Previous read of size 8 at 0x7b7800000548 by thread T4: 376 #0 opflex::engine::internal::OpflexPool::getTunnelMac() include/opflex/engine/internal/OpflexPool.h:342 (libopflex.so.0+0x1457d5) 377 #1 opflex::engine::internal::OpflexPEHandler::connected() /home/noiro/work/opflex/libopflex/engine/OpflexPEHandler.cpp:139 (libopflex.so.0+0x1457d5) 378 #2 opflex::engine::internal::OpflexClientConnection::on_state_change(yajr::Peer*, void*, yajr::StateChange::To, int) /home/noiro/work/opflex/libopflex/engine/OpflexClientConnection.cpp:158 (libopflex. 379 #3 yajr::comms::internal::CommunicationPeer::onConnect() /home/noiro/work/opflex/libopflex/comms/CommunicationPeer.cpp:116 (libopflex.so.0+0xe2aac) 380 #4 yajr::comms::internal::on_active_connection(uv_connect_s*, int) /home/noiro/work/opflex/libopflex/comms/active_connection.cpp:185 (libopflex.so.0+0xb5d00) 381 #5 <null> <null> (libuv.so.1+0x162c3) 382 #6 <null> <null> (libtsan.so.0+0x2aba6) Signed-off-by: Gautam Venkataramanan <gautam.chennai@gmail.com>
gautvenk
added a commit
that referenced
this pull request
Jun 25, 2020
- making refCount atomic 28944 Read of size 8 at 0x7b5400000ea0 by thread T6: 28945 #0 yajr::comms::internal::Peer::LoopData::onPrepareLoop() /home/noiro/work/opflex/libopflex/comms/loopdata.cpp:38 (libopflex.so.0+0xf4188) 28946 #1 yajr::comms::internal::Peer::LoopData::onPrepareLoop(uv_prepare_s*) /home/noiro/work/opflex/libopflex/comms/loopdata.cpp:113 (libopflex.so.0+0xf494d) 28947 #2 uv__run_prepare <null> (libuv.so.1+0x11d73) 28948 #3 <null> <null> (libtsan.so.0+0x2aba6) 28949 28950 Previous write of size 8 at 0x7b5400000ea0 by main thread: 28951 #0 yajr::comms::internal::Peer::LoopData::down() /home/noiro/work/opflex/libopflex/comms/loopdata.cpp:238 (libopflex.so.0+0xf4bef) 28952 #1 yajr::comms::internal::Peer::LoopData::destroy(bool) /home/noiro/work/opflex/libopflex/comms/loopdata.cpp:130 (libopflex.so.0+0xf5211) 28953 #2 yajr::finiLoop(uv_loop_s*) /home/noiro/work/opflex/libopflex/comms/common.cpp:33 (libopflex.so.0+0xbd27e) 28954 #3 opflexagent::OvsdbConnection::stop() ovs/OvsdbConnection.cpp:71 (agent_test+0x72ecc0) 28955 #4 opflexagent::OvsdbConnection_test::verify_connect::test_method() ovs/test/OvsdbConnection_test.cpp:102 (agent_test+0x594d65) 28956 #5 verify_connect_invoker ovs/test/OvsdbConnection_test.cpp:50 (agent_test+0x59720c) 28957 #6 boost::detail::function::void_function_invoker0<void (*)(), void>::invoke(boost::detail::function::function_buffer&) /usr/include/boost/function/function_template.hpp:118 (agent_test+0x13cd2c) 28958 #7 boost::detail::function::function_obj_invoker0<boost::detail::forward, int>::invoke(boost::detail::function::function_buffer&) <null> (libboost_unit_test_framework.so.1.65.1+0x4b2cd) 28959 #8 __libc_start_main <null> (libc.so.6+0x21b96) 28960 28961 Location is heap block of size 552 at 0x7b5400000c80 allocated by main thread: 28962 #0 operator new(unsigned long, std::nothrow_t const&) <null> (libtsan.so.0+0x771aa) 28963 #1 yajr::initLoop(uv_loop_s*) /home/noiro/work/opflex/libopflex/comms/common.cpp:22 (libopflex.so.0+0xbd060) 28964 #2 opflexagent::OvsdbConnection::start() ovs/OvsdbConnection.cpp:38 (agent_test+0x72f9a5) 28965 #3 opflexagent::OvsdbConnection_test::verify_connect::test_method() ovs/test/OvsdbConnection_test.cpp:51 (agent_test+0x59192e) 28966 #4 verify_connect_invoker ovs/test/OvsdbConnection_test.cpp:50 (agent_test+0x59720c) 28967 #5 boost::detail::function::void_function_invoker0<void (*)(), void>::invoke(boost::detail::function::function_buffer&) /usr/include/boost/function/function_template.hpp:118 (agent_test+0x13cd2c) 28968 #6 boost::detail::function::function_obj_invoker0<boost::detail::forward, int>::invoke(boost::detail::function::function_buffer&) <null> (libboost_unit_test_framework.so.1.65.1+0x4b2cd) 28969 #7 __libc_start_main <null> (libc.so.6+0x21b96) - Protecting peers list with peerMutex 29314 Read of size 8 at 0x7b5400000ca0 by main thread (mutexes: write M217157256601723712): 29315 #0 boost::intrusive::list_impl<boost::intrusive::bhtraits<yajr::comms::internal::Peer, boost::intrusive::list_node_traits<void*>, (boost::intrusive::link_mode_type)2, boost::intrusive::dft_tag, 1u>, 29316 #1 void boost::intrusive::list_impl<boost::intrusive::bhtraits<yajr::comms::internal::Peer, boost::intrusive::list_node_traits<void*>, (boost::intrusive::link_mode_type)2, boost::intrusive::dft_tag, 29317 #2 yajr::comms::internal::Peer::LoopData::destroy(bool) /home/noiro/work/opflex/libopflex/comms/loopdata.cpp:134 (libopflex.so.0+0xf51fb) 29318 #3 yajr::finiLoop(uv_loop_s*) /home/noiro/work/opflex/libopflex/comms/common.cpp:33 (libopflex.so.0+0xbd27e) 29319 #4 opflexagent::OvsdbConnection::stop() ovs/OvsdbConnection.cpp:71 (agent_test+0x72ecc0) 29320 #5 opflexagent::OvsdbConnection_test::verify_connect::test_method() ovs/test/OvsdbConnection_test.cpp:102 (agent_test+0x594d65) 29321 #6 verify_connect_invoker ovs/test/OvsdbConnection_test.cpp:50 (agent_test+0x59720c) 29322 #7 boost::detail::function::void_function_invoker0<void (*)(), void>::invoke(boost::detail::function::function_buffer&) /usr/include/boost/function/function_template.hpp:118 (agent_test+0x13cd2c) 29323 #8 boost::detail::function::function_obj_invoker0<boost::detail::forward, int>::invoke(boost::detail::function::function_buffer&) <null> (libboost_unit_test_framework.so.1.65.1+0x4b2cd) 29324 #9 __libc_start_main <null> (libc.so.6+0x21b96) 29325 29326 Previous write of size 8 at 0x7b5400000ca0 by thread T6: 29327 #0 void boost::intrusive::list_impl<boost::intrusive::bhtraits<yajr::comms::internal::Peer, boost::intrusive::list_node_traits<void*>, (boost::intrusive::link_mode_type)2, boost::intrusive::dft_tag, 29328 #1 yajr::comms::internal::Peer::LoopData::onPrepareLoop() /home/noiro/work/opflex/libopflex/comms/loopdata.cpp:64 (libopflex.so.0+0xf42a2) 29329 #2 yajr::comms::internal::Peer::LoopData::onPrepareLoop(uv_prepare_s*) /home/noiro/work/opflex/libopflex/comms/loopdata.cpp:112 (libopflex.so.0+0xf490d) 29330 #3 uv__run_prepare <null> (libuv.so.1+0x11d73) 29331 #4 <null> <null> (libtsan.so.0+0x2aba6) 29332 29333 Location is heap block of size 552 at 0x7b5400000c80 allocated by main thread: 29334 #0 operator new(unsigned long, std::nothrow_t const&) <null> (libtsan.so.0+0x771aa) 29335 #1 yajr::initLoop(uv_loop_s*) /home/noiro/work/opflex/libopflex/comms/common.cpp:22 (libopflex.so.0+0xbd060) 29336 #2 opflexagent::OvsdbConnection::start() ovs/OvsdbConnection.cpp:38 (agent_test+0x72f9a5) 29337 #3 opflexagent::OvsdbConnection_test::verify_connect::test_method() ovs/test/OvsdbConnection_test.cpp:51 (agent_test+0x59192e) 29338 #4 verify_connect_invoker ovs/test/OvsdbConnection_test.cpp:50 (agent_test+0x59720c) 29339 #5 boost::detail::function::void_function_invoker0<void (*)(), void>::invoke(boost::detail::function::function_buffer&) /usr/include/boost/function/function_template.hpp:118 (agent_test+0x13cd2c) 29340 #6 boost::detail::function::function_obj_invoker0<boost::detail::forward, int>::invoke(boost::detail::function::function_buffer&) <null> (libboost_unit_test_framework.so.1.65.1+0x4b2cd) 29341 #7 __libc_start_main <null> (libc.so.6+0x21b96) - Making peerMutex a recursive mutex (acquired in #11 and then in #5 again) #4 0x00005555555ea3c6 in opflex::util::LockGuard::LockGuard(pthread_mutex_t*) () at LockGuard.cpp:24 #5 0x00005555555b194b in yajr::comms::internal::Peer::LoopData::addPeer (peer=0x7b5400000780, peerState=yajr::comms::internal::Peer::LoopData::LISTENING, uv_loop=0x7fffffffcb70) at ../include/opflex/yajr/internal/comms.hpp:192 #6 yajr::comms::internal::Peer::insert (this=this@entry=0x7b5400000780, peerState=peerState@entry=yajr::comms::internal::Peer::LoopData::LISTENING) at peer.cpp:82 #7 0x00005555555a7a55 in yajr::comms::internal::ListeningTcpPeer::retry (this=0x7b5400000780) at passive_listener.cpp:186 #8 0x00005555555cca1c in yajr::comms::internal::Peer::LoopData::RetryPeer::operator() (this=<optimized out>, peer=0x7b5400000780) at loopdata.cpp:212 #9 0x00005555555ccb3e in boost::intrusive::list_impl<boost::intrusive::bhtraits<yajr::comms::internal::Peer, boost::intrusive::list_node_traits<void*>, (boost::intrusive::link_mode_type)2, boost::intrusive::dft_tag, 1u>, unsigned long, false, void>::clear_and_dispose<yajr::comms::internal::Peer::LoopData::RetryPeer> (disposer=..., this=0x7b5400000030) at /usr/include/boost/move/detail/meta_utils.hpp:267 #10 yajr::comms::internal::Peer::LoopData::onPrepareLoop (this=0x7b5400000000) at loopdata.cpp:62 #11 0x00005555555cd25e in yajr::comms::internal::Peer::LoopData::onPrepareLoop (h=0x7b5400000080) at loopdata.cpp:112 #12 0x00007ffff674cd74 in uv.run_prepare () from /usr/lib/x86_64-linux-gnu/libuv.so.1 #13 0x00007ffff6746e58 in uv_run () from /usr/lib/x86_64-linux-gnu/libuv.so.1 #14 0x000055555557f726 in asynchronous_sockets::CommsFixture::loop_until_final (num_events=0, timeout=7200, should_timeout=false, transient_peers=..., post_conditions=0x555555578100 <asynchronous_sockets::pc_successful_connect()>, final_peers=..., this=0x7fffffffca60) at test/comms_test.cpp:380 #15 asynchronous_sockets::STABLE_test_ipv4::test_method() () at test/comms_test.cpp:518 Signed-off-by: Gautam Venkataramanan <gautam.chennai@gmail.com>
gautvenk
added a commit
that referenced
this pull request
Jul 23, 2020
…ver connection set in few cases WARNING: ThreadSanitizer: data race (pid=24355) Read of size 8 at 0x7b0c00012140 by thread T13: #0 opflex::engine::internal::OpflexListener::sendTimeouts() /home/noiro/work/opflex/libopflex/engine/OpflexListener.cpp:213 (libopflex.so.0+0x154c70) #1 opflex::engine::internal::GbpOpflexServerImpl::on_timer(boost::system::error_code const&) /home/noiro/work/opflex/libopflex/engine/GbpOpflexServer.cpp:146 (libopflex.so.0+0x163808) #2 operator() /home/noiro/work/opflex/libopflex/engine/GbpOpflexServer.cpp:119 (libopflex.so.0+0x163dd4) #3 operator() /usr/include/boost/asio/detail/bind_handler.hpp:47 (libopflex.so.0+0x163dd4) #4 asio_handler_invoke<boost::asio::detail::binder1<opflex::engine::internal::GbpOpflexServerImpl::start()::<lambda(const boost::system::error_code&)>, boost::system::error_code> > /usr/include/boost/asio /handler_invoke_hook.hpp:69 (libopflex.so.0+0x163dd4) #5 invoke<boost::asio::detail::binder1<opflex::engine::internal::GbpOpflexServerImpl::start()::<lambda(const boost::system::error_code&)>, boost::system::error_code>, opflex::engine::internal::GbpOpflexSe rverImpl::start()::<lambda(const boost::system::error_code&)> > /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:37 (libopflex.so.0+0x163dd4) #6 do_complete /usr/include/boost/asio/detail/wait_handler.hpp:70 (libopflex.so.0+0x163dd4) #7 boost::asio::detail::task_io_service_operation::complete(boost::asio::detail::task_io_service&, boost::system::error_code const&, unsigned long) /usr/include/boost/asio/detail/task_io_service_operation .hpp:38 (libopflex.so.0+0x16b292) Previous write of size 8 at 0x7b0c00012140 by thread T14 (mutexes: write M620, write M198): #9 opflex::engine::internal::OpflexListener::on_new_connection(yajr::Listener*, void*, int) /home/noiro/work/opflex/libopflex/engine/OpflexListener.cpp:162 (libopflex.so.0+0x15589f) #10 yajr::comms::internal::ListeningPeer::getConnectionHandlerData() ../include/opflex/yajr/internal/comms.hpp:1116 (libopflex.so.0+0xb98a8) #11 yajr::comms::internal::ListeningTcpPeer::getNewPassive() /home/noiro/work/opflex/libopflex/comms/passive_listener.cpp:333 (libopflex.so.0+0xb98a8) #12 yajr::comms::internal::on_passive_connection(uv_stream_s*, int) /home/noiro/work/opflex/libopflex/comms/passive_listener.cpp:296 (libopflex.so.0+0xb7074) Location is heap block of size 40 at 0x7b0c00012120 allocated by thread T14: #9 opflex::engine::internal::OpflexListener::on_new_connection(yajr::Listener*, void*, int) /home/noiro/work/opflex/libopflex/engine/OpflexListener.cpp:162 (libopflex.so.0+0x15589f) #10 yajr::comms::internal::ListeningPeer::getConnectionHandlerData() ../include/opflex/yajr/internal/comms.hpp:1116 (libopflex.so.0+0xb98a8) #11 yajr::comms::internal::ListeningTcpPeer::getNewPassive() /home/noiro/work/opflex/libopflex/comms/passive_listener.cpp:333 (libopflex.so.0+0xb98a8) #12 yajr::comms::internal::on_passive_connection(uv_stream_s*, int) /home/noiro/work/opflex/libopflex/comms/passive_listener.cpp:296 (libopflex.so.0+0xb7074) SUMMARY: ThreadSanitizer: data race /home/noiro/work/opflex/libopflex/engine/OpflexListener.cpp:213 in opflex::engine::internal::OpflexListener::sendTimeouts() Signed-off-by: Gautam Venkataramanan <gautam.chennai@gmail.com>
gautvenk
added a commit
that referenced
this pull request
Aug 7, 2020
================== WARNING: ThreadSanitizer: data race (pid=19679) Read of size 1 at 0x7b1000034990 by main thread: #0 boost::asio::detail::deadline_timer_service<boost::asio::time_traits<boost::posix_time::ptime> >::cancel(boost::asio::detail::deadline_timer_service<boost::asio::time_traits<boost::posix_time::ptime> > ::implementation_type&, boost::system::error_code&) /usr/include/boost/asio/detail/deadline_timer_service.hpp:100 (libopflex.so.0+0x1630e3) #1 boost::asio::deadline_timer_service<boost::posix_time::ptime, boost::asio::time_traits<boost::posix_time::ptime> >::cancel(boost::asio::detail::deadline_timer_service<boost::asio::time_traits<boost::po six_time::ptime> >::implementation_type&, boost::system::error_code&) /usr/include/boost/asio/deadline_timer_service.hpp:96 (libopflex.so.0+0x1630e3) #2 boost::asio::basic_deadline_timer<boost::posix_time::ptime, boost::asio::time_traits<boost::posix_time::ptime>, boost::asio::deadline_timer_service<boost::posix_time::ptime, boost::asio::time_traits<bo ost::posix_time::ptime> > >::cancel() /usr/include/boost/asio/basic_deadline_timer.hpp:216 (libopflex.so.0+0x1630e3) #3 opflex::engine::internal::GbpOpflexServerImpl::stop() /home/noiro/work/opflex/libopflex/engine/GbpOpflexServer.cpp:129 (libopflex.so.0+0x1630e3) #4 opflex::test::GbpOpflexServer::stop() /home/noiro/work/opflex/libopflex/engine/GbpOpflexServer.cpp:53 (libopflex.so.0+0x1631f2) #5 main server/opflex_server.cpp:297 (opflex_server+0x22fc3) Previous write of size 1 at 0x7b1000034990 by thread T12: #0 boost::asio::detail::deadline_timer_service<boost::asio::time_traits<boost::posix_time::ptime> >::cancel(boost::asio::detail::deadline_timer_service<boost::asio::time_traits<boost::posix_time::ptime> > ::implementation_type&, boost::system::error_code&) /usr/include/boost/asio/detail/deadline_timer_service.hpp:109 (libopflex.so.0+0x163a50) #1 boost::asio::detail::deadline_timer_service<boost::asio::time_traits<boost::posix_time::ptime> >::cancel(boost::asio::detail::deadline_timer_service<boost::asio::time_traits<boost::posix_time::ptime> > ::implementation_type&, boost::system::error_code&) /usr/include/boost/asio/detail/deadline_timer_service.hpp:98 (libopflex.so.0+0x163a50) #2 boost::asio::detail::deadline_timer_service<boost::asio::time_traits<boost::posix_time::ptime> >::expires_at(boost::asio::detail::deadline_timer_service<boost::asio::time_traits<boost::posix_time::ptim e> >::implementation_type&, boost::posix_time::ptime const&, boost::system::error_code&) /usr/include/boost/asio/detail/deadline_timer_service.hpp:144 (libopflex.so.0+0x163a50) #3 boost::asio::deadline_timer_service<boost::posix_time::ptime, boost::asio::time_traits<boost::posix_time::ptime> >::expires_at(boost::asio::detail::deadline_timer_service<boost::asio::time_traits<boost ::posix_time::ptime> >::implementation_type&, boost::posix_time::ptime const&, boost::system::error_code&) /usr/include/boost/asio/deadline_timer_service.hpp:116 (libopflex.so.0+0x163a50) #4 boost::asio::basic_deadline_timer<boost::posix_time::ptime, boost::asio::time_traits<boost::posix_time::ptime>, boost::asio::deadline_timer_service<boost::posix_time::ptime, boost::asio::time_traits<bo ost::posix_time::ptime> > >::expires_at(boost::posix_time::ptime const&) /usr/include/boost/asio/basic_deadline_timer.hpp:344 (libopflex.so.0+0x163a50) #5 opflex::engine::internal::GbpOpflexServerImpl::on_timer(boost::system::error_code const&) /home/noiro/work/opflex/libopflex/engine/GbpOpflexServer.cpp:149 (libopflex.so.0+0x163a50) #6 operator() /home/noiro/work/opflex/libopflex/engine/GbpOpflexServer.cpp:119 (libopflex.so.0+0x163f24) #7 operator() /usr/include/boost/asio/detail/bind_handler.hpp:47 (libopflex.so.0+0x163f24) #8 asio_handler_invoke<boost::asio::detail::binder1<opflex::engine::internal::GbpOpflexServerImpl::start()::<lambda(const boost::system::error_code&)>, boost::system::error_code> > /usr/include/boost/asio /handler_invoke_hook.hpp:69 (libopflex.so.0+0x163f24) #9 invoke<boost::asio::detail::binder1<opflex::engine::internal::GbpOpflexServerImpl::start()::<lambda(const boost::system::error_code&)>, boost::system::error_code>, opflex::engine::internal::GbpOpflexSe rverImpl::start()::<lambda(const boost::system::error_code&)> > /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:37 (libopflex.so.0+0x163f24) #10 do_complete /usr/include/boost/asio/detail/wait_handler.hpp:70 (libopflex.so.0+0x163f24) #11 boost::asio::detail::task_io_service_operation::complete(boost::asio::detail::task_io_service&, boost::system::error_code const&, unsigned long) /usr/include/boost/asio/detail/task_io_service_operatio n.hpp:38 (libopflex.so.0+0x16b3e2) #12 boost::asio::detail::task_io_service::do_run_one(boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>&, boost::asio::detail::task_io_service_thread_info&, boost::system::error_code const &) /usr/include/boost/asio/detail/impl/task_io_service.ipp:372 (libopflex.so.0+0x16b3e2) #13 boost::asio::detail::task_io_service::run(boost::system::error_code&) /usr/include/boost/asio/detail/impl/task_io_service.ipp:149 (libopflex.so.0+0x16b3e2) #14 boost::asio::io_service::run() /usr/include/boost/asio/impl/io_service.ipp:59 (libopflex.so.0+0x1625ff) #15 operator() /home/noiro/work/opflex/libopflex/engine/GbpOpflexServer.cpp:121 (libopflex.so.0+0x1625ff) #16 __invoke_impl<void, opflex::engine::internal::GbpOpflexServerImpl::start()::<lambda()> > /usr/include/c++/9/bits/invoke.h:60 (libopflex.so.0+0x1625ff) #17 __invoke<opflex::engine::internal::GbpOpflexServerImpl::start()::<lambda()> > /usr/include/c++/9/bits/invoke.h:95 (libopflex.so.0+0x1625ff) #18 _M_invoke<0> /usr/include/c++/9/thread:244 (libopflex.so.0+0x1625ff) #19 operator() /usr/include/c++/9/thread:251 (libopflex.so.0+0x1625ff) #20 _M_run /usr/include/c++/9/thread:195 (libopflex.so.0+0x1625ff) #21 <null> <null> (libstdc++.so.6+0xd086f) Signed-off-by: Gautam Venkataramanan <gautam.chennai@gmail.com>
This was referenced Aug 7, 2020
gautvenk
added a commit
that referenced
this pull request
Dec 9, 2020
Pattern1: WARNING: ThreadSanitizer: data race (pid=23522) Write of size 8 at 0x7fff79e44c50 by thread T13 (mutexes: write M1028): #0 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #1 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #2 std::__detail::_Map_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent: #3 std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::shared_ptr<opflexagent::Endpoint const>, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<cha #4 opflexagent::EndpointManager::updateEndpointLocal(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::optional<std::set<opflex::modb::URI, std::less<opflex::modb::URI>, std::allocator<opfl #5 opflexagent::EndpointManager::updateEndpoint(opflexagent::Endpoint const&) lib/EndpointManager.cpp:311 (libopflex_agent.so.0+0x1bf259) #6 opflexagent::EndpointSource::updateEndpoint(opflexagent::Endpoint const&) lib/EndpointSource.cpp:23 (libopflex_agent.so.0+0x1fae1a) #7 opflexagent::FSEndpointSource::updated(boost::filesystem::path const&) lib/FSEndpointSource.cpp:521 (libopflex_agent.so.0+0x204af0) #8 opflexagent::FSWatcher::operator()() lib/FSWatcher.cpp:215 (libopflex_agent.so.0+0x19e743) Previous read of size 8 at 0x7fff79e44c50 by thread T8 (mutexes: write M1365): #0 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #1 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #2 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #3 std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::shared_ptr<opflexagent::Endpoint const>, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<cha #4 opflexagent::IntFlowManager::updateSvcTgtStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&) ovs/IntFlowManager.cpp:3774 (libopflex_agent_renderer_openvswitch #5 opflexagent::IntFlowManager::updateSvcTgtStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&) ovs/IntFlowManager.cpp:3821 (libopflex_agent_renderer_openvswitch #6 opflexagent::IntFlowManager::handleUpdateSvcStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ovs/IntFlowManager.cpp:3027 (libopflex_agent_renderer_openvswitch.so+0x142442) #7 operator() ovs/IntFlowManager.cpp:3080 (libopflex_agent_renderer_openvswitch.so+0x142852) Pattern2: WARNING: ThreadSanitizer: data race (pid=23522) Write of size 8 at 0x7b1000044688 by thread T13 (mutexes: write M1028): #0 operator delete(void*) <null> (libtsan.so.0+0x7747e) #1 __gnu_cxx::new_allocator<std::__detail::_Hash_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint const> >, true> >::deallocate(std::__detail:: #2 std::allocator_traits<std::allocator<std::__detail::_Hash_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint const> >, true> > >::deallocate(s #3 std::__detail::_Hashtable_alloc<std::allocator<std::__detail::_Hash_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint const> >, true> > >::_M #4 std::__detail::_Hashtable_alloc<std::allocator<std::__detail::_Hash_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint const> >, true> > >::_M #5 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #6 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #7 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #8 std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::shared_ptr<opflexagent::Endpoint const>, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<cha #9 opflexagent::EndpointManager::removeEndpoint(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) lib/EndpointManager.cpp:353 (libopflex_agent.so.0+0x1c3972) #10 opflexagent::EndpointSource::removeEndpoint(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) lib/EndpointSource.cpp:27 (libopflex_agent.so.0+0x1fae5a) #11 opflexagent::FSEndpointSource::deleted(boost::filesystem::path const&) lib/FSEndpointSource.cpp:544 (libopflex_agent.so.0+0x1fb49b) Previous read of size 8 at 0x7b1000044688 by thread T8 (mutexes: write M1365): #0 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::data() const /usr/include/c++/9/bits/basic_string.h:2313 (libopflex_agent_renderer_openvswitch.so+0x169c83) #1 __gnu_cxx::__enable_if<std::__is_char<char>::__value, bool>::__type std::operator==<char>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<cha #2 std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::operator()(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, st #3 std::__detail::_Equal_helper<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexag #4 std::__detail::_Hashtable_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflex #5 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #6 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #7 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #8 std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::shared_ptr<opflexagent::Endpoint const>, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<cha #9 opflexagent::IntFlowManager::updateSvcNodeStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&) ovs/IntFlowManager.cpp:3520 (libopflex_agent_renderer_openvswitc #10 opflexagent::IntFlowManager::updateSvcNodeStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&) ovs/IntFlowManager.cpp:3567 (libopflex_agent_renderer_openvswit #11 opflexagent::IntFlowManager::handleUpdateSvcStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ovs/IntFlowManager.cpp:3028 (libopflex_agent_renderer_openvswitch.so+0x142453) #12 operator() ovs/IntFlowManager.cpp:3080 (libopflex_agent_renderer_openvswitch.so+0x142852) Pattern3: #0 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #1 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint [2020-Dec-08 19:51:10.927044] [error] [lib/FSEndpointSource.cpp:527:updated] Could not load endpoint from: "/usr/local/var/lib/opflex-agent-ovs/endpoints/h1.ep": /usr/local/var/lib/opflex-agent-ovs/endpoints/h1.ep: cannot open file #2 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #3 std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::shared_ptr<opflexagent::Endpoint const>, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<cha #4 opflexagent::IntFlowManager::updateSvcTgtStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&) ovs/IntFlowManager.cpp:3774 (libopflex_agent_renderer_openvswitch #5 opflexagent::IntFlowManager::updateSvcTgtStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&) ovs/IntFlowManager.cpp:3821 (libopflex_agent_renderer_openvswitch #6 opflexagent::IntFlowManager::handleUpdateSvcStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ovs/IntFlowManager.cpp:3027 (libopflex_agent_renderer_openvswitch.so+0x142442) #7 operator() ovs/IntFlowManager.cpp:3080 (libopflex_agent_renderer_openvswitch.so+0x142852) Previous write of size 8 at 0x7b0c0000fdf0 by thread T12: [failed to restore the stack] Mutex M1365 (0x7ba400000920) created at: [2020-Dec-08 19:51:10.927490] [debug] [ovs/TableState.cpp:489:apply] DEL|cookie=0x0, duration=0s, table=5, n_packets=0, n_bytes=0, idle_age=0, priority=20,icmp6,reg4=0x1,reg6=0x1,dl_dst=01:00:00:00:00:00/01:00:00:00:00:00,icmp_type=135,ic #0 pthread_mutex_lock <null> (libtsan.so.0+0x41d5b) #1 __gthread_mutex_lock /usr/include/x86_64-linux-gnu/c++/9/bits/gthr-default.h:749 (libopflex_agent_renderer_openvswitch.so+0x141ae4) #2 std::mutex::lock() /usr/include/c++/9/bits/std_mutex.h:100 (libopflex_agent_renderer_openvswitch.so+0x141ae4) #3 std::lock_guard<std::mutex>::lock_guard(std::mutex&) /usr/include/c++/9/bits/std_mutex.h:159 (libopflex_agent_renderer_openvswitch.so+0x141ae4) #4 opflexagent::IntFlowManager::handleUpdateSvcStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ovs/IntFlowManager.cpp:3015 (libopflex_agent_renderer_openvswitch.so+0x141ae4) #5 operator() ovs/IntFlowManager.cpp:3080 (libopflex_agent_renderer_openvswitch.so+0x142852) Pattern4: WARNING: ThreadSanitizer: heap-use-after-free (pid=10699) Read of size 8 at 0x7b6400021e88 by thread T8 (mutexes: write M1379, write M182): #0 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std: #1 std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::hash<std::__cxx11::basic_string<char, std::ch #2 opflexagent::AgentPrometheusManager::createLabelMapFromSvcTargetAttr(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<ch #3 opflexagent::AgentPrometheusManager::createDynamicGaugeSvcTarget(opflexagent::AgentPrometheusManager::SVC_TARGET_METRICS, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_s #4 opflexagent::AgentPrometheusManager::addNUpdateSvcTargetCounter(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > #5 opflexagent::IntFlowManager::updateSvcTgtStatsCounters(unsigned long const&, bool const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long const&, unsigned long const&, std::unor #6 operator() ovs/IntFlowManager.cpp:3703 (libopflex_agent_renderer_openvswitch.so+0x14127f) #7 opflexagent::IntFlowManager::updateSvcTgtStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&) ovs/IntFlowManager.cpp:3776 (libopflex_agent_renderer_openvswitch #8 opflexagent::IntFlowManager::updateSvcTgtStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&) ovs/IntFlowManager.cpp:3821 (libopflex_agent_renderer_openvswitch #9 opflexagent::IntFlowManager::handleUpdateSvcStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ovs/IntFlowManager.cpp:3027 (libopflex_agent_renderer_openvswitch.so+0x142a72) #10 operator() ovs/IntFlowManager.cpp:3080 (libopflex_agent_renderer_openvswitch.so+0x142e82) Previous write of size 8 at 0x7b6400021e88 by thread T12: #0 operator delete(void*) <null> (libtsan.so.0+0x7747e) #1 std::_Sp_counted_ptr_inplace<opflexagent::Endpoint const, std::allocator<opflexagent::Endpoint>, (__gnu_cxx::_Lock_policy)2>::_M_destroy() /usr/include/c++/9/ext/new_allocator.h:128 (libopflex_agent.so.0+0x1c2f75) #2 std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() /usr/include/c++/9/bits/shared_ptr_base.h:171 (libopflex_agent_renderer_openvswitch.so+0x1904e8) #3 std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() /usr/include/c++/9/bits/shared_ptr_base.h:148 (libopflex_agent_renderer_openvswitch.so+0x1904e8) #4 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() /usr/include/c++/9/bits/shared_ptr_base.h:730 (libopflex_agent_renderer_openvswitch.so+0x1904e8) #5 std::__shared_ptr<opflexagent::Endpoint const, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() /usr/include/c++/9/bits/shared_ptr_base.h:1169 (libopflex_agent_renderer_openvswitch.so+0x1904e8) #6 std::shared_ptr<opflexagent::Endpoint const>::~shared_ptr() /usr/include/c++/9/bits/shared_ptr.h:103 (libopflex_agent_renderer_openvswitch.so+0x1904e8) #7 opflexagent::AccessFlowManager::handleEndpointUpdate(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ovs/AccessFlowManager.cpp:411 (libopflex_agent_renderer_openvswitch.so+0x1904e8) Signed-off-by: Gautam Venkataramanan <gautam.chennai@gmail.com>
tomflynn
pushed a commit
that referenced
this pull request
Dec 10, 2020
Pattern1: WARNING: ThreadSanitizer: data race (pid=23522) Write of size 8 at 0x7fff79e44c50 by thread T13 (mutexes: write M1028): #0 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #1 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #2 std::__detail::_Map_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent: #3 std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::shared_ptr<opflexagent::Endpoint const>, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<cha #4 opflexagent::EndpointManager::updateEndpointLocal(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::optional<std::set<opflex::modb::URI, std::less<opflex::modb::URI>, std::allocator<opfl #5 opflexagent::EndpointManager::updateEndpoint(opflexagent::Endpoint const&) lib/EndpointManager.cpp:311 (libopflex_agent.so.0+0x1bf259) #6 opflexagent::EndpointSource::updateEndpoint(opflexagent::Endpoint const&) lib/EndpointSource.cpp:23 (libopflex_agent.so.0+0x1fae1a) #7 opflexagent::FSEndpointSource::updated(boost::filesystem::path const&) lib/FSEndpointSource.cpp:521 (libopflex_agent.so.0+0x204af0) #8 opflexagent::FSWatcher::operator()() lib/FSWatcher.cpp:215 (libopflex_agent.so.0+0x19e743) Previous read of size 8 at 0x7fff79e44c50 by thread T8 (mutexes: write M1365): #0 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #1 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #2 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #3 std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::shared_ptr<opflexagent::Endpoint const>, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<cha #4 opflexagent::IntFlowManager::updateSvcTgtStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&) ovs/IntFlowManager.cpp:3774 (libopflex_agent_renderer_openvswitch #5 opflexagent::IntFlowManager::updateSvcTgtStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&) ovs/IntFlowManager.cpp:3821 (libopflex_agent_renderer_openvswitch #6 opflexagent::IntFlowManager::handleUpdateSvcStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ovs/IntFlowManager.cpp:3027 (libopflex_agent_renderer_openvswitch.so+0x142442) #7 operator() ovs/IntFlowManager.cpp:3080 (libopflex_agent_renderer_openvswitch.so+0x142852) Pattern2: WARNING: ThreadSanitizer: data race (pid=23522) Write of size 8 at 0x7b1000044688 by thread T13 (mutexes: write M1028): #0 operator delete(void*) <null> (libtsan.so.0+0x7747e) #1 __gnu_cxx::new_allocator<std::__detail::_Hash_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint const> >, true> >::deallocate(std::__detail:: #2 std::allocator_traits<std::allocator<std::__detail::_Hash_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint const> >, true> > >::deallocate(s #3 std::__detail::_Hashtable_alloc<std::allocator<std::__detail::_Hash_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint const> >, true> > >::_M #4 std::__detail::_Hashtable_alloc<std::allocator<std::__detail::_Hash_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint const> >, true> > >::_M #5 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #6 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #7 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #8 std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::shared_ptr<opflexagent::Endpoint const>, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<cha #9 opflexagent::EndpointManager::removeEndpoint(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) lib/EndpointManager.cpp:353 (libopflex_agent.so.0+0x1c3972) #10 opflexagent::EndpointSource::removeEndpoint(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) lib/EndpointSource.cpp:27 (libopflex_agent.so.0+0x1fae5a) #11 opflexagent::FSEndpointSource::deleted(boost::filesystem::path const&) lib/FSEndpointSource.cpp:544 (libopflex_agent.so.0+0x1fb49b) Previous read of size 8 at 0x7b1000044688 by thread T8 (mutexes: write M1365): #0 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::data() const /usr/include/c++/9/bits/basic_string.h:2313 (libopflex_agent_renderer_openvswitch.so+0x169c83) #1 __gnu_cxx::__enable_if<std::__is_char<char>::__value, bool>::__type std::operator==<char>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<cha #2 std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::operator()(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, st #3 std::__detail::_Equal_helper<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexag #4 std::__detail::_Hashtable_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflex #5 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #6 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #7 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #8 std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::shared_ptr<opflexagent::Endpoint const>, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<cha #9 opflexagent::IntFlowManager::updateSvcNodeStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&) ovs/IntFlowManager.cpp:3520 (libopflex_agent_renderer_openvswitc #10 opflexagent::IntFlowManager::updateSvcNodeStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&) ovs/IntFlowManager.cpp:3567 (libopflex_agent_renderer_openvswit #11 opflexagent::IntFlowManager::handleUpdateSvcStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ovs/IntFlowManager.cpp:3028 (libopflex_agent_renderer_openvswitch.so+0x142453) #12 operator() ovs/IntFlowManager.cpp:3080 (libopflex_agent_renderer_openvswitch.so+0x142852) Pattern3: #0 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #1 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint [2020-Dec-08 19:51:10.927044] [error] [lib/FSEndpointSource.cpp:527:updated] Could not load endpoint from: "/usr/local/var/lib/opflex-agent-ovs/endpoints/h1.ep": /usr/local/var/lib/opflex-agent-ovs/endpoints/h1.ep: cannot open file #2 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint #3 std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::shared_ptr<opflexagent::Endpoint const>, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<cha #4 opflexagent::IntFlowManager::updateSvcTgtStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&) ovs/IntFlowManager.cpp:3774 (libopflex_agent_renderer_openvswitch #5 opflexagent::IntFlowManager::updateSvcTgtStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&) ovs/IntFlowManager.cpp:3821 (libopflex_agent_renderer_openvswitch #6 opflexagent::IntFlowManager::handleUpdateSvcStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ovs/IntFlowManager.cpp:3027 (libopflex_agent_renderer_openvswitch.so+0x142442) #7 operator() ovs/IntFlowManager.cpp:3080 (libopflex_agent_renderer_openvswitch.so+0x142852) Previous write of size 8 at 0x7b0c0000fdf0 by thread T12: [failed to restore the stack] Mutex M1365 (0x7ba400000920) created at: [2020-Dec-08 19:51:10.927490] [debug] [ovs/TableState.cpp:489:apply] DEL|cookie=0x0, duration=0s, table=5, n_packets=0, n_bytes=0, idle_age=0, priority=20,icmp6,reg4=0x1,reg6=0x1,dl_dst=01:00:00:00:00:00/01:00:00:00:00:00,icmp_type=135,ic #0 pthread_mutex_lock <null> (libtsan.so.0+0x41d5b) #1 __gthread_mutex_lock /usr/include/x86_64-linux-gnu/c++/9/bits/gthr-default.h:749 (libopflex_agent_renderer_openvswitch.so+0x141ae4) #2 std::mutex::lock() /usr/include/c++/9/bits/std_mutex.h:100 (libopflex_agent_renderer_openvswitch.so+0x141ae4) #3 std::lock_guard<std::mutex>::lock_guard(std::mutex&) /usr/include/c++/9/bits/std_mutex.h:159 (libopflex_agent_renderer_openvswitch.so+0x141ae4) #4 opflexagent::IntFlowManager::handleUpdateSvcStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ovs/IntFlowManager.cpp:3015 (libopflex_agent_renderer_openvswitch.so+0x141ae4) #5 operator() ovs/IntFlowManager.cpp:3080 (libopflex_agent_renderer_openvswitch.so+0x142852) Pattern4: WARNING: ThreadSanitizer: heap-use-after-free (pid=10699) Read of size 8 at 0x7b6400021e88 by thread T8 (mutexes: write M1379, write M182): #0 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std: #1 std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::hash<std::__cxx11::basic_string<char, std::ch #2 opflexagent::AgentPrometheusManager::createLabelMapFromSvcTargetAttr(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<ch #3 opflexagent::AgentPrometheusManager::createDynamicGaugeSvcTarget(opflexagent::AgentPrometheusManager::SVC_TARGET_METRICS, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_s #4 opflexagent::AgentPrometheusManager::addNUpdateSvcTargetCounter(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > #5 opflexagent::IntFlowManager::updateSvcTgtStatsCounters(unsigned long const&, bool const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long const&, unsigned long const&, std::unor #6 operator() ovs/IntFlowManager.cpp:3703 (libopflex_agent_renderer_openvswitch.so+0x14127f) #7 opflexagent::IntFlowManager::updateSvcTgtStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&) ovs/IntFlowManager.cpp:3776 (libopflex_agent_renderer_openvswitch #8 opflexagent::IntFlowManager::updateSvcTgtStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&) ovs/IntFlowManager.cpp:3821 (libopflex_agent_renderer_openvswitch #9 opflexagent::IntFlowManager::handleUpdateSvcStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ovs/IntFlowManager.cpp:3027 (libopflex_agent_renderer_openvswitch.so+0x142a72) #10 operator() ovs/IntFlowManager.cpp:3080 (libopflex_agent_renderer_openvswitch.so+0x142e82) Previous write of size 8 at 0x7b6400021e88 by thread T12: #0 operator delete(void*) <null> (libtsan.so.0+0x7747e) #1 std::_Sp_counted_ptr_inplace<opflexagent::Endpoint const, std::allocator<opflexagent::Endpoint>, (__gnu_cxx::_Lock_policy)2>::_M_destroy() /usr/include/c++/9/ext/new_allocator.h:128 (libopflex_agent.so.0+0x1c2f75) #2 std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() /usr/include/c++/9/bits/shared_ptr_base.h:171 (libopflex_agent_renderer_openvswitch.so+0x1904e8) #3 std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() /usr/include/c++/9/bits/shared_ptr_base.h:148 (libopflex_agent_renderer_openvswitch.so+0x1904e8) #4 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() /usr/include/c++/9/bits/shared_ptr_base.h:730 (libopflex_agent_renderer_openvswitch.so+0x1904e8) #5 std::__shared_ptr<opflexagent::Endpoint const, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() /usr/include/c++/9/bits/shared_ptr_base.h:1169 (libopflex_agent_renderer_openvswitch.so+0x1904e8) #6 std::shared_ptr<opflexagent::Endpoint const>::~shared_ptr() /usr/include/c++/9/bits/shared_ptr.h:103 (libopflex_agent_renderer_openvswitch.so+0x1904e8) #7 opflexagent::AccessFlowManager::handleEndpointUpdate(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ovs/AccessFlowManager.cpp:411 (libopflex_agent_renderer_openvswitch.so+0x1904e8) Signed-off-by: Gautam Venkataramanan <gautam.chennai@gmail.com>
ansao-aci
pushed a commit
to ansao-aci/opflex
that referenced
this pull request
Feb 10, 2021
…onetworks#305) Pattern1: WARNING: ThreadSanitizer: data race (pid=23522) Write of size 8 at 0x7fff79e44c50 by thread T13 (mutexes: write M1028): #0 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint noironetworks#1 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint noironetworks#2 std::__detail::_Map_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent: noironetworks#3 std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::shared_ptr<opflexagent::Endpoint const>, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<cha noironetworks#4 opflexagent::EndpointManager::updateEndpointLocal(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::optional<std::set<opflex::modb::URI, std::less<opflex::modb::URI>, std::allocator<opfl noironetworks#5 opflexagent::EndpointManager::updateEndpoint(opflexagent::Endpoint const&) lib/EndpointManager.cpp:311 (libopflex_agent.so.0+0x1bf259) noironetworks#6 opflexagent::EndpointSource::updateEndpoint(opflexagent::Endpoint const&) lib/EndpointSource.cpp:23 (libopflex_agent.so.0+0x1fae1a) noironetworks#7 opflexagent::FSEndpointSource::updated(boost::filesystem::path const&) lib/FSEndpointSource.cpp:521 (libopflex_agent.so.0+0x204af0) noironetworks#8 opflexagent::FSWatcher::operator()() lib/FSWatcher.cpp:215 (libopflex_agent.so.0+0x19e743) Previous read of size 8 at 0x7fff79e44c50 by thread T8 (mutexes: write M1365): #0 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint noironetworks#1 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint noironetworks#2 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint noironetworks#3 std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::shared_ptr<opflexagent::Endpoint const>, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<cha noironetworks#4 opflexagent::IntFlowManager::updateSvcTgtStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&) ovs/IntFlowManager.cpp:3774 (libopflex_agent_renderer_openvswitch noironetworks#5 opflexagent::IntFlowManager::updateSvcTgtStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&) ovs/IntFlowManager.cpp:3821 (libopflex_agent_renderer_openvswitch noironetworks#6 opflexagent::IntFlowManager::handleUpdateSvcStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ovs/IntFlowManager.cpp:3027 (libopflex_agent_renderer_openvswitch.so+0x142442) noironetworks#7 operator() ovs/IntFlowManager.cpp:3080 (libopflex_agent_renderer_openvswitch.so+0x142852) Pattern2: WARNING: ThreadSanitizer: data race (pid=23522) Write of size 8 at 0x7b1000044688 by thread T13 (mutexes: write M1028): #0 operator delete(void*) <null> (libtsan.so.0+0x7747e) noironetworks#1 __gnu_cxx::new_allocator<std::__detail::_Hash_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint const> >, true> >::deallocate(std::__detail:: noironetworks#2 std::allocator_traits<std::allocator<std::__detail::_Hash_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint const> >, true> > >::deallocate(s noironetworks#3 std::__detail::_Hashtable_alloc<std::allocator<std::__detail::_Hash_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint const> >, true> > >::_M noironetworks#4 std::__detail::_Hashtable_alloc<std::allocator<std::__detail::_Hash_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint const> >, true> > >::_M noironetworks#5 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint noironetworks#6 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint noironetworks#7 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint noironetworks#8 std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::shared_ptr<opflexagent::Endpoint const>, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<cha noironetworks#9 opflexagent::EndpointManager::removeEndpoint(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) lib/EndpointManager.cpp:353 (libopflex_agent.so.0+0x1c3972) noironetworks#10 opflexagent::EndpointSource::removeEndpoint(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) lib/EndpointSource.cpp:27 (libopflex_agent.so.0+0x1fae5a) noironetworks#11 opflexagent::FSEndpointSource::deleted(boost::filesystem::path const&) lib/FSEndpointSource.cpp:544 (libopflex_agent.so.0+0x1fb49b) Previous read of size 8 at 0x7b1000044688 by thread T8 (mutexes: write M1365): #0 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::data() const /usr/include/c++/9/bits/basic_string.h:2313 (libopflex_agent_renderer_openvswitch.so+0x169c83) noironetworks#1 __gnu_cxx::__enable_if<std::__is_char<char>::__value, bool>::__type std::operator==<char>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<cha noironetworks#2 std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::operator()(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, st noironetworks#3 std::__detail::_Equal_helper<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexag noironetworks#4 std::__detail::_Hashtable_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflex noironetworks#5 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint noironetworks#6 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint noironetworks#7 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint noironetworks#8 std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::shared_ptr<opflexagent::Endpoint const>, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<cha noironetworks#9 opflexagent::IntFlowManager::updateSvcNodeStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&) ovs/IntFlowManager.cpp:3520 (libopflex_agent_renderer_openvswitc noironetworks#10 opflexagent::IntFlowManager::updateSvcNodeStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&) ovs/IntFlowManager.cpp:3567 (libopflex_agent_renderer_openvswit noironetworks#11 opflexagent::IntFlowManager::handleUpdateSvcStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ovs/IntFlowManager.cpp:3028 (libopflex_agent_renderer_openvswitch.so+0x142453) noironetworks#12 operator() ovs/IntFlowManager.cpp:3080 (libopflex_agent_renderer_openvswitch.so+0x142852) Pattern3: #0 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint noironetworks#1 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint [2020-Dec-08 19:51:10.927044] [error] [lib/FSEndpointSource.cpp:527:updated] Could not load endpoint from: "/usr/local/var/lib/opflex-agent-ovs/endpoints/h1.ep": /usr/local/var/lib/opflex-agent-ovs/endpoints/h1.ep: cannot open file noironetworks#2 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<opflexagent::Endpoint noironetworks#3 std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::shared_ptr<opflexagent::Endpoint const>, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<cha noironetworks#4 opflexagent::IntFlowManager::updateSvcTgtStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&) ovs/IntFlowManager.cpp:3774 (libopflex_agent_renderer_openvswitch noironetworks#5 opflexagent::IntFlowManager::updateSvcTgtStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&) ovs/IntFlowManager.cpp:3821 (libopflex_agent_renderer_openvswitch noironetworks#6 opflexagent::IntFlowManager::handleUpdateSvcStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ovs/IntFlowManager.cpp:3027 (libopflex_agent_renderer_openvswitch.so+0x142442) noironetworks#7 operator() ovs/IntFlowManager.cpp:3080 (libopflex_agent_renderer_openvswitch.so+0x142852) Previous write of size 8 at 0x7b0c0000fdf0 by thread T12: [failed to restore the stack] Mutex M1365 (0x7ba400000920) created at: [2020-Dec-08 19:51:10.927490] [debug] [ovs/TableState.cpp:489:apply] DEL|cookie=0x0, duration=0s, table=5, n_packets=0, n_bytes=0, idle_age=0, priority=20,icmp6,reg4=0x1,reg6=0x1,dl_dst=01:00:00:00:00:00/01:00:00:00:00:00,icmp_type=135,ic #0 pthread_mutex_lock <null> (libtsan.so.0+0x41d5b) noironetworks#1 __gthread_mutex_lock /usr/include/x86_64-linux-gnu/c++/9/bits/gthr-default.h:749 (libopflex_agent_renderer_openvswitch.so+0x141ae4) noironetworks#2 std::mutex::lock() /usr/include/c++/9/bits/std_mutex.h:100 (libopflex_agent_renderer_openvswitch.so+0x141ae4) noironetworks#3 std::lock_guard<std::mutex>::lock_guard(std::mutex&) /usr/include/c++/9/bits/std_mutex.h:159 (libopflex_agent_renderer_openvswitch.so+0x141ae4) noironetworks#4 opflexagent::IntFlowManager::handleUpdateSvcStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ovs/IntFlowManager.cpp:3015 (libopflex_agent_renderer_openvswitch.so+0x141ae4) noironetworks#5 operator() ovs/IntFlowManager.cpp:3080 (libopflex_agent_renderer_openvswitch.so+0x142852) Pattern4: WARNING: ThreadSanitizer: heap-use-after-free (pid=10699) Read of size 8 at 0x7b6400021e88 by thread T8 (mutexes: write M1379, write M182): #0 std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std: noironetworks#1 std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::hash<std::__cxx11::basic_string<char, std::ch noironetworks#2 opflexagent::AgentPrometheusManager::createLabelMapFromSvcTargetAttr(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<ch noironetworks#3 opflexagent::AgentPrometheusManager::createDynamicGaugeSvcTarget(opflexagent::AgentPrometheusManager::SVC_TARGET_METRICS, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_s noironetworks#4 opflexagent::AgentPrometheusManager::addNUpdateSvcTargetCounter(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > noironetworks#5 opflexagent::IntFlowManager::updateSvcTgtStatsCounters(unsigned long const&, bool const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long const&, unsigned long const&, std::unor noironetworks#6 operator() ovs/IntFlowManager.cpp:3703 (libopflex_agent_renderer_openvswitch.so+0x14127f) noironetworks#7 opflexagent::IntFlowManager::updateSvcTgtStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&) ovs/IntFlowManager.cpp:3776 (libopflex_agent_renderer_openvswitch noironetworks#8 opflexagent::IntFlowManager::updateSvcTgtStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&, bool const&) ovs/IntFlowManager.cpp:3821 (libopflex_agent_renderer_openvswitch noironetworks#9 opflexagent::IntFlowManager::handleUpdateSvcStatsFlows(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ovs/IntFlowManager.cpp:3027 (libopflex_agent_renderer_openvswitch.so+0x142a72) noironetworks#10 operator() ovs/IntFlowManager.cpp:3080 (libopflex_agent_renderer_openvswitch.so+0x142e82) Previous write of size 8 at 0x7b6400021e88 by thread T12: #0 operator delete(void*) <null> (libtsan.so.0+0x7747e) noironetworks#1 std::_Sp_counted_ptr_inplace<opflexagent::Endpoint const, std::allocator<opflexagent::Endpoint>, (__gnu_cxx::_Lock_policy)2>::_M_destroy() /usr/include/c++/9/ext/new_allocator.h:128 (libopflex_agent.so.0+0x1c2f75) noironetworks#2 std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() /usr/include/c++/9/bits/shared_ptr_base.h:171 (libopflex_agent_renderer_openvswitch.so+0x1904e8) noironetworks#3 std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() /usr/include/c++/9/bits/shared_ptr_base.h:148 (libopflex_agent_renderer_openvswitch.so+0x1904e8) noironetworks#4 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() /usr/include/c++/9/bits/shared_ptr_base.h:730 (libopflex_agent_renderer_openvswitch.so+0x1904e8) noironetworks#5 std::__shared_ptr<opflexagent::Endpoint const, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() /usr/include/c++/9/bits/shared_ptr_base.h:1169 (libopflex_agent_renderer_openvswitch.so+0x1904e8) noironetworks#6 std::shared_ptr<opflexagent::Endpoint const>::~shared_ptr() /usr/include/c++/9/bits/shared_ptr.h:103 (libopflex_agent_renderer_openvswitch.so+0x1904e8) noironetworks#7 opflexagent::AccessFlowManager::handleEndpointUpdate(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ovs/AccessFlowManager.cpp:411 (libopflex_agent_renderer_openvswitch.so+0x1904e8) Signed-off-by: Gautam Venkataramanan <gautam.chennai@gmail.com>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
No description provided.