docs: function versionInternal(rpcctx, options, callback) {
      var timeout, opts, log;
  
      assert.object(rpcctx, 'rpcctx');
      assert.object(options, 'options');
      assert.func(callback, 'callback');
  
      /*
       * As mentioned above, servers that do not support this RPC will never
       * respond to it.  To provide behavior that's at least remotely sane, we
       * apply a generous timeout for this RPC.  However, in the event of timeout,
       * we will not conclude that the remote server is old.  We'll leave that for
       * callers to deal with.  See the notes above for details.
       */
      timeout = typeof (options.timeout) == 'number' ?
          options.timeout : 20000;
      opts = { req_id: options.req_id || libuuid.create() };
      log = rpc.childLogger(rpcctx, opts);
      rpc.rpcCommonBufferData({
          'rpcctx': rpcctx,
          'rpcmethod': 'version',
          'rpcargs': [ opts ],
          'timeout': timeout,
          'log': log
      }, function (err, versions) {
          if (err) {
              /*
               * As described in detail above, there's a decent chance that a
               * timeout actually means the remote server is old.  This is
               * decidedly not obvious, so it's useful if we can augment the error
               * with a note about this possibility -- without actually concluding
               * that that's what happened, since we don't really know.
               */
              if (VError.findCauseByName(err, 'TimeoutError')) {
                  err.message += ' (note: very old Moray versions do not ' +
                      'respond to this RPC)';
              }
          } else {
              if (versions.length != 1) {
                  err = new VError('bad server response: expected 1 version, ' +
                      'but found %d', versions.length);
              } else if ((typeof (versions[0]) != 'object' ||
                  versions[0] === null ||
                  typeof (versions[0].version) != 'number')) {
                  err = new VError(
                      'bad server response: unable to parse version');
              }
          }
  
          if (err) {
              callback(err);
          } else {
              callback(null, versions[0].version);
          }
      });
  }