Skip to content

Commit 17807d3

Browse files
Merge pull request #82 from nicolasmoreau/master
Fix query to HTTPS nodes
2 parents 7476d32 + ee8d192 commit 17807d3

File tree

4 files changed

+131
-76
lines changed

4 files changed

+131
-76
lines changed

portal.ejb/src/main/java/org/vamdc/portal/entity/query/HttpHeadResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public HttpHeadResponse(){
6161
public HttpHeadResponse(String ivoaID, HttpURLConnection connection) {
6262
this.ivoaID = ivoaID;
6363
this.fullQueryURL = connection.getURL().toString();
64-
this.status = retrieveStatus(connection);
64+
this.status = retrieveStatus(connection);
6565
retrieveHeaders(connection);
6666
if (truncated>0 && truncated<100)
6767
this.status=Response.TRUNCATED;

portal.ejb/src/main/java/org/vamdc/portal/session/preview/PreviewManager.java

Lines changed: 80 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -28,54 +28,61 @@
2828

2929
@Name("preview")
3030
@Scope(ScopeType.PAGE)
31-
public class PreviewManager implements Serializable{
31+
public class PreviewManager implements Serializable {
3232

3333
private static final long serialVersionUID = 2029452631857959114L;
3434

3535
@Logger
3636
Log log;
3737

38-
@In transient QueryData queryData;
38+
@In
39+
transient QueryData queryData;
40+
41+
@In(create = true)
42+
transient RegistryFacade registryFacade;
43+
44+
@In(create = true)
45+
transient ConsumerRequestRegistry consumers;
46+
47+
//private volatile boolean completeEventCalled = false;
3948

40-
@In(create=true) transient RegistryFacade registryFacade;
41-
42-
@In(create=true) transient ConsumerRequestRegistry consumers;
43-
44-
private volatile boolean completeEventCalled=false;
45-
4649
private Collection<Future<HttpHeadResponse>> nodeFutureResponses = new ArrayList<Future<HttpHeadResponse>>();
4750
private long startTime;
48-
51+
4952
private long percentDone;
50-
51-
public void initiate(){
52-
53+
private Boolean securedProtocolsAreSet = false;
54+
55+
public void initiate() {
56+
this.setSSLProtocols();
5357
if (!nodeFutureResponses.isEmpty())
5458
return;
5559

5660
Collection<String> activeNodes = queryData.getActiveNodes();
5761

5862
if (activeNodes.isEmpty())
5963
return;
60-
61-
ExecutorService executor = Executors.newFixedThreadPool(activeNodes.size());
6264

63-
for (String ivoaID:activeNodes){
64-
try{
65-
nodeFutureResponses.add(executor.submit(new PreviewThread(ivoaID,registryFacade.getVamdcTapMirrors(ivoaID),queryData.getQueryString())));
66-
}catch (IllegalArgumentException e){
65+
ExecutorService executor = Executors.newFixedThreadPool(activeNodes
66+
.size());
67+
68+
for (String ivoaID : activeNodes) {
69+
try {
70+
nodeFutureResponses.add(executor.submit(new PreviewThread(
71+
ivoaID, registryFacade.getVamdcTapMirrors(ivoaID),
72+
queryData.getQueryString())));
73+
} catch (IllegalArgumentException e) {
6774
}
6875
}
69-
76+
7077
executor.shutdown();
7178
startTime = new Date().getTime();
7279
}
7380

74-
75-
public List<HttpHeadResponse> getNodes(){
76-
TreeSet<HttpHeadResponse> nodes = new TreeSet<HttpHeadResponse>(new HttpHeadResponseComparator());
77-
for (Future<HttpHeadResponse> task:nodeFutureResponses){
78-
if (task.isDone()&& !task.isCancelled()){
81+
public List<HttpHeadResponse> getNodes() {
82+
TreeSet<HttpHeadResponse> nodes = new TreeSet<HttpHeadResponse>(
83+
new HttpHeadResponseComparator());
84+
for (Future<HttpHeadResponse> task : nodeFutureResponses) {
85+
if (task.isDone() && !task.isCancelled()) {
7986
try {
8087
HttpHeadResponse response = task.get();
8188
nodes.add(response);
@@ -91,78 +98,91 @@ public List<HttpHeadResponse> getNodes(){
9198
return new ArrayList<HttpHeadResponse>(nodes);
9299
}
93100

94-
private class HttpHeadResponseComparator implements Comparator<HttpHeadResponse>{
101+
private class HttpHeadResponseComparator implements
102+
Comparator<HttpHeadResponse> {
95103

96104
@Override
97105
public int compare(HttpHeadResponse o1, HttpHeadResponse o2) {
98-
if (o1==null || o2==null)
106+
if (o1 == null || o2 == null)
99107
return 0;
100108
Integer value1 = Integer.valueOf(o1.getStatus().ordinal());
101109
Integer value2 = Integer.valueOf(o2.getStatus().ordinal());
102110
int compare = value1.compareTo(value2);
103-
if (compare!=0)
104-
return compare;
105-
else if(o1.getProcesses()!=o2.getProcesses())
106-
return o2.getProcesses()-o1.getProcesses();
107-
else
108-
return o1.getIvoaID().compareTo(o2.getIvoaID());
109-
111+
if (compare != 0)
112+
return compare;
113+
else if (o1.getProcesses() != o2.getProcesses())
114+
return o2.getProcesses() - o1.getProcesses();
115+
else
116+
return o1.getIvoaID().compareTo(o2.getIvoaID());
117+
110118
}
111-
112119

113-
114120
}
115-
116121

117-
public boolean isDone(){
118-
if(this.percentDone <= 100){
119-
for (Future<HttpHeadResponse> task:nodeFutureResponses){
120-
if (!task.isDone()){
122+
public boolean isDone() {
123+
if (this.percentDone <= 100) {
124+
for (Future<HttpHeadResponse> task : nodeFutureResponses) {
125+
if (!task.isDone()) {
121126
return false;
122127
}
123128
}
124-
}
125-
129+
}
130+
126131
return true;
127132
}
128-
129-
public Long getPercentsDone(){
133+
134+
public Long getPercentsDone() {
130135
Long result;
131-
if (isDone()){
132-
result=101L;
133-
} else{
136+
if (isDone()) {
137+
result = 101L;
138+
} else {
134139
Long now = new Date().getTime();
135-
result = (100L*(now-startTime)/Settings.HTTP_HEAD_TIMEOUT.getInt());
140+
result = (100L * (now - startTime) / Settings.HTTP_HEAD_TIMEOUT
141+
.getInt());
136142
}
137143
this.percentDone = result;
138144
return result;
139145
}
140146

141-
public String getStringStatus(){
147+
public String getStringStatus() {
142148
if (isDone())
143149
return "Done";
144-
return ""+getNodes().size()+" nodes of "+nodeFutureResponses.size()+" responded";
150+
return "" + getNodes().size() + " nodes of "
151+
+ nodeFutureResponses.size() + " responded";
145152
}
146-
147-
public void cancel(){
148-
for (Future<HttpHeadResponse> task:nodeFutureResponses){
153+
154+
public void cancel() {
155+
for (Future<HttpHeadResponse> task : nodeFutureResponses) {
149156
if (!task.isDone())
150157
task.cancel(true);
151158
}
152159
}
153-
154-
public void clear(){
160+
161+
public void clear() {
155162
cancel();
156-
nodeFutureResponses=new ArrayList<Future<HttpHeadResponse>>();
163+
nodeFutureResponses = new ArrayList<Future<HttpHeadResponse>>();
157164
}
158-
159-
public String refine(){
165+
166+
public String refine() {
160167
clear();
161-
if(!queryData.isGuidedQuery())
168+
if (!queryData.isGuidedQuery())
162169
return RedirectPage.QUERY;
163170
else
164171
return RedirectPage.QUERYTREE;
165172
}
166-
167173

174+
/**
175+
* Set SSL protocols to be used.
176+
* Fix a bug found when switching from java 7 to 8 :
177+
* If this list is not set, the HTTPS request failed with java 8 but not
178+
* with java 7
179+
*
180+
*/
181+
private void setSSLProtocols() {
182+
if (!securedProtocolsAreSet) {
183+
System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2");
184+
this.securedProtocolsAreSet = true;
185+
}
186+
}
187+
168188
}

portal.ejb/src/main/java/org/vamdc/portal/session/preview/PreviewThread.java

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,47 +8,71 @@
88
import java.util.Collection;
99
import java.util.concurrent.Callable;
1010

11+
import javax.net.ssl.HttpsURLConnection;
12+
13+
import org.jboss.seam.annotations.Logger;
14+
import org.jboss.seam.log.Log;
1115
import org.vamdc.portal.Settings;
1216
import org.vamdc.portal.entity.query.HttpHeadResponse;
1317

18+
public class PreviewThread implements Callable<HttpHeadResponse> {
19+
1420

15-
public class PreviewThread implements Callable<HttpHeadResponse>{
21+
@Logger
22+
Log log;
1623

1724
private String ivoaID;
1825
private String query;
1926
private Collection<URL> mirrors;
20-
21-
public PreviewThread(String ivoaID, Collection<URL> mirrors, String query){
27+
28+
public PreviewThread(String ivoaID, Collection<URL> mirrors, String query) {
2229
this.ivoaID = ivoaID;
2330
this.query = query;
24-
this.mirrors = mirrors;
31+
this.mirrors = mirrors;
2532
}
26-
33+
2734
private URL getQuery(URL mirror) {
28-
URL result=null;
35+
URL result = null;
2936
try {
30-
result = new URL(mirror+"sync?LANG=VSS2&REQUEST=doQuery&FORMAT=XSAMS&QUERY="+URLEncoder.encode(query,"UTF-8"));
37+
result = new URL(mirror
38+
+ "sync?LANG=VSS2&REQUEST=doQuery&FORMAT=XSAMS&QUERY="
39+
+ URLEncoder.encode(query, "UTF-8"));
3140
} catch (MalformedURLException e) {
41+
log.info(e);
3242
} catch (UnsupportedEncodingException e) {
43+
log.info(e);
3344
}
3445

3546
return result;
3647
}
37-
48+
49+
/**
50+
* Send a HEAD request to a node by testing its mirrors
51+
*/
3852
@Override
3953
public HttpHeadResponse call() throws Exception {
40-
HttpHeadResponse response =null;
41-
for (URL mirror:mirrors){
54+
HttpHeadResponse response = null;
55+
for (URL mirror : mirrors) {
56+
HttpURLConnection connection = null;
4257
URL queryURL = getQuery(mirror);
43-
HttpURLConnection connection = (HttpURLConnection) queryURL.openConnection();
44-
58+
59+
//http request
60+
if (!mirror.getProtocol().equals("https")) {
61+
connection = (HttpURLConnection) queryURL.openConnection();
62+
}
63+
//https request
64+
else {
65+
connection = (HttpsURLConnection) queryURL.openConnection();
66+
}
67+
4568
connection.setRequestMethod("HEAD");
4669
connection.setReadTimeout(Settings.HTTP_HEAD_TIMEOUT.getInt());
47-
48-
response = new HttpHeadResponse(ivoaID,connection);
70+
71+
response = new HttpHeadResponse(ivoaID, connection);
4972
if (response.isOk())
5073
return response;
5174
}
75+
5276
return response;
5377
}
5478

portal.ejb/src/main/java/org/vamdc/portal/species/NodeSpecies.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,20 @@ public void querySpecies(String ivoaId, SpeciesResult resultBean){
6868
resultBean.setReady(true);
6969
return;
7070
}
71-
71+
System.out.println("### test ");
7272
resultBean.setMirrorCount(mirrors.size());
7373
for(URL node:mirrors){
7474
resultBean.setMessage("Timeout : query execution was too long.");
7575
resultBean.nextMirror();
7676
URL queryUrl=node;
77+
System.out.println("query");
78+
System.out.println(query);
79+
System.out.println(queryUrl);
7780
try {
7881
queryUrl = new URL(node.toExternalForm()+query);
82+
83+
System.out.print("queryUrl");
84+
System.out.print(queryUrl);
7985
resultBean.setFormattedResult( formatRequestResult(queryUrl));
8086
resultBean.setMessage("");
8187
resultBean.setReady(true);
@@ -85,6 +91,8 @@ public void querySpecies(String ivoaId, SpeciesResult resultBean){
8591
resultBean.setMessage("Incorrect service URL "+queryUrl);
8692
} catch (IOException e) {
8793
// TODO Auto-generated catch block
94+
95+
e.printStackTrace();
8896
resultBean.setMessage("Error while proceeding request");
8997
} catch (TransformerException e) {
9098
// TODO Auto-generated catch block
@@ -110,7 +118,10 @@ public void querySpecies(String ivoaId, SpeciesResult resultBean){
110118
* @throws TransformerException
111119
*/
112120
private static String formatRequestResult(URL url) throws IOException, TransformerException, PortalHttpException{
121+
System.out.print("###");
122+
System.out.print(url);
113123
HttpURLConnection c = (HttpURLConnection)url.openConnection();
124+
114125
if(c.getResponseCode() == 200){
115126
c.setConnectTimeout(Settings.HTTP_CONNECT_TIMEOUT.getInt());
116127
c.setReadTimeout(Settings.HTTP_DATA_TIMEOUT.getInt());

0 commit comments

Comments
 (0)