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; }
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) ; }