ARC SDK
DataPointDelegate.h
1 // -*- indent-tabs-mode: nil -*-
2 
3 #ifndef __ARC_DATAPOINTDELEGATE_H__
4 #define __ARC_DATAPOINTDELEGATE_H__
5 
6 #include <list>
7 #include <string>
8 
9 #include <arc/Thread.h>
10 #include <arc/URL.h>
11 #include <arc/Run.h>
12 #include <arc/Utils.h>
13 #include "DataPointDirect.h"
14 
15 namespace Arc {
16 
17 
19  private:
20  class LogRedirect: public Run::Data {
21  public:
22  LogRedirect(): level_(FATAL) { };
23  virtual ~LogRedirect() { Flush(); };
24  virtual void Append(char const* data, unsigned int size);
25  virtual void Remove(unsigned int size);
26  virtual char const* Get() const;
27  virtual unsigned int Size() const;
28  void Flush();
29  private:
30  // for sanity checks
31  static std::string::size_type const level_size_max_;
32  static std::string::size_type const buffer_size_max_;
33  LogLevel level_;
34  std::string buffer_;
35  };
36 
37  static Logger logger;
38  LogRedirect log_redirect;
39 
40  SimpleCondition cond;
41 
42  bool reading;
43  bool writing;
44  Arc::CountedPointer<Run> helper_run;
45  DataStatus data_status;
46  std::string exec_path;
47  std::list<std::string> additional_args;
48 
49  static void read_thread(void *arg);
50  static void write_thread(void *arg);
51 
52  DataStatus StartCommand(Arc::CountedPointer<Arc::Run>& run, std::list<std::string>& argv, DataBuffer& buf, DataStatus::DataStatusType errCode);
53  DataStatus StartCommand(Arc::CountedPointer<Arc::Run>& run, std::list<std::string>& argv, DataStatus::DataStatusType errCode);
55  DataStatus EndCommand(Arc::CountedPointer<Arc::Run>& run, DataStatus::DataStatusType errCode, char tag);
56 
57  protected:
58  virtual DataStatus Transfer3rdParty(const URL& source, const URL& destination, TransferCallback callback = NULL);
59 
60  public:
61  static char const * ReadCommand;
62  static char const * WriteCommand;
63  static char const * MkdirCommand;
64  static char const * MkdirRecursiveCommand;
65  static char const * CheckCommand;
66  static char const * RemoveCommand;
67  static char const * StatCommand;
68  static char const * ListCommand;
69  static char const * RenameCommand;
70  static char const * TransferFromCommand;
71  static char const * TransferToCommand;
72  static char const * Transfer3rdCommand;
73 
75  DataPointDelegate(char const* module_name, const URL& url, const UserConfig& usercfg, PluginArgument* parg);
76 
78  DataPointDelegate(char const* exec_path, std::list<std::string> const & extra, const URL& url, const UserConfig& usercfg, PluginArgument* parg);
79 
80  virtual ~DataPointDelegate();
81 
82  virtual DataStatus StartReading(DataBuffer& buf);
83  virtual DataStatus StartWriting(DataBuffer& buf,
84  DataCallback *space_cb = NULL);
85  virtual DataStatus StopReading();
86  virtual DataStatus StopWriting();
87  virtual DataStatus Check(bool check_meta);
88  virtual DataStatus Remove();
89  virtual DataStatus CreateDirectory(bool with_parents=false);
91  virtual DataStatus List(std::list<FileInfo>& files, DataPointInfoType verb = INFO_TYPE_ALL);
92  virtual DataStatus Rename(const URL& newurl);
93  virtual DataStatus Transfer(const URL& otherendpoint, bool source, TransferCallback callback = NULL);
94  virtual bool WriteOutOfOrder() const;
95  virtual bool ProvidesMeta() const;
96  virtual const std::string DefaultCheckSum() const;
97  virtual bool RequiresCredentials() const;
98  };
99 
100 } // namespace ArcDMCGridFTP
101 
102 #endif // __ARC_DATAPOINTDELEGATE_H__
103 
Arc namespace contains all core ARC classes.
Definition: ArcConfig.h:11
Simple triggered condition.
Definition: Thread.h:150
virtual bool RequiresCredentials() const
Returns true if some kind of credentials are needed to use this DataPoint.
User configuration class
Definition: UserConfig.h:196
DataStatusType
Status codes.
Definition: DataStatus.h:64
virtual DataStatus Transfer3rdParty(const URL &source, const URL &destination, TransferCallback callback=NULL)
Perform third party transfer.
URL url
URL supplied in constructor.
Definition: DataPoint.h:799
Status code returned by many DataPoint methods.
Definition: DataStatus.h:54
virtual DataStatus Stat(FileInfo &file, DataPointInfoType verb=INFO_TYPE_ALL)
Retrieve information about this object.
A logger class.
Definition: Logger.h:493
virtual DataStatus Remove()
Remove/delete object at URL.
virtual DataStatus StopReading()
Stop reading.
Wrapper for pointer with automatic destruction and multiple references.
Definition: Utils.h:183
virtual DataStatus StopWriting()
Stop writing.
unsigned long long int size
Size of object represented by DataPoint.
Definition: DataPoint.h:805
LogLevel
Logging levels for tagging and filtering log messages.
Definition: Logger.h:20
const UserConfig usercfg
UserConfig supplied in constructor.
Definition: DataPoint.h:801
DataPointDelegate(char const *module_name, const URL &url, const UserConfig &usercfg, PluginArgument *parg)
Create object which starts special executable which loads specified module.
virtual bool ProvidesMeta() const
Check if endpoint can provide at least some meta information directly.
virtual bool WriteOutOfOrder() const
Returns true if DataPoint supports receiving data out of order during writing.
Represents set of buffers.
Definition: DataBuffer.h:19
Class to represent general URLs.
Definition: URL.h:88
DataPointInfoType
Describes type of information about URL to request.
Definition: DataPoint.h:150
virtual DataStatus CreateDirectory(bool with_parents=false)
Create a directory.
Definition: Logger.h:30
virtual DataStatus StartReading(DataBuffer &buf)
Start reading data from URL.
Callbacks to be used when there is not enough space on the local filesystem.
Definition: DataCallback.h:20
virtual DataStatus Transfer(const URL &otherendpoint, bool source, TransferCallback callback=NULL)
Do a transfer in a single operation.
Definition: Run.h:23
DataPointDirect represents "physical" data objects.
Definition: DataPointDirect.h:26
void(* TransferCallback)(unsigned long long int bytes_transferred)
Callback for use in protocol-internal or 3rd party transfers.
Definition: DataPoint.h:131
virtual const std::string DefaultCheckSum() const
Default checksum type (varies by protocol)
All the parameters.
Definition: DataPoint.h:160
virtual DataStatus List(std::list< FileInfo > &files, DataPointInfoType verb=INFO_TYPE_ALL)
List hierarchical content of this object.
virtual DataStatus StartWriting(DataBuffer &buf, DataCallback *space_cb=NULL)
Start writing data to URL.
Definition: DataPointDelegate.h:18
FileInfo stores information about files (metadata).
Definition: FileInfo.h:25
virtual DataStatus Rename(const URL &newurl)
Rename a URL.
virtual DataStatus Check(bool check_meta)
Query the DataPoint to check if object is accessible.