/** * Get the object as an input stream * * @param path object path * @return the input stream -this must be closed to terminate the connection * @throws IOException IO problems * @throws FileNotFoundException path doesn't resolve to an object */ public HttpBodyContent getObject(Path path) throws IOException { List<String> locations = getDataLocalEndpoints(path); for (String url : locations) { if (LOG.isDebugEnabled()) { LOG.debug("Reading " + path + " from location: " + url); } try { return swiftRestClient.getData(new URI(url), SwiftRestClient.NEWEST); } catch (Exception e) { // Ignore // It is possible that endpoint doesn't contains needed data. } } if (LOG.isDebugEnabled()) { LOG.debug("Reading " + path + " from proxy node"); } return swiftRestClient.getData(toObjectPath(path), SwiftRestClient.NEWEST); }
/** * Get the input stream starting from a specific point. * * @param path path to object * @param byteRangeStart starting point * @param length no. of bytes * @return an input stream that must be closed * @throws IOException IO problems */ public HttpBodyContent getObject(Path path, long byteRangeStart, long length) throws IOException { List<String> locations = getDataLocalEndpoints(path); for (String url : locations) { if (LOG.isDebugEnabled()) { LOG.debug("Reading " + path + " from location: " + url); } try { return swiftRestClient.getData(new URI(url), byteRangeStart, length); } catch (Exception e) { //Ignore } } if (LOG.isDebugEnabled()) { LOG.debug("Reading " + path + " from proxy node"); } return swiftRestClient.getData( toObjectPath(path), byteRangeStart, length); }
/** * Fill the buffer from the target position * If the target position == current position, the * read still goes ahead; this is a way of handling partial read failures * @param targetPos target position * @throws IOException IO problems on the read */ private void fillBuffer(long targetPos) throws IOException { long length = targetPos + bufferSize; SwiftUtils.debug(LOG, "Fetching %d bytes starting at %d", length, targetPos); HttpBodyContent blob = nativeStore.getObject(path, targetPos, length); httpStream = blob.getInputStream(); updateStartOfBufferPosition(targetPos, blob.getContentLength()); }
/** * Get the object as an input stream * * @param path object path * @return the input stream -this must be closed to terminate the connection * @throws IOException IO problems * @throws FileNotFoundException path doesn't resolve to an object */ public HttpBodyContent getObject(Path path) throws IOException { return swiftRestClient.getData(toObjectPath(path), SwiftRestClient.NEWEST); }
/** * Get the input stream starting from a specific point. * * @param path path to object * @param byteRangeStart starting point * @param length no. of bytes * @return an input stream that must be closed * @throws IOException IO problems */ public HttpBodyContent getObject(Path path, long byteRangeStart, long length) throws IOException { return swiftRestClient.getData( toObjectPath(path), byteRangeStart, length); }