@Override public OutputStream getOutputStreamUnbuffered() throws IOException { OutputStream os = super.getOutputStreamUnbuffered(); os = new DiskSpaceCheckingOutputStream(os, tracker, getFile(), BUFFER_SIZE); return os; }
@Override protected LockableRandomAccessBuffer innerMigrate(LockableRandomAccessBuffer underlying) throws IOException { ByteArrayRandomAccessBuffer b = (ByteArrayRandomAccessBuffer)underlying; byte[] buf = b.getBuffer(); return diskRAFFactory.makeRAF(buf, 0, (int)size, b.isReadOnly()); }
public static byte[] pad(byte[] orig, int blockSize, int length) throws IOException { ArrayBucket b = new ArrayBucket(orig); Bucket ret = BucketTools.pad(b, blockSize, ARRAY_FACTORY, length); return BucketTools.toByteArray(ret); }
public void checkSimple(int length, int expectedLength) throws IOException { ArrayBucket input = new ArrayBucket(); BucketTools.fill(input, length); ArrayBucket copy = new ArrayBucket(); PaddedBucket padded = new PaddedBucket(copy); BucketTools.copy(input, padded); assertEquals(padded.size(), input.size()); assertEquals(copy.size(), expectedLength); assertTrue(BucketTools.equalBuckets(input, padded)); InputStream aIn = input.getInputStream(); InputStream bIn = copy.getInputStream(); assertTrue(FileUtil.equalStreams(aIn, bIn, length)); }
@Override public void setUp() throws IOException { fg = new FilenameGenerator(weakPRNG, true, f, "temp-raf-test-"); factory = new TempBucketFactory(exec, fg, 4096, 65536, weakPRNG, false, 1024*1024*2, secret); factory.setEncryption(enableCrypto()); assertEquals(factory.getRamUsed(), 0); FileUtil.removeAll(f); f.mkdir(); assertTrue(f.exists() && f.isDirectory()); }
@Override protected Bucket makeBucket(long size) throws IOException { FilenameGenerator filenameGenerator = new FilenameGenerator(weakPRNG, false, null, "junit"); BaseFileBucket bfb = new TempFileBucket(filenameGenerator.makeRandomFilename(), filenameGenerator); assertTrue("deleteOnFree", bfb.deleteOnFree()); return bfb; }
@Override protected Bucket makeBucket(long size) throws IOException { FilenameGenerator filenameGenerator = new FilenameGenerator(weakPRNG, false, null, "junit"); TempFileBucket fileBucket = new TempFileBucket(filenameGenerator.makeRandomFilename(), filenameGenerator); return new PaddedEphemerallyEncryptedBucket(fileBucket, 1024, strongPRNG, weakPRNG); }
public TempBucketFactory(Executor executor, FilenameGenerator filenameGenerator, long maxBucketSizeKeptInRam, long maxRamUsed, Random weakPRNG, boolean reallyEncrypt, long minDiskSpace, MasterSecret masterSecret) { this.filenameGenerator = filenameGenerator; this.maxRamUsed = maxRamUsed; this.maxRAMBucketSize = maxBucketSizeKeptInRam; this.reallyEncrypt = reallyEncrypt; this.executor = executor; this.underlyingDiskRAFFactory = new PooledFileRandomAccessBufferFactory(filenameGenerator, weakPRNG); underlyingDiskRAFFactory.enableCrypto(reallyEncrypt); this.minDiskSpace = minDiskSpace; this.diskRAFFactory = new DiskSpaceCheckingRandomAccessBufferFactory(underlyingDiskRAFFactory, filenameGenerator.getDir(), minDiskSpace - maxRamUsed); this.secret = masterSecret; }
private RandomAccessBucket _makeFileBucket() throws IOException { RandomAccessBucket ret = new TempFileBucket(filenameGenerator.makeRandomFilename(), filenameGenerator, true); // Do we want it to be encrypted? if(reallyEncrypt) { ret = new PaddedRandomAccessBucket(ret); ret = new EncryptedRandomAccessBucket(CRYPT_TYPE, ret, secret); } return ret; }
@Override public void tearDown() { assertEquals(factory.getRamUsed(), 0); // Everything should have been free()'ed. assertEquals(f.listFiles().length, 0); FileUtil.removeAll(f); }
private File getFile(TempBucket bucket) { if(!this.enableCrypto()) return ((TempFileBucket)(((TempBucket) bucket).getUnderlying())).getFile(); else { EncryptedRandomAccessBucket erab = (EncryptedRandomAccessBucket) bucket.getUnderlying(); RandomAccessBucket b = erab.getUnderlying(); if(b instanceof PaddedRandomAccessBucket) { b = ((PaddedRandomAccessBucket)b).getUnderlying(); } return ((TempFileBucket) b).getFile(); } }
public RealTempBucketTest_(int maxRamSize, int maxTotalRamSize, boolean encrypted) throws IOException { fg = new FilenameGenerator(weakPRNG, false, null, "junit"); tbf = new TempBucketFactory(exec, fg, maxRamSize, maxTotalRamSize, weakPRNG, encrypted, MIN_DISK_SPACE, secret); canOverwrite = false; }
protected void updatePersistentRAFSpaceLimit() { // The temp bucket factory may have to migrate everything to disk. // So we add the RAM limit for the temp factory to the disk limit for the persistent one. if(persistentRAFFactory != null) { long size; synchronized(this) { size = minDiskFreeLongTerm; } size += tempBucketFactory.getMaxRamUsed(); persistentDiskChecker.setMinDiskSpace(size); } }
public DelayedFreeRandomAccessBuffer(DataInputStream dis, FilenameGenerator fg, PersistentFileTracker persistentFileTracker, MasterSecret masterSecret) throws IOException, StorageFormatException, ResumeFailedException { underlying = BucketTools.restoreRAFFrom(dis, fg, persistentFileTracker, masterSecret); factory = persistentFileTracker; }
/** Get the result as a simple byte array, even if we don't have it * as one. @throws OutOfMemoryError !! * @throws IOException If it was not possible to read the data. */ public byte[] asByteArray() throws IOException { return BucketTools.toByteArray(data); }
public DelayedFreeRandomAccessBuffer(LockableRandomAccessBuffer raf, PersistentFileTracker factory) { underlying = raf; this.createdCommitID = factory.commitID(); this.factory = factory; }
/** * Reads the entire content of a file as UTF-8 and returns it. * @param file The file to read * @return The content of <code>file</code> * @throws FileNotFoundException if <code>file</code> cannot be opened * @throws IOException if an I/O error occurs */ public static StringBuilder readUTF(File file) throws FileNotFoundException, IOException { return readUTF(file, 0); }
/** ** Set owner-only RW on the given file. */ public static boolean setOwnerRW(File f) { return setOwnerPerm(f, true, true, false); }
private File getWhere(Status status) { // FIXME return the filesystem rather than the directory. Will need java.nio.file (1.7). if(status == Status.PERSISTENT || status == Status.PERSISTENT_COMPLETION) { // Be very careful about race conditions! FilenameGenerator fg = core.persistentFilenameGenerator; if(fg != null) { return fg.getDir(); } } return core.tempFilenameGenerator.getDir(); }
@Override public Boolean get() { return (tempBucketFactory == null ? true : tempBucketFactory .isEncrypting()); }