@Override public void realFree() { underlying.free(); }
@Override public void free() { underlying.free(); }
@Override public void free() { raf.free(); }
@Override public void free() { underlying.free(); }
@Override public void free() { close(); underlyingBuffer.free(); }
@Override public void free() { underlying.free(); }
/** @return True unless the buffer has already been freed. */ protected boolean innerFree() { try { // Write lock as we're going to change the underlying pointer. lock.writeLock().lock(); closed = true; // Effectively ... if(underlying == null) return false; underlying.free(); underlying = null; } finally { lock.writeLock().unlock(); } afterFreeUnderlying(); return true; }
/** Shutdown and free resources. CONCURRENCY: Caller is responsible for making sure this is * not called on a MemoryLimitedJob thread. */ void close() { if(logMINOR) Logger.minor(this, "Finishing "+this+" for "+fetcher, new Exception("debug")); raf.close(); raf.free(); fetcher.onClosed(); }
/** Migrate from one underlying LockableRandomAccessBuffer to another. */ protected final void migrate() throws IOException { try { lock.writeLock().lock(); if(closed) return; if(underlying == null) throw new IOException("Already freed"); LockableRandomAccessBuffer successor = innerMigrate(underlying); if(successor == null) throw new NullPointerException(); RAFLock newLock = null; if(lockOpenCount > 0) { try { newLock = successor.lockOpen(); } catch (IOException e) { successor.close(); successor.free(); throw e; } } if(lockOpenCount > 0) underlyingLock.unlock(); underlying.close(); underlying.free(); underlying = successor; underlyingLock = newLock; } finally { lock.writeLock().unlock(); } afterFreeUnderlying(); }
@Override public boolean run(ClientContext context) { if(logMINOR) Logger.minor(this, "Succeeding on "+SplitFileInserter.this); unregisterSender(); if(!(ctx.earlyEncode || ctx.getCHKOnly)) { reportMetadata(metadata); } cb.onSuccess(SplitFileInserter.this, context); raf.close(); raf.free(); originalData.close(); if(freeData) originalData.free(); return true; }
Logger.error(this, "Resume failed: "+e, e); raf.close(); raf.free(); originalData.close(); if(freeData) originalData.free(); throw new InsertException(InsertExceptionMode.BUCKET_ERROR, e, null); } catch (StorageFormatException e) { Logger.error(this, "Resume failed: "+e, e); raf.close(); raf.free(); originalData.close(); if(freeData) originalData.free(); throw new InsertException(InsertExceptionMode.BUCKET_ERROR, e, null); } catch (ChecksumFailedException e) { Logger.error(this, "Resume failed: "+e, e); raf.close(); raf.free(); originalData.close(); if(freeData) originalData.free(); throw new InsertException(InsertExceptionMode.BUCKET_ERROR, e, null);
callbackCompleteViaTruncation != null); } catch (ResumeFailedException e) { raf.free(); Logger.error(this, "Failed to resume storage file: "+e+" for "+raf, e); throw new FetchException(FetchExceptionMode.BUCKET_ERROR, e); } catch (IOException e) { raf.free(); Logger.error(this, "Failed to resume due to I/O error: "+e+" raf = "+raf, e); throw new FetchException(FetchExceptionMode.BUCKET_ERROR, e); } catch (StorageFormatException e) { raf.free(); Logger.error(this, "Failed to resume due to storage error: "+e+" raf = "+raf, e); throw new FetchException(FetchExceptionMode.INTERNAL_ERROR, "Resume failed: "+e, e); } catch (FetchException e) { raf.free(); throw e;
if(segment.hasFailed()) { raf.close(); raf.free(); // Failed, so free it. throw new FetchException(FetchExceptionMode.SPLITFILE_ERROR, errors);
private void testEncodeAfterShutdownCrossSegment(long size) throws InsertException, IOException, MissingKeyException, StorageFormatException, ChecksumFailedException, ResumeFailedException, MetadataUnresolvedException { Random r = new Random(12121); LockableRandomAccessBuffer data = generateData(r, size); HashResult[] hashes = getHashes(data); MyCallback cb = new MyCallback(); MyKeysFetchingLocally keys = new MyKeysFetchingLocally(); SplitFileInserterStorage storage = new SplitFileInserterStorage(data, size, cb, null, new ClientMetadata(), false, null, smallRAFFactory, true, baseContext.clone(), cryptoAlgorithm, cryptoKey, null, hashes, smallBucketFactory, checker, r, memoryLimitedJobRunner, jobRunner, ticker, keys, false, 0, 0, 0, 0); executor.waitForIdle(); // Has not encoded anything. for(SplitFileInserterSegmentStorage segment : storage.segments) assert(!segment.isFinishedEncoding()); SplitFileInserterStorage resumed = new SplitFileInserterStorage(storage.getRAF(), data, cb, r, memoryLimitedJobRunner, jobRunner, ticker, keys, fg, persistentFileTracker, null); resumed.start(); cb.waitForFinishedEncode(); cb.waitForHasKeys(); executor.waitForIdle(); resumed.encodeMetadata(); assertTrue(resumed.getStatus() == Status.ENCODED); resumed.originalData.free(); resumed.getRAF().free(); }