refactor(nix-compat/store_path): make digest and name private

Change-Id: I62cbe883afcf3dd0c8d4de0e3b845069eb750c97
Reviewed-on: https://cl.tvl.fyi/c/depot/+/9855
Reviewed-by: flokli <flokli@flokli.de>
Tested-by: BuildkiteCI
This commit is contained in:
edef 2023-10-27 11:35:09 +00:00
parent 36f2b69de5
commit 7f7c1ae7be
6 changed files with 27 additions and 21 deletions

View file

@ -61,10 +61,10 @@ impl TvixStoreIO {
sub_path: &Path,
) -> Result<Option<Node>, io::Error> {
let path_info_service = self.path_info_service.clone();
let digest = store_path.digest;
let task = self
.tokio_handle
.spawn(async move { path_info_service.get(digest).await });
let task = self.tokio_handle.spawn({
let digest = *store_path.digest();
async move { path_info_service.get(digest).await }
});
let path_info = match self.tokio_handle.block_on(task).unwrap()? {
// If there's no PathInfo found, early exit
None => return Ok(None),

View file

@ -52,8 +52,18 @@ pub enum Error {
/// path.
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
pub struct StorePath {
pub digest: [u8; DIGEST_SIZE],
pub name: String,
digest: [u8; DIGEST_SIZE],
name: String,
}
impl StorePath {
pub fn digest(&self) -> &[u8; DIGEST_SIZE] {
&self.digest
}
pub fn name(&self) -> &str {
self.name.as_ref()
}
}
impl PartialOrd for StorePath {
@ -187,14 +197,6 @@ pub(crate) fn validate_name(s: &[u8]) -> Result<String, Error> {
Ok(String::from_utf8(s.to_vec()).unwrap())
}
/// Ensures the StorePath fulfils the requirements for store paths.
/// Useful when populating the struct manually instead of parsing.
pub fn validate(s: &StorePath) -> Result<(), Error> {
validate_name(s.name.as_bytes())?;
Ok(())
}
impl fmt::Display for StorePath {
/// The string representation of a store path starts with a digest (20
/// bytes), [crate::nixbase32]-encoded, followed by a `-`,

View file

@ -169,9 +169,10 @@ impl TvixStoreFs {
} else {
// If we don't have it, look it up in PathInfoService.
let path_info_service = self.path_info_service.clone();
let task = self
.tokio_handle
.spawn(async move { path_info_service.get(store_path.digest).await });
let task = self.tokio_handle.spawn({
let digest = *store_path.digest();
async move { path_info_service.get(digest).await }
});
match self.tokio_handle.block_on(task).unwrap()? {
// the pathinfo doesn't exist, so the file doesn't exist.
None => Ok(None),

View file

@ -74,7 +74,7 @@ impl PathInfoService for MemoryPathInfoService {
// This overwrites existing PathInfo objects.
Ok(nix_path) => {
let mut db = self.db.write().unwrap();
db.insert(nix_path.digest, path_info.clone());
db.insert(*nix_path.digest(), path_info.clone());
Ok(path_info)
}

View file

@ -119,7 +119,10 @@ impl PathInfoService for SledPathInfoService {
))),
// In case the PathInfo is valid, and we were able to extract a NixPath, store it in the database.
// This overwrites existing PathInfo objects.
Ok(nix_path) => match self.db.insert(nix_path.digest, path_info.encode_to_vec()) {
Ok(nix_path) => match self
.db
.insert(*nix_path.digest(), path_info.encode_to_vec())
{
Ok(_) => Ok(path_info),
Err(e) => {
warn!("failed to insert PathInfo: {}", e);

View file

@ -130,12 +130,12 @@ impl PathInfo {
// This is safe, because we ensured the proper length earlier already.
let reference_digest = self.references[i].to_vec().try_into().unwrap();
if reference_names_store_path.digest != reference_digest {
if reference_names_store_path.digest() != &reference_digest {
return Err(
ValidatePathInfoError::InconsistentNarinfoReferenceNameDigest(
i,
reference_digest,
reference_names_store_path.digest,
*reference_names_store_path.digest(),
),
);
}