Return Arc instead of reference

Summary:
For context and high level goal, see: https://fb.quip.com/8zOkAQRiXGQ3

On RedactedBlobs, let's return an `Arc<HashMap>` instead of `&Hashmap`.

This is not needed now, but when reloading information from configerator, we won't be able to return a reference, only a pointer.

Reviewed By: StanislavGlebik

Differential Revision: D28962040

fbshipit-source-id: 0848acc1a81a87c0b51d968efe31f61dacd57c47
This commit is contained in:
Yan Soares Couto 2021-06-21 08:41:09 -07:00 committed by Facebook GitHub Bot
parent f0a287580e
commit 73212fc9bf
4 changed files with 16 additions and 13 deletions

View File

@ -250,6 +250,7 @@ mod test {
use maplit::hashmap;
use memblob::Memblob;
use prefixblob::PrefixBlobstore;
use std::sync::Arc;
#[fbinit::test]
async fn test_redacted_key(fb: FacebookInit) {
@ -261,12 +262,12 @@ mod test {
borrowed!(ctx);
let inner = Memblob::default();
let redacted_pairs = RedactedBlobs::FromSql(hashmap! {
let redacted_pairs = RedactedBlobs::FromSql(Arc::new(hashmap! {
redacted_key.to_owned() => RedactedMetadata {
task: redacted_task.to_owned(),
log_only: false,
},
});
}));
let blob = RedactedBlobstore::new(
PrefixBlobstore::new(inner, "prefix"),
@ -322,12 +323,12 @@ mod test {
borrowed!(ctx);
let inner = Memblob::default();
let redacted_pairs = RedactedBlobs::FromSql(hashmap! {
let redacted_pairs = RedactedBlobs::FromSql(Arc::new(hashmap! {
redacted_log_only_key.to_owned() => RedactedMetadata {
task: redacted_task.to_owned(),
log_only: true,
},
});
}));
let blob = RedactedBlobstore::new(
PrefixBlobstore::new(inner, "prefix"),

View File

@ -12,6 +12,7 @@ use sql::{queries, Connection};
use sql_construct::{SqlConstruct, SqlConstructFromMetadataDatabaseConfig};
use sql_ext::SqlConnections;
use std::collections::HashMap;
use std::sync::Arc;
#[derive(Clone)]
pub struct SqlRedactedContentStore {
@ -70,13 +71,13 @@ pub struct RedactedMetadata {
#[derive(Debug, Clone)]
pub enum RedactedBlobs {
FromSql(HashMap<String, RedactedMetadata>),
FromSql(Arc<HashMap<String, RedactedMetadata>>),
}
impl RedactedBlobs {
pub fn redacted(&self) -> &HashMap<String, RedactedMetadata> {
pub fn redacted(&self) -> Arc<HashMap<String, RedactedMetadata>> {
match self {
Self::FromSql(hm) => &hm,
Self::FromSql(hm) => hm.clone(),
}
}
}
@ -84,7 +85,7 @@ impl RedactedBlobs {
impl SqlRedactedContentStore {
pub async fn get_all_redacted_blobs(&self) -> Result<RedactedBlobs, Error> {
let redacted_blobs = GetAllRedactedBlobs::query(&self.read_connection).await?;
Ok(RedactedBlobs::FromSql(
Ok(RedactedBlobs::FromSql(Arc::new(
redacted_blobs
.into_iter()
.map(|(key, task, log_only)| {
@ -95,7 +96,7 @@ impl SqlRedactedContentStore {
(key, redacted_metadata)
})
.collect(),
))
)))
}
pub async fn insert_redacted_blobs(

View File

@ -1037,12 +1037,12 @@ mod test {
// Now, create a new blob repo with the same blob store, but with some data redacted.
let repo = factory
.redacted(Some(RedactedBlobs::FromSql(hashmap! {
.redacted(Some(RedactedBlobs::FromSql(Arc::new(hashmap! {
meta.content_id.blobstore_key() => RedactedMetadata {
task: "test".to_string(),
log_only: false,
}
})))
}))))
.build()?;
let ctx = RepositoryRequestContext::test_builder(fb)?

View File

@ -218,6 +218,7 @@ mod test {
use mononoke_types_mocks::contentid::ONES_CTID;
use permission_checker::MononokeIdentity;
use redactedblobstore::{RedactedBlobs, RedactedMetadata};
use std::sync::Arc;
use test_repo_factory::TestRepoFactory;
#[fbinit::test]
@ -226,12 +227,12 @@ mod test {
let reason = "test reason";
let repo = TestRepoFactory::new()?
.redacted(Some(RedactedBlobs::FromSql(
.redacted(Some(RedactedBlobs::FromSql(Arc::new(
hashmap! { content_id.blobstore_key() => RedactedMetadata {
task: reason.to_string(),
log_only: false,
}},
)))
))))
.build()?;
let ctx = RepositoryRequestContext::test_builder(fb)?