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 */ 018package org.apache.hadoop.hdfs.protocol; 019 020import org.apache.hadoop.io.Writable; 021import org.apache.hadoop.io.Text; 022import java.io.DataInput; 023import java.io.DataOutput; 024import java.io.IOException; 025import java.util.Arrays; 026 027/** 028 * Contains a list of paths corresponding to corrupt files and a cookie 029 * used for iterative calls to NameNode.listCorruptFileBlocks. 030 * 031 */ 032public class CorruptFileBlocks implements Writable { 033 // used for hashCode 034 private static final int PRIME = 16777619; 035 036 private String[] files; 037 private String cookie; 038 039 public CorruptFileBlocks() { 040 this(new String[0], ""); 041 } 042 043 public CorruptFileBlocks(String[] files, String cookie) { 044 this.files = files; 045 this.cookie = cookie; 046 } 047 048 public String[] getFiles() { 049 return files; 050 } 051 052 public String getCookie() { 053 return cookie; 054 } 055 056 /** 057 * {@inheritDoc} 058 */ 059 @Override 060 public void readFields(DataInput in) throws IOException { 061 int fileCount = in.readInt(); 062 files = new String[fileCount]; 063 for (int i = 0; i < fileCount; i++) { 064 files[i] = Text.readString(in); 065 } 066 cookie = Text.readString(in); 067 } 068 069 /** 070 * {@inheritDoc} 071 */ 072 @Override 073 public void write(DataOutput out) throws IOException { 074 out.writeInt(files.length); 075 for (int i = 0; i < files.length; i++) { 076 Text.writeString(out, files[i]); 077 } 078 Text.writeString(out, cookie); 079 } 080 081 /** 082 * {@inheritDoc} 083 */ 084 public boolean equals(Object obj) { 085 if (this == obj) { 086 return true; 087 } 088 if (!(obj instanceof CorruptFileBlocks)) { 089 return false; 090 } 091 CorruptFileBlocks other = (CorruptFileBlocks) obj; 092 return cookie.equals(other.cookie) && 093 Arrays.equals(files, other.files); 094 } 095 096 /** 097 * {@inheritDoc} 098 */ 099 public int hashCode() { 100 int result = cookie.hashCode(); 101 102 for (String file : files) { 103 result = PRIME * result + file.hashCode(); 104 } 105 106 return result; 107 } 108}