// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be found
// in the LICENSE file.

library fuchsia.pkg;
using zx;

/// Administrates the critical system blobs on the system.
[Discoverable]
protocol SystemBlobAdmin {
    /// Allows blobs from old system versions to be garbage collected. The current system blobs
    /// will not be collected.
    ReleaseRetainedBlobs();

    /// Adds the blobs listed in the |retention_index| blob to the retention list. This should be
    /// called during a system upgrade with the new system blob in order to make sure they are not
    /// garbage collected before the upgrade completes.
    ///
    /// Arguments:
    /// * |retention_index| is the blob id for a list of blobs to retain.
    ///
    /// Return Values:
    /// * |ZX_OK| if the blobs were successfully retained.
    /// * |ZX_ERR_IO| if there is some other unspecified error during I/O.
    /// * |ZX_ERR_NOT_FOUND| if the |retention_index| could not be found on the local system.
    RetainBlobs(BlobId retention_index) -> (zx.status status);
};
