Skip to content

Commit af164bf

Browse files
author
James Leigh
authored
Merge pull request #871 from jamesrdf/issues/#870-repo-mgr-sail
Fix #870: Move classes around to avoid SAIL dependency on RepositoryManager
2 parents fc5bdf7 + ef106f9 commit af164bf

43 files changed

Lines changed: 1417 additions & 936 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

compliance/http/pom.xml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,20 @@
9292
<version>${project.version}</version>
9393
</dependency>
9494

95+
<dependency>
96+
<groupId>${project.groupId}</groupId>
97+
<artifactId>rdf4j-repository-sail</artifactId>
98+
<version>${project.version}</version>
99+
<scope>test</scope>
100+
</dependency>
101+
102+
<dependency>
103+
<groupId>${project.groupId}</groupId>
104+
<artifactId>rdf4j-sail-memory</artifactId>
105+
<version>${project.version}</version>
106+
<scope>test</scope>
107+
</dependency>
108+
95109
<dependency>
96110
<groupId>${project.groupId}</groupId>
97111
<artifactId>rdf4j-config</artifactId>

core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/EvaluationStrategy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import org.eclipse.rdf4j.query.algebra.ValueExpr;
1717
import org.eclipse.rdf4j.query.algebra.evaluation.federation.FederatedService;
1818
import org.eclipse.rdf4j.query.algebra.evaluation.federation.FederatedServiceResolver;
19-
import org.eclipse.rdf4j.query.algebra.evaluation.federation.SPARQLFederatedService;
19+
import org.eclipse.rdf4j.repository.sparql.federation.SPARQLFederatedService;
2020

2121
/**
2222
* Evaluates {@link TupleExpr}s and {@link ValueExpr}s.

core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/federation/FederatedServiceResolverImpl.java

Lines changed: 5 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,6 @@
77
*******************************************************************************/
88
package org.eclipse.rdf4j.query.algebra.evaluation.federation;
99

10-
import org.apache.http.client.HttpClient;
11-
import org.eclipse.rdf4j.http.client.HttpClientDependent;
12-
import org.eclipse.rdf4j.http.client.HttpClientSessionManager;
13-
import org.eclipse.rdf4j.http.client.SessionManagerDependent;
14-
import org.eclipse.rdf4j.http.client.SharedHttpClientSessionManager;
15-
import org.eclipse.rdf4j.query.QueryEvaluationException;
16-
1710
/**
1811
* The {@link FederatedServiceResolverImpl} is used to manage a set of {@link FederatedService} instances,
1912
* which are used to evaluate SERVICE expressions for particular service Urls.
@@ -23,78 +16,11 @@
2316
*
2417
* @author Andreas Schwarte
2518
* @author James Leigh
19+
* @deprecated since 2.3 use
20+
* {@link org.eclipse.rdf4j.repository.sparql.federation.SPARQLServiceResolver}
2621
*/
27-
public class FederatedServiceResolverImpl extends AbstractFederatedServiceResolver
28-
implements FederatedServiceResolver, HttpClientDependent, SessionManagerDependent
22+
@Deprecated
23+
public class FederatedServiceResolverImpl
24+
extends org.eclipse.rdf4j.repository.sparql.federation.SPARQLServiceResolver
2925
{
30-
31-
public FederatedServiceResolverImpl() {
32-
super();
33-
}
34-
35-
/** independent life cycle */
36-
private volatile HttpClientSessionManager client;
37-
38-
/** dependent life cycle */
39-
private volatile SharedHttpClientSessionManager dependentClient;
40-
41-
public HttpClientSessionManager getHttpClientSessionManager() {
42-
HttpClientSessionManager result = client;
43-
if (result == null) {
44-
synchronized (this) {
45-
result = client;
46-
if (result == null) {
47-
result = client = dependentClient = new SharedHttpClientSessionManager();
48-
}
49-
}
50-
}
51-
return result;
52-
}
53-
54-
public void setHttpClientSessionManager(HttpClientSessionManager client) {
55-
synchronized (this) {
56-
this.client = client;
57-
// If they set a client, we need to check whether we need to
58-
// shutdown any existing dependentClient
59-
SharedHttpClientSessionManager toCloseDependentClient = dependentClient;
60-
dependentClient = null;
61-
if (toCloseDependentClient != null) {
62-
toCloseDependentClient.shutDown();
63-
}
64-
}
65-
}
66-
67-
public HttpClient getHttpClient() {
68-
return getHttpClientSessionManager().getHttpClient();
69-
}
70-
71-
public void setHttpClient(HttpClient httpClient) {
72-
SharedHttpClientSessionManager toSetDependentClient = dependentClient;
73-
if (toSetDependentClient == null) {
74-
getHttpClientSessionManager();
75-
toSetDependentClient = dependentClient;
76-
}
77-
// The strange lifecycle results in the possibility that the
78-
// dependentClient will be null due to a call to setSesameClient, so add
79-
// a null guard here for that possibility
80-
if (toSetDependentClient != null) {
81-
toSetDependentClient.setHttpClient(httpClient);
82-
}
83-
}
84-
85-
@Override
86-
protected FederatedService createService(String serviceUrl)
87-
throws QueryEvaluationException
88-
{
89-
return new SPARQLFederatedService(serviceUrl, getHttpClientSessionManager());
90-
}
91-
92-
@Override
93-
public void shutDown() {
94-
super.shutDown();
95-
if (dependentClient != null) {
96-
dependentClient.shutDown();
97-
dependentClient = null;
98-
}
99-
}
10026
}

core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/federation/JoinExecutorBase.java

Lines changed: 6 additions & 151 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,8 @@
77
*******************************************************************************/
88
package org.eclipse.rdf4j.query.algebra.evaluation.federation;
99

10-
import org.eclipse.rdf4j.common.iteration.AbstractCloseableIteration;
1110
import org.eclipse.rdf4j.common.iteration.CloseableIteration;
12-
import org.eclipse.rdf4j.common.iteration.EmptyIteration;
1311
import org.eclipse.rdf4j.common.iteration.LookAheadIteration;
14-
import org.eclipse.rdf4j.http.client.QueueCursor;
1512
import org.eclipse.rdf4j.query.BindingSet;
1613
import org.eclipse.rdf4j.query.QueryEvaluationException;
1714
import org.eclipse.rdf4j.query.algebra.TupleExpr;
@@ -22,159 +19,17 @@
2219
* to shared variables is synchronized).
2320
*
2421
* @author Andreas Schwarte
22+
* @deprecated since 2.3 use {@link org.eclipse.rdf4j.repository.sparql.federation.JoinExecutorBase}
2523
*/
26-
public abstract class JoinExecutorBase<T> extends LookAheadIteration<T, QueryEvaluationException> {
27-
28-
/**
29-
* @deprecated No replacement, don't use static shared int variables.
30-
*/
31-
protected static int NEXT_JOIN_ID = 1;
32-
33-
/* Constants */
34-
protected final TupleExpr rightArg; // the right argument for the join
35-
36-
protected final BindingSet bindings; // the bindings
37-
38-
protected final CloseableIteration<T, QueryEvaluationException> leftIter;
39-
40-
protected volatile CloseableIteration<T, QueryEvaluationException> rightIter;
41-
42-
/**
43-
* @deprecated Use {@link AbstractCloseableIteration#isClosed()} instead.
44-
*/
45-
protected volatile boolean closed = false;
46-
47-
/**
48-
* @deprecated Use {@link #isFinished()} instead.
49-
*/
50-
protected volatile boolean finished = false;
51-
52-
protected final QueueCursor<CloseableIteration<T, QueryEvaluationException>> rightQueue = new QueueCursor<CloseableIteration<T, QueryEvaluationException>>(
53-
1024);
24+
@Deprecated
25+
public abstract class JoinExecutorBase<T>
26+
extends org.eclipse.rdf4j.repository.sparql.federation.JoinExecutorBase<T>
27+
{
5428

5529
public JoinExecutorBase(CloseableIteration<T, QueryEvaluationException> leftIter, TupleExpr rightArg,
5630
BindingSet bindings)
5731
throws QueryEvaluationException
5832
{
59-
this.leftIter = leftIter;
60-
this.rightArg = rightArg;
61-
this.bindings = bindings;
33+
super(leftIter, rightArg, bindings);
6234
}
63-
64-
public final void run() {
65-
66-
try {
67-
handleBindings();
68-
}
69-
catch (Exception e) {
70-
toss(e);
71-
}
72-
finally {
73-
finished = true;
74-
rightQueue.done();
75-
}
76-
77-
}
78-
79-
/**
80-
* Implementations must implement this method to handle bindings. Use the following as a template <code>
81-
* while (!closed && leftIter.hasNext()) {
82-
* // your code
83-
* }
84-
* </code> and add results to rightQueue. Note that addResult() is implemented synchronized and thus
85-
* thread safe. In case you can guarantee sequential access, it is also possible to directly access
86-
* rightQueue
87-
*/
88-
protected abstract void handleBindings()
89-
throws Exception;
90-
91-
public void addResult(CloseableIteration<T, QueryEvaluationException> res) {
92-
/* optimization: avoid adding empty results */
93-
if (res instanceof EmptyIteration<?, ?>) {
94-
return;
95-
}
96-
97-
try {
98-
rightQueue.put(res);
99-
}
100-
catch (InterruptedException e) {
101-
Thread.currentThread().interrupt();
102-
throw new RuntimeException("Error adding element to right queue", e);
103-
}
104-
}
105-
106-
public void done() {
107-
; // no-op
108-
}
109-
110-
public void toss(Exception e) {
111-
rightQueue.toss(e);
112-
}
113-
114-
@Override
115-
public T getNextElement()
116-
throws QueryEvaluationException
117-
{
118-
// TODO check if we need to protect rightQueue from synchronized access
119-
// wasn't done in the original implementation either
120-
// if we see any weird behavior check here !!
121-
122-
while (rightIter != null || rightQueue.hasNext()) {
123-
CloseableIteration<T, QueryEvaluationException> nextRightIter = rightIter;
124-
if (nextRightIter == null) {
125-
nextRightIter = rightIter = rightQueue.next();
126-
}
127-
if (nextRightIter != null) {
128-
if (nextRightIter.hasNext()) {
129-
return nextRightIter.next();
130-
}
131-
else {
132-
rightIter = null;
133-
nextRightIter.close();
134-
}
135-
}
136-
}
137-
138-
return null;
139-
}
140-
141-
@Override
142-
public void handleClose()
143-
throws QueryEvaluationException
144-
{
145-
closed = true;
146-
try {
147-
super.handleClose();
148-
}
149-
finally {
150-
try {
151-
rightQueue.close();
152-
}
153-
finally {
154-
try {
155-
CloseableIteration<T, QueryEvaluationException> toCloseRightIter = rightIter;
156-
rightIter = null;
157-
if (toCloseRightIter != null) {
158-
toCloseRightIter.close();
159-
}
160-
}
161-
finally {
162-
CloseableIteration<T, QueryEvaluationException> toCloseLeftIter = leftIter;
163-
if (toCloseLeftIter != null) {
164-
toCloseLeftIter.close();
165-
}
166-
}
167-
}
168-
}
169-
}
170-
171-
/**
172-
* Gets whether this executor is finished or aborted.
173-
*
174-
* @return true if this executor is finished or aborted
175-
*/
176-
public boolean isFinished() {
177-
return finished;
178-
}
179-
18035
}

0 commit comments

Comments
 (0)