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

Make MONGO_EXPORT_SERVER_PARAMETER work with AtomicWord<T>

    • Type: Icon: Improvement Improvement
    • Resolution: Done
    • Priority: Icon: Major - P3 Major - P3
    • 3.5.2
    • Affects Version/s: None
    • Component/s: None
    • Fully Compatible
    • Platforms 2017-01-23

      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
                                                                                                
      

            Assignee:
            mark.benvenuto@mongodb.com Mark Benvenuto
            Reporter:
            charlie.swanson@mongodb.com Charlie Swanson
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated:
              Resolved: