Skip to content

Commit

Permalink
HDFS-8332. DFS client API calls should check filesystem closed. Contr…
Browse files Browse the repository at this point in the history
…ibuted by Rakesh R.
  • Loading branch information
umamaheswararao committed May 8, 2015
1 parent ef3d66d commit e16f4b7
Show file tree
Hide file tree
Showing 5 changed files with 247 additions and 7 deletions.
2 changes: 2 additions & 0 deletions hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
Expand Up @@ -661,6 +661,8 @@ Release 2.8.0 - UNRELEASED
HDFS-6291. FSImage may be left unclosed in BootstrapStandby#doRun() HDFS-6291. FSImage may be left unclosed in BootstrapStandby#doRun()
(Sanghyun Yun via vinayakumarb) (Sanghyun Yun via vinayakumarb)


HDFS-8332. DFS client API calls should check filesystem closed (Rakesh R via umamahesh)

Release 2.7.1 - UNRELEASED Release 2.7.1 - UNRELEASED


INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES
Expand Down
Expand Up @@ -638,6 +638,7 @@ public void closeOutputStreams(boolean abort) {
* @see ClientProtocol#getPreferredBlockSize(String) * @see ClientProtocol#getPreferredBlockSize(String)
*/ */
public long getBlockSize(String f) throws IOException { public long getBlockSize(String f) throws IOException {
checkOpen();
TraceScope scope = getPathTraceScope("getBlockSize", f); TraceScope scope = getPathTraceScope("getBlockSize", f);
try { try {
return namenode.getPreferredBlockSize(f); return namenode.getPreferredBlockSize(f);
Expand All @@ -654,6 +655,7 @@ public long getBlockSize(String f) throws IOException {
* @see ClientProtocol#getServerDefaults() * @see ClientProtocol#getServerDefaults()
*/ */
public FsServerDefaults getServerDefaults() throws IOException { public FsServerDefaults getServerDefaults() throws IOException {
checkOpen();
long now = Time.monotonicNow(); long now = Time.monotonicNow();
if ((serverDefaults == null) || if ((serverDefaults == null) ||
(now - serverDefaultsLastUpdate > SERVER_DEFAULTS_VALIDITY_PERIOD)) { (now - serverDefaultsLastUpdate > SERVER_DEFAULTS_VALIDITY_PERIOD)) {
Expand Down Expand Up @@ -845,6 +847,7 @@ public boolean isManaged(Token<?> token) throws IOException {
* @see ClientProtocol#reportBadBlocks(LocatedBlock[]) * @see ClientProtocol#reportBadBlocks(LocatedBlock[])
*/ */
public void reportBadBlocks(LocatedBlock[] blocks) throws IOException { public void reportBadBlocks(LocatedBlock[] blocks) throws IOException {
checkOpen();
namenode.reportBadBlocks(blocks); namenode.reportBadBlocks(blocks);
} }


Expand Down Expand Up @@ -918,6 +921,7 @@ boolean recoverLease(String src) throws IOException {
*/ */
public BlockLocation[] getBlockLocations(String src, long start, public BlockLocation[] getBlockLocations(String src, long start,
long length) throws IOException, UnresolvedLinkException { long length) throws IOException, UnresolvedLinkException {
checkOpen();
TraceScope scope = getPathTraceScope("getBlockLocations", src); TraceScope scope = getPathTraceScope("getBlockLocations", src);
try { try {
LocatedBlocks blocks = getLocatedBlocks(src, start, length); LocatedBlocks blocks = getLocatedBlocks(src, start, length);
Expand Down Expand Up @@ -952,6 +956,7 @@ public BlockLocation[] getBlockLocations(String src, long start,
public BlockStorageLocation[] getBlockStorageLocations( public BlockStorageLocation[] getBlockStorageLocations(
List<BlockLocation> blockLocations) throws IOException, List<BlockLocation> blockLocations) throws IOException,
UnsupportedOperationException, InvalidBlockTokenException { UnsupportedOperationException, InvalidBlockTokenException {
checkOpen();
if (!getConf().isHdfsBlocksMetadataEnabled()) { if (!getConf().isHdfsBlocksMetadataEnabled()) {
throw new UnsupportedOperationException("Datanode-side support for " + throw new UnsupportedOperationException("Datanode-side support for " +
"getVolumeBlockLocations() must also be enabled in the client " + "getVolumeBlockLocations() must also be enabled in the client " +
Expand Down Expand Up @@ -1418,6 +1423,7 @@ public DFSOutputStream primitiveCreate(String src,
*/ */
public void createSymlink(String target, String link, boolean createParent) public void createSymlink(String target, String link, boolean createParent)
throws IOException { throws IOException {
checkOpen();
TraceScope scope = getPathTraceScope("createSymlink", target); TraceScope scope = getPathTraceScope("createSymlink", target);
try { try {
final FsPermission dirPerm = applyUMask(null); final FsPermission dirPerm = applyUMask(null);
Expand Down Expand Up @@ -1540,6 +1546,7 @@ private DFSOutputStream append(String src, int buffersize,
*/ */
public boolean setReplication(String src, short replication) public boolean setReplication(String src, short replication)
throws IOException { throws IOException {
checkOpen();
TraceScope scope = getPathTraceScope("setReplication", src); TraceScope scope = getPathTraceScope("setReplication", src);
try { try {
return namenode.setReplication(src, replication); return namenode.setReplication(src, replication);
Expand All @@ -1563,6 +1570,7 @@ public boolean setReplication(String src, short replication)
*/ */
public void setStoragePolicy(String src, String policyName) public void setStoragePolicy(String src, String policyName)
throws IOException { throws IOException {
checkOpen();
TraceScope scope = getPathTraceScope("setStoragePolicy", src); TraceScope scope = getPathTraceScope("setStoragePolicy", src);
try { try {
namenode.setStoragePolicy(src, policyName); namenode.setStoragePolicy(src, policyName);
Expand All @@ -1582,6 +1590,7 @@ public void setStoragePolicy(String src, String policyName)
* @return All the existing storage policies * @return All the existing storage policies
*/ */
public BlockStoragePolicy[] getStoragePolicies() throws IOException { public BlockStoragePolicy[] getStoragePolicies() throws IOException {
checkOpen();
TraceScope scope = Trace.startSpan("getStoragePolicies", traceSampler); TraceScope scope = Trace.startSpan("getStoragePolicies", traceSampler);
try { try {
return namenode.getStoragePolicies(); return namenode.getStoragePolicies();
Expand Down Expand Up @@ -2232,6 +2241,7 @@ public DatanodeStorageReport[] getDatanodeStorageReport(
* @see ClientProtocol#setSafeMode(HdfsConstants.SafeModeAction,boolean) * @see ClientProtocol#setSafeMode(HdfsConstants.SafeModeAction,boolean)
*/ */
public boolean setSafeMode(SafeModeAction action) throws IOException { public boolean setSafeMode(SafeModeAction action) throws IOException {
checkOpen();
return setSafeMode(action, false); return setSafeMode(action, false);
} }


Expand Down Expand Up @@ -2434,6 +2444,7 @@ public void removeCacheDirective(long id)


public RemoteIterator<CacheDirectiveEntry> listCacheDirectives( public RemoteIterator<CacheDirectiveEntry> listCacheDirectives(
CacheDirectiveInfo filter) throws IOException { CacheDirectiveInfo filter) throws IOException {
checkOpen();
return new CacheDirectiveIterator(namenode, filter, traceSampler); return new CacheDirectiveIterator(namenode, filter, traceSampler);
} }


Expand Down Expand Up @@ -2474,6 +2485,7 @@ public void removeCachePool(String poolName) throws IOException {
} }


public RemoteIterator<CachePoolEntry> listCachePools() throws IOException { public RemoteIterator<CachePoolEntry> listCachePools() throws IOException {
checkOpen();
return new CachePoolIterator(namenode, traceSampler); return new CachePoolIterator(namenode, traceSampler);
} }


Expand All @@ -2483,6 +2495,7 @@ public RemoteIterator<CachePoolEntry> listCachePools() throws IOException {
* @see ClientProtocol#saveNamespace(long, long) * @see ClientProtocol#saveNamespace(long, long)
*/ */
boolean saveNamespace(long timeWindow, long txGap) throws IOException { boolean saveNamespace(long timeWindow, long txGap) throws IOException {
checkOpen();
TraceScope scope = Trace.startSpan("saveNamespace", traceSampler); TraceScope scope = Trace.startSpan("saveNamespace", traceSampler);
try { try {
return namenode.saveNamespace(timeWindow, txGap); return namenode.saveNamespace(timeWindow, txGap);
Expand All @@ -2500,6 +2513,7 @@ boolean saveNamespace(long timeWindow, long txGap) throws IOException {
* @see ClientProtocol#rollEdits() * @see ClientProtocol#rollEdits()
*/ */
long rollEdits() throws AccessControlException, IOException { long rollEdits() throws AccessControlException, IOException {
checkOpen();
TraceScope scope = Trace.startSpan("rollEdits", traceSampler); TraceScope scope = Trace.startSpan("rollEdits", traceSampler);
try { try {
return namenode.rollEdits(); return namenode.rollEdits();
Expand All @@ -2522,6 +2536,7 @@ ExtendedBlock getPreviousBlock(long fileId) {
*/ */
boolean restoreFailedStorage(String arg) boolean restoreFailedStorage(String arg)
throws AccessControlException, IOException{ throws AccessControlException, IOException{
checkOpen();
TraceScope scope = Trace.startSpan("restoreFailedStorage", traceSampler); TraceScope scope = Trace.startSpan("restoreFailedStorage", traceSampler);
try { try {
return namenode.restoreFailedStorage(arg); return namenode.restoreFailedStorage(arg);
Expand All @@ -2538,6 +2553,7 @@ boolean restoreFailedStorage(String arg)
* @see ClientProtocol#refreshNodes() * @see ClientProtocol#refreshNodes()
*/ */
public void refreshNodes() throws IOException { public void refreshNodes() throws IOException {
checkOpen();
TraceScope scope = Trace.startSpan("refreshNodes", traceSampler); TraceScope scope = Trace.startSpan("refreshNodes", traceSampler);
try { try {
namenode.refreshNodes(); namenode.refreshNodes();
Expand All @@ -2552,6 +2568,7 @@ public void refreshNodes() throws IOException {
* @see ClientProtocol#metaSave(String) * @see ClientProtocol#metaSave(String)
*/ */
public void metaSave(String pathname) throws IOException { public void metaSave(String pathname) throws IOException {
checkOpen();
TraceScope scope = Trace.startSpan("metaSave", traceSampler); TraceScope scope = Trace.startSpan("metaSave", traceSampler);
try { try {
namenode.metaSave(pathname); namenode.metaSave(pathname);
Expand All @@ -2569,6 +2586,7 @@ public void metaSave(String pathname) throws IOException {
* @see ClientProtocol#setBalancerBandwidth(long) * @see ClientProtocol#setBalancerBandwidth(long)
*/ */
public void setBalancerBandwidth(long bandwidth) throws IOException { public void setBalancerBandwidth(long bandwidth) throws IOException {
checkOpen();
TraceScope scope = Trace.startSpan("setBalancerBandwidth", traceSampler); TraceScope scope = Trace.startSpan("setBalancerBandwidth", traceSampler);
try { try {
namenode.setBalancerBandwidth(bandwidth); namenode.setBalancerBandwidth(bandwidth);
Expand All @@ -2581,6 +2599,7 @@ public void setBalancerBandwidth(long bandwidth) throws IOException {
* @see ClientProtocol#finalizeUpgrade() * @see ClientProtocol#finalizeUpgrade()
*/ */
public void finalizeUpgrade() throws IOException { public void finalizeUpgrade() throws IOException {
checkOpen();
TraceScope scope = Trace.startSpan("finalizeUpgrade", traceSampler); TraceScope scope = Trace.startSpan("finalizeUpgrade", traceSampler);
try { try {
namenode.finalizeUpgrade(); namenode.finalizeUpgrade();
Expand All @@ -2590,6 +2609,7 @@ public void finalizeUpgrade() throws IOException {
} }


RollingUpgradeInfo rollingUpgrade(RollingUpgradeAction action) throws IOException { RollingUpgradeInfo rollingUpgrade(RollingUpgradeAction action) throws IOException {
checkOpen();
TraceScope scope = Trace.startSpan("rollingUpgrade", traceSampler); TraceScope scope = Trace.startSpan("rollingUpgrade", traceSampler);
try { try {
return namenode.rollingUpgrade(action); return namenode.rollingUpgrade(action);
Expand Down Expand Up @@ -2675,6 +2695,7 @@ public boolean primitiveMkdir(String src, FsPermission absPermission,
* @see ClientProtocol#getContentSummary(String) * @see ClientProtocol#getContentSummary(String)
*/ */
ContentSummary getContentSummary(String src) throws IOException { ContentSummary getContentSummary(String src) throws IOException {
checkOpen();
TraceScope scope = getPathTraceScope("getContentSummary", src); TraceScope scope = getPathTraceScope("getContentSummary", src);
try { try {
return namenode.getContentSummary(src); return namenode.getContentSummary(src);
Expand All @@ -2693,6 +2714,7 @@ ContentSummary getContentSummary(String src) throws IOException {
*/ */
void setQuota(String src, long namespaceQuota, long storagespaceQuota) void setQuota(String src, long namespaceQuota, long storagespaceQuota)
throws IOException { throws IOException {
checkOpen();
// sanity check // sanity check
if ((namespaceQuota <= 0 && namespaceQuota != HdfsConstants.QUOTA_DONT_SET && if ((namespaceQuota <= 0 && namespaceQuota != HdfsConstants.QUOTA_DONT_SET &&
namespaceQuota != HdfsConstants.QUOTA_RESET) || namespaceQuota != HdfsConstants.QUOTA_RESET) ||
Expand Down Expand Up @@ -2726,6 +2748,7 @@ void setQuota(String src, long namespaceQuota, long storagespaceQuota)
*/ */
void setQuotaByStorageType(String src, StorageType type, long quota) void setQuotaByStorageType(String src, StorageType type, long quota)
throws IOException { throws IOException {
checkOpen();
if (quota <= 0 && quota != HdfsConstants.QUOTA_DONT_SET && if (quota <= 0 && quota != HdfsConstants.QUOTA_DONT_SET &&
quota != HdfsConstants.QUOTA_RESET) { quota != HdfsConstants.QUOTA_RESET) {
throw new IllegalArgumentException("Invalid values for quota :" + throw new IllegalArgumentException("Invalid values for quota :" +
Expand Down Expand Up @@ -3071,11 +3094,13 @@ public void checkAccess(String src, FsAction mode) throws IOException {
} }


public DFSInotifyEventInputStream getInotifyEventStream() throws IOException { public DFSInotifyEventInputStream getInotifyEventStream() throws IOException {
checkOpen();
return new DFSInotifyEventInputStream(traceSampler, namenode); return new DFSInotifyEventInputStream(traceSampler, namenode);
} }


public DFSInotifyEventInputStream getInotifyEventStream(long lastReadTxid) public DFSInotifyEventInputStream getInotifyEventStream(long lastReadTxid)
throws IOException { throws IOException {
checkOpen();
return new DFSInotifyEventInputStream(traceSampler, namenode, lastReadTxid); return new DFSInotifyEventInputStream(traceSampler, namenode, lastReadTxid);
} }


Expand Down

0 comments on commit e16f4b7

Please sign in to comment.