pub struct PingUploadManager { /* private fields */ }
Expand description

Manages the pending pings queue and directory.

Implementations§

source§

impl PingUploadManager

source

pub fn new<P: Into<PathBuf>>(data_path: P, language_binding_name: &str) -> Self

Creates a new PingUploadManager.

Arguments
  • data_path - Path to the pending pings directory.
  • language_binding_name - The name of the language binding calling this managers instance.
Panics

Will panic if unable to spawn a new thread.

source

pub fn scan_pending_pings_directories( &self, trigger_upload: bool ) -> JoinHandle<()>

Spawns a new thread and processes the pending pings directories, filling up the queue with whatever pings are in there.

Returns

The JoinHandle to the spawned thread

source

pub fn enqueue_ping(&self, glean: &Glean, ping: PingPayload)

Enqueue a ping for upload.

source

pub fn set_rate_limiter(&mut self, interval: u64, max_tasks: u32)

Adds rate limiting capability to this upload manager.

The rate limiter will limit the amount of calls to get_upload_task per interval.

Setting this will restart count and timer in case there was a previous rate limiter set (e.g. if we have reached the current limit and call this function, we start counting again and the caller is allowed to asks for tasks).

Arguments
  • interval - the amount of seconds in each rate limiting window.
  • max_tasks - the maximum amount of task requests allowed per interval.
source

pub fn enqueue_ping_from_file(&self, glean: &Glean, document_id: &str)

Reads a ping file, creates a PingRequest and adds it to the queue.

Duplicate requests won’t be added.

Arguments
  • glean - The Glean object holding the database.
  • document_id - The UUID of the ping in question.
source

pub fn clear_ping_queue(&self) -> RwLockWriteGuard<'_, VecDeque<PingRequest>>

Clears the pending pings queue, leaves the deletion-request pings.

source

pub fn get_upload_task(&self, glean: &Glean, log_ping: bool) -> PingUploadTask

Gets the next PingUploadTask.

Arguments
  • glean - The Glean object holding the database.
  • log_ping - Whether to log the ping before returning.
Returns

The next PingUploadTask.

source

pub fn process_ping_upload_response( &self, glean: &Glean, document_id: &str, status: UploadResult ) -> UploadTaskAction

Processes the response from an attempt to upload a ping.

Based on the HTTP status of said response, the possible outcomes are:

  • 200 - 299 Success Any status on the 2XX range is considered a succesful upload, which means the corresponding ping file can be deleted. Known 2XX status:

    • 200 - OK. Request accepted into the pipeline.
  • 400 - 499 Unrecoverable error Any status on the 4XX range means something our client did is not correct. It is unlikely that the client is going to recover from this by retrying, so in this case the corresponding ping file can also be deleted. Known 4XX status:

    • 404 - not found - POST/PUT to an unknown namespace
    • 405 - wrong request type (anything other than POST/PUT)
    • 411 - missing content-length header
    • 413 - request body too large Note that if we have badly-behaved clients that retry on 4XX, we should send back 202 on body/path too long).
    • 414 - request path too long (See above)
  • Any other error For any other error, a warning is logged and the ping is re-enqueued. Known other errors:

    • 500 - internal error
Note

The disk I/O performed by this function is not done off-thread, as it is expected to be called off-thread by the platform.

Arguments
  • glean - The Glean object holding the database.
  • document_id - The UUID of the ping in question.
  • status - The HTTP status of the response.

Trait Implementations§

source§

impl Debug for PingUploadManager

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, UT> HandleAlloc<UT> for T
where T: Send + Sync,

§

fn new_handle(value: Arc<T>) -> Handle

Create a new handle for an Arc value Read more
§

unsafe fn clone_handle(handle: Handle) -> Handle

Clone a handle Read more
§

unsafe fn consume_handle(handle: Handle) -> Arc<T>

Consume a handle, getting back the initial Arc<> Read more
§

unsafe fn get_arc(handle: Handle) -> Arc<Self>

Get a clone of the Arc<> using a “borrowed” handle. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.