def _manageColumns(self, action, varBind, **context):
        """Apply a management action on all columns

        Parameters
        ----------
        action: :py:class:`str` any of :py:class:`MibInstrumController`'s states
            to apply on all columns but the one passed in `varBind`

        varBind: :py:class:`~pysnmp.smi.rfc1902.ObjectType` object representing
            new :py:class:`RowStatus`  Managed Object Instance value being set
            on table row

        Other Parameters
        ----------------
        \*\*context:

            Query parameters:

            * `cbFun` (callable) - user-supplied callable that is invoked once
              all columns have been processed or an error occurs

        Notes
        -----
        The callback functions (e.g. `cbFun`) expects two parameters: `varBind`
        and `**context`.

        In case of an error, the `error` key in the `context` dict will contain
        an exception object.

        Assumes that row consistency check has been triggered by RowStatus
        columnar object transition into `active` state.
        """
        name, val = varBind

        (debug.logger & debug.FLAG_INS and
         debug.logger('%s: _manageColumns(%s, %s, %r)' % (self, action, name, val)))

        cbFun = context['cbFun']

        colLen = len(self.name) + 1

        # Build a map of index names and values for automatic initialization
        indexVals = {}

        instId = name[colLen:]
        indices = []

        for impliedFlag, modName, symName in self._indexNames:
            mibObj, = mibBuilder.importSymbols(modName, symName)
            syntax, instId = self.oidToValue(mibObj.syntax, instId, impliedFlag, indices)
            indexVals[mibObj.name] = syntax
            indices.append(syntax)

        count = [len(self._vars)]

        if name[:colLen] in self._vars:
            count[0] -= 1

        def _cbFun(varBind, **context):
            count[0] -= 1

            if not count[0]:
                cbFun(varBind, **context)

        for colName, colObj in self._vars.items():
            acFun = context.get('acFun')

            if colName in indexVals:
                colInstanceValue = indexVals[colName]
                # Index column is usually read-only
                acFun = None

            elif name[:colLen] == colName:
                # status column is following `write` path
                continue

            else:
                colInstanceValue = None

            actionFun = getattr(colObj, action)

            colInstanceName = colName + name[colLen:]

            actionFun((colInstanceName, colInstanceValue),
                      **dict(context, acFun=acFun, cbFun=_cbFun))

            debug.logger & debug.FLAG_INS and debug.logger(
                '_manageColumns: action %s name %s instance %s %svalue %r' % (
                    action, name, instId, name in indexVals and "index " or "", indexVals.get(name, val)))
Apply a management action on all columns

        Parameters
        ----------
        action: :py:class:`str` any of :py:class:`MibInstrumController`'s states
            to apply on all columns but the one passed in `varBind`

        varBind: :py:class:`~pysnmp.smi.rfc1902.ObjectType` object representing
            new :py:class:`RowStatus`  Managed Object Instance value being set
            on table row

        Other Parameters
        ----------------
        \*\*context:

            Query parameters:

            * `cbFun` (callable) - user-supplied callable that is invoked once
              all columns have been processed or an error occurs

        Notes
        -----
        The callback functions (e.g. `cbFun`) expects two parameters: `varBind`
        and `**context`.

        In case of an error, the `error` key in the `context` dict will contain
        an exception object.

        Assumes that row consistency check has been triggered by RowStatus
        columnar object transition into `active` state.