Skip to content

Commit 425ff4a

Browse files
committed
Merge branch 'develop' into prioritization
Conflicts: src/main/java/org/fogbowcloud/manager/Main.java src/main/java/org/fogbowcloud/manager/core/ManagerController.java
2 parents beb7824 + e9e75b9 commit 425ff4a

20 files changed

+517
-137
lines changed

manager.conf.example

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,22 @@ compute_occi_resource_scheme=http://schemas.openstack.org/template/resource#
3939
compute_occi_network_id=ea51ed0c-0e8a-448d-8202-c79777109ffe
4040

4141
# If you are using the EgiImageStoragePlugin
42-
image_storage_class=org.fogbowcloud.manager.core.plugins.egi.EgiImageStoragePlugin
42+
image_storage_class=org.fogbowcloud.manager.core.plugins.imagestorage.egi.EgiImageStoragePlugin
4343
image_storage_egi_base_url=http://lsd.ufcg.edu.br/~user/vm/
4444
image_storage_egi_tmp_storage=/tmp/
4545

4646
# If you are using the EgiApplianceImageStoragePlugin
47-
image_storage_class=org.fogbowcloud.manager.core.plugins.appliance.EgiApplianceImageStoragePlugin
47+
image_storage_class=org.fogbowcloud.manager.core.plugins.imagestorage.appliance.EgiApplianceImageStoragePlugin
4848
image_storage_appliance_base_url=http://appliance-repo.egi.eu/images
4949
image_storage_appliance_tmp_storage=/tmp/
5050

51+
# If you are using the VMCatcherStoragePlugin
52+
image_storage_class=org.fogbowcloud.manager.core.plugins.imagestorage.vmcatcher.VMCatcherStoragePlugin
53+
image_storage_vmcatcher_glancepush_vmcmapping_file=/etc/vmcatcher/vmcmapping
54+
image_storage_vmcatcher_push_method=glancepush
55+
image_storage_vmcatcher_push_method=cesga
56+
57+
# Applies to all image storage plugins
5158
image_storage_static_fogbow-linux-x86=55d938ef-57d1-44ea-8155-6036d170780a
5259
image_storage_static_fogbow-ubuntu-1204=81765250-a4e4-440d-a215-43c9c0849120
5360

pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,11 @@
215215
<artifactId>h2</artifactId>
216216
<version>1.4.186</version>
217217
</dependency>
218+
<dependency>
219+
<groupId>javax.mail</groupId>
220+
<artifactId>mail</artifactId>
221+
<version>1.4</version>
222+
</dependency>
218223

219224
</dependencies>
220225

src/main/java/org/fogbowcloud/manager/Main.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,10 @@
2020
import org.fogbowcloud.manager.core.plugins.PrioritizationPlugin;
2121
import org.fogbowcloud.manager.core.plugins.accounting.FCUAccountingPlugin;
2222
import org.fogbowcloud.manager.core.plugins.benchmarking.FCUStaticBenchmarkingPlugin;
23-
import org.fogbowcloud.manager.core.plugins.egi.EgiImageStoragePlugin;
2423
import org.fogbowcloud.manager.core.plugins.prioritization.TwoFoldPrioritizationPlugin;
24+
import org.fogbowcloud.manager.core.plugins.imagestorage.egi.EgiImageStoragePlugin;
2525
import org.fogbowcloud.manager.occi.OCCIApplication;
26+
import org.fogbowcloud.manager.occi.core.ResourceRepository;
2627
import org.fogbowcloud.manager.xmpp.ManagerXmppComponent;
2728
import org.restlet.Component;
2829
import org.restlet.data.Protocol;
@@ -41,7 +42,8 @@ public static void main(String[] args) throws Exception {
4142
Properties properties = new Properties();
4243
FileInputStream input = new FileInputStream(args[0]);
4344
properties.load(input);
44-
45+
ResourceRepository.init(properties);
46+
4547
ComputePlugin computePlugin = null;
4648
try {
4749
computePlugin = (ComputePlugin) createInstance(

src/main/java/org/fogbowcloud/manager/core/ManagerController.java

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@
5353
import org.fogbowcloud.manager.occi.request.RequestType;
5454
import org.fogbowcloud.manager.xmpp.AsyncPacketSender;
5555
import org.fogbowcloud.manager.xmpp.ManagerPacketHelper;
56-
import org.json.JSONObject;
5756
import org.restlet.Response;
5857

5958
public class ManagerController {
@@ -104,7 +103,7 @@ public ManagerController(Properties properties, ScheduledExecutorService executo
104103
throw new IllegalArgumentException();
105104
}
106105
this.properties = properties;
107-
populateStaticFlavors();
106+
setFlavorsProvided(ResourceRepository.getStaticFlavors(properties));
108107
if (executor == null) {
109108
this.requestSchedulerTimer = new ManagerTimer(Executors.newScheduledThreadPool(1));
110109
this.tokenUpdaterTimer = new ManagerTimer(Executors.newScheduledThreadPool(1));
@@ -130,6 +129,10 @@ public void setPrioritizationPlugin(PrioritizationPlugin prioritizationPlugin){
130129
this.prioritizationPlugin = prioritizationPlugin;
131130
}
132131

132+
public void setFlavorsProvided(List<Flavor> flavorsProvided) {
133+
this.flavorsProvided = flavorsProvided;
134+
}
135+
133136
public void setMemberPickerPlugin(FederationMemberPicker memberPicker) {
134137
this.memberPickerPlugin = memberPicker;
135138
}
@@ -1299,28 +1302,28 @@ public List<Flavor> getFlavorsProvided() {
12991302
return this.flavorsProvided;
13001303
}
13011304

1302-
private void populateStaticFlavors() {
1303-
List<Flavor> flavors = new ArrayList<Flavor>();
1304-
for (Object objectKey: this.properties.keySet()) {
1305-
String key = objectKey.toString();
1306-
if (key.startsWith(ConfigurationConstants.PREFIX_FLAVORS)) {
1307-
String value = (String) this.properties.get(key);
1308-
String cpu = getAttValue("cpu", value);
1309-
String mem = getAttValue("mem", value);
1310-
flavors.add(new Flavor(key.replace(ConfigurationConstants.PREFIX_FLAVORS, ""), cpu, mem, "0"));
1311-
}
1312-
}
1313-
flavorsProvided = flavors;
1314-
}
1305+
// private void populateStaticFlavors() {
1306+
// List<Flavor> flavors = new ArrayList<Flavor>();
1307+
// for (Object objectKey: this.properties.keySet()) {
1308+
// String key = objectKey.toString();
1309+
// if (key.startsWith(ConfigurationConstants.PREFIX_FLAVORS)) {
1310+
// String value = (String) this.properties.get(key);
1311+
// String cpu = getAttValue("cpu", value);
1312+
// String mem = getAttValue("mem", value);
1313+
// flavors.add(new Flavor(key.replace(ConfigurationConstants.PREFIX_FLAVORS, ""), cpu, mem, "0"));
1314+
// }
1315+
// }
1316+
// flavorsProvided = flavors;
1317+
// }
13151318

1316-
public static String getAttValue(String attName, String flavorSpec) {
1317-
try {
1318-
JSONObject root = new JSONObject(flavorSpec);
1319-
return root.getString(attName);
1320-
} catch (Exception e) {
1321-
return null;
1322-
}
1323-
}
1319+
// public static String getAttValue(String attName, String flavorSpec) {
1320+
// try {
1321+
// JSONObject root = new JSONObject(flavorSpec);
1322+
// return root.getString(attName);
1323+
// } catch (Exception e) {
1324+
// return null;
1325+
// }
1326+
// }
13241327

13251328
public List<ResourceUsage> getMembersUsage(String federationAccessId) {
13261329
checkFederationAccessId(federationAccessId);

src/main/java/org/fogbowcloud/manager/core/plugins/appliance/EgiApplianceImageStoragePlugin.java renamed to src/main/java/org/fogbowcloud/manager/core/plugins/imagestorage/appliance/EgiApplianceImageStoragePlugin.java

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.fogbowcloud.manager.core.plugins.appliance;
1+
package org.fogbowcloud.manager.core.plugins.imagestorage.appliance;
22

33
import java.io.File;
44
import java.io.FileInputStream;
@@ -11,10 +11,8 @@
1111
import java.net.URISyntaxException;
1212
import java.security.KeyStore;
1313
import java.util.Collections;
14-
import java.util.HashMap;
1514
import java.util.LinkedList;
1615
import java.util.List;
17-
import java.util.Map;
1816
import java.util.Properties;
1917
import java.util.Set;
2018
import java.util.UUID;
@@ -39,56 +37,39 @@
3937
import org.apache.log4j.Logger;
4038
import org.fogbowcloud.manager.core.model.ImageState;
4139
import org.fogbowcloud.manager.core.plugins.ComputePlugin;
42-
import org.fogbowcloud.manager.core.plugins.ImageStoragePlugin;
43-
import org.fogbowcloud.manager.occi.core.ResourceRepository;
40+
import org.fogbowcloud.manager.core.plugins.imagestorage.fixed.StaticImageStoragePlugin;
4441
import org.fogbowcloud.manager.occi.core.Token;
4542

46-
public class EgiApplianceImageStoragePlugin implements ImageStoragePlugin {
43+
public class EgiApplianceImageStoragePlugin extends StaticImageStoragePlugin {
4744

4845
private static final int IMAGE_UPLOAD_RETRY_INTERVAL = 15000;
4946

50-
private static final String PROP_STATIC_IMAGE_PREFIX = "image_storage_static_";
51-
5247
private static final Logger LOGGER = Logger.getLogger(EgiApplianceImageStoragePlugin.class);
5348
private static final Executor IMAGE_DOWNLOADER = Executors.newFixedThreadPool(5);
5449

5550
private ComputePlugin computePlugin;
5651
private Set<String> pendingImageUploads = Collections.newSetFromMap(
5752
new ConcurrentHashMap<String, Boolean>());
58-
private Map<String, String> globalToLocalIds = new HashMap<String, String>();
5953

6054
private final String marketPlaceBaseURL;
6155
private final String keystorePath;
6256
private final String tmpStorage;
6357
private final String keystorePassword;
6458

6559
public EgiApplianceImageStoragePlugin(Properties properties, ComputePlugin computePlugin) {
60+
super(properties, computePlugin);
6661
this.computePlugin = computePlugin;
6762
this.marketPlaceBaseURL = properties.getProperty("image_storage_appliance_base_url");
6863
this.keystorePath = properties.getProperty("image_storage_applicance_keystore_path");
6964
this.keystorePassword = properties.getProperty("image_storage_appliance_keystore_password");
7065
this.tmpStorage = properties.getProperty("image_storage_appliance_tmp_storage");
71-
fillStaticStorage(properties);
72-
}
73-
74-
private void fillStaticStorage(Properties properties) {
75-
LOGGER.info("Filling static storage...");
76-
for (Object propName : properties.keySet()) {
77-
String propNameStr = (String) propName;
78-
if (propNameStr.startsWith(PROP_STATIC_IMAGE_PREFIX)) {
79-
String globalImageId = propNameStr.substring(PROP_STATIC_IMAGE_PREFIX.length());
80-
LOGGER.debug("Global image id = " + globalImageId);
81-
globalToLocalIds.put(globalImageId, properties.getProperty(propNameStr));
82-
ResourceRepository.getInstance().addImageResource(globalImageId);
83-
}
84-
}
8566
}
8667

8768
@Override
8869
public String getLocalId(Token token, String globalId) {
8970
LOGGER.debug("Getting local id for globalImageId = " + globalId);
9071
// check if image was statically configured
91-
String localId = globalToLocalIds.get(globalId);
72+
String localId = super.getLocalId(token, globalId);
9273
if (localId != null) {
9374
return localId;
9475
}

src/main/java/org/fogbowcloud/manager/core/plugins/egi/EgiImageStoragePlugin.java renamed to src/main/java/org/fogbowcloud/manager/core/plugins/imagestorage/egi/EgiImageStoragePlugin.java

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
1-
package org.fogbowcloud.manager.core.plugins.egi;
1+
package org.fogbowcloud.manager.core.plugins.imagestorage.egi;
22

33
import java.io.File;
44
import java.io.FileInputStream;
55
import java.io.IOException;
66
import java.io.InputStream;
77
import java.security.KeyStore;
88
import java.util.Collections;
9-
import java.util.HashMap;
10-
import java.util.Map;
119
import java.util.Properties;
1210
import java.util.Set;
1311
import java.util.concurrent.ConcurrentHashMap;
@@ -25,13 +23,11 @@
2523
import org.apache.log4j.Logger;
2624
import org.fogbowcloud.manager.core.plugins.ComputePlugin;
2725
import org.fogbowcloud.manager.core.plugins.ImageStoragePlugin;
28-
import org.fogbowcloud.manager.occi.core.ResourceRepository;
26+
import org.fogbowcloud.manager.core.plugins.imagestorage.fixed.StaticImageStoragePlugin;
2927
import org.fogbowcloud.manager.occi.core.Token;
3028

31-
public class EgiImageStoragePlugin implements ImageStoragePlugin {
29+
public class EgiImageStoragePlugin extends StaticImageStoragePlugin {
3230

33-
private static final String PROP_STATIC_IMAGE_PREFIX = "image_storage_static_";
34-
3531
private static final String IMAGE_EXTENSION = ".img";
3632
private static final String DEFAULT_IMAGE_VERSION = "1.0";
3733

@@ -41,36 +37,24 @@ public class EgiImageStoragePlugin implements ImageStoragePlugin {
4137
private ComputePlugin computePlugin;
4238
private Set<String> pendingImageUploads = Collections.newSetFromMap(
4339
new ConcurrentHashMap<String, Boolean>());
44-
private Map<String, String> globalToLocalIds = new HashMap<String, String>();
4540

4641
private final String marketPlaceBaseURL;
4742
private final String keystorePath;
4843
private final String tmpStorage;
4944
private final String keystorePassword;
5045

5146
public EgiImageStoragePlugin(Properties properties, ComputePlugin computePlugin) {
47+
super(properties, computePlugin);
5248
this.computePlugin = computePlugin;
5349
this.marketPlaceBaseURL = properties.getProperty("image_storage_egi_base_url");
5450
this.keystorePath = properties.getProperty("image_storage_egi_keystore_path");
5551
this.keystorePassword = properties.getProperty("image_storage_egi_keystore_password");
5652
this.tmpStorage = properties.getProperty("image_storage_egi_tmp_storage");
57-
fillStaticStorage(properties);
58-
}
59-
60-
private void fillStaticStorage(Properties properties) {
61-
for (Object propName : properties.keySet()) {
62-
String propNameStr = (String) propName;
63-
if (propNameStr.startsWith(PROP_STATIC_IMAGE_PREFIX)) {
64-
String globalImageId = propNameStr.substring(PROP_STATIC_IMAGE_PREFIX.length());
65-
globalToLocalIds.put(globalImageId, properties.getProperty(propNameStr));
66-
ResourceRepository.getInstance().addImageResource(globalImageId);
67-
}
68-
}
6953
}
7054

7155
@Override
7256
public String getLocalId(Token token, String globalId) {
73-
String localId = globalToLocalIds.get(globalId);
57+
String localId = super.getLocalId(token, globalId);
7458
if (localId != null) {
7559
return localId;
7660
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package org.fogbowcloud.manager.core.plugins.imagestorage.fixed;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
import java.util.Properties;
6+
7+
import org.fogbowcloud.manager.core.plugins.ComputePlugin;
8+
import org.fogbowcloud.manager.core.plugins.ImageStoragePlugin;
9+
import org.fogbowcloud.manager.occi.core.ResourceRepository;
10+
import org.fogbowcloud.manager.occi.core.Token;
11+
12+
public class StaticImageStoragePlugin implements ImageStoragePlugin {
13+
14+
private static final String PROP_STATIC_IMAGE_PREFIX = "image_storage_static_";
15+
16+
private Map<String, String> globalToLocalIds = new HashMap<String, String>();
17+
18+
public StaticImageStoragePlugin(Properties properties, ComputePlugin computePlugin) {
19+
fillStaticStorage(properties);
20+
}
21+
22+
private void fillStaticStorage(Properties properties) {
23+
for (Object propName : properties.keySet()) {
24+
String propNameStr = (String) propName;
25+
if (propNameStr.startsWith(PROP_STATIC_IMAGE_PREFIX)) {
26+
String globalImageId = propNameStr.substring(PROP_STATIC_IMAGE_PREFIX.length());
27+
globalToLocalIds.put(globalImageId, properties.getProperty(propNameStr));
28+
ResourceRepository.getInstance().addImageResource(globalImageId);
29+
}
30+
}
31+
}
32+
33+
@Override
34+
public String getLocalId(Token token, String globalId) {
35+
String localId = globalToLocalIds.get(globalId);
36+
if (localId != null) {
37+
return localId;
38+
}
39+
return null;
40+
}
41+
42+
}

0 commit comments

Comments
 (0)