Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-25932

Make MONGO_EXPORT_SERVER_PARAMETER work with AtomicWord<T>

    XMLWordPrintable

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Major - P3
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 3.5.2
    • Component/s: None
    • Backwards Compatibility:
      Fully Compatible
    • Epic Link:
    • Sprint:
      Platforms 2017-01-23

      Description

      The linter will complain if you use std::atomic<T>, suggesting AtomicWord<T> instead. However, the MONGO_EXPORT_SERVER_PARAMTER macro does not work with an AtomicWord<T> type, requiring all parameters that want to use this macro to be declared with a // NOLINT.

      Here's an example of the error I got when trying to declare a server parameter with type AtomicInt32:

      src/mongo/db/query/query_knobs.cpp:70:31: error: redefinition of 'internalQueryFacetBufferSizeBytes' with a different type: 'server_parameter_storage_type<AtomicInt32,
            ServerParameterType::kStartupAndRuntime>::value_type' (aka 'atomic<mongo::AtomicWord<int> >') vs 'AtomicInt32' (aka 'AtomicWord<int>')
      MONGO_EXPORT_SERVER_PARAMETER(internalQueryFacetBufferSizeBytes, AtomicInt32, 100 * 1024 * 1024);
                                    ^
      src/mongo/db/query/query_knobs.h:113:20: note: previous declaration is here
      extern AtomicInt32 internalQueryFacetBufferSizeBytes;  // NOLINT
                         ^
      In file included from src/mongo/db/query/query_knobs.cpp:31:
      src/mongo/db/server_parameters.h:195:5: error: static_assert failed "This type is not supported as a runtime server parameter."
          static_assert(paramType == ServerParameterType::kStartupOnly ||
          ^             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      src/mongo/db/query/query_knobs.cpp:70:1: note: in instantiation of template class 'mongo::ExportedServerParameter<mongo::AtomicWord<int>, mongo::ServerParameterType::kStartupAndRuntime>' requested here
      MONGO_EXPORT_SERVER_PARAMETER(internalQueryFacetBufferSizeBytes, AtomicInt32, 100 * 1024 * 1024);
      ^
      src/mongo/db/server_parameters.h:246:5: note: expanded from macro 'MONGO_EXPORT_SERVER_PARAMETER'
          MONGO_EXPORT_SERVER_PARAMETER_IMPL(                          \
          ^
      src/mongo/db/server_parameters.h:239:47: note: expanded from macro 'MONGO_EXPORT_SERVER_PARAMETER_IMPL'
          ExportedServerParameter<TYPE, PARAM_TYPE> _##NAME(ServerParameterSet::getGlobal(), #NAME, &NAME)
                                                    ^
      <scratch space>:153:1: note: expanded from here
      _internalQueryFacetBufferSizeBytes
      ^
      2 errors generated.
      scons: *** [build/opt/mongo/db/query/query_knobs.os] Error 1
      scons: building terminated because of errors.
      build/opt/mongo/db/query/query_knobs.os failed: Error 1
                                                                                                
      

        Attachments

          Activity

            People

            • Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: