DFSLocationsRoot.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:4k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.eclipse.dfs;
  19. import java.io.IOException;
  20. import java.util.HashMap;
  21. import java.util.Map;
  22. import org.apache.hadoop.eclipse.server.HadoopServer;
  23. import org.apache.hadoop.eclipse.servers.IHadoopServerListener;
  24. import org.apache.hadoop.eclipse.servers.ServerRegistry;
  25. import org.apache.hadoop.fs.FileSystem;
  26. /**
  27.  * Representation of the root element containing all DFS servers. This
  28.  * content registers an observer on Hadoop servers so as to update itself
  29.  * when servers are updated.
  30.  */
  31. public class DFSLocationsRoot implements DFSContent, IHadoopServerListener {
  32.   /**
  33.    * 
  34.    */
  35.   private final DFSContentProvider provider;
  36.   private Map<HadoopServer, DFSLocation> map =
  37.       new HashMap<HadoopServer, DFSLocation>();
  38.   /**
  39.    * Register a listeners to track DFS locations updates
  40.    * 
  41.    * @param provider the content provider this content is the root of
  42.    */
  43.   DFSLocationsRoot(DFSContentProvider provider) {
  44.     this.provider = provider;
  45.     ServerRegistry.getInstance().addListener(this);
  46.     this.refresh();
  47.   }
  48.   /*
  49.    * Implementation of IHadoopServerListener
  50.    */
  51.   /* @inheritDoc */
  52.   public synchronized void serverChanged(final HadoopServer location,
  53.       final int type) {
  54.     switch (type) {
  55.       case ServerRegistry.SERVER_STATE_CHANGED: {
  56.         this.provider.refresh(map.get(location));
  57.         break;
  58.       }
  59.       case ServerRegistry.SERVER_ADDED: {
  60.         DFSLocation dfsLoc = new DFSLocation(provider, location);
  61.         map.put(location, dfsLoc);
  62.         this.provider.refresh(this);
  63.         break;
  64.       }
  65.       case ServerRegistry.SERVER_REMOVED: {
  66.         map.remove(location);
  67.         this.provider.refresh(this);
  68.         break;
  69.       }
  70.     }
  71.   }
  72.   /**
  73.    * Recompute the map of Hadoop locations
  74.    */
  75.   private synchronized void reloadLocations() {
  76.     map.clear();
  77.     for (HadoopServer location : ServerRegistry.getInstance().getServers())
  78.       map.put(location, new DFSLocation(provider, location));
  79.   }
  80.   /* @inheritDoc */
  81.   @Override
  82.   public String toString() {
  83.     return "DFS Locations";
  84.   }
  85.   /*
  86.    * Implementation of DFSContent
  87.    */
  88.   /* @inheritDoc */
  89.   public synchronized DFSContent[] getChildren() {
  90.     return this.map.values().toArray(new DFSContent[this.map.size()]);
  91.   }
  92.   /* @inheritDoc */
  93.   public boolean hasChildren() {
  94.     return (this.map.size() > 0);
  95.   }
  96.   /* @inheritDoc */
  97.   public void refresh() {
  98.     reloadLocations();
  99.     this.provider.refresh(this);
  100.   }
  101.   /*
  102.    * Actions
  103.    */
  104.   public void disconnect() {
  105.     Thread closeThread = new Thread() {
  106.       /* @inheritDoc */
  107.       @Override
  108.       public void run() {
  109.         try {
  110.           System.out.printf("Closing all opened File Systems...n");
  111.           FileSystem.closeAll();
  112.           System.out.printf("File Systems closedn");
  113.         } catch (IOException ioe) {
  114.           ioe.printStackTrace();
  115.         }
  116.       }
  117.     };
  118.     // Wait 5 seconds for the connections to be closed
  119.     closeThread.start();
  120.     try {
  121.       closeThread.join(5000);
  122.     } catch (InterruptedException ie) {
  123.       // Ignore
  124.     }
  125.   }
  126. }