~ubuntu-branches/ubuntu/vivid/eucalyptus/vivid

« back to all changes in this revision

Viewing changes to .pc/26-google-collections-1.0-ftbfs.patch/clc/modules/image-manager/src/main/java/com/eucalyptus/blockstorage/StorageUtil.java

  • Committer: Bazaar Package Importer
  • Author(s): James Page
  • Date: 2011-05-18 10:46:58 UTC
  • Revision ID: james.westby@ubuntu.com-20110518104658-umi4lvp0yqtu8cl9
Tags: 2.0.1+bzr1256-0ubuntu5
* Fix FTBFS against libgoogle-collections-java 1.0 (LP: #784491). 
  - debian/patches/26-google-collections-1.0-ftbfs.patch: refactoring
    to use 1.0 API.
* Fix libjibx-java to version 1.1 to allow entry of libjibx1.2-java 
  into universe without breaking eucalyptus:
  - debian/eucalyptus-java-common.links: use jibx-*-1.1.jar.
  - debian/build-jars: use jibx-*-1.1.jar.
  - debian/control: use libjibx1.1-java instead of libjibx-java.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*******************************************************************************
 
2
*Copyright (c) 2009  Eucalyptus Systems, Inc.
 
3
 
4
*  This program is free software: you can redistribute it and/or modify
 
5
*  it under the terms of the GNU General Public License as published by
 
6
*  the Free Software Foundation, only version 3 of the License.
 
7
 
8
 
9
*  This file is distributed in the hope that it will be useful, but WITHOUT
 
10
*  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 
11
*  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 
12
*  for more details.
 
13
 
14
*  You should have received a copy of the GNU General Public License along
 
15
*  with this program.  If not, see <http://www.gnu.org/licenses/>.
 
16
 
17
*  Please contact Eucalyptus Systems, Inc., 130 Castilian
 
18
*  Dr., Goleta, CA 93101 USA or visit <http://www.eucalyptus.com/licenses/>
 
19
*  if you need additional information or have any questions.
 
20
 
21
*  This file may incorporate work covered under the following copyright and
 
22
*  permission notice:
 
23
 
24
*    Software License Agreement (BSD License)
 
25
 
26
*    Copyright (c) 2008, Regents of the University of California
 
27
*    All rights reserved.
 
28
 
29
*    Redistribution and use of this software in source and binary forms, with
 
30
*    or without modification, are permitted provided that the following
 
31
*    conditions are met:
 
32
 
33
*      Redistributions of source code must retain the above copyright notice,
 
34
*      this list of conditions and the following disclaimer.
 
35
 
36
*      Redistributions in binary form must reproduce the above copyright
 
37
*      notice, this list of conditions and the following disclaimer in the
 
38
*      documentation and/or other materials provided with the distribution.
 
39
 
40
*    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 
41
*    IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 
42
*    TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
 
43
*    PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
 
44
*    OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 
45
*    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 
46
*    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 
47
*    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 
48
*    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 
49
*    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 
50
*    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. USERS OF
 
51
*    THIS SOFTWARE ACKNOWLEDGE THE POSSIBLE PRESENCE OF OTHER OPEN SOURCE
 
52
*    LICENSED MATERIAL, COPYRIGHTED MATERIAL OR PATENTED MATERIAL IN THIS
 
53
*    SOFTWARE, AND IF ANY SUCH MATERIAL IS DISCOVERED THE PARTY DISCOVERING
 
54
*    IT MAY INFORM DR. RICH WOLSKI AT THE UNIVERSITY OF CALIFORNIA, SANTA
 
55
*    BARBARA WHO WILL THEN ASCERTAIN THE MOST APPROPRIATE REMEDY, WHICH IN
 
56
*    THE REGENTS’ DISCRETION MAY INCLUDE, WITHOUT LIMITATION, REPLACEMENT
 
57
*    OF THE CODE SO IDENTIFIED, LICENSING OF THE CODE SO IDENTIFIED, OR
 
58
*    WITHDRAWAL OF THE CODE CAPABILITY TO THE EXTENT NEEDED TO COMPLY WITH
 
59
*    ANY SUCH LICENSES OR RIGHTS.
 
60
*******************************************************************************/
 
61
/*
 
62
 * Author: chris grzegorczyk <grze@eucalyptus.com>
 
63
 */
 
64
package com.eucalyptus.blockstorage;
 
65
 
 
66
import java.util.ArrayList;
 
67
import java.util.Iterator;
 
68
import java.util.List;
 
69
import java.util.Map;
 
70
 
 
71
import org.apache.log4j.Logger;
 
72
 
 
73
import com.eucalyptus.bootstrap.Component;
 
74
import com.eucalyptus.component.Dispatcher;
 
75
import com.eucalyptus.config.Configuration;
 
76
import com.eucalyptus.config.StorageControllerConfiguration;
 
77
import com.eucalyptus.util.EucalyptusCloudException;
 
78
import com.eucalyptus.ws.client.ServiceDispatcher;
 
79
import com.google.common.base.Function;
 
80
import com.google.common.collect.Iterators;
 
81
import com.google.common.collect.Lists;
 
82
import com.google.common.collect.Maps;
 
83
import com.google.common.collect.Multimap;
 
84
import com.google.common.collect.Multimaps;
 
85
 
 
86
import edu.ucsb.eucalyptus.cloud.state.State;
 
87
import edu.ucsb.eucalyptus.msgs.AttachedVolume;
 
88
import edu.ucsb.eucalyptus.msgs.DescribeStorageVolumesResponseType;
 
89
import edu.ucsb.eucalyptus.msgs.DescribeStorageVolumesType;
 
90
import edu.ucsb.eucalyptus.msgs.EucalyptusMessage;
 
91
import edu.ucsb.eucalyptus.msgs.StorageVolume;
 
92
 
 
93
public class StorageUtil {
 
94
  private static Logger LOG = Logger.getLogger( StorageUtil.class );
 
95
  
 
96
  public static Dispatcher lookup( String hostName ) {
 
97
    return ServiceDispatcher.lookup( Component.storage, hostName );
 
98
  }
 
99
  
 
100
  public static <TYPE> TYPE send( String clusterName, EucalyptusMessage message ) throws EucalyptusCloudException {
 
101
    StorageControllerConfiguration scConfig = Configuration.getStorageControllerConfiguration( clusterName );
 
102
    Dispatcher sc = ServiceDispatcher.lookup( Component.storage, scConfig.getHostName( ) );
 
103
    TYPE reply = (TYPE) sc.send( message );
 
104
    return reply;
 
105
  }
 
106
  
 
107
  public static void dispatchAll( EucalyptusMessage message ) throws EucalyptusCloudException {
 
108
    for( Dispatcher sc : ServiceDispatcher.lookupMany( Component.storage ) ) {
 
109
      sc.dispatch( message );
 
110
    }
 
111
  }
 
112
 
 
113
  public static ArrayList<edu.ucsb.eucalyptus.msgs.Volume> getVolumeReply( Map<String, AttachedVolume> attachedVolumes, List<Volume> volumes ) throws EucalyptusCloudException {
 
114
    Multimap<String,Volume> clusterVolumeMap = Multimaps.newHashMultimap( );
 
115
    Map<String,StorageVolume> idStorageVolumeMap = Maps.newHashMap( );
 
116
    for( Volume v : volumes ) {
 
117
      clusterVolumeMap.put( v.getCluster( ), v );
 
118
    }
 
119
    ArrayList<edu.ucsb.eucalyptus.msgs.Volume> reply = Lists.newArrayList( );
 
120
    for( String cluster : clusterVolumeMap.keySet( ) ) {
 
121
      StorageControllerConfiguration scConfig = Configuration.getStorageControllerConfiguration( cluster );
 
122
      Iterator<String> volumeNames = Iterators.transform( clusterVolumeMap.get( cluster ).iterator( ), new Function<Volume,String>() {
 
123
        @Override
 
124
        public String apply( Volume arg0 ) {
 
125
          return arg0.getDisplayName( );
 
126
        }
 
127
      } );
 
128
      DescribeStorageVolumesType descVols = new DescribeStorageVolumesType( Lists.newArrayList( volumeNames ) );
 
129
      Dispatcher sc = ServiceDispatcher.lookup( Component.storage, scConfig.getHostName( ) );
 
130
      DescribeStorageVolumesResponseType volState = sc.send( descVols, DescribeStorageVolumesResponseType.class );    
 
131
      for ( StorageVolume vol : volState.getVolumeSet( ) ) {
 
132
        idStorageVolumeMap.put( vol.getVolumeId( ), vol );
 
133
      }
 
134
      for( Volume v : volumes ) {
 
135
        if( !cluster.equals( v.getCluster( ) ) ) continue;
 
136
        String status = null;
 
137
        Integer size = 0;
 
138
        String actualDeviceName = "unknown";
 
139
        if( idStorageVolumeMap.containsKey( v.getDisplayName( ) ) ) {
 
140
          StorageVolume vol = idStorageVolumeMap.get( v.getDisplayName( ) );
 
141
          status = vol.getStatus( );
 
142
          size = Integer.parseInt( vol.getSize( ) );
 
143
          actualDeviceName = vol.getActualDeviceName( );
 
144
        } else {
 
145
          v.setState( State.ANNIHILATED );
 
146
        }
 
147
        if ( attachedVolumes.containsKey( v.getDisplayName() ) ) {
 
148
          v.setState( State.BUSY );
 
149
        } else if( status != null ) {
 
150
          v.setMappedState( status );
 
151
        }
 
152
        if( v.getSize() <= 0 ) {
 
153
          v.setSize( new Integer( size ) );
 
154
        }
 
155
        if( "invalid".equals ( v.getRemoteDevice( ) ) || "unknown".equals( v.getRemoteDevice( ) ) || v.getRemoteDevice( ) == null ) {
 
156
          v.setRemoteDevice( actualDeviceName );
 
157
        }
 
158
        edu.ucsb.eucalyptus.msgs.Volume aVolume = v.morph( new edu.ucsb.eucalyptus.msgs.Volume() );
 
159
        if ( attachedVolumes.containsKey( v.getDisplayName() ) ) {
 
160
          aVolume.setStatus( v.mapState( ) );
 
161
          aVolume.getAttachmentSet().add( attachedVolumes.get( aVolume.getVolumeId() ) );
 
162
        }
 
163
        if ( "invalid".equals( v.getRemoteDevice( ) ) && !State.FAIL.equals( v.getState( ) ) ) {
 
164
          aVolume.setStatus( "creating" );
 
165
        }
 
166
        reply.add( aVolume );
 
167
      }
 
168
    }
 
169
    return reply;
 
170
  }
 
171
 
 
172
}