Remoto - VFS: VFS_ephemeral Class Reference
Remoto - VFS

A VFS_datastore subclass for storing data directly in memory as if it was a filesystem. More...

#include <VFS_ephemeral.h>

Inheritance diagram for VFS_ephemeral:
VFS_node

Public Slots

virtual void applyDiff (VFS_request *r)
 Apply a diff to this node's data. More...
 
- Public Slots inherited from VFS_node
virtual void applyDiff (VFS_request *r)
 Apply a diff received via subscription. More...
 
virtual void executeRequest (VFS_request *t)
 Based on the VFS_request::requestType, execute the function associated with an operation. More...
 
void notifySubscribers (VFS_node *origin, VFS_request *t)
 Propagate a diff to subscribers. More...
 
virtual void receiveResponse (VFS_request *t)
 Once a VFS_request has been completed, a response will be issued back to its _origin. More...
 
void remove (bool andDelete)
 Remove a child node. More...
 
virtual void remove (VFS_node *node=nullptr, QString *name=nullptr, QString user="server")
 Remove a child node from this node. More...
 
virtual void subtreeRequest (VFS_request *t)
 find() the target of a VFS_request, and execute the request More...
 
virtual void unsubscribeAll (VFS_node *n)
 Remove all references to a subscriber from this node. More...
 

Public Member Functions

Q_INVOKABLE VFS_ephemeral (bool container, bool raw=false)
 Create a VFS_ephemeral node. More...
 
virtual ~VFS_ephemeral ()
 
virtual VFS_nodeappend (QString name, VFS_node *node, bool containerCheck=true, QString user="server")
 Append a VFS_ephemeral node as a child of this node. More...
 
virtual VFS_nodefind (VFS_request *r)
 Find a node using a VFS_request. More...
 
virtual bool isContainer ()
 The VFS_ephemeral node is a container or a document. More...
 
void populateMetadata (QString name)
 Use an incoming file type to try to populate mime type. More...
 
virtual QString reportDetails ()
 Report the current cache usage. More...
 
- Public Member Functions inherited from VFS_node
Q_INVOKABLE VFS_node ()
 The VFS_node constructor will add its instance to the VFS_node::__allNodes global node registry, observing thread safety rules. More...
 
virtual ~VFS_node ()
 VFS_node destructor. More...
 
QString className ()
 Return the class name of a node. More...
 
virtual VFS_requestcreateRequest (VFS_request::requestType type, QString path, QString user="unknown", QJsonDocument data=QJsonDocument(), QJsonObject metadata=QJsonObject(), bool dontDelete=false)
 Create a new VFS_request with this object as _origin. More...
 
VFS_nodefind (QString path)
 Find a node by string path. More...
 
VFS_nodefindChildWithName (QString name)
 Check if a child with a given name exists. More...
 
virtual VFS_nodemount ()
 Mount this node. More...
 
QString uniqueChildName (QString name)
 Generate a unique child name. More...
 
virtual VFS_nodeunmount ()
 Unmount this node. More...
 
virtual bool validChildName (QString name)
 Check if a node name is valid. More...
 

Protected Member Functions

virtual void fetchRange (VFS_request *r)
 Fetch a byte range within a file. More...
 
virtual QByteArray icon ()
 The "disk" icon found in the VFS_icons library. More...
 
virtual void ls (VFS_request *r)
 List the contents of a directory. More...
 
virtual void metadata (VFS_request *r)
 Fetch the metadata for this node. More...
 
virtual void read (VFS_request *r)
 Read the contents of this node. More...
 
quint64 size ()
 Return the size of the data in this node. More...
 
virtual void submit (VFS_request *r)
 Submit data to this node, applying the data as a diff. More...
 
virtual void write (VFS_request *r)
 Write data to this node. More...
 
- Protected Member Functions inherited from VFS_node
virtual void aclDefaults (VFS_request *r)
 Return default values and features associated wth this node. More...
 
void addACLDefault (QJsonObject &acl, bool value, QString description="")
 Add a default value to the acl object. More...
 
void addACLFeature (QJsonObject &acl, QString feature, bool value, QString description="")
 Add a feature to the acl object. More...
 
void addACLFeatureGroup (QJsonObject &acl, QString feature, QString group, bool value)
 Add a feature group to the acl object. More...
 
void addACLFeatureUser (QJsonObject &acl, QString feature, QString user, bool value)
 Add a feature user to the acl object. More...
 
void addACLGroup (QJsonObject &acl, QString group, bool value)
 Add a group to the acl object. More...
 
void addACLUser (QJsonObject &acl, QString user, bool value)
 Add a user to the acl object. More...
 
virtual void issueRequest (VFS_node *target, VFS_request *t)
 Issue a VFS_request to its target. More...
 
virtual void issueRequest (VFS_request *t)
 A convenience function. More...
 
virtual void issueResponse (VFS_request *t)
 Once a request has been completed, issue a response. More...
 
virtual void releaseLock (VFS_request *r)
 Release a lock on this node. More...
 
virtual void report (VFS_request *r)
 Report debugging information about the current state of this node. More...
 
virtual void requestLock (VFS_request *r)
 Request a lock on this node. More...
 
virtual void rm (VFS_request *r)
 Remove a child entry from a node, or the node itself. More...
 
virtual void subscribe (VFS_request *r)
 Add an entry to this node's _subscription list. More...
 
virtual void unsubscribe (VFS_request *r)
 Remove an entry from this node's _subscription list. More...
 
virtual void unsubscribePath (QString path)
 Unsubscribe all references to a subpath. More...
 

Static Protected Attributes

static QMimeDatabase _mimeDatabase
 The mime database, used for metadata. More...
 

Private Attributes

bool _container
 
QJsonObject _data
 
QJsonObject _metadata
 
QDateTime _modified
 
bool _raw
 
QByteArray _rawData
 

Additional Inherited Members

- Signals inherited from VFS_node
void diff (VFS_node *origin, VFS_request *t)
 Emit a diff, which will trigger notifySubscribers() for a mounted node. More...
 
void finished (bool andDelete=false)
 Emitted if a thread fails to create its node, or a node is rm()'d, or any other reason a node has completed its lifecycle. It is deleted if andDelete==true. More...
 
void mounted ()
 Emitted when a node is mount()ed. More...
 
void unmounted (VFS_node *self)
 Emitted when a node is unmount()ed. More...
 
- Static Public Member Functions inherited from VFS_node
static bool __isNode (VFS_node *)
 Check to see if a node is in the global registry. More...
 
static QString code (QString nodename, QString libname, QString &error)
 Fetch code or any other resource from a node. More...
 
- Protected Attributes inherited from VFS_node
VFS_children _children
 This node's children. More...
 
QMutex _lock
 A recursive mutex that is local to this node. More...
 
VFS_subscriptionType _subscribers
 This node's subscribers. These subscribers will receive diff notifications. More...
 

Detailed Description

A VFS_datastore subclass for storing data directly in memory as if it was a filesystem.

The VFS_ephemeral node is a direct subclass of VFS_node with the intention of storing raw or JSON data.

Warning
There is currently no mechanism for monitoring the total size of data consumed in an ephemeral tree. Be sure to monitor usage through some other means.

Definition at line 10 of file VFS_ephemeral.h.

Constructor & Destructor Documentation

◆ VFS_ephemeral()

VFS_ephemeral::VFS_ephemeral ( bool  container,
bool  raw = false 
)
explicit

Create a VFS_ephemeral node.

Parameters
containerWhether this node is a container
rawDoes this node contain raw data?

Definition at line 35 of file VFS_ephemeral.cpp.

◆ ~VFS_ephemeral()

VFS_ephemeral::~VFS_ephemeral ( )
virtual

Definition at line 43 of file VFS_ephemeral.cpp.

Member Function Documentation

◆ append()

VFS_node * VFS_ephemeral::append ( QString  nodename,
VFS_node node,
bool  containerCheck = true,
QString  user = "server" 
)
virtual

Append a VFS_ephemeral node as a child of this node.

Parameters
nodenameThe child name
nodeThe VFS_node instance pointer, which must be of type VFS_ephemeral.
containerCheckThis flag is ignored for VFS_ephemeral.
userThe user adding the node, used for logging.
Returns
The added node, or nullptr if unable to add.
See also
VFS_node::append()

Reimplemented from VFS_node.

Definition at line 139 of file VFS_ephemeral.cpp.

◆ applyDiff

void VFS_ephemeral::applyDiff ( VFS_request r)
virtualslot

Apply a diff to this node's data.

Parameters
rThe VFS_request object

This calls submit() using the request object. This does not call VFS_node::applyDiff() because the submit function should emit a diff() as needed.

Definition at line 387 of file VFS_ephemeral.cpp.

◆ fetchRange()

void VFS_ephemeral::fetchRange ( VFS_request r)
protectedvirtual

Fetch a byte range within a file.

Parameters
rThe VFS_request object

It will not return chunks larger than VFS_EPHEMERAL_MAX_READABLE, which is 100mb.

r->_metadata["range"] should include an object with a chunk range:

//metadata to return 500 bytes of data:
{
"range": {
"s": 0,
"e": 499
}
}

Where s and e indicate start and end of the range, inclusive.

If s or e is missing, value of 0 will be used. If s or e is a negative value, the start will be an offset from the end of the file. If e is 0, the end of the file will be used. If s >= e, no data will be returned.

Definition at line 419 of file VFS_ephemeral.cpp.

◆ find()

VFS_node * VFS_ephemeral::find ( VFS_request r)
virtual

Find a node using a VFS_request.

Parameters
rThe VFS_request object
Returns
The found node, or null if not found.

Reimplemented from VFS_node.

Definition at line 80 of file VFS_ephemeral.cpp.

◆ icon()

QByteArray VFS_ephemeral::icon ( )
protectedvirtual

The "disk" icon found in the VFS_icons library.

Returns
The "disk" icon
See also
VFS_node::icon()

Reimplemented from VFS_node.

Definition at line 55 of file VFS_ephemeral.cpp.

◆ isContainer()

bool VFS_ephemeral::isContainer ( )
virtual

The VFS_ephemeral node is a container or a document.

Returns
The _container value of the node.

Reimplemented from VFS_node.

Definition at line 122 of file VFS_ephemeral.cpp.

◆ ls()

void VFS_ephemeral::ls ( VFS_request r)
protectedvirtual

List the contents of a directory.

Parameters
rThe VFS_request object

Only containers can be listed. If _container is false, this operation is an error.

Reimplemented from VFS_node.

Definition at line 202 of file VFS_ephemeral.cpp.

◆ metadata()

void VFS_ephemeral::metadata ( VFS_request r)
protectedvirtual

Fetch the metadata for this node.

Parameters
rThe VFS_request object

Uses VFS_node_type::getType() to determine a type for a path.

Reimplemented from VFS_node.

Definition at line 306 of file VFS_ephemeral.cpp.

◆ populateMetadata()

void VFS_ephemeral::populateMetadata ( QString  name)

Use an incoming file type to try to populate mime type.

Parameters
nameThe name this entry is being appended as

The _metadata["raw"] field will also be populated if _raw==true.

Definition at line 161 of file VFS_ephemeral.cpp.

◆ read()

void VFS_ephemeral::read ( VFS_request r)
protectedvirtual

Read the contents of this node.

Parameters
rThe VFS_request object

If r->_metadata["createIfMissing"]==true, and the entry does not exist, we will populate the _data and _rawData fields from the VFS_request.

See also
VFS_node::read()
VFS_HD::write()

Reimplemented from VFS_node.

Definition at line 232 of file VFS_ephemeral.cpp.

◆ reportDetails()

QString VFS_ephemeral::reportDetails ( )
virtual

Report the current cache usage.

Returns
Return cache usage and cache entry count.

Reimplemented from VFS_node.

Definition at line 66 of file VFS_ephemeral.cpp.

◆ size()

quint64 VFS_ephemeral::size ( )
protected

Return the size of the data in this node.

Returns
The size (bytes consumed in memory) of the data in this node

The size is calculated from _rawData or _data (as json), based on the value of _raw

Definition at line 188 of file VFS_ephemeral.cpp.

◆ submit()

void VFS_ephemeral::submit ( VFS_request r)
protectedvirtual

Submit data to this node, applying the data as a diff.

Parameters
rThe VFS_request object

Apply the r->_data as a diff using VFS_datastore::applyJsonDiff(), or if r->_metadata["method"]=="delta", use VFS_datastore::applyDeltaDiff().

A submit() to a directory is illegal.

If r->_success==true, emit a diff() of the applied data to subscribers.

See also
VFS_HD::submit()
VFS_datastore::applyJsonDiff()
VFS_datastore::applyDeltaDiff()

Reimplemented from VFS_node.

Definition at line 337 of file VFS_ephemeral.cpp.

◆ write()

void VFS_ephemeral::write ( VFS_request r)
protectedvirtual

Write data to this node.

Parameters
rThe VFS_request object

The data for this node will be entirely replaced by r->_data and r->_rawData.

Because this is a write() operation, a diff() is emitted.

See also
VFS_HD::write()

Reimplemented from VFS_node.

Definition at line 286 of file VFS_ephemeral.cpp.

Member Data Documentation

◆ _container

bool VFS_ephemeral::_container
private

Definition at line 45 of file VFS_ephemeral.h.

◆ _data

QJsonObject VFS_ephemeral::_data
private

Definition at line 48 of file VFS_ephemeral.h.

◆ _metadata

QJsonObject VFS_ephemeral::_metadata
private

Definition at line 47 of file VFS_ephemeral.h.

◆ _mimeDatabase

QMimeDatabase VFS_ephemeral::_mimeDatabase
staticprotected

The mime database, used for metadata.

Definition at line 28 of file VFS_ephemeral.h.

◆ _modified

QDateTime VFS_ephemeral::_modified
private

Definition at line 51 of file VFS_ephemeral.h.

◆ _raw

bool VFS_ephemeral::_raw
private

Definition at line 46 of file VFS_ephemeral.h.

◆ _rawData

QByteArray VFS_ephemeral::_rawData
private

Definition at line 49 of file VFS_ephemeral.h.


The documentation for this class was generated from the following files: