Eliminazione copia buffer

La funzione di eliminazione della copia del buffer rimuove la copia dei buffer di dati tra un'applicazione e il server IBM® Storage Protect , il che si traduce in un migliore utilizzo del processore. Per ottenere il massimo effetto, utilizzare questo approccio in un ambiente senza LAN.

I buffer per lo spostamento dei dati vengono assegnati da IBM Storage Protect e un puntatore viene passato nuovamente all'applicazione. L'applicazione colloca i dati nel buffer fornito e tale buffer viene passato attraverso i livelli di comunicazione all'agent di archiviazione utilizzando la memoria condivisa. I dati vengono quindi spostati nell'unità nastro, che elimina le copie dei dati. Questa funzione può essere utilizzata con le operazioni di backup o di archiviazione.

Attenzione: quando si utilizza questo metodo, prestare particolare attenzione alla corretta gestione del buffer e alle dimensioni dei buffer. I buffer vengono condivisi tra i componenti e qualsiasi sovrascrittura di memoria che è il risultato di un errore di programmazione provoca errori gravi.

La sequenza generale delle chiamate per il backup / archivio è la seguente:

dsmInitEx (UseTsmBuffers = True, numTsmBuffers = [how many IBM Storage Protect
            -allocated buffers the application needs to allocate])
dsmBeginTxn
for each object in the txn
  dsmBindMC
    dsmSendObject
      dsmRequestBuffer
      dsmSendBufferData (sends and release the buffer used)
    dsmEndSendObjEx
dsmEndTxn
for each buffer still held
      dsmReleaseBuffer
dsmTerminate       

La funzione dsmRequestBuffer può essere richiamata più volte, fino al valore specificato dall'opzione numTsmBuffers opzione. Un'applicazione può avere due thread: un thread producer che riempie i buffer con dati e un thread consumer che invia tali buffer a IBM Storage Protect con la chiamata dsmSendBufferData . Quando viene emessa una chiamata dsmRequestBuffer e si raggiunge numTsmBuffers , la chiamata dsmRequestBuffer si blocca fino a quando non viene rilasciato un buffer. Il rilascio del buffer può verificarsi richiamando dsmSendBufferData, che invia e rilascia un buffer o richiamando dsmReleaseBuffer. Per ulteriori informazioni, consultare callbuff.c nella directory di esempio dell'API.

Se in qualsiasi momento si verifica un errore nell'invio, l'applicazione deve rilasciare tutti i buffer congelati e terminare la sessione. Ad esempio:

  If failure
    for each data buffer held by application
      call dsmReleaseBuffer 
  dsmTerminate

Se un'applicazione richiama dsmTerminate e un buffer è ancora in attesa, l'API non esce. Viene restituito il seguente codice: DSM_RC_CANNOT_EXIT_MUST_RELEASE_BUFFER. Se l'applicazione non può rilasciare il buffer, deve uscire dal processo per forzare una ripulitura.