Exemple #1
0
 explicit LMDBLabelCursor(MDB_txn* mdb_txn, MDB_cursor* mdb_cursor)
   : LMDBCursor(mdb_txn, mdb_cursor) {
   inlabel_samples = 4;
   srand (time(NULL));
   //std::cout << "inlabel_samples " << inlabel_samples ;
   GetLabelsKeysMap(&labels_keys_, &labels_);
   SeekToFirst();
   
 }
Exemple #2
0
  explicit LMDBShuffleCursor(MDB_txn* mdb_txn, MDB_cursor* mdb_cursor)
    : LMDBCursor(mdb_txn, mdb_cursor) {
    srand (time(NULL));
    GetKeys(&keys_);

    keys_permutation_.resize(keys_.size());
    for (int i = 0; i < keys_.size(); ++i) {
      keys_permutation_[i] = i;
    }

    SeekToFirst();
  }
Exemple #3
0
std::ostream& operator<<(std::ostream& _out, BlockChain const& _bc)
{
	string cmp = toBigEndianString(_bc.m_lastBlockHash);
	auto it = _bc.m_detailsDB->NewIterator(_bc.m_readOptions);
	for (it->SeekToFirst(); it->Valid(); it->Next())
		if (it->key().ToString() != "best")
		{
			BlockDetails d(RLP(it->value().ToString()));
			_out << asHex(it->key().ToString()) << ":   " << d.number << " @ " << d.parent << (cmp == it->key().ToString() ? "  BEST" : "") << std::endl;
		}
	delete it;
	return _out;
}
Exemple #4
0
osquery::Status DBHandle::Scan(const std::string& domain,
                               std::vector<std::string>& results) {
  auto cfh = getHandleForColumnFamily(domain);
  if (cfh == nullptr) {
    return Status(1, "Could not get column family for " + domain);
  }
  auto it = getDB()->NewIterator(rocksdb::ReadOptions(), cfh);
  if (it == nullptr) {
    return Status(1, "Could not get iterator for " + domain);
  }
  for (it->SeekToFirst(); it->Valid(); it->Next()) {
    results.push_back(it->key().ToString());
  }
  delete it;
  return Status(0, "OK");
}
Exemple #5
0
size_t LevelDB::size(bool thorough, DbSnapshot* aSnapshot /*nullptr*/) throw(DbException) {
	if (!thorough && lastSize > 0)
		return lastSize;

	// leveldb doesn't support any easy way to do this
	size_t ret = 0;
	leveldb::ReadOptions options;
	options.fill_cache = false;
	if (aSnapshot)
		options.snapshot = static_cast<LevelSnapshot*>(aSnapshot)->snapshot;

	auto it = unique_ptr<leveldb::Iterator>(db->NewIterator(options));
	for (it->SeekToFirst(); it->Valid(); it->Next()) {
		checkDbError(it->status());
		ret++;
	}

	lastSize = ret;
	return ret;
}
Exemple #6
0
void LevelDB::remove_if(std::function<bool(void* aKey, size_t key_len, void* aValue, size_t valueLen)> f, DbSnapshot* aSnapshot /*nullptr*/) throw(DbException) {
	leveldb::WriteBatch wb;
	leveldb::ReadOptions options;
	options.fill_cache = false;
	options.verify_checksums = false; // it will stop iterating when a checksum mismatch is found otherwise
	if (aSnapshot)
		options.snapshot = static_cast<LevelSnapshot*>(aSnapshot)->snapshot;

	{
		auto it = unique_ptr<leveldb::Iterator>(db->NewIterator(options));
		for (it->SeekToFirst(); it->Valid(); it->Next()) {
			checkDbError(it->status());

			if (f((void*)it->key().data(), it->key().size(), (void*)it->value().data(), it->value().size())) {
				wb.Delete(it->key());
			}
		}
	}

	DBACTION(db->Write(writeoptions, &wb));
}
Exemple #7
0
 explicit LMDBCursor(MDB_txn* mdb_txn, MDB_cursor* mdb_cursor)
     : mdb_txn_(mdb_txn), mdb_cursor_(mdb_cursor), valid_(false) {
         SeekToFirst();
     }
Exemple #8
0
 explicit LevelDBCursor(leveldb::Iterator* iter)
   : iter_(iter) { SeekToFirst(); }
Exemple #9
0
void Circuit::load() {
	unsigned long element_id;
	unsigned long version = 0;
	std::istringstream in(std::ios_base::binary);

	m_database = new KeyValueStorage(m_savedir, "circuit");
	m_virtual_database = new KeyValueStorage(m_savedir, "circuit_virtual");

	std::ifstream input_elements_func((m_savedir + DIR_DELIM + elements_func_file).c_str(), std::ios_base::binary);
	if(input_elements_func.good()) {
		input_elements_func.read(reinterpret_cast<char*>(&version), sizeof(version));
		m_circuit_elements_states.deSerialize(input_elements_func);
	}

#if USE_LEVELDB
	// Filling list with empty virtual elements
	auto virtual_it = m_virtual_database->new_iterator();
	std::map <unsigned long, std::list <CircuitElementVirtual>::iterator> id_to_virtual_pointer;
	for(virtual_it->SeekToFirst(); virtual_it->Valid(); virtual_it->Next()) {
		element_id = stoi(virtual_it->key().ToString());
		id_to_virtual_pointer[element_id] =
		    m_virtual_elements.insert(m_virtual_elements.begin(), CircuitElementVirtual(element_id));
		if(element_id + 1 > m_max_virtual_id) {
			m_max_virtual_id = element_id + 1;
		}
	}

	// Filling list with empty elements
	auto it = m_database->new_iterator();
	std::map <unsigned long, std::list <CircuitElement>::iterator> id_to_pointer;
	for(it->SeekToFirst(); it->Valid(); it->Next()) {
		element_id = stoi(it->key().ToString());
		id_to_pointer[element_id] =
		    m_elements.insert(m_elements.begin(), CircuitElement(element_id));
		if(element_id + 1 > m_max_id) {
			m_max_id = element_id + 1;
		}
	}

	// Loading states of elements
	std::ifstream input_elements_states((m_savedir + DIR_DELIM + elements_states_file).c_str());
	if(input_elements_states.good()) {
		for(unsigned long i = 0; i < m_elements.size(); ++i) {
			input_elements_states.read(reinterpret_cast<char*>(&element_id), sizeof(element_id));
			if(id_to_pointer.find(element_id) != id_to_pointer.end()) {
				id_to_pointer[element_id]->deSerializeState(input_elements_states);
			} else {
				throw SerializationError(static_cast<std::string>("File \"")
				                         + elements_states_file + "\" seems to be corrupted.");
			}
		}
	}

	// Loading elements data
	for(it->SeekToFirst(); it->Valid(); it->Next()) {
		in.str(it->value().ToString());
		element_id = stoi(it->key().ToString());
		std::list <CircuitElement>::iterator current_element = id_to_pointer[element_id];
		current_element->deSerialize(in, id_to_virtual_pointer);
		current_element->setFunc(m_circuit_elements_states.getFunc(current_element->getFuncId()), current_element->getFuncId());
		m_pos_to_iterator[current_element->getPos()] = current_element;
	}
	delete it;

	// Loading virtual elements data
	for(virtual_it->SeekToFirst(); virtual_it->Valid(); virtual_it->Next()) {
		in.str(virtual_it->value().ToString());
		element_id = stoi(virtual_it->key().ToString());
		std::list <CircuitElementVirtual>::iterator current_element = id_to_virtual_pointer[element_id];
		current_element->deSerialize(in, current_element, id_to_pointer);
	}

	delete virtual_it;
#endif
}
Exemple #10
0
			explicit Base64Cursor( string base64_cursor)
				: is_key_pos_map_ready_(false){
				base64_cursor_.open(base64_cursor);
				SeekToFirst();
			}
int main(int argc, char* argv[]) {
  if (argc != 5 && argc != 7 && argc != 8) {
    std::cout
      << "Usage: leveldb_kmedoids dbpath K intravariance-out-file "
      << "kmedoids-out-file [start end] [concurrency]\n"
      << "Runs K-Medoid on the key range [start, end].\n"
      << "Prints intermediate centroids per iteration to the out files, "
      << "as well as within-cluster total distances (\"intravariances\")."
      << std::endl;
    return 1;
  }

  int concurrency = std::thread::hardware_concurrency();
  if (argc == 8) concurrency = std::atoi(argv[7]);
  std::cout << "Using concurrency " << concurrency << std::endl;

  int K = std::atoi(argv[2]);

  leveldb::DB* db;
  CHECK_OK(leveldb::DB::Open({}, argv[1], &db));
  std::cout << "Database open" << std::endl;

  leveldb::DB* work_db;
  leveldb::Options options;
  options.create_if_missing = true;
  CHECK_OK(leveldb::DB::Open(options, "/tmp/kmedoids-work", &work_db));
  std::cout << "Work database open" << std::endl;

  std::string start_base, end_base;
  leveldb::Slice start, end;
  if (argc > 5) {
    start = argv[5];
    end = argv[6];
  } else {
    auto it = iter(db);
    it->SeekToFirst();
    CHECK(it->Valid());
    start_base = it->key().ToString();

    it->SeekToLast();
    CHECK(it->Valid());
    end_base = it->key().ToString();

    start = start_base;
    end = end_base;
  }
  std::cout << "Running K-medoids on range [" << start.ToString()
            << ", " << end.ToString()
            << "]" << std::endl;

  std::ofstream ivar_out(argv[3]);
  std::ofstream cent_out(argv[4]);

  RunKMedoids(start, end, K, db, work_db,
              concurrency, ivar_out, cent_out);
  delete work_db;
  CHECK_OK(leveldb::DestroyDB("/tmp/kmedoids-work", {}));

  std::cout << "Closing databases" << std::endl;
  delete db;
}