diff --git a/Engine/SCommon/src/com/ibm/storlet/common/StorletInputStream.java b/Engine/SCommon/src/com/ibm/storlet/common/StorletInputStream.java index 2e7fd8e5..c7be478d 100644 --- a/Engine/SCommon/src/com/ibm/storlet/common/StorletInputStream.java +++ b/Engine/SCommon/src/com/ibm/storlet/common/StorletInputStream.java @@ -20,7 +20,9 @@ package com.ibm.storlet.common; import java.io.FileDescriptor; -import java.io.*; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.IOException; import java.util.HashMap; public class StorletInputStream { @@ -39,4 +41,11 @@ public class StorletInputStream { public InputStream getStream() { return stream; } + + public void close() { + try { + stream.close(); + } catch (IOException e) { + } + } } diff --git a/Engine/SCommon/src/com/ibm/storlet/common/StorletLogger.java b/Engine/SCommon/src/com/ibm/storlet/common/StorletLogger.java index 638d3bc4..3018d661 100644 --- a/Engine/SCommon/src/com/ibm/storlet/common/StorletLogger.java +++ b/Engine/SCommon/src/com/ibm/storlet/common/StorletLogger.java @@ -47,4 +47,11 @@ public class StorletLogger { } } + public void close() { + Flush(); + try { + stream.close(); + } catch (IOException e) { + } + } } diff --git a/Engine/SCommon/src/com/ibm/storlet/common/StorletObjectOutputStream.java b/Engine/SCommon/src/com/ibm/storlet/common/StorletObjectOutputStream.java index d18df700..09dc28a3 100644 --- a/Engine/SCommon/src/com/ibm/storlet/common/StorletObjectOutputStream.java +++ b/Engine/SCommon/src/com/ibm/storlet/common/StorletObjectOutputStream.java @@ -47,6 +47,13 @@ public class StorletObjectOutputStream extends StorletOutputStream { return MetadataStream_; } + public void closeMD(){ + try{ + MetadataStream_.close(); + } catch (IOException e) { + } + } + @SuppressWarnings("unchecked") public void setMetadata(Map md) throws StorletException { JSONObject jobj = new JSONObject(); @@ -59,9 +66,10 @@ public class StorletObjectOutputStream extends StorletOutputStream { } try { MetadataStream_.write(jobj.toString().getBytes()); - MetadataStream_.close(); } catch (IOException e) { throw new StorletException("Failed to set metadata " + e.toString()); + } finally { + closeMD(); } } } diff --git a/Engine/SCommon/src/com/ibm/storlet/common/StorletOutputStream.java b/Engine/SCommon/src/com/ibm/storlet/common/StorletOutputStream.java index f7c8161f..f3367dcf 100644 --- a/Engine/SCommon/src/com/ibm/storlet/common/StorletOutputStream.java +++ b/Engine/SCommon/src/com/ibm/storlet/common/StorletOutputStream.java @@ -21,6 +21,7 @@ package com.ibm.storlet.common; import java.io.FileDescriptor; import java.io.FileOutputStream; +import java.io.IOException; import java.io.OutputStream; import java.util.HashMap; @@ -36,4 +37,11 @@ public class StorletOutputStream { public HashMap getMetadata() { return metadata; } + + public void close(){ + try{ + stream.close(); + } catch (IOException e) { + } + } } diff --git a/Engine/SDaemon/src/com/ibm/storlet/daemon/SDaemon.java b/Engine/SDaemon/src/com/ibm/storlet/daemon/SDaemon.java index 01bf07f6..77e44483 100644 --- a/Engine/SDaemon/src/com/ibm/storlet/daemon/SDaemon.java +++ b/Engine/SDaemon/src/com/ibm/storlet/daemon/SDaemon.java @@ -234,6 +234,11 @@ public class SDaemon { logger_.trace(strStorletName_ + ": problem returning taskId " + taskId + ": " + e.toString()); bStatus = false; + } finally { + try{ + taskIdOut.close(); + } catch (IOException e) { + } } } else if (sTask instanceof SDescriptorTask) { logger_.trace(strStorletName_ + ": Got Descriptor command"); diff --git a/Engine/SDaemon/src/com/ibm/storlet/daemon/SExecutionTask.java b/Engine/SDaemon/src/com/ibm/storlet/daemon/SExecutionTask.java index 61778a2a..987e4c47 100644 --- a/Engine/SDaemon/src/com/ibm/storlet/daemon/SExecutionTask.java +++ b/Engine/SDaemon/src/com/ibm/storlet/daemon/SExecutionTask.java @@ -26,6 +26,7 @@ import com.ibm.storlet.common.*; import java.util.HashMap; import java.util.ArrayList; +import java.io.IOException; import java.io.OutputStream; import java.util.concurrent.Future; @@ -94,6 +95,26 @@ public class SExecutionTask extends SAbstractTask implements Runnable { taskIdToTask_ = taskIdToTask; } + /*------------------------------------------------------------------------ + * close streams + * */ + private void closeStorletInputStreams(){ + for(StorletInputStream stream : inStreams_){ + stream.close(); + } + } + + private void closeStorletOutputStreams(){ + for(StorletOutputStream stream: outStreams_){ + stream.close(); + } + } + + private void closeStorletStreams(){ + closeStorletInputStreams(); + closeStorletOutputStreams(); + } + /*------------------------------------------------------------------------ * run * @@ -112,7 +133,10 @@ public class SExecutionTask extends SAbstractTask implements Runnable { } catch (StorletException e) { storletLogger_.emitLog(e.getMessage()); } finally { - storletLogger_.Flush(); + storletLogger_.close(); + + // We make sure all streams are closed + closeStorletStreams(); } } }