libzypp  17.37.10
provideitem_p.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \----------------------------------------------------------------------/
9 *
10 * This file contains private API, this might break at any time between releases.
11 * You have been warned!
12 *
13 */
14 #ifndef ZYPP_MEDIA_PRIVATE_PROVIDE_ITEM_P_H_INCLUDED
15 #define ZYPP_MEDIA_PRIVATE_PROVIDE_ITEM_P_H_INCLUDED
16 
17 #include "providefwd_p.h"
18 #include "providequeue_p.h"
19 #include "attachedmediainfo_p.h"
20 #include "providemessage_p.h"
21 #include <zypp-media/ng/Provide>
22 #include <zypp-media/ng/ProvideItem>
23 #include <zypp-media/ng/ProvideRes>
24 #include <zypp-media/ng/ProvideSpec>
26 #include <set>
27 #include <variant>
28 
29 namespace zyppng {
30 
37  public:
38 
39  friend class ProvideItem;
40 
41  static expected<ProvideRequestRef> create( ProvideItem &owner, const zypp::MirroredOrigin &origin, const std::string &id, ProvideMediaSpec &spec );
44 
45  ProvideItem * owner() { return _owner; }
46 
47  uint code () const { return _message.code(); }
48 
49  void setCurrentQueue ( ProvideQueueRef ref );
50  ProvideQueueRef currentQueue ();
51 
52  const ProvideMessage &provideMessage () const { return _message; }
54 
58  const std::optional<zypp::Url> activeUrl() const;
59  void setActiveUrl ( const zypp::Url &urlToUse );
60 
62  _origin = std::move(origin);
63  }
64 
65  const zypp::MirroredOrigin &origin() const {
66  return _origin;
67  }
68 
69  zypp::Url url() const {
70  return _origin.authority().url();
71  }
72 
73  void setUrl( const zypp::Url & url ) {
76  }
77 
78  void clearForRestart () {
79  _pastRedirects.clear();
80  _activeUrl.reset();
81  _myQueue.reset();
82  }
83 
84  private:
86  ProvideItem *_owner = nullptr; // destructor of ProvideItem will dequeue the item, so no need to do refcount here
89  std::vector<zypp::Url> _pastRedirects;
90  std::optional<zypp::Url> _activeUrl;
91  ProvideQueueWeakRef _myQueue;
92  };
93 
95  {
96  public:
100  std::chrono::steady_clock::time_point _itemStarted;
101  std::chrono::steady_clock::time_point _itemFinished;
102  std::optional<ProvideItem::ItemStats> _prevStats;
103  std::optional<ProvideItem::ItemStats> _currStats;
105  };
106 
112  template< typename T >
113  class ProvidePromise : public AsyncOp<expected<T>>
114  {
115  public:
116  ProvidePromise( ProvideItemRef provideItem )
117  : _myProvide( provideItem )
118  {}
119 
121  {
122  auto prov = _myProvide.lock();
123  if ( prov )
124  prov->released();
125  }
126 
127  private:
128  ProvideItemWeakRef _myProvide; //weak reference to the internal item so we can cancel the op on desctruction
129  };
130 
135  {
136  public:
137 
138  static ProvideFileItemRef create ( zypp::MirroredOrigin origin,const ProvideFileSpec &request, ProvidePrivate &parent );
139 
140  // ProvideItem interface
141  void initialize () override;
143 
144  void setMediaRef ( Provide::MediaHandle &&hdl );
146 
147  ItemStats makeStats () override;
148  zypp::ByteCount bytesExpected () const override;
149 
150  protected:
152 
153  void informalMessage ( ProvideQueue &, ProvideRequestRef req, const ProvideMessage &msg ) override;
154 
156  void finishReq ( ProvideQueue &queue, ProvideRequestRef finishedReq, const ProvideMessage &msg ) override;
157  void cancelWithError ( std::exception_ptr error ) override;
158  expected<zypp::media::AuthData> authenticationRequired ( ProvideQueue &queue, ProvideRequestRef req, const zypp::Url &effectiveUrl, int64_t lastTimestamp, const std::map<std::string, std::string> &extraFields ) override;
159 
160  private:
161  Provide::MediaHandle _handleRef; //< If we are using a attached media, this will keep the reference around
162  bool _promiseCreated = false;
163  zypp::MirroredOrigin _origin; //< All available URLs
164  ProvideFileSpec _initialSpec; //< The initial spec as defined by the user code
165  zypp::Pathname _targetFile; //< The target file as reported by the worker
166  zypp::Pathname _stagingFile; //< The staging file as reported by the worker
167  zypp::ByteCount _expectedBytes; //< The nr of bytes we want to provide
169  };
170 
171 
176  {
177  public:
179  static AttachMediaItemRef create ( const zypp::MirroredOrigin &origin, const ProvideMediaSpec &request, ProvidePrivate &parent );
181 
183 
184  protected:
185  AttachMediaItem ( const zypp::MirroredOrigin &origin, const ProvideMediaSpec &request, ProvidePrivate &parent );
186 
187  // ProvideItem interface
188  void initialize () override;
189 
191  void finishReq ( ProvideQueue &queue, ProvideRequestRef finishedReq, const ProvideMessage &msg ) override;
192  void cancelWithError( std::exception_ptr error ) override;
193  void finishWithSuccess (AttachedMediaInfo_Ptr medium );
194  expected<zypp::media::AuthData> authenticationRequired ( ProvideQueue &queue, ProvideRequestRef req, const zypp::Url &effectiveUrl, int64_t lastTimestamp, const std::map<std::string, std::string> &extraFields ) override;
195 
197 
198  private:
200  bool _promiseCreated = false;
202  zypp::MirroredOrigin _origin; //< All available URLs
203  ProvideMediaSpec _initialSpec; //< The initial spec as defined by the user code
206  MediaDataVerifierRef _verifier;
207  };
208 }
209 
210 #endif
static AttachMediaItemRef create(const zypp::MirroredOrigin &origin, const ProvideMediaSpec &request, ProvidePrivate &parent)
expected< zypp::media::AuthData > authenticationRequired(ProvideQueue &queue, ProvideRequestRef req, const zypp::Url &effectiveUrl, int64_t lastTimestamp, const std::map< std::string, std::string > &extraFields) override
static expected< ProvideRequestRef > create(ProvideItem &owner, const zypp::MirroredOrigin &origin, const std::string &id, ProvideMediaSpec &spec)
Definition: provideitem.cc:27
ProvideQueue::Config::WorkerType _workerType
ProvidePromiseWeakRef< Provide::MediaHandle > _promise
std::vector< zypp::Url > _pastRedirects
Definition: provideitem_p.h:89
void finishWithSuccess(AttachedMediaInfo_Ptr medium)
expected< zypp::media::AuthData > authenticationRequired(ProvideQueue &queue, ProvideRequestRef req, const zypp::Url &effectiveUrl, int64_t lastTimestamp, const std::map< std::string, std::string > &extraFields) override
Definition: provideitem.cc:814
ProvideQueueWeakRef _myQueue
Definition: provideitem_p.h:91
Store and operate with byte count.
Definition: ByteCount.h:31
ProvidePromiseRef< ProvideRes > promise()
Definition: provideitem.cc:595
void initialize() override
Definition: provideitem.cc:880
std::weak_ptr< ProvidePromise< T > > ProvidePromiseWeakRef
Definition: providefwd_p.h:33
std::chrono::steady_clock::time_point _itemFinished
MediaDataVerifierRef _verifier
std::optional< zypp::Url > _activeUrl
Definition: provideitem_p.h:90
virtual void finishReq(ProvideQueue &queue, ProvideRequestRef finishedReq, const ProvideMessage &msg)
Definition: provideitem.cc:190
std::shared_ptr< ProvidePromise< T > > ProvidePromiseRef
Definition: providefwd_p.h:31
Signal< void(const zyppng::expected< AttachedMediaInfo * > &)> _sigReady
void onMasterItemReady(const zyppng::expected< AttachedMediaInfo *> &result)
Definition: Arch.h:363
std::optional< ProvideItem::ItemStats > _prevStats
zypp::MirroredOrigin _origin
Definition: provideitem_p.h:88
const zypp::Url & url() const
zypp::MirroredOrigin _origin
AttachMediaItem(const zypp::MirroredOrigin &origin, const ProvideMediaSpec &request, ProvidePrivate &parent)
Definition: provideitem.cc:858
void initialize() override
Definition: provideitem.cc:573
ProvideRequest(ProvideItem *owner, zypp::MirroredOrigin origin, ProvideMessage &&msg)
Definition: provideitem_p.h:85
zypp::MirroredOrigin _origin
ProvideMessage _message
Definition: provideitem_p.h:87
const zypp::MirroredOrigin & origin() const
Definition: provideitem_p.h:65
const std::optional< zypp::Url > activeUrl() const
Returns the currenty active URL as set by the scheduler.
Definition: provideitem.cc:513
WeakPtr parent() const
Definition: base.cc:26
ProvideFileSpec _initialSpec
Manages a data source characterized by an authoritative URL and a list of mirror URLs.
zypp::Url url() const
Definition: provideitem_p.h:69
void informalMessage(ProvideQueue &, ProvideRequestRef req, const ProvideMessage &msg) override
Definition: provideitem.cc:616
ProvideMessage & provideMessage()
Definition: provideitem_p.h:53
Signal< void(ProvideItem &item, ProvideItem::State oldState, ProvideItem::State newState)> _sigStateChanged
void cancelWithError(std::exception_ptr error) override
Definition: provideitem.cc:792
ItemStats makeStats() override
Definition: provideitem.cc:828
std::optional< ProvideItem::ItemStats > _currStats
ProvideItem * _owner
Definition: provideitem_p.h:86
Base::WeakPtr parent
Definition: base_p.h:22
zypp::ByteCount bytesExpected() const override
Definition: provideitem.cc:853
void cancelWithError(std::exception_ptr error) override
SignalProxy< void(const zyppng::expected< AttachedMediaInfo * > &) > sigReady()
void setCurrentQueue(ProvideQueueRef ref)
Definition: provideitem.cc:503
ProvideItem * owner()
Definition: provideitem_p.h:45
void setOrigin(zypp::MirroredOrigin origin)
Definition: provideitem_p.h:61
zypp::Pathname _targetFile
sigc::connection connection
Definition: signals.h:180
ProvideFileItem(zypp::MirroredOrigin origin, const ProvideFileSpec &request, ProvidePrivate &parent)
Definition: provideitem.cc:562
const ProvideMessage & provideMessage() const
Definition: provideitem_p.h:52
ProvidePromise(ProvideItemRef provideItem)
void finishReq(ProvideQueue &queue, ProvideRequestRef finishedReq, const ProvideMessage &msg) override
ProvideItem::State _itemState
Definition: provideitem_p.h:99
void setActiveUrl(const zypp::Url &urlToUse)
Definition: provideitem.cc:544
static expected< ProvideRequestRef > createDetach(const zypp::Url &url)
Definition: provideitem.cc:75
ProvidePrivate & _parent
Definition: provideitem_p.h:98
ProvideItemPrivate(ProvidePrivate &parent, ProvideItem &pub)
Definition: provideitem_p.h:97
ProvidePromiseRef< Provide::MediaHandle > promise()
Definition: provideitem.cc:869
zypp::ByteCount _expectedBytes
ProvideQueueRef currentQueue()
Definition: provideitem.cc:508
Provide::MediaHandle _handleRef
void setAuthority(OriginEndpoint newAuthority)
Provide::MediaHandle & mediaRef()
Definition: provideitem.cc:611
void finishReq(ProvideQueue &queue, ProvideRequestRef finishedReq, const ProvideMessage &msg) override
std::chrono::steady_clock::time_point _itemStarted
const OriginEndpoint & authority() const
ProvideMediaSpec _initialSpec
void setMediaRef(Provide::MediaHandle &&hdl)
Definition: provideitem.cc:606
static ProvideFileItemRef create(zypp::MirroredOrigin origin, const ProvideFileSpec &request, ProvidePrivate &parent)
Definition: provideitem.cc:568
void setUrl(const zypp::Url &url)
Definition: provideitem_p.h:73
ProvidePromiseWeakRef< ProvideRes > _promise
zypp::Pathname _stagingFile
Url manipulation class.
Definition: Url.h:92
ProvideItemWeakRef _myProvide