Skip to content

Commit

Permalink
0001586: Stage manager doesn't check to see if a file is actually del…
Browse files Browse the repository at this point in the history
…eted when it qualifies for cleaning.
  • Loading branch information
chenson42 committed Feb 16, 2014
1 parent 63af64c commit 099435b
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 13 deletions.
Expand Up @@ -63,8 +63,10 @@ public String getExtensionName() {

public boolean isFileResource();

public void delete();
public boolean delete();

public boolean exists();

public boolean isInUse();

}
Expand Up @@ -103,6 +103,10 @@ public StagedResource(long threshold, File directory, String path, StagingManage
this.state = State.CREATE;
}

public boolean isInUse() {
return readers.size() > 0 || writers.size() > 0;
}

public boolean isFileResource() {
return file != null && file.exists();
}
Expand Down Expand Up @@ -250,7 +254,7 @@ public BufferedWriter getWriter() {
log.warn("We had to delete {} because it already existed", file.getAbsolutePath());
file.delete();
} else if (this.memoryBuffer != null) {
log.warn("We had to delete the memory buffer because it already existed");
log.warn("We had to delete the memory buffer for {} because it already existed", getPath());
this.memoryBuffer = null;
}
this.memoryBuffer = new StringBuilder();
Expand Down Expand Up @@ -283,20 +287,27 @@ public void refreshLastUpdateTime() {
this.lastUpdateTime = System.currentTimeMillis();
}

public void delete() {
public boolean delete() {

boolean deleted = true;

close();

if (file.exists()) {
FileUtils.deleteQuietly(file);
deleted = !file.exists();
}

if (memoryBuffer != null) {
memoryBuffer.setLength(0);
memoryBuffer = null;
}

stagingManager.resourceList.remove(getPath());
if (deleted) {
stagingManager.resourceList.remove(getPath());
}

return deleted;

}

Expand Down
Expand Up @@ -91,17 +91,26 @@ public long clean(long ttlInMs) {
for (String key : keys) {
IStagedResource resource = resourceList.get(key);
boolean resourceIsOld = (System.currentTimeMillis() - resource.getLastUpdateTime()) > ttlInMs;
if ((resource.getState() == State.READY || resource.getState() == State.DONE)
&& (resourceIsOld || !resource.exists())) {
if (resource.isFileResource()) {
purgedFileCount++;
purgedFileSize += resource.getSize();
if (resource.isInUse() && (resource.getState() == State.READY || resource.getState() == State.DONE)
&& (resourceIsOld || !resource.exists())) {
if (!resource.isInUse()) {
boolean file = resource.isFileResource();
long size = resource.getSize();
if (resource.delete()) {
if (file) {
purgedFileCount++;
purgedFileSize += size;
} else {
purgedMemCount++;
purgedMemSize += size;
}
resourceList.remove(key);
} else {
log.warn("Failed to delete the '{}' staging resource", resource.getPath());
}
} else {
purgedMemCount++;
purgedMemSize += resource.getSize();
log.warn("The '{}' staging resource qualified for being cleaned, but was in use. It will not be cleaned right now", resource.getPath());
}
resource.delete();
resourceList.remove(key);
}
}
if (purgedFileCount > 0) {
Expand Down

0 comments on commit 099435b

Please sign in to comment.