You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by cu...@apache.org on 2006/02/07 20:42:19 UTC
svn commit: r375671 - in /lucene/hadoop/trunk/src/java/org/apache/hadoop:
dfs/ io/
Author: cutting
Date: Tue Feb 7 11:42:16 2006
New Revision: 375671
URL: http://svn.apache.org/viewcvs?rev=375671&view=rev
Log:
Add WritableFactory mechanism, to permit one to use ObjectWritable with non-public classes. Register factories for DFS implementation classes and make them non-public. This greatly simplifies the javadoc.
Added:
lucene/hadoop/trunk/src/java/org/apache/hadoop/io/WritableFactories.java
lucene/hadoop/trunk/src/java/org/apache/hadoop/io/WritableFactory.java
Modified:
lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/Block.java
lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/BlockCommand.java
lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/ClientProtocol.java
lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DFSClient.java
lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DFSFile.java
lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DFSFileInfo.java
lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeInfo.java
lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeProtocol.java
lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSConstants.java
lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSDataset.java
lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSDirectory.java
lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSNamesystem.java
lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/LocatedBlock.java
lucene/hadoop/trunk/src/java/org/apache/hadoop/io/ArrayWritable.java
lucene/hadoop/trunk/src/java/org/apache/hadoop/io/ObjectWritable.java
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/Block.java
URL: http://svn.apache.org/viewcvs/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/Block.java?rev=375671&r1=375670&r2=375671&view=diff
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/Block.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/Block.java Tue Feb 7 11:42:16 2006
@@ -26,7 +26,16 @@
*
* @author Mike Cafarella
**************************************************/
-public class Block implements Writable, Comparable {
+class Block implements Writable, Comparable {
+
+ static { // register a ctor
+ WritableFactories.setFactory
+ (Block.class,
+ new WritableFactory() {
+ public Writable newInstance() { return new Block(); }
+ });
+ }
+
static Random r = new Random();
/**
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/BlockCommand.java
URL: http://svn.apache.org/viewcvs/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/BlockCommand.java?rev=375671&r1=375670&r2=375671&view=diff
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/BlockCommand.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/BlockCommand.java Tue Feb 7 11:42:16 2006
@@ -25,7 +25,16 @@
*
* @author Michael Cafarella
****************************************************/
-public class BlockCommand implements Writable {
+class BlockCommand implements Writable {
+
+ static { // register a ctor
+ WritableFactories.setFactory
+ (BlockCommand.class,
+ new WritableFactory() {
+ public Writable newInstance() { return new BlockCommand(); }
+ });
+ }
+
boolean transferBlocks = false;
boolean invalidateBlocks = false;
Block blocks[];
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/ClientProtocol.java
URL: http://svn.apache.org/viewcvs/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/ClientProtocol.java?rev=375671&r1=375670&r2=375671&view=diff
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/ClientProtocol.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/ClientProtocol.java Tue Feb 7 11:42:16 2006
@@ -23,7 +23,7 @@
*
* @author Mike Cafarella
**********************************************************************/
-public interface ClientProtocol {
+interface ClientProtocol {
/**
* Open an existing file. Get back block and datanode info
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DFSClient.java
URL: http://svn.apache.org/viewcvs/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DFSClient.java?rev=375671&r1=375670&r2=375671&view=diff
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DFSClient.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DFSClient.java Tue Feb 7 11:42:16 2006
@@ -31,7 +31,7 @@
* Connects to a namenode daemon.
* @author Mike Cafarella, Tessa MacDuff
********************************************************/
-public class DFSClient implements FSConstants {
+class DFSClient implements FSConstants {
public static final Logger LOG = LogFormatter.getLogger("org.apache.hadoop.fs.DFSClient");
static int MAX_BLOCK_ACQUIRE_FAILURES = 10;
ClientProtocol namenode;
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DFSFile.java
URL: http://svn.apache.org/viewcvs/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DFSFile.java?rev=375671&r1=375670&r2=375671&view=diff
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DFSFile.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DFSFile.java Tue Feb 7 11:42:16 2006
@@ -24,7 +24,7 @@
*
* @author Mike Cafarella
*****************************************************************/
-public class DFSFile extends File {
+class DFSFile extends File {
DFSFileInfo info;
/** Separator used in DFS filenames. */
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DFSFileInfo.java
URL: http://svn.apache.org/viewcvs/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DFSFileInfo.java?rev=375671&r1=375670&r2=375671&view=diff
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DFSFileInfo.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DFSFileInfo.java Tue Feb 7 11:42:16 2006
@@ -25,7 +25,15 @@
*
* @author Mike Cafarella
******************************************************/
-public class DFSFileInfo implements Writable {
+class DFSFileInfo implements Writable {
+ static { // register a ctor
+ WritableFactories.setFactory
+ (DFSFileInfo.class,
+ new WritableFactory() {
+ public Writable newInstance() { return new DFSFileInfo(); }
+ });
+ }
+
UTF8 path;
long len;
long contentsLen;
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeInfo.java
URL: http://svn.apache.org/viewcvs/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeInfo.java?rev=375671&r1=375670&r2=375671&view=diff
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeInfo.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeInfo.java Tue Feb 7 11:42:16 2006
@@ -25,7 +25,16 @@
*
* @author Mike Cafarella
**************************************************/
-public class DatanodeInfo implements Writable, Comparable {
+class DatanodeInfo implements Writable, Comparable {
+
+ static { // register a ctor
+ WritableFactories.setFactory
+ (DatanodeInfo.class,
+ new WritableFactory() {
+ public Writable newInstance() { return new DatanodeInfo(); }
+ });
+ }
+
private UTF8 name;
private long capacityBytes, remainingBytes, lastUpdate;
private volatile TreeSet blocks;
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeProtocol.java
URL: http://svn.apache.org/viewcvs/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeProtocol.java?rev=375671&r1=375670&r2=375671&view=diff
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeProtocol.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeProtocol.java Tue Feb 7 11:42:16 2006
@@ -24,7 +24,7 @@
*
* @author Michael Cafarella
**********************************************************************/
-public interface DatanodeProtocol {
+interface DatanodeProtocol {
public void sendHeartbeat(String sender, long capacity, long remaining) throws IOException;
public Block[] blockReport(String sender, Block blocks[]) throws IOException;
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSConstants.java
URL: http://svn.apache.org/viewcvs/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSConstants.java?rev=375671&r1=375670&r2=375671&view=diff
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSConstants.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSConstants.java Tue Feb 7 11:42:16 2006
@@ -22,7 +22,7 @@
*
* @author Mike Cafarella
************************************/
-public interface FSConstants {
+interface FSConstants {
public static int BLOCK_SIZE = 32 * 1000 * 1000;
//public static int BLOCK_SIZE = 19;
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSDataset.java
URL: http://svn.apache.org/viewcvs/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSDataset.java?rev=375671&r1=375670&r2=375671&view=diff
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSDataset.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSDataset.java Tue Feb 7 11:42:16 2006
@@ -27,7 +27,7 @@
*
* @author Mike Cafarella
***************************************************/
-public class FSDataset implements FSConstants {
+class FSDataset implements FSConstants {
static final double USABLE_DISK_PCT = 0.98;
/**
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSDirectory.java
URL: http://svn.apache.org/viewcvs/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSDirectory.java?rev=375671&r1=375670&r2=375671&view=diff
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSDirectory.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSDirectory.java Tue Feb 7 11:42:16 2006
@@ -30,7 +30,7 @@
*
* @author Mike Cafarella
*************************************************/
-public class FSDirectory implements FSConstants {
+class FSDirectory implements FSConstants {
static String FS_IMAGE = "fsimage";
static String NEW_FS_IMAGE = "fsimage.new";
static String OLD_FS_IMAGE = "fsimage.old";
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSNamesystem.java
URL: http://svn.apache.org/viewcvs/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSNamesystem.java?rev=375671&r1=375670&r2=375671&view=diff
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSNamesystem.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSNamesystem.java Tue Feb 7 11:42:16 2006
@@ -32,7 +32,7 @@
* 4) machine --> blocklist (inverted #2)
* 5) LRU cache of updated-heartbeat machines
***************************************************/
-public class FSNamesystem implements FSConstants {
+class FSNamesystem implements FSConstants {
public static final Logger LOG = LogFormatter.getLogger("org.apache.hadoop.fs.FSNamesystem");
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/LocatedBlock.java
URL: http://svn.apache.org/viewcvs/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/LocatedBlock.java?rev=375671&r1=375670&r2=375671&view=diff
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/LocatedBlock.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/LocatedBlock.java Tue Feb 7 11:42:16 2006
@@ -25,7 +25,16 @@
*
* @author Michael Cafarella
****************************************************/
-public class LocatedBlock implements Writable {
+class LocatedBlock implements Writable {
+
+ static { // register a ctor
+ WritableFactories.setFactory
+ (LocatedBlock.class,
+ new WritableFactory() {
+ public Writable newInstance() { return new LocatedBlock(); }
+ });
+ }
+
Block b;
DatanodeInfo locs[];
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/io/ArrayWritable.java
URL: http://svn.apache.org/viewcvs/lucene/hadoop/trunk/src/java/org/apache/hadoop/io/ArrayWritable.java?rev=375671&r1=375670&r2=375671&view=diff
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/io/ArrayWritable.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/io/ArrayWritable.java Tue Feb 7 11:42:16 2006
@@ -78,14 +78,7 @@
public void readFields(DataInput in) throws IOException {
values = new Writable[in.readInt()]; // construct values
for (int i = 0; i < values.length; i++) {
- Writable value; // construct value
- try {
- value = (Writable)valueClass.newInstance();
- } catch (InstantiationException e) {
- throw new RuntimeException(e.toString());
- } catch (IllegalAccessException e) {
- throw new RuntimeException(e.toString());
- }
+ Writable value = WritableFactories.newInstance(valueClass);
value.readFields(in); // read a value
values[i] = value; // store it in values
}
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/io/ObjectWritable.java
URL: http://svn.apache.org/viewcvs/lucene/hadoop/trunk/src/java/org/apache/hadoop/io/ObjectWritable.java?rev=375671&r1=375670&r2=375671&view=diff
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/io/ObjectWritable.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/io/ObjectWritable.java Tue Feb 7 11:42:16 2006
@@ -227,18 +227,12 @@
instance = UTF8.readString(in);
} else { // Writable
- try {
- Writable writable = (Writable)declaredClass.newInstance();
- if(writable instanceof Configurable) {
- ((Configurable) writable).setConf(conf);
- }
- writable.readFields(in);
- instance = writable;
- } catch (InstantiationException e) {
- throw new RuntimeException(e);
- } catch (IllegalAccessException e) {
- throw new RuntimeException(e);
+ Writable writable = WritableFactories.newInstance(declaredClass);
+ if(writable instanceof Configurable) {
+ ((Configurable) writable).setConf(conf);
}
+ writable.readFields(in);
+ instance = writable;
}
if (objectWritable != null) { // store values
Added: lucene/hadoop/trunk/src/java/org/apache/hadoop/io/WritableFactories.java
URL: http://svn.apache.org/viewcvs/lucene/hadoop/trunk/src/java/org/apache/hadoop/io/WritableFactories.java?rev=375671&view=auto
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/io/WritableFactories.java (added)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/io/WritableFactories.java Tue Feb 7 11:42:16 2006
@@ -0,0 +1,55 @@
+/**
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.io;
+
+import java.util.HashMap;
+
+/** Factories for non-public writables. Defining a factory permits {@link
+ * ObjectWritable} to be able to construct instances of non-public classes. */
+public class WritableFactories {
+ private static final HashMap CLASS_TO_FACTORY = new HashMap();
+
+ private WritableFactories() {} // singleton
+
+ /** Define a factory for a class. */
+ public static synchronized void setFactory(Class c, WritableFactory factory) {
+ CLASS_TO_FACTORY.put(c, factory);
+ }
+
+ /** Define a factory for a class. */
+ public static synchronized WritableFactory getFactory(Class c) {
+ return (WritableFactory)CLASS_TO_FACTORY.get(c);
+ }
+
+ /** Create a new instance of a class with a defined factory. */
+ public static Writable newInstance(Class c) {
+ WritableFactory factory = WritableFactories.getFactory(c);
+ if (factory != null) {
+ return factory.newInstance();
+ } else {
+ try {
+ return (Writable)c.newInstance();
+ } catch (InstantiationException e) {
+ throw new RuntimeException(e);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+
+}
+
Added: lucene/hadoop/trunk/src/java/org/apache/hadoop/io/WritableFactory.java
URL: http://svn.apache.org/viewcvs/lucene/hadoop/trunk/src/java/org/apache/hadoop/io/WritableFactory.java?rev=375671&view=auto
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/io/WritableFactory.java (added)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/io/WritableFactory.java Tue Feb 7 11:42:16 2006
@@ -0,0 +1,26 @@
+/**
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.io;
+
+/** A factory for a class of Writable.
+ * @see WritableFactories
+ */
+public interface WritableFactory {
+ /** Return a new instance. */
+ Writable newInstance();
+}
+