[SERVER-38757] Using abseil hash maps for stdx::unordered_map breaks GDB pretty printing Created: 21/Dec/18  Updated: 29/Oct/23  Resolved: 04/Jan/19

Status: Closed
Project: Core Server
Component/s: None
Affects Version/s: None
Fix Version/s: 4.1.7

Type: Bug Priority: Major - P3
Reporter: William Schultz (Inactive) Assignee: Mark Benvenuto
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Depends
is depended on by SERVER-38823 Re-enable dumping of SessionCatalog i... Closed
Related
related to SERVER-38045 Dump session catalog using GDB scripting Closed
related to SERVER-38249 stdx::unordered_map should be impleme... Closed
related to SERVER-39013 Add gdb pretty printers for absl::fla... Closed
Backwards Compatibility: Fully Compatible
Operating System: ALL
Sprint: Security 2019-01-28
Participants:
Linked BF Score: 0

 Description   

The change to use the abseil hash map implementation for stdx::unordered_map in SERVER-38249 breaks pretty printing of hash maps in GDB when using the standard C++ pretty printer library. Trying to print a simple hash map in GDB now appears like this:

myMap = {
  <absl::container_internal::raw_hash_map<absl::container_internal::NodeHashMapPolicy<int, int>, absl::hash_internal::Hash<int>, std::equal_to<int>, std::allocator<std::pair<int const, int> > >> = {
    <absl::container_internal::raw_hash_set<absl::container_internal::NodeHashMapPolicy<int, int>, absl::hash_internal::Hash<int>, std::equal_to<int>, std::allocator<std::pair<int const, int> > >> = {
      static kMaxLoadFactorNumerator = 14,
      static kMaxLoadFactorDenominator = 16,
      static kMaxLoadFactor = 0.875,
      ctrl_ = 0x7ffff0eabe20 "\200\200\200\006\200\200\200\200\200\200\200\200\200-\200\377\200\200\200\006\200\200\200\200\200\200\200\200\200-\200", '\253' <repeats 25 times>, "\340\371\352\360\377\177"
,
      slots_ = 0x7ffff0eabe40,
      size_ = 2,
      capacity_ = 15,
      settings_ = {
        <absl::container_internal::internal_compressed_tuple::CompressedTupleImpl<absl::container_internal::CompressedTuple<unsigned long, absl::hash_internal::Hash<int>, std::equal_to<int>, std::allocato
r<std::pair<int const, int> > >, absl::integer_sequence<unsigned long, 0, 1, 2, 3> >> = {
          <absl::container_internal::internal_compressed_tuple::Storage<absl::container_internal::CompressedTuple<unsigned long, absl::hash_internal::Hash<int>, std::equal_to<int>, std::allocator<std::pai
r<int const, int> > >, 0, false>> = {
            value = 11
          },
          <absl::container_internal::internal_compressed_tuple::Storage<absl::container_internal::CompressedTuple<unsigned long, absl::hash_internal::Hash<int>, std::equal_to<int>, std::allocator<std::pai
r<int const, int> > >, 1, true>> = {
            <absl::hash_internal::Hash<int>> = {
              <absl::hash_internal::HashImpl<int>> = {<No data fields>}, <No data fields>}, <No data fields>},
          <absl::container_internal::internal_compressed_tuple::Storage<absl::container_internal::CompressedTuple<unsigned long, absl::hash_internal::Hash<int>, std::equal_to<int>, std::allocator<std::pair<int const, int> > >, 2, true>> = {
            <std::equal_to<int>> = {
              <std::binary_function<int, int, bool>> = {<No data fields>}, <No data fields>}, <No data fields>},
          <absl::container_internal::internal_compressed_tuple::Storage<absl::container_internal::CompressedTuple<unsigned long, absl::hash_internal::Hash<int>, std::equal_to<int>, std::allocator<std::pair<int const, int> > >, 3, true>> = {
            <std::allocator<std::pair<int const, int> >> = {
              <__gnu_cxx::new_allocator<std::pair<int const, int> >> = {<No data fields>}, <No data fields>}, <No data fields>}, <No data fields>}, <No data fields>}
    }, <No data fields>}, <No data fields>}

where it previously would have appeared as

myMap = std::unordered_map with 2 elements = {
  [2] = 20,
  [1] = 10
}



 Comments   
Comment by Githook User [ 04/Jan/19 ]

Author:

{'username': 'markbenvenuto', 'email': 'mark.benvenuto@mongodb.com', 'name': 'Mark Benvenuto'}

Message: SERVER-38757 Fix Python Lint
Branch: master
https://github.com/mongodb/mongo/commit/1450cb71819f64f17d45c41057df80dae7beba79

Comment by Githook User [ 04/Jan/19 ]

Author:

{'username': 'GWlodarek', 'email': 'gregory.wlodarek@mongodb.com', 'name': 'Gregory Wlodarek'}

Message: SERVER-38757 fix lint
Branch: master
https://github.com/mongodb/mongo/commit/9d6e9a5b5951b129eb8767ed7de8b0dfa379260a

Comment by Githook User [ 04/Jan/19 ]

Author:

{'username': 'markbenvenuto', 'email': 'mark.benvenuto@mongodb.com', 'name': 'Mark Benvenuto'}

Message: SERVER-38757 Add pretty printers for abseil hash map and set
Branch: master
https://github.com/mongodb/mongo/commit/f11fb53bfd42ee53857d263407d9e555b9a1140a

Generated at Thu Feb 08 04:49:55 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.