libzypp  17.37.5
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 std::vector<zypp::Url> &urls, const std::string &id, ProvideMediaSpec &spec );
42  static expected<ProvideRequestRef> create ( ProvideItem &owner, const std::vector<zypp::Url> &urls, ProvideFileSpec &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 
61  void setUrls( const std::vector<zypp::Url> & urls ) {
62  _mirrors = urls;
63  }
64 
65  const std::vector<zypp::Url> &urls() const {
66  return _mirrors;
67  }
68 
69  zypp::Url url() const {
70  return _mirrors.front();
71  }
72 
73  void setUrl( const zypp::Url & url ) {
74  _mirrors = {url};
75  }
76 
77  void clearForRestart () {
78  _pastRedirects.clear();
79  _activeUrl.reset();
80  _myQueue.reset();
81  }
82 
83  private:
84  ProvideRequest( ProvideItem *owner, const std::vector<zypp::Url> &urls, ProvideMessage &&msg ) : _owner(owner), _message(std::move(msg) ), _mirrors(urls) {}
85  ProvideItem *_owner = nullptr; // destructor of ProvideItem will dequeue the item, so no need to do refcount here
87  std::vector<zypp::Url> _mirrors;
88  std::vector<zypp::Url> _pastRedirects;
89  std::optional<zypp::Url> _activeUrl;
90  ProvideQueueWeakRef _myQueue;
91  };
92 
94  {
95  public:
99  std::chrono::steady_clock::time_point _itemStarted;
100  std::chrono::steady_clock::time_point _itemFinished;
101  std::optional<ProvideItem::ItemStats> _prevStats;
102  std::optional<ProvideItem::ItemStats> _currStats;
104  };
105 
111  template< typename T >
112  class ProvidePromise : public AsyncOp<expected<T>>
113  {
114  public:
115  ProvidePromise( ProvideItemRef provideItem )
116  : _myProvide( provideItem )
117  {}
118 
120  {
121  auto prov = _myProvide.lock();
122  if ( prov )
123  prov->released();
124  }
125 
126  private:
127  ProvideItemWeakRef _myProvide; //weak reference to the internal item so we can cancel the op on desctruction
128  };
129 
134  {
135  public:
136 
137  static ProvideFileItemRef create ( const std::vector<zypp::Url> &urls,const ProvideFileSpec &request, ProvidePrivate &parent );
138 
139  // ProvideItem interface
140  void initialize () override;
142 
143  void setMediaRef ( Provide::MediaHandle &&hdl );
145 
146  ItemStats makeStats () override;
147  zypp::ByteCount bytesExpected () const override;
148 
149  protected:
150  ProvideFileItem ( const std::vector<zypp::Url> &urls,const ProvideFileSpec &request, ProvidePrivate &parent );
151 
152  void informalMessage ( ProvideQueue &, ProvideRequestRef req, const ProvideMessage &msg ) override;
153 
155  void finishReq ( ProvideQueue &queue, ProvideRequestRef finishedReq, const ProvideMessage &msg ) override;
156  void cancelWithError ( std::exception_ptr error ) override;
157  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;
158 
159  private:
160  Provide::MediaHandle _handleRef; //< If we are using a attached media, this will keep the reference around
161  bool _promiseCreated = false;
162  std::vector<zypp::Url> _mirrorList; //< All available URLs, first one is the primary
163  ProvideFileSpec _initialSpec; //< The initial spec as defined by the user code
164  zypp::Pathname _targetFile; //< The target file as reported by the worker
165  zypp::Pathname _stagingFile; //< The staging file as reported by the worker
166  zypp::ByteCount _expectedBytes; //< The nr of bytes we want to provide
168  };
169 
170 
175  {
176  public:
178  static AttachMediaItemRef create ( const std::vector<zypp::Url> &urls, const ProvideMediaSpec &request, ProvidePrivate &parent );
180 
182 
183  protected:
184  AttachMediaItem ( const std::vector<zypp::Url> &urls, const ProvideMediaSpec &request, ProvidePrivate &parent );
185 
186  // ProvideItem interface
187  void initialize () override;
188 
190  void finishReq ( ProvideQueue &queue, ProvideRequestRef finishedReq, const ProvideMessage &msg ) override;
191  void cancelWithError( std::exception_ptr error ) override;
192  void finishWithSuccess (AttachedMediaInfo_Ptr medium );
193  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;
194 
196 
197  private:
199  bool _promiseCreated = false;
201  std::vector<zypp::Url> _mirrorList; //< All available URLs, first one is the primary
202  ProvideMediaSpec _initialSpec; //< The initial spec as defined by the user code
205  MediaDataVerifierRef _verifier;
206  };
207 }
208 
209 #endif
std::vector< zypp::Url > _mirrorList
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 ProvideFileItemRef create(const std::vector< zypp::Url > &urls, const ProvideFileSpec &request, ProvidePrivate &parent)
Definition: provideitem.cc:565
ProvideQueue::Config::WorkerType _workerType
ProvidePromiseWeakRef< Provide::MediaHandle > _promise
AttachMediaItem(const std::vector< zypp::Url > &urls, const ProvideMediaSpec &request, ProvidePrivate &parent)
Definition: provideitem.cc:856
std::vector< zypp::Url > _pastRedirects
Definition: provideitem_p.h:88
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:812
ProvideQueueWeakRef _myQueue
Definition: provideitem_p.h:90
Store and operate with byte count.
Definition: ByteCount.h:31
ProvidePromiseRef< ProvideRes > promise()
Definition: provideitem.cc:592
void setUrls(const std::vector< zypp::Url > &urls)
Definition: provideitem_p.h:61
void initialize() override
Definition: provideitem.cc:878
std::weak_ptr< ProvidePromise< T > > ProvidePromiseWeakRef
Definition: providefwd_p.h:33
ProvideRequest(ProvideItem *owner, const std::vector< zypp::Url > &urls, ProvideMessage &&msg)
Definition: provideitem_p.h:84
std::chrono::steady_clock::time_point _itemFinished
MediaDataVerifierRef _verifier
std::optional< zypp::Url > _activeUrl
Definition: provideitem_p.h:89
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
void initialize() override
Definition: provideitem.cc:570
ProvideMessage _message
Definition: provideitem_p.h:86
const std::optional< zypp::Url > activeUrl() const
Returns the currenty active URL as set by the scheduler.
Definition: provideitem.cc:510
WeakPtr parent() const
Definition: base.cc:26
ProvideFileSpec _initialSpec
zypp::Url url() const
Definition: provideitem_p.h:69
void informalMessage(ProvideQueue &, ProvideRequestRef req, const ProvideMessage &msg) override
Definition: provideitem.cc:613
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:790
ItemStats makeStats() override
Definition: provideitem.cc:826
std::optional< ProvideItem::ItemStats > _currStats
ProvideItem * _owner
Definition: provideitem_p.h:85
Base::WeakPtr parent
Definition: base_p.h:22
ProvideFileItem(const std::vector< zypp::Url > &urls, const ProvideFileSpec &request, ProvidePrivate &parent)
Definition: provideitem.cc:559
static expected< ProvideRequestRef > create(ProvideItem &owner, const std::vector< zypp::Url > &urls, const std::string &id, ProvideMediaSpec &spec)
Definition: provideitem.cc:27
zypp::ByteCount bytesExpected() const override
Definition: provideitem.cc:851
const std::vector< zypp::Url > & urls() const
Definition: provideitem_p.h:65
void cancelWithError(std::exception_ptr error) override
SignalProxy< void(const zyppng::expected< AttachedMediaInfo * > &) > sigReady()
void setCurrentQueue(ProvideQueueRef ref)
Definition: provideitem.cc:500
ProvideItem * owner()
Definition: provideitem_p.h:45
zypp::Pathname _targetFile
sigc::connection connection
Definition: signals.h:180
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:98
static AttachMediaItemRef create(const std::vector< zypp::Url > &urls, const ProvideMediaSpec &request, ProvidePrivate &parent)
void setActiveUrl(const zypp::Url &urlToUse)
Definition: provideitem.cc:541
std::vector< zypp::Url > _mirrors
Definition: provideitem_p.h:87
static expected< ProvideRequestRef > createDetach(const zypp::Url &url)
Definition: provideitem.cc:75
ProvidePrivate & _parent
Definition: provideitem_p.h:97
ProvideItemPrivate(ProvidePrivate &parent, ProvideItem &pub)
Definition: provideitem_p.h:96
ProvidePromiseRef< Provide::MediaHandle > promise()
Definition: provideitem.cc:867
zypp::ByteCount _expectedBytes
ProvideQueueRef currentQueue()
Definition: provideitem.cc:505
Provide::MediaHandle _handleRef
Provide::MediaHandle & mediaRef()
Definition: provideitem.cc:608
void finishReq(ProvideQueue &queue, ProvideRequestRef finishedReq, const ProvideMessage &msg) override
std::vector< zypp::Url > _mirrorList
std::chrono::steady_clock::time_point _itemStarted
Definition: provideitem_p.h:99
ProvideMediaSpec _initialSpec
void setMediaRef(Provide::MediaHandle &&hdl)
Definition: provideitem.cc:603
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