Condividi tramite


Creare e gestire lease di BLOB con TypeScript

Questo articolo illustra come creare e gestire lease di BLOB usando la libreria client di archiviazione di Azure per JavaScript. È possibile usare la libreria client per acquisire, rinnovare, rilasciare e interrompere lease di BLOB.

Prerequisiti

  • Gli esempi in questo articolo presuppongono che sia già stato configurato un progetto per l’uso con la libreria client di Archiviazione BLOB di Azure per JavaScript. Per informazioni sulla configurazione del progetto, incluse l'installazione del pacchetto, l'importazione di moduli e la creazione di un oggetto client autorizzato per l'uso con le risorse dati, consultare Introduzione all'archiviazione BLOB di Azure e a TypeScript.
  • Il meccanismo di autorizzazione deve disporre delle autorizzazioni necessarie per utilizzare un lease di BLOB. Per ulteriori informazioni, consultare le linee guida per l'autorizzazione della seguente operazione API REST:

Informazioni sui lease di BLOB

Un lease crea e gestisce un blocco su un BLOB per operazioni di scrittura ed eliminazione. La durata del blocco può variare da 15 a 60 secondi o può essere infinita. Un lease su un BLOB fornisce accesso esclusivo al BLOB per scrittura ed eliminazione. Per scrivere su un BLOB con un lease attivo, un client deve includere l'ID del lease attivo insieme alla richiesta di scrittura.

Per ulteriori informazioni sugli stati di lease e su quando è possibile eseguire una determinata azione in un lease, consultare Stati e azioni di lease.

Tutte le operazioni di contenitore sono consentite su un contenitore che include BLOB con un lease attivo, inclusa l'operazione Elimina contenitore. Pertanto, un contenitore può essere eliminato anche se i BLOB al suo interno presentano lease attivi. Usare l'operazione Esegui lease del contenitore per controllare i diritti di eliminazione di un contenitore.

Le operazioni di lease sono gestite dalla classe BlobLeaseClient, che fornisce un client contenente tutte le operazioni di lease per BLOB e contenitori. Per ulteriori informazioni sui lease di contenitori che usano la libreria client, consultare Creare e gestire lease di contenitori con TypeScript.

Acquisire un lease

Quando si acquisisce un lease di un BLOB, si ottiene un ID del lease che può essere usato dal codice per operare sul BLOB. Se il BLOB ha già un lease attivo, è possibile richiedere un nuovo lease solo usando l'ID del lease attivo. Tuttavia, è possibile specificare una nuova durata del lease.

Per acquisire un lease, creare un‘istanza della classe BlobLeaseClient, quindi usare uno dei seguenti metodi:

Il seguente esempio acquisisce un lease di 30 secondi per un BLOB:

async function acquireBlobLeaseAsync(blobClient: BlobClient) {
  const leaseClient: BlobLeaseClient = blobClient.getBlobLeaseClient();
  await leaseClient.acquireLease(30);
  return leaseClient;
}

Rinnovare un lease

Il lease del BLOB può essere rinnovato se l'ID del lease specificato nella richiesta corrisponde a quello associato al BLOB. Il lease può essere rinnovato anche se scaduto, purché il BLOB non sia stato modificato o non sia stato associato a un nuovo lease dopo la scadenza di quello corrente. Quando si rinnova un lease, la durata del lease viene reimpostata.

Per rinnovare un lease, usare uno dei seguenti metodi in un'istanza BlobLeaseClient:

Il seguente esempio rinnova un lease per un BLOB:

async function renewBlobLeaseAsync(blobClient: BlobClient, leaseID: string) {
  const leaseClient: BlobLeaseClient = blobClient.getBlobLeaseClient(leaseID);
  await leaseClient.renewLease();
}

Rilasciare un lease

Un lease del BLOB può essere rilasciato se l'ID del lease specificato nella richiesta corrisponde a quello associato al BLOB. Il rilascio di un lease consente a un altro client di acquisire un lease per il BLOB non appena il rilascio è completato.

Per rilasciare un lease, usare uno dei seguenti metodi in un'istanza BlobLeaseClient:

Il seguente esempio rilascia un lease su un BLOB:

async function releaseBlobLeaseAsync(blobClient: BlobClient, leaseID: string) {
  const leaseClient: BlobLeaseClient = blobClient.getBlobLeaseClient(leaseID);
  await leaseClient.releaseLease();
}

Interrompere un lease

È possibile interrompere il lease di un BLOB se il BLOB presenta un lease attivo. Qualsiasi richiesta autorizzata può interrompere il lease; non è necessario che nella richiesta sia specificato un ID del lease corrispondente. Dopo essere stato interrotto, un lease non può essere rinnovato, e l'interruzione impedisce l'acquisizione di un nuovo lease fino alla scadenza o al rilascio del lease originale.

Per interrompere un lease, usare uno dei seguenti metodi in un'istanza BlobLeaseClient:

Il seguente esempio interrompe un lease su un BLOB:

async function breakBlobLeaseAsync(blobClient: BlobClient, breakPeriod: number) {
  const leaseClient: BlobLeaseClient = blobClient.getBlobLeaseClient();
  await leaseClient.breakLease(breakPeriod);
}

Stati e azioni dei lease

Il seguente diagramma illustra i cinque stati di un lease e i comandi o gli eventi che causano modifiche dello stato del lease.

A diagram showing blob lease states and state change triggers.

La seguente tabella elenca i cinque stati di lease, fornisce una breve descrizione di ciascun oggetto ed elenca le azioni di lease consentite in un determinato stato. Queste azioni di lease causano transizioni di stato, come illustrato nel diagramma.

Stato lease Descrizione Azioni di lease consentite
Disponibile Il lease è sbloccato e può essere acquisito. acquire
Con lease Il lease è bloccato. acquire (solo stesso ID del lease), renew, change, release e break
Scaduta La durata del lease è scaduta. acquire, renew, release e break
Interruzione Il lease è stato interrotto, ma rimarrà bloccato fino alla scadenza del periodo di interruzione. release e break
Interrotto Il lease è stato interrotto e il periodo di interruzione è scaduto. acquire, release e break

Dopo la scadenza del lease, il relativo ID viene mantenuto dal servizio BLOB finché il BLOB non viene modificato o finché non viene impostato un nuovo lease. Un client può tentare di rinnovare o rilasciare il lease usando l'ID del lease scaduto. Se questa operazione ha esito positivo, il client sa che il BLOB non è stato modificato dopo l'ultima validità dell'ID del lease. Se la richiesta ha esito negativo, il client sa che il BLOB è stato modificato o nuovamente sottoposto a lease dopo l'ultima attività del lease. Il client deve quindi acquisire un nuovo lease sul BLOB.

Se un lease scade anziché essere rilasciato intenzionalmente, il client potrebbe dover attendere fino a un minuto prima di poter acquisire un nuovo lease per il BLOB. Tuttavia, se il BLOB non è stato modificato, il client può rinnovare subito il lease con il relativo ID.

Non è possibile concedere un lease per uno snapshot BLOB, poiché gli snapshot sono per sola lettura. La richiesta di un lease per uno snapshot risulterà nel codice di stato 400 (Bad Request).

Risorse

Per altre informazioni sulla gestione dei lease BLOB tramite la libreria client di Archiviazione BLOB di Azure per JavaScript, consultare le seguenti risorse.

Operazioni dell'API REST

Azure SDK per JavaScript contiene librerie basate sull'API REST di Azure che consentono di interagire con le operazioni dell'API REST tramite paradigmi noti di JavaScript. I metodi per gestire i lease di BLOB tramite la libreria client usano la seguente operazione API REST:

Esempi di codice

Risorse per la libreria client

Vedi anche