Remoto - VFS: VFS_datastore Class Reference
Remoto - VFS

A base class for creating storage nodes in VFS. More...

#include <VFS_datastore.h>

Inheritance diagram for VFS_datastore:
VFS_node VFS_HD VFS_mongo

Public Member Functions

 VFS_datastore (quint64 size, bool debug=false)
 
virtual ~VFS_datastore ()
 
virtual VFS_nodefind (VFS_request *r)
 
virtual bool isContainer ()
 All datastore subclasses are containers. 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...
 
virtual VFS_nodeappend (QString name, VFS_node *node, bool containerCheck=true, QString user="server")
 Append a VFS_node as a child of this node. 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...
 

Static Public Member Functions

static QString applyDeltaDiff (QString data, QJsonObject delta, QString trace="", QString user="server")
 Apply a delta diff to a json object. More...
 
static QJsonObject applyJsonDiff (QJsonObject obj, QJsonObject diff, QString trace="", QString user="server")
 Apply a json diff to a json object. 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

VFS_datastore_cache _cache
 The data cache. More...
 
bool _debug
 Debug mode. 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...
 

Additional Inherited Members

- 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...
 
- 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...
 
- 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 QByteArray icon ()
 Fetch the icon for a node. 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 ls (VFS_request *r)
 List the contents of this node. More...
 
virtual void metadata (VFS_request *r)
 Fetch the metadata of this node. More...
 
virtual void read (VFS_request *r)
 Return the data contents of this node, or if it's a container call ls() 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 submit (VFS_request *r)
 Submit a diff to a node. 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...
 
virtual void write (VFS_request *r)
 Write data to this node. More...
 

Detailed Description

A base class for creating storage nodes in VFS.

This will include a VFS_datastore_cache for VFS_datastore_cache_entry subclasses.

The cache will hold current versions of documents and post them to the storage medium at some interval.

See also
VFS_datastore_cache

Definition at line 83 of file VFS_datastore.h.

Constructor & Destructor Documentation

◆ VFS_datastore()

VFS_datastore::VFS_datastore ( quint64  size,
bool  debug = false 
)
explicit
Parameters
sizeThe initial size of the cache
debugDebug mode, for verbose output

Definition at line 366 of file VFS_datastore.cpp.

◆ ~VFS_datastore()

VFS_datastore::~VFS_datastore ( )
virtual

Definition at line 373 of file VFS_datastore.cpp.

Member Function Documentation

◆ applyDeltaDiff()

QString VFS_datastore::applyDeltaDiff ( QString  data,
QJsonObject  diff,
QString  trace = "",
QString  user = "server" 
)
static

Apply a delta diff to a json object.

Parameters
dataThe data to apply the diff to
diffThe diff value(s)
traceA trace string, for debugging output
userThe user requesting the diff, for debug logging
Returns
The diff result

This global static function uses the delta diff rules.

Warning
This is only used by the codeEditor IDE plugin, and is otherwise not very useful. As this matures, it will be moved to its own utility library for global access.

Definition at line 539 of file VFS_datastore.cpp.

◆ applyJsonDiff()

QJsonObject VFS_datastore::applyJsonDiff ( QJsonObject  obj,
QJsonObject  diff,
QString  trace = "",
QString  user = "server" 
)
static

Apply a json diff to a json object.

Parameters
objThe object to apply the diff to
diffThe diff value(s)
traceA trace string, for debugging output
userThe user requesting the diff, for debug logging
Returns
The diff result

This global static function applies the json diff rules.

Warning
As this matures, it will be moved to its own utility library for global access.
See also
Diffs

Definition at line 433 of file VFS_datastore.cpp.

◆ find()

VFS_node * VFS_datastore::find ( VFS_request r)
virtual
Parameters
rThe VFS_request object
Returns
this

Because a VFS_datastore is a VFS filesystem boundary node, all VFS_requests must be handled here, and therefore find() will always return this.

Reimplemented from VFS_node.

Definition at line 398 of file VFS_datastore.cpp.

◆ isContainer()

bool VFS_datastore::isContainer ( )
virtual

All datastore subclasses are containers.

Returns
Always returns true.

The assumption is that this node is a container for other entries.

Reimplemented from VFS_node.

Definition at line 385 of file VFS_datastore.cpp.

◆ reportDetails()

QString VFS_datastore::reportDetails ( )
virtual

Report the current cache usage.

Returns
Return cache usage and cache entry count

Reimplemented from VFS_node.

Reimplemented in VFS_mongo, and VFS_HD.

Definition at line 411 of file VFS_datastore.cpp.

Member Data Documentation

◆ _cache

VFS_datastore_cache VFS_datastore::_cache
protected

The data cache.

Definition at line 100 of file VFS_datastore.h.

◆ _debug

bool VFS_datastore::_debug
protected

Debug mode.

Definition at line 101 of file VFS_datastore.h.


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