glean/rocksdb/rocksdb.h (66 lines of code) (raw):
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree.
*/
#pragma once
#include "glean/rts/densemap.h"
#include "glean/rts/factset.h"
#include "glean/rts/lookup.h"
#include "glean/rts/ownership.h"
#include "glean/rts/ownership/derived.h"
#include "glean/rts/stats.h"
#include "glean/rts/store.h"
namespace rocksdb {
struct Cache;
struct Iterator;
}
namespace facebook{
namespace glean {
namespace rocks {
using rts::Id;
using rts::Pid;
using Cache = ::rocksdb::Cache;
std::shared_ptr<Cache> newCache(
size_t capacity
);
struct Database;
/// A rocksdb container for storing facts
struct Container {
virtual ~Container() {}
/// Close the 'Container' - accessing it afterwards isn't allowed.
virtual void close() noexcept = 0;
/// Write a key/value pair to the Container metadata.
virtual void writeData(folly::ByteRange key, folly::ByteRange value) = 0;
/// Lookup a key in the Container metadata.
virtual bool readData(
folly::ByteRange key, std::function<void(folly::ByteRange)> f) = 0;
/// Optimise the container for reading
virtual void optimize() = 0;
/// Backup the Container to the specified directory.
virtual void backup(const std::string& path) = 0;
/// Convert the Container to a full fact Database with the given
/// representation version - accessing the original Container afterwards isn't
/// allowed. If the database is being created, start is the starting fact id.
virtual
std::unique_ptr<Database> openDatabase(Id start, int32_t version) && = 0;
};
enum class Mode {
ReadOnly = 0,
ReadWrite = 1,
Create = 2
};
std::unique_ptr<Container> open(
const std::string& path,
Mode mode,
folly::Optional<std::shared_ptr<Cache>> cache);
/// A rocksdb-based fact database
struct Database : rts::Lookup {
virtual Container& container() noexcept = 0;
using PredicateStats = rts::DenseMap<Pid, rts::MemoryStats>;
virtual PredicateStats stats() const = 0;
struct OwnershipSet {
folly::ByteRange unit;
folly::Range<const int64_t *> ids;
// This is a list of intervals [x1,x2, y1,y2, ...]
// representing the inclusive ranges x1..x2, y1..y2, ...
};
virtual void commit(rts::FactSet& facts) = 0;
virtual void addOwnership(const std::vector<OwnershipSet>& ownership) = 0;
virtual std::unique_ptr<rts::OwnershipUnitIterator>
getOwnershipUnitIterator() = 0;
virtual void addDefineOwnership(rts::DefineOwnership& def) = 0;
virtual std::unique_ptr<rts::DerivedFactOwnershipIterator>
getDerivedFactOwnershipIterator(Pid pid) = 0;
virtual folly::Optional<uint32_t> getUnitId(folly::ByteRange) = 0;
virtual folly::Optional<std::string> getUnit(uint32_t) = 0;
virtual void storeOwnership(rts::ComputedOwnership &ownership) = 0;
virtual std::unique_ptr<rts::Ownership> getOwnership() = 0;
};
void restore(const std::string& target, const std::string& source);
}
}
}