pub struct BlobDirectory { /* private fields */ }Expand description
A flat directory containing content-addressable blobs (names are their hashes). It is not possible to create sub-directories. It is not possible to write to an existing blob. It is not possible to open or read a blob until it is written and verified.
Implementations§
Source§impl BlobDirectory
impl BlobDirectory
Source§impl BlobDirectory
impl BlobDirectory
Sourcepub async fn get_blob_vmo(self: &Arc<Self>, hash: Hash) -> Result<Vmo, Error>
pub async fn get_blob_vmo(self: &Arc<Self>, hash: Hash) -> Result<Vmo, Error>
Get a pager-backed VMO for the blob identified by hash in this BlobDirectory. The blob
cannot be purged until all VMOs returned by this function are destroyed.
Trait Implementations§
Source§impl Directory for BlobDirectory
Implements VFS entry container trait for directories, allowing manipulation of their contents.
impl Directory for BlobDirectory
Implements VFS entry container trait for directories, allowing manipulation of their contents.
Source§fn deprecated_open(
self: Arc<Self>,
scope: ExecutionScope,
flags: OpenFlags,
path: Path,
server_end: ServerEnd<NodeMarker>,
)
fn deprecated_open( self: Arc<Self>, scope: ExecutionScope, flags: OpenFlags, path: Path, server_end: ServerEnd<NodeMarker>, )
DEPRECATED - Do not implement unless required for backwards compatibility. Called when
handling a fuchsia.io/Directory.DeprecatedOpen request.
Source§fn open(
self: Arc<Self>,
scope: ExecutionScope,
path: Path,
flags: Flags,
object_request: ObjectRequestRef<'_>,
) -> Result<(), Status>
fn open( self: Arc<Self>, scope: ExecutionScope, path: Path, flags: Flags, object_request: ObjectRequestRef<'_>, ) -> Result<(), Status>
Opens a connection to this item if the
path is “.” or a connection to an item inside
this one otherwise. path will not contain any “.” or “..” components. Read moreSource§async fn open_async(
self: Arc<Self>,
scope: ExecutionScope,
path: Path,
flags: Flags,
object_request: ObjectRequestRef<'_>,
) -> Result<(), Status>
async fn open_async( self: Arc<Self>, scope: ExecutionScope, path: Path, flags: Flags, object_request: ObjectRequestRef<'_>, ) -> Result<(), Status>
Same as
Self::open but the implementation is async. This may be more efficient if the
directory needs to do async work to open the connection.Source§async fn read_dirents(
&self,
pos: &TraversalPosition,
sink: Box<dyn Sink>,
) -> Result<(TraversalPosition, Box<dyn Sealed>), Status>
async fn read_dirents( &self, pos: &TraversalPosition, sink: Box<dyn Sink>, ) -> Result<(TraversalPosition, Box<dyn Sealed>), Status>
Reads directory entries starting from
pos by adding them to sink.
Once finished, should return a sealed sink.Source§fn register_watcher(
self: Arc<Self>,
scope: ExecutionScope,
mask: WatchMask,
watcher: DirectoryWatcher,
) -> Result<(), Status>
fn register_watcher( self: Arc<Self>, scope: ExecutionScope, mask: WatchMask, watcher: DirectoryWatcher, ) -> Result<(), Status>
Register a watcher for this directory.
Implementations will probably want to use a
Watcher to manage watchers.Source§fn unregister_watcher(self: Arc<Self>, key: usize)
fn unregister_watcher(self: Arc<Self>, key: usize)
Unregister a watcher from this directory. The watcher should no longer
receive events.
Source§impl DirectoryEntry for BlobDirectory
Implementation of VFS pseudo-directory for blobs. Forks a task per connection.
impl DirectoryEntry for BlobDirectory
Implementation of VFS pseudo-directory for blobs. Forks a task per connection.
Source§fn open_entry(self: Arc<Self>, request: OpenRequest<'_>) -> Result<(), Status>
fn open_entry(self: Arc<Self>, request: OpenRequest<'_>) -> Result<(), Status>
Opens this entry.
Source§impl FxNode for BlobDirectory
impl FxNode for BlobDirectory
fn object_id(&self) -> u64
fn parent(&self) -> Option<Arc<FxDirectory>>
fn set_parent(&self, _parent: Arc<FxDirectory>)
fn open_count_add_one(&self)
Source§fn open_count_sub_one(self: Arc<Self>)
fn open_count_sub_one(self: Arc<Self>)
Atomically check if this brought the count to zero while the node is
marked for purge. If so, this must queue the node for tombstone the node.
fn object_descriptor(&self) -> ObjectDescriptor
Source§fn mark_to_be_purged(&self)
fn mark_to_be_purged(&self)
Marks the object to be purged. Queues the node for tombstone if open count is zero.
Source§impl GetEntryInfo for BlobDirectory
impl GetEntryInfo for BlobDirectory
Source§fn entry_info(&self) -> EntryInfo
fn entry_info(&self) -> EntryInfo
This method is used to populate ReadDirents() output.
Source§impl MutableDirectory for BlobDirectory
impl MutableDirectory for BlobDirectory
Source§async fn unlink(
self: Arc<Self>,
name: &str,
must_be_directory: bool,
) -> Result<(), Status>
async fn unlink( self: Arc<Self>, name: &str, must_be_directory: bool, ) -> Result<(), Status>
Removes an entry from this directory.
Source§async fn update_attributes(
&self,
attributes: MutableNodeAttributes,
) -> Result<(), Status>
async fn update_attributes( &self, attributes: MutableNodeAttributes, ) -> Result<(), Status>
Set the mutable attributes of this directory based on the values in
attributes. If the
directory does not support updating all of the specified attributes, implementations
should fail with ZX_ERR_NOT_SUPPORTED.Source§fn link<'a>(
self: Arc<Self>,
_name: String,
_source_dir: Arc<dyn Any + Send + Sync>,
_source_name: &'a str,
) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'a>>
fn link<'a>( self: Arc<Self>, _name: String, _source_dir: Arc<dyn Any + Send + Sync>, _source_name: &'a str, ) -> Pin<Box<dyn Future<Output = Result<(), Status>> + Send + 'a>>
Adds a child entry to this directory. If the target exists, it should fail with
ZX_ERR_ALREADY_EXISTS.
Source§impl Node for BlobDirectory
impl Node for BlobDirectory
Source§async fn get_attributes(
&self,
requested_attributes: NodeAttributesQuery,
) -> Result<NodeAttributes2, Status>
async fn get_attributes( &self, requested_attributes: NodeAttributesQuery, ) -> Result<NodeAttributes2, Status>
Returns node attributes (io2).
Source§fn query_filesystem(&self) -> Result<FilesystemInfo, Status>
fn query_filesystem(&self) -> Result<FilesystemInfo, Status>
Returns information about the filesystem and/or volume.
Source§fn will_open_as_node(&self) -> Result<(), Status>
fn will_open_as_node(&self) -> Result<(), Status>
Called when the node is about to be opened as the node protocol. Implementers can use this
to perform any initialization or reference counting. Errors here will result in the open
failing. By default, this forwards to the infallible will_clone.
Source§fn will_clone(&self)
fn will_clone(&self)
Called when the node is about to be cloned (and also by the default implementation of
will_open_as_node). Implementations that perform their own open count can use this. Each
call to
will_clone will be accompanied by an eventual call to close.fn link_into(
self: Arc<Self>,
_destination_dir: Arc<dyn MutableDirectory>,
_name: Name,
) -> impl Future<Output = Result<(), Status>> + Sendwhere
Self: Sized,
Source§fn open_as_node(
self: Arc<Self>,
scope: ExecutionScope,
options: NodeOptions,
object_request: &mut ObjectRequest,
) -> Result<(), Status>where
Self: Sized,
fn open_as_node(
self: Arc<Self>,
scope: ExecutionScope,
options: NodeOptions,
object_request: &mut ObjectRequest,
) -> Result<(), Status>where
Self: Sized,
Opens the node using the node protocol.
Source§fn list_extended_attributes(
&self,
) -> impl Future<Output = Result<Vec<Vec<u8>>, Status>> + Sendwhere
Self: Sized,
fn list_extended_attributes(
&self,
) -> impl Future<Output = Result<Vec<Vec<u8>>, Status>> + Sendwhere
Self: Sized,
List extended attributes.
Source§fn get_extended_attribute(
&self,
_name: Vec<u8>,
) -> impl Future<Output = Result<Vec<u8>, Status>> + Sendwhere
Self: Sized,
fn get_extended_attribute(
&self,
_name: Vec<u8>,
) -> impl Future<Output = Result<Vec<u8>, Status>> + Sendwhere
Self: Sized,
Get the value for an extended attribute.
Source§impl RootDir for BlobDirectory
impl RootDir for BlobDirectory
fn as_directory_entry(self: Arc<Self>) -> Arc<dyn DirectoryEntry>
fn serve(self: Arc<Self>, flags: Flags, server_end: ServerEnd<DirectoryMarker>)
fn as_node(self: Arc<Self>) -> Arc<dyn FxNode>
fn register_additional_volume_services( self: Arc<Self>, svc_dir: &Simple, ) -> Result<(), Error>
Source§impl ToWeakNode for BlobDirectory
impl ToWeakNode for BlobDirectory
fn to_weak_node(self: Arc<Self>) -> WeakNode
Auto Trait Implementations§
impl Freeze for BlobDirectory
impl !RefUnwindSafe for BlobDirectory
impl Send for BlobDirectory
impl Sync for BlobDirectory
impl Unpin for BlobDirectory
impl UnsafeUnpin for BlobDirectory
impl !UnwindSafe for BlobDirectory
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T, D> Encode<Ambiguous1, D> for Twhere
D: ResourceDialect,
impl<T, D> Encode<Ambiguous1, D> for Twhere
D: ResourceDialect,
Source§impl<T, D> Encode<Ambiguous2, D> for Twhere
D: ResourceDialect,
impl<T, D> Encode<Ambiguous2, D> for Twhere
D: ResourceDialect,
§impl<T> InstanceFromServiceTransport<T> for T
impl<T> InstanceFromServiceTransport<T> for T
§fn from_service_transport(handle: T) -> T
fn from_service_transport(handle: T) -> T
Converts the given service transport handle of type
T to [Self]Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more