La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

GFAL: Grid File Access Library Java API

Presentazioni simili


Presentazione sul tema: "GFAL: Grid File Access Library Java API"— Transcript della presentazione:

1 GFAL: Grid File Access Library Java API
Diego Scardaci INFN - Catania Tutorial per i Neo Assunti del Progetto PI2S2 Messina,

2 GFAL: Grid File Access Library
Libreria client POSIX (like) I/O per l’accesso diretto ai dati Perché GFAL: L’interazione con gli SE richiede l’utilizzo di alcuni componenti: Servizio di file catalog per localizzare le repliche Storage Resource Management (SRM) Meccanismi di accesso ai file da un SE sul Worker Node. Messina, Tutorial per i Neo Assunti del Progetto PI2S2,

3 GFAL: Grid File Access Library
GFAL effettua questi task per te: Nasconde queste interazioni all’utente Fornisce un’interfaccia POSIX per le operazioni di I/O; Utilizza la shared library (versioni threaded e unthreaded): libgfal.so, libgfal_pthr.so Richiede un unico header file: gfal_api.h Fornisce all’utente tutti I comandi necessari per lo storage management Offre un’interfaccia all’SRM Protocolli supportati: file (accesso locale o nfs-like) dcap, gsidcap and kdcap (accesso dCache) rfio (accesso castor) e gsirfio (dpm) Messina, Tutorial per i Neo Assunti del Progetto PI2S2,

4 GFAL: File I/O C API (I) int gfal_access (const char *path, int amode); int gfal_chmod (const char *path, mode_t mode); int gfal_close (int fd); int gfal_creat (const char *filename, mode_t mode); off_t gfal_lseek (int fd, off_t offset, int whence); int gfal_open (const char * filename, int flags, mode_t mode); ssize_t gfal_read (int fd, void *buf, size_t size); int gfal_rename (const char *old_name, const char *new_name); ssize_t gfal_setfilchg (int, const void *, size_t); int gfal_stat (const char *filename, struct stat *statbuf); Messina, Tutorial per i Neo Assunti del Progetto PI2S2,

5 GFAL: File I/O C API (II)
int gfal_unlink (const char *filename); ssize_t gfal_write (int fd, const void *buf, size_t size); int gfal_closedir (DIR *dirp); int gfal_mkdir (const char *dirname, mode_t mode); DIR *gfal_opendir (const char *dirname); struct dirent *gfal_readdir (DIR *dirp); int gfal_rmdir (const char *dirname); Messina, Tutorial per i Neo Assunti del Progetto PI2S2,

6 GFAL: File I/O Java API Motivazione:
Fornire delle API GFAL al sempre più vasto gruppo di programmatori Java. Perché Java: Velocità di sviluppo Semplicità di sviluppo (maggior numero di programmatori disponibili) Molte applicazioni ormai sono “pure Java” Messina, Tutorial per i Neo Assunti del Progetto PI2S2,

7 GFAL Java API: Le classi
GFalFile: rappresentazione di un file remoto (memorizzato su uno SE). GFalDirectory: rappresentazione di una directory remota di uno SE. GFalUtilities: raggruppa alcune importanti utility. Messina, Tutorial per i Neo Assunti del Progetto PI2S2,

8 GFalFile: createFile public int createFile(String name, int mode, boolean isSurl, boolean isLargeFile) throws GFalFileException name = nome logico di uno SE o un SURL (es. srm://aliserv6.ct.infn.it/dpm/ct.infn.it/home/gilda/generated/ /filetest) mode = permessi di accesso da associare al file che si sta creando. isSurl = se “true” il parametro name contiene un SURL, se “false” il parametro name contiene il nome di uno SE isLargeFile = se “true” indica che il file deve essere creato come large file (fino a 263 bytes). Messina, Tutorial per i Neo Assunti del Progetto PI2S2,

9 GFalFile: openFile public int openFile(String fileName, int flags, int mode, boolean isLargeFile) throws GFalFileException name = il nome del file in uno dei seguenti formati: lfn, guid, SURL o TURL. flags = OR delle seguenti costanti: READONLY, WRITEONLY, CREAT, LARGEFILE (se utilizzi CREAT name non può essere nè un lfn nè un GUID). mode = permessi di accesso associati al file che si sta creando. isLargeFile = indica se è o non è un large file. Messina, Tutorial per i Neo Assunti del Progetto PI2S2,

10 GFalFile: gli altri metodi
public byte[] readFile(int size) Legge size bytes dal file precedentemente aperto. public int writeFile(byte[] buffer) Scrive l’array di bytes buffer sul file precedentemente aperto. public long lseekFile(long offset, int seekMode, boolean isLargeFile) Posiziona/Riposiziona ad offset il puntatore del file associato a questo oggetto. public int closeFile() Chiude il file. public int lfcRegisterFile(java.lang.String logicalFileName) Registra il file associato a questo oggetto nel catalogo lfc. public java.lang.String getSurl() Restituisce il SURL del file associato a questo oggetto. Messina, Tutorial per i Neo Assunti del Progetto PI2S2,

11 GFalDirectory public int openDir(String dirName) Apre una directory.
public String[] readDir() Legge il contenuto di una directory. public int closeDir() Chiude una directory. public static int makeDir(String dirName, int mode) Crea una directory. public static int rmDir(String dirName) Cancella una directory. Messina, Tutorial per i Neo Assunti del Progetto PI2S2,

12 GFalUtilities public int accessFile(java.lang.String fileName, int mode) Controlla l’esistenza o l’accessibilità di un file/directory path, in base al bit pattern settato in mode, utilizzando l’ID dell’utente reale. public int chmodFile(java.lang.String fileName, int mode) Cambia la modalità di accesso ad un file o a una directory. public long[] statFile(java.lang.String fileName, boolean largeFile) Restituisce informazioni relative ad un file/directory (ad es. la dimensione). public long[] lstatFile(java.lang.String fileName, boolean largeFile) Come statFile eccetto per i link simbolici. In questo caso sono restituite informazioni relative al link e non al file puntato dal link. public int renameFile(java.lang.String oldName, java.lang.String newName) Rinomina un file/directory. public int deleteFile(java.lang.String fileName) Cancella un file/directory. Messina, Tutorial per i Neo Assunti del Progetto PI2S2,

13 Configurare l’ambiente
Librerie GFAL: gfal.jar, libGFalFile.so e libgfal.so Variabili d’ambiente: LCG_RFIO_TYPE=<SE type> (es. LCG_RFIO_TYPE=dpm) LCG_GFAL_VO=<your VO> LCG_GFAL_INFOSYS=<your BDII> LCG_CATALOG_TYPE=lfc LFC_HOST=<LFC_HOSTNAME> (eg. LFC_HOST=lfc-gilda.ct.infn.it) LD_LIBRARY_PATH=<path libGFalFIle.so>:$LD_LIBRARY_PATH CLASSPATH=<path gfal.jar>:$CLASSPATH Librerie aggiuntive: lcg_util, globus_ftp_client_gcc32, globus_gass_copy_gcc32 Prima di eseguire un applicativo che utilizza le API GFAL assicurati di possedere un proxy valido. Messina, Tutorial per i Neo Assunti del Progetto PI2S2,

14 GFAL JAVA API: Un esempio
import it.infn.catania.gfal.*; public class Sample { public static void main (String args[]) { String fileName = "aliserv6.ct.infn.it"; try { GFalFile gFalFile= new GFalFile(); gFalFile.createFile(fileName,644,false,false); byte[] dati = new byte[1024]; int ret = gFalFile.writeFile(dati); if (ret==-1) { System.exit(1); } ret = gFalFile.closeFile(); ret = gFalFile.lfcRegisterFile(“lfn:/grid/gilda/test/1.dat”); catch (GFalFileException exc) { exc.printStackTrace(); }} Messina, Tutorial per i Neo Assunti del Progetto PI2S2,

15 J N I GFAL JAVA API: Soluzione Tecnica APPLICATIVO JAVA GFAL API JAVA
WRAPPER GFAL API GFAL API C SERVIZI GRID Messina, Tutorial per i Neo Assunti del Progetto PI2S2,

16 GFAL JAVA API: Soluzione Tecnica
Classe Java: package it.infn.catania.gfal; public class GFalFile { static { System.loadLibrary(“GFalFile”); } private native int openGFalFile(String fileName, int mode, int perm, boolean isLargeFile); private native int closeGFalFile(int fd); public int openFile(String fileName, int flags, int mode, boolean isLargeFile) throws GFalFileException { int ret = openGFalFile(fileName, flags, mode, isLargeFile); Messina, Tutorial per i Neo Assunti del Progetto PI2S2,

17 GFAL JAVA API: Soluzione Tecnica
Wrapper C (libGFalFile.so): #include <gfal_api.h> #include <jni.h> #include "it_infn_catania_gfal_GFalFile.h" JNIEXPORT jint JNICALL Java_it_infn_catania_gfal_GFalFile_openGFalFile (JNIEnv *env, jobject obj, jstring fileName, jint mode, jint permission, jboolean largeFile) { int fd; const char *str = (*env)->GetStringUTFChars(env, fileName, 0); if(largeFile) fd = gfal_open64(str, mode, permission); else fd = gfal_open(str, mode, permission); (*env)->ReleaseStringUTFChars(env, fileName, str); …//check errors return fd; } Messina, Tutorial per i Neo Assunti del Progetto PI2S2,

18 GFAL API: Javadoc Messina, Tutorial per i Neo Assunti del Progetto PI2S2,

19 GFAL API: Javadoc Messina, Tutorial per i Neo Assunti del Progetto PI2S2,

20 Any questions ? Messina, Tutorial per i Neo Assunti del Progetto PI2S2,


Scaricare ppt "GFAL: Grid File Access Library Java API"

Presentazioni simili


Annunci Google