org.jgroups.blocks.GridFilesystem Maven / Gradle / Ivy
package org.jgroups.blocks;
import org.jgroups.annotations.Experimental;
import java.io.*;
/**
* Entry point for GridFile and GridInputStream / GridOutputStream
* @author Bela Ban
*/
@Experimental
public class GridFilesystem {
protected final ReplCache data;
protected final ReplCache metadata;
protected final int default_chunk_size;
protected final short default_repl_count;
/**
* Creates an instance. The data and metadata caches should already have been setup and started
* @param data
* @param metadata
* @param default_chunk_size
*/
public GridFilesystem(ReplCache data, ReplCache metadata,
short default_repl_count, int default_chunk_size) {
this.data=data;
this.metadata=metadata;
this.default_chunk_size=default_chunk_size;
this.default_repl_count=default_repl_count;
}
public GridFilesystem(ReplCache data, ReplCache metadata) {
this(data, metadata, (short)1, 8000);
}
public File getFile(String pathname) {
return getFile(pathname, default_chunk_size);
}
public File getFile(String pathname, int chunk_size) {
return new GridFile(pathname, metadata, chunk_size, this);
}
public File getFile(String parent, String child) {
return getFile(parent, child, default_chunk_size);
}
public File getFile(String parent, String child, int chunk_size) {
return new GridFile(parent, child, metadata, chunk_size, this);
}
public File getFile(File parent, String child) {
return getFile(parent, child, default_chunk_size);
}
public File getFile(File parent, String child, int chunk_size) {
return new GridFile(parent, child, metadata, chunk_size, this);
}
public OutputStream getOutput(String pathname) throws IOException {
return getOutput(pathname, false, default_repl_count, default_chunk_size);
}
public OutputStream getOutput(String pathname, boolean append) throws IOException {
return getOutput(pathname, append, default_repl_count, default_chunk_size);
}
public OutputStream getOutput(String pathname, boolean append, short repl_count, int chunk_size) throws IOException {
GridFile file=(GridFile)getFile(pathname, chunk_size);
if(!file.createNewFile())
throw new IOException("creation of " + pathname + " failed");
return new GridOutputStream(file, append, data, repl_count, chunk_size);
}
public OutputStream getOutput(GridFile file) throws IOException {
if(!file.createNewFile())
throw new IOException("creation of " + file + " failed");
return new GridOutputStream(file, false, data, default_repl_count, default_chunk_size);
}
public InputStream getInput(String pathname) throws FileNotFoundException {
GridFile file=(GridFile)getFile(pathname);
if(!file.exists())
throw new FileNotFoundException(pathname);
return new GridInputStream(file, data, default_chunk_size);
}
public InputStream getInput(File pathname) throws FileNotFoundException {
return pathname != null? getInput(pathname.getPath()) : null;
}
public void remove(String path, boolean synchronous) {
if(path == null)
return;
GridFile.Metadata md=metadata.get(path);
if(md == null)
return;
int num_chunks=md.getLength() / md.getChunkSize() + 1;
for(int i=0; i < num_chunks; i++)
data.remove(path + ".#" + i, synchronous);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy