StatusWith<RecordId> KVRecordStore::updateRecord(OperationContext* txn,
                                                     const RecordId& id,
                                                     const char* data,
                                                     int len,
                                                     bool enforceQuota,
                                                     UpdateNotifier* notifier) {
        const KeyString key(id);
        const Slice value(data, len);

        int64_t numRecordsDelta = 0;
        int64_t dataSizeDelta = value.size();

        Slice val;
        Status status = _db->get(txn, Slice::of(key), val, false);
        if (status.code() == ErrorCodes::NoSuchKey) {
            numRecordsDelta += 1;
        } else if (status.isOK()) {
            dataSizeDelta -= val.size();
        } else {
            return StatusWith<RecordId>(status);
        }

        // An update with a complete new image (data, len) is implemented as an overwrite insert.
        status = _db->insert(txn, Slice::of(key), value, false);
        if (!status.isOK()) {
            return StatusWith<RecordId>(status);
        }

        _updateStats(txn, numRecordsDelta, dataSizeDelta);

        return StatusWith<RecordId>(id);
    }
    void KVRecordStore::deleteRecord(OperationContext* txn, const RecordId& id) {
        const KeyString key(id);
        Slice val;
        Status s = _db->get(txn, Slice::of(key), val, false);
        invariantKVOK(s, str::stream() << "KVRecordStore: couldn't find record " << id << " for delete: " << s.toString());

        _updateStats(txn, -1, -val.size());

        s = _db->remove(txn, Slice::of(key));
        invariant(s.isOK());
    }
    Status KVRecordStore::_insertRecord(OperationContext *txn,
                                        const RecordId &id,
                                        const Slice &value) {
        const KeyString key(id);
        DEV {
            // Should never overwrite an existing record.
            Slice v;
            const Status status = _db->get(txn, Slice::of(key), v, true);
            invariant(status.code() == ErrorCodes::NoSuchKey);
        }

        Status s = _db->insert(txn, Slice::of(key), value, true);
        if (!s.isOK()) {
            return s;
        }

        _updateStats(txn, 1, value.size());

        return s;
    }
Пример #4
0
StatisticsDisplayWidget::StatisticsDisplayWidget(const std::string& title,QWidget* parent) : 
	QDockWidget(parent),
	_tabWidget(0),
	_title(QString::fromStdString(title)),
	_updatePending(false)
{
	//create tab widget with one tab for each input image
	this->setObjectName(QString("Statistics")) ;
	_tabWidget = new QTabWidget(this) ;
		_tabWidget->setUsesScrollButtons(true) ;
		_tabWidget->setTabPosition(QTabWidget::East) ;
		_tabWidget->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum) ;

	this->setWidget(_tabWidget) ;
	this->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea) ;
	
	this->setWindowTitle(QString("StatisticsDisplay [") + _title + QString("]") ) ;
	this->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable) ;

	connect(this, SIGNAL(statsUpdated()), this, SLOT(_updateStats()), Qt::QueuedConnection) ;
}