001/**
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements.  See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership.  The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License.  You may obtain a copy of the License at
009 *
010 *     http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018
019package org.apache.hadoop.hdfs.protocol;
020
021import org.apache.hadoop.classification.InterfaceAudience;
022import org.apache.hadoop.classification.InterfaceStability;
023
024@InterfaceAudience.Private
025@InterfaceStability.Evolving
026
027/**
028 * Abstract class for deriving exceptions related to filesystem constraints
029 */
030public abstract class FSLimitException extends QuotaExceededException {
031  protected static final long serialVersionUID = 1L;
032
033  protected FSLimitException() {}
034
035  protected FSLimitException(String msg) {
036    super(msg);
037  }
038  
039  protected FSLimitException(long quota, long count) {
040    super(quota, count);
041  }
042
043  /**
044   * Path component length is too long
045   */
046  public static final
047  class PathComponentTooLongException extends FSLimitException {
048    protected static final long serialVersionUID = 1L;
049
050    private String childName;
051
052    protected PathComponentTooLongException() {}
053
054    protected PathComponentTooLongException(String msg) {
055      super(msg);
056    }
057    
058    public PathComponentTooLongException(long quota, long count,
059        String parentPath, String childName) {
060      super(quota, count);
061      setPathName(parentPath);
062      this.childName = childName;
063    }
064
065    String getParentPath() {
066      return pathName;
067    }
068
069    @Override
070    public String getMessage() {
071      return "The maximum path component name limit of " + childName +
072      " in directory " + getParentPath() +
073      " is exceeded: limit=" + quota + " length=" + count; 
074    }
075  }
076
077  /**
078   * Directory has too many items
079   */
080  public static final
081  class MaxDirectoryItemsExceededException extends FSLimitException {
082    protected static final long serialVersionUID = 1L;
083
084    protected MaxDirectoryItemsExceededException() {}
085
086    protected MaxDirectoryItemsExceededException(String msg) {
087      super(msg);
088    }
089    
090    public MaxDirectoryItemsExceededException(String path, long quota,
091        long count) {
092      super(quota, count);
093      setPathName(path);
094    }
095
096    @Override
097    public String getMessage() {
098      return "The directory item limit of " + pathName +
099      " is exceeded: limit=" + quota + " items=" + count; 
100    }
101  }
102}