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 package org.apache.hadoop.hdfs.protocol;
019
020 import org.apache.hadoop.classification.InterfaceAudience;
021 import org.apache.hadoop.classification.InterfaceStability;
022
023 /**
024 * Describes a path-based cache directive.
025 */
026 @InterfaceStability.Evolving
027 @InterfaceAudience.Public
028 public class CacheDirectiveStats {
029 public static class Builder {
030 private long bytesNeeded;
031 private long bytesCached;
032 private long filesNeeded;
033 private long filesCached;
034 private boolean hasExpired;
035
036 /**
037 * Builds a new CacheDirectiveStats populated with the set properties.
038 *
039 * @return New CacheDirectiveStats.
040 */
041 public CacheDirectiveStats build() {
042 return new CacheDirectiveStats(bytesNeeded, bytesCached, filesNeeded,
043 filesCached, hasExpired);
044 }
045
046 /**
047 * Creates an empty builder.
048 */
049 public Builder() {
050 }
051
052 /**
053 * Sets the bytes needed by this directive.
054 *
055 * @param bytesNeeded The bytes needed.
056 * @return This builder, for call chaining.
057 */
058 public Builder setBytesNeeded(long bytesNeeded) {
059 this.bytesNeeded = bytesNeeded;
060 return this;
061 }
062
063 /**
064 * Sets the bytes cached by this directive.
065 *
066 * @param bytesCached The bytes cached.
067 * @return This builder, for call chaining.
068 */
069 public Builder setBytesCached(long bytesCached) {
070 this.bytesCached = bytesCached;
071 return this;
072 }
073
074 /**
075 * Sets the files needed by this directive.
076 * @param filesNeeded The number of files needed
077 * @return This builder, for call chaining.
078 */
079 public Builder setFilesNeeded(long filesNeeded) {
080 this.filesNeeded = filesNeeded;
081 return this;
082 }
083
084 /**
085 * Sets the files cached by this directive.
086 *
087 * @param filesCached The number of files cached.
088 * @return This builder, for call chaining.
089 */
090 public Builder setFilesCached(long filesCached) {
091 this.filesCached = filesCached;
092 return this;
093 }
094
095 /**
096 * Sets whether this directive has expired.
097 *
098 * @param hasExpired if this directive has expired
099 * @return This builder, for call chaining.
100 */
101 public Builder setHasExpired(boolean hasExpired) {
102 this.hasExpired = hasExpired;
103 return this;
104 }
105 }
106
107 private final long bytesNeeded;
108 private final long bytesCached;
109 private final long filesNeeded;
110 private final long filesCached;
111 private final boolean hasExpired;
112
113 private CacheDirectiveStats(long bytesNeeded, long bytesCached,
114 long filesNeeded, long filesCached, boolean hasExpired) {
115 this.bytesNeeded = bytesNeeded;
116 this.bytesCached = bytesCached;
117 this.filesNeeded = filesNeeded;
118 this.filesCached = filesCached;
119 this.hasExpired = hasExpired;
120 }
121
122 /**
123 * @return The bytes needed.
124 */
125 public long getBytesNeeded() {
126 return bytesNeeded;
127 }
128
129 /**
130 * @return The bytes cached.
131 */
132 public long getBytesCached() {
133 return bytesCached;
134 }
135
136 /**
137 * @return The number of files needed.
138 */
139 public long getFilesNeeded() {
140 return filesNeeded;
141 }
142
143 /**
144 * @return The number of files cached.
145 */
146 public long getFilesCached() {
147 return filesCached;
148 }
149
150 /**
151 * @return Whether this directive has expired.
152 */
153 public boolean hasExpired() {
154 return hasExpired;
155 }
156
157 @Override
158 public String toString() {
159 StringBuilder builder = new StringBuilder();
160 builder.append("{");
161 builder.append("bytesNeeded: ").append(bytesNeeded);
162 builder.append(", ").append("bytesCached: ").append(bytesCached);
163 builder.append(", ").append("filesNeeded: ").append(filesNeeded);
164 builder.append(", ").append("filesCached: ").append(filesCached);
165 builder.append(", ").append("hasExpired: ").append(hasExpired);
166 builder.append("}");
167 return builder.toString();
168 }
169 };