Condividi tramite


Creare e gestire lease di contenitori con Java

Questo articolo illustra come creare e gestire i lease di contenitori usando la libreria client di Archiviazione di Azure per Java. È possibile usare la libreria client per acquisire, rinnovare, rilasciare e interrompere i lease dei contenitori.

Prerequisiti

  • Questo articolo presuppone che sia già stato configurato un progetto per l'uso con la libreria client di Archiviazione BLOB di Azure per Java. Per informazioni sulla configurazione del progetto, incluse l'installazione del pacchetto, l'aggiunta di direttive import e la creazione di un oggetto client autorizzato, vedere Introduzione ad Archiviazione di Azure e Java.
  • Il meccanismo di autorizzazione deve disporre delle autorizzazioni per utilizzare un lease di contenitore. Per altre informazioni, vedere le linee guida per l'autorizzazione per l'operazione API REST seguente:

Informazioni sui lease contenitore

Un lease definisce e gestisce un blocco su un contenitore per le operazioni di eliminazione. La durata del blocco può variare da 15 a 60 secondi o può essere infinita. Un lease su un contenitore fornisce un accesso esclusivo in eliminazione al contenitore. Un lease sul contenitore controlla unicamente la possibilità di eliminare il contenitore tramite l'operazione dell'API REST Elimina contenitore. Per eliminare un contenitore con un lease attivo, un client deve includere l'ID lease attivo con la richiesta di eliminazione. Tutte le altre operazioni hanno esito positivo su un contenitore con lease senza l'ID. Se è stata abilitata l'eliminazione temporanea del contenitore, è possibile ripristinare i contenitori eliminati.

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

Le operazioni di lease vengono gestite dalla classe BlobLeaseClient, che fornisce un client contenente tutte le operazioni di lease per BLOB e contenitori. Per altre informazioni sui lease di BLOB tramite la libreria client, vedere Creare e gestire lease di BLOB con Java.

Acquisire un lease

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

Per acquisire un lease, creare un'istanza della classe BlobLeaseClient e quindi usare il metodo seguente:

L'esempio seguente acquisisce un lease di 30 secondi per un contenitore:

public BlobLeaseClient acquireContainerLease(BlobContainerClient container) {
    // Create the lease client
    BlobLeaseClient leaseClient = new BlobLeaseClientBuilder()
            .containerClient(container)
            .buildClient();

    // Acquire the lease - specify duration between 15 and 60 seconds, or -1 for
    // infinite duration
    String leaseID = leaseClient.acquireLease(30);
    System.out.printf("Acquired lease ID: %s%n", leaseID);

    return leaseClient;
}

Rinnovare un lease

È possibile rinnovare un lease del contenitore se l'ID lease specificato nella richiesta corrisponde all'ID lease associato al contenitore. Il lease può essere rinnovato anche se è scaduto, purché il contenitore 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 esistente, usare il metodo seguente:

L'esempio seguente rinnova un lease per un contenitore:

public void renewContainerLease(BlobLeaseClient leaseClient) {
    leaseClient.renewLease();
}

Rilasciare un lease

È possibile rilasciare un lease del contenitore se l'ID lease specificato nella richiesta corrisponde all'ID lease associato al contenitore. Il rilascio di un lease consente a un altro client di acquisire un lease per il contenitore immediatamente dopo il completamento della versione.

È possibile rilasciare un lease usando il metodo seguente:

L'esempio seguente rilascia il lease in un contenitore:

public void releaseContainerLease(BlobLeaseClient leaseClient) {
    leaseClient.releaseLease();
    System.out.println("Release lease operation completed");
}

Interrompere un lease

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

È possibile interrompere un lease usando il metodo seguente:

L'esempio seguente interrompe il lease in un contenitore:

public void breakContainerLease(BlobLeaseClient leaseClient) {
    leaseClient.breakLease();
}

Stati e azioni dei lease

Nel diagramma seguente vengono illustrati i cinque stati di un lease e i comandi o gli eventi che causano la modifica dello stato del lease.

A diagram showing container lease states and state change triggers.

La tabella seguente elenca i cinque stati di lease, fornisce una breve descrizione di ogni 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 lease), renew, change, release e break
Scaduta La durata del lease è scaduta. acquire, renew, release e break
Interruzione Il lease è stato interrotto, ma continuerà a essere bloccato finché non scadrà il 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 contenitore non viene modificato o finché non viene impostato un nuovo lease. Un client può tentare di rinnovare o rilasciare il lease usando l'ID lease scaduto. Se la richiesta ha esito negativo, il client sa che il contenitore è stato nuovamente in lease o che il contenitore è stato eliminato dall'ultimo lease attivo.

Se un lease scade anziché essere rilasciato in modo esplicito, è possibile che un client debba attendere fino a un minuto prima di poter acquisire un nuovo lease per il contenitore. Il client, tuttavia, può rinnovare il lease immediatamente con l'ID lease scaduto.

Risorse

Per altre informazioni sul lease dei contenitori tramite la libreria client di Archiviazione BLOB di Azure per Java, vedere le risorse seguenti.

Operazioni dell'API REST

Azure SDK per Java contiene librerie basate sull'API REST di Azure, che consentono di interagire con le operazioni dell'API REST tramite paradigmi Java noti. I metodi della libreria client per il lease dei contenitori usano l'operazione API REST seguente:

Esempi di codice

Risorse libreria client

Vedi anche