wrench::XRootD::Node

class Node : public wrench::StorageService

An XRootD node, this can be either a supervisor or a storage server. All nodes are classified as storage services even though not all have physical storage Unless a node is also has an internal storage service, some normal storage service messages will error out. Only File Read, locate, and delete are supported at this time, anything else requires talking directly to a specific file server with physical storage. Nodes not directly be created, instead an XRootD Metavisor should create them.

Public Functions

std::shared_ptr<Node> addChildStorageServer(const std::string &hostname, const std::string &mount_point, WRENCH_PROPERTY_COLLECTION_TYPE storage_property_list = {}, WRENCH_MESSAGE_PAYLOADCOLLECTION_TYPE storage_messagepayload_list = {}, WRENCH_PROPERTY_COLLECTION_TYPE node_property_list = {}, WRENCH_MESSAGE_PAYLOADCOLLECTION_TYPE node_messagepayload_list = {})

Adds a child, which will be a storage server, to a node.

Parameters:
  • hostname – the name of the host on which the child will run

  • mount_point – the mount point at that host

  • storage_property_list – the storage server’s property list

  • storage_messagepayload_list – the storage server’s message payload list

  • node_property_list – the XRootD node’s property list

  • node_messagepayload_list – the XRootD node’s message payload list

Returns:

The child

std::shared_ptr<Node> addChildSupervisor(const std::string &hostname)

Adds a child, which will be a supervisor, to a node.

Parameters:

hostname – the name of the host on which the child will run

Returns:

The child

inline void createFile(const std::shared_ptr<DataFile> &file)

Create a file at the storage service (in zero simulated time)

Parameters:

file – a file

inline void createFile(const std::shared_ptr<DataFile> &file, const std::string &path)

Create a file at the storage service (in zero simulated time)

Parameters:
  • file – a file

  • path – a path

virtual void createFile(const std::shared_ptr<FileLocation> &location) override

create a new file in the federation on this node. Use instead of wrench::Simulation::createFile when adding files to XRootD

Parameters:

location – a file location, must be the same object as the function is invoked on

Throws:

std::invalid_argument

void createFile(const std::shared_ptr<FileLocation> &location) = 0

Create a file at the storage service (in zero simulated time)

Parameters:

location – a location

inline void deleteFile(const std::shared_ptr<DataFile> &file)

Delete a file at the storage service (incurs simulated overheads)

Parameters:

file – a file

inline void deleteFile(const std::shared_ptr<DataFile> &file, const std::string &path)

Delete a file at the storage service (incurs simulated overheads)

Parameters:
  • file – a file

  • path – a path

inline void deleteFile(const std::shared_ptr<FileLocation> &location)

Delete a file at the storage service (incurs simulated overheads)

Parameters:

location – a location

virtual double getBufferSize() const override

Determine the storage service’s buffer size.

Returns:

a size in bytes

std::shared_ptr<Node> getChild(unsigned int n)

A meta tree traversal operation to get the nth child of this node.

Parameters:

n – The index of the child to receive. Nodes are in order added

Returns:

the Child Nodes shared pointer, or nullptr if this node is a leaf

virtual double getFileLastWriteDate(const std::shared_ptr<FileLocation> &location) override

Get a file’s last write date at a location (in zero simulated time)

Parameters:

location – the file location

Returns:

the file’s last write date, or -1 if the file is not found

virtual double getLoad() override

Get the load of the underlying storage service.

Returns:

the load on the service

Node *getParent()

A Meta tree traversal to get the parent of this node.

Returns:

pointer supervisor. Will be nullptr if root

virtual double getTotalSpace() override

Get the storage service’s total space (in zero simulated time)

Returns:

a capacity in bytes

inline bool hasFile(const std::shared_ptr<DataFile> &file)

Determines whether a file is present at the storage service (in zero simulated time)

Parameters:

file – a file

Returns:

true if the file is present, false otherwise

inline bool hasFile(const std::shared_ptr<DataFile> &file, const std::string &path)

Determines whether a file is present at the storage service (in zero simulated time)

Parameters:
  • file – a file

  • path – a path

Returns:

true if the file is present, false otherwise

virtual bool hasFile(const std::shared_ptr<FileLocation> &location) override

Determines whether the storage service has the file. This doesn’t simulate anything and is merely a zero-simulated-time data structure lookup. If you want to simulate the overhead of querying the StorageService, instead use lookupFile().

Parameters:

location – a location

Returns:

true if the file is present, false otherwise

bool hasFile(const std::shared_ptr<FileLocation> &location) = 0

Determines whether a file is present at the storage service (in zero simulated time)

Parameters:

location – a location

Returns:

true if the file is present, false otherwise

virtual bool isBufferized() const override

Determine whether the storage service is bufferized.

Returns:

true if bufferized, false otherwise

inline bool lookupFile(const std::shared_ptr<DataFile> &file)

Lookup whether a file exists on the storage service (incurs simulated overheads)

Parameters:

file – a file

Returns:

true if the file is present, or false

inline bool lookupFile(const std::shared_ptr<DataFile> &file, const std::string &path)

Lookup whether a file exists on the storage service (incurs simulated overheads)

Parameters:
  • file – a file

  • path – a path

Returns:

true if the file is present, or false

inline bool lookupFile(const std::shared_ptr<FileLocation> &location)

Lookup whether a file exists at a location on the storage service (incurs simulated overheads)

Parameters:

location – a location

Returns:

true if the file is present, or false

inline void readFile(const std::shared_ptr<DataFile> &file)

Read a file at the storage service (incurs simulated overheads)

Parameters:

file – a file

inline void readFile(const std::shared_ptr<DataFile> &file, const std::string &path)

Read a file at the storage service (incurs simulated overheads)

Parameters:
  • file – a file

  • path – a path

inline void readFile(const std::shared_ptr<DataFile> &file, const std::string &path, double num_bytes)

Read a file at the storage service (incurs simulated overheads)

Parameters:
  • file – a file

  • path – a path

  • num_bytes – a number of bytes to read

inline void readFile(const std::shared_ptr<DataFile> &file, double num_bytes)

Read a file at the storage service (incurs simulated overheads)

Parameters:
  • file – a file

  • num_bytes – a number of bytes to read

inline void readFile(const std::shared_ptr<FileLocation> &location)

Read a file at the storage service (incurs simulated overheads)

Parameters:

location – a location

inline void readFile(const std::shared_ptr<FileLocation> &location, double num_bytes)

Read a file at the storage service (incurs simulated overheads)

Parameters:
  • location – a location

  • num_bytes – a number of bytes to read

virtual void removeDirectory(const std::string &path) override

Remove a directory and all its content at the Node (in zero simulated time)

Parameters:

path – a path

inline void removeFile(const std::shared_ptr<DataFile> &file)

Remove a file at the storage service (in zero simulated time)

Parameters:

file – a file

inline void removeFile(const std::shared_ptr<DataFile> &file, const std::string &path)

Remove a file at the storage service (in zero simulated time)

Parameters:
  • file – a file

  • path – a path

virtual void removeFile(const std::shared_ptr<FileLocation> &location) override

remove a new file in the federation on this node.

Parameters:

location – a file location, must be the same object as the function is invoked on

Throws:

std::invalid_argument

void removeFile(const std::shared_ptr<FileLocation> &location) = 0

Remove a file at the storage service (in zero simulated time)

Parameters:

location – a location

virtual bool reserveSpace(std::shared_ptr<FileLocation> &location) override

Reserve space at the storage service.

Parameters:

location – a location

Returns:

true if success, false otherwise

virtual void unreserveSpace(std::shared_ptr<FileLocation> &location) override

Unreserve space at the storage service.

Parameters:

location – a location

inline void writeFile(const std::shared_ptr<DataFile> &file)

Write a file at the storage service (incurs simulated overheads)

Parameters:

file – a file

inline void writeFile(const std::shared_ptr<DataFile> &file, const std::string &path)

Write a file at the storage service (incurs simulated overheads)

Parameters:
  • file – a file

  • path – a path

inline void writeFile(const std::shared_ptr<FileLocation> &location)

Write a file at the storage service (incurs simulated overheads)

Parameters:

location – a location

virtual void writeFile(simgrid::s4u::Mailbox *answer_mailbox, const std::shared_ptr<FileLocation> &location, bool wait_for_answer) override

@brief write a file on this node.

Parameters:
  • answer_mailbox – a mailbox on which to send the answer messagej

  • location – a location

  • wait_for_answer – true if this method should wait for the answer, false otherwise

    @throw std::invalid_argument