Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 329822b

Browse files
committed
Replace ActionListeners.wrap with a ActionListener & Future
This adds a ``FutureActionListener`` that is both a ``ListenableFuture`` and a `ActionListener``. This can be used instead of having to create a ``SettableFuture`` and an anonymous ``ActionListener`` to transfer the result.
1 parent 0cd202e commit 329822b

9 files changed

Lines changed: 84 additions & 105 deletions

File tree

blob/src/main/java/io/crate/blob/v2/BlobIndices.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import com.google.common.base.Predicate;
2727
import com.google.common.util.concurrent.ListenableFuture;
2828
import com.google.common.util.concurrent.SettableFuture;
29-
import io.crate.action.ActionListeners;
29+
import io.crate.action.FutureActionListener;
3030
import io.crate.blob.BlobEnvironment;
3131
import io.crate.blob.BlobShardFuture;
3232
import org.apache.lucene.util.IOUtils;
@@ -119,11 +119,12 @@ public BlobShard blobShardSafe(ShardId shardId) {
119119
* @param indexSettings updated index settings
120120
*/
121121
public ListenableFuture<Void> alterBlobTable(String tableName, Settings indexSettings) {
122-
final SettableFuture<Void> result = SettableFuture.create();
123-
ActionListener<UpdateSettingsResponse> listener = ActionListeners.wrap(result, Functions.<Void>constant(null));
122+
FutureActionListener<UpdateSettingsResponse, Void> listener =
123+
new FutureActionListener<>(Functions.<Void>constant(null));
124+
124125
transportUpdateSettingsActionProvider.get().execute(
125126
new UpdateSettingsRequest(indexSettings, fullIndexName(tableName)), listener);
126-
return result;
127+
return listener;
127128
}
128129

129130
public ListenableFuture<Void> createBlobTable(String tableName,
@@ -149,10 +150,9 @@ public void onFailure(Throwable e) {
149150
}
150151

151152
public ListenableFuture<Void> dropBlobTable(final String tableName) {
152-
final SettableFuture<Void> result = SettableFuture.create();
153-
ActionListener<DeleteIndexResponse> listener = ActionListeners.wrap(result, Functions.<Void>constant(null));
153+
FutureActionListener<DeleteIndexResponse, Void> listener = new FutureActionListener<>(Functions.<Void>constant(null));
154154
transportDeleteIndexActionProvider.get().execute(new DeleteIndexRequest(fullIndexName(tableName)), listener);
155-
return result;
155+
return listener;
156156
}
157157

158158
public BlobShard blobShard(String index, int shardId) {

core/src/main/java/io/crate/action/ActionListeners.java

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@
2222

2323
package io.crate.action;
2424

25-
import com.google.common.base.Function;
26-
import com.google.common.util.concurrent.SettableFuture;
2725
import org.elasticsearch.action.ActionListener;
2826
import org.elasticsearch.common.logging.ESLogger;
2927
import org.elasticsearch.common.logging.Loggers;
@@ -57,32 +55,4 @@ public void onFailure(Throwable e) {
5755
}
5856
};
5957
}
60-
61-
public static <Response, Result> ActionListener<Response> wrap(
62-
final SettableFuture<? super Result> future,
63-
final Function<? super Response, ? extends Result> transformFunction) {
64-
65-
return new SettableActionListener<>(future, transformFunction);
66-
}
67-
68-
private static class SettableActionListener<Response, Result> implements ActionListener<Response> {
69-
private final SettableFuture<? super Result> future;
70-
private final Function<? super Response, ? extends Result> transformFunction;
71-
72-
SettableActionListener(SettableFuture<? super Result> future, Function<? super Response, ? extends Result> transformFunction) {
73-
this.future = future;
74-
this.transformFunction = transformFunction;
75-
}
76-
77-
@Override
78-
public void onResponse(Response response) {
79-
future.set(transformFunction.apply(response));
80-
}
81-
82-
@Override
83-
public void onFailure(Throwable e) {
84-
future.setException(e);
85-
}
86-
}
87-
8858
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
* Licensed to Crate under one or more contributor license agreements.
3+
* See the NOTICE file distributed with this work for additional
4+
* information regarding copyright ownership. Crate licenses this file
5+
* to you under the Apache License, Version 2.0 (the "License"); you may
6+
* not use this file except in compliance with the License. You may
7+
* obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
14+
* implied. See the License for the specific language governing
15+
* permissions and limitations under the License.
16+
*
17+
* However, if you have executed another commercial license agreement
18+
* with Crate these terms will supersede the license and you may use the
19+
* software solely pursuant to the terms of the relevant commercial
20+
* agreement.
21+
*/
22+
23+
package io.crate.action;
24+
25+
import com.google.common.base.Function;
26+
import com.google.common.util.concurrent.AbstractFuture;
27+
import org.elasticsearch.action.ActionListener;
28+
29+
public class FutureActionListener<Response, Result> extends AbstractFuture<Result> implements ActionListener<Response> {
30+
31+
private final Function<? super Response, ? extends Result> transformFunction;
32+
33+
public FutureActionListener(Function<? super Response, ? extends Result> transformFunction) {
34+
this.transformFunction = transformFunction;
35+
}
36+
37+
@Override
38+
public void onResponse(Response response) {
39+
set(transformFunction.apply(response));
40+
}
41+
42+
@Override
43+
public void onFailure(Throwable e) {
44+
setException(e);
45+
}
46+
}

sql/src/main/java/io/crate/action/sql/DDLStatementDispatcher.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,10 @@
2525
import com.google.common.base.Functions;
2626
import com.google.common.util.concurrent.Futures;
2727
import com.google.common.util.concurrent.ListenableFuture;
28-
import com.google.common.util.concurrent.SettableFuture;
29-
import io.crate.action.ActionListeners;
28+
import io.crate.action.FutureActionListener;
3029
import io.crate.analyze.*;
3130
import io.crate.blob.v2.BlobIndices;
3231
import io.crate.executor.transport.*;
33-
import org.elasticsearch.action.ActionListener;
3432
import org.elasticsearch.action.admin.indices.refresh.RefreshRequest;
3533
import org.elasticsearch.action.admin.indices.refresh.RefreshResponse;
3634
import org.elasticsearch.action.support.IndicesOptions;
@@ -111,10 +109,9 @@ public ListenableFuture<Long> visitRefreshTableStatement(RefreshTableAnalyzedSta
111109
new String[analysis.indexNames().size()]));
112110
request.indicesOptions(IndicesOptions.lenientExpandOpen());
113111

114-
final SettableFuture<Long> future = SettableFuture.create();
115-
ActionListener<RefreshResponse> listener = ActionListeners.wrap(future, Functions.<Long>constant(null));
112+
FutureActionListener<RefreshResponse, Long> listener = new FutureActionListener<>(Functions.<Long>constant(null));
116113
transportActionProvider.transportRefreshAction().execute(request, listener);
117-
return future;
114+
return listener;
118115
}
119116

120117

sql/src/main/java/io/crate/executor/task/DDLTask.java

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,16 @@
2121

2222
package io.crate.executor.task;
2323

24-
import com.google.common.util.concurrent.FutureCallback;
24+
import com.google.common.base.Function;
2525
import com.google.common.util.concurrent.Futures;
2626
import com.google.common.util.concurrent.ListenableFuture;
27-
import com.google.common.util.concurrent.SettableFuture;
2827
import io.crate.action.sql.DDLStatementDispatcher;
2928
import io.crate.analyze.AnalyzedStatement;
3029
import io.crate.executor.JobTask;
3130
import io.crate.executor.RowCountResult;
3231
import io.crate.executor.TaskResult;
3332

34-
import javax.annotation.Nonnull;
33+
import javax.annotation.Nullable;
3534
import java.util.List;
3635
import java.util.UUID;
3736

@@ -48,26 +47,17 @@ public DDLTask(UUID jobId, DDLStatementDispatcher ddlStatementDispatcher, Analyz
4847

4948
@Override
5049
public ListenableFuture<TaskResult> execute() {
51-
final SettableFuture<TaskResult> result = SettableFuture.create();
52-
53-
ListenableFuture<Long> future = ddlStatementDispatcher.dispatch(analyzedStatement, jobId());
54-
Futures.addCallback(future, new FutureCallback<Long>() {
55-
@Override
56-
public void onSuccess(Long rowCount) {
57-
if (rowCount == null) {
58-
result.set(TaskResult.ROW_COUNT_UNKNOWN);
59-
} else {
60-
result.set(new RowCountResult(rowCount));
50+
return Futures.transform(ddlStatementDispatcher.dispatch(analyzedStatement, jobId()),
51+
new Function<Long, TaskResult>() {
52+
@Nullable
53+
@Override
54+
public TaskResult apply(@Nullable Long input) {
55+
if (input == null) {
56+
return TaskResult.ROW_COUNT_UNKNOWN;
57+
}
58+
return new RowCountResult(input);
6159
}
62-
}
63-
64-
@Override
65-
public void onFailure(@Nonnull Throwable t) {
66-
result.setException(t);
67-
}
68-
});
69-
70-
return result;
60+
});
7161
}
7262

7363
@Override

sql/src/main/java/io/crate/executor/transport/SnapshotRestoreDDLDispatcher.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import com.google.common.base.Functions;
2626
import com.google.common.util.concurrent.ListenableFuture;
2727
import com.google.common.util.concurrent.SettableFuture;
28-
import io.crate.action.ActionListeners;
28+
import io.crate.action.FutureActionListener;
2929
import io.crate.analyze.CreateSnapshotAnalyzedStatement;
3030
import io.crate.analyze.DropSnapshotAnalyzedStatement;
3131
import io.crate.analyze.RestoreSnapshotAnalyzedStatement;
@@ -134,8 +134,6 @@ public void onFailure(Throwable e) {
134134
}
135135

136136
public ListenableFuture<Long> dispatch(final RestoreSnapshotAnalyzedStatement analysis) {
137-
final SettableFuture<Long> resultFuture = SettableFuture.create();
138-
139137
boolean waitForCompletion = analysis.settings().getAsBoolean(WAIT_FOR_COMPLETION.settingName(), WAIT_FOR_COMPLETION.defaultValue());
140138
boolean ignoreUnavailable = analysis.settings().getAsBoolean(IGNORE_UNAVAILABLE.settingName(), IGNORE_UNAVAILABLE.defaultValue());
141139

@@ -149,8 +147,8 @@ public ListenableFuture<Long> dispatch(final RestoreSnapshotAnalyzedStatement an
149147
.waitForCompletion(waitForCompletion)
150148
.includeGlobalState(false)
151149
.includeAliases(true);
152-
ActionListener<RestoreSnapshotResponse> listener = ActionListeners.wrap(resultFuture, Functions.constant(1L));
150+
FutureActionListener<RestoreSnapshotResponse, Long> listener = new FutureActionListener<>(Functions.constant(1L));
153151
transportActionProvider.transportRestoreSnapshotAction().execute(request, listener);
154-
return resultFuture;
152+
return listener;
155153
}
156154
}

sql/src/main/java/io/crate/executor/transport/task/KillJobTask.java

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,12 @@
2323

2424
import com.google.common.collect.ImmutableList;
2525
import com.google.common.util.concurrent.ListenableFuture;
26-
import com.google.common.util.concurrent.SettableFuture;
26+
import io.crate.action.FutureActionListener;
2727
import io.crate.executor.JobTask;
28-
import io.crate.executor.RowCountResult;
2928
import io.crate.executor.TaskResult;
3029
import io.crate.executor.transport.kill.KillJobsRequest;
3130
import io.crate.executor.transport.kill.KillResponse;
3231
import io.crate.executor.transport.kill.TransportKillJobsNodeAction;
33-
import org.elasticsearch.action.ActionListener;
3432

3533
import java.util.List;
3634
import java.util.UUID;
@@ -51,21 +49,9 @@ public KillJobTask(TransportKillJobsNodeAction nodeAction,
5149
@Override
5250
public ListenableFuture<TaskResult> execute() {
5351
KillJobsRequest request = new KillJobsRequest(ImmutableList.of(jobToKill));
54-
final SettableFuture<TaskResult> result = SettableFuture.create();
55-
56-
nodeAction.executeKillOnAllNodes(request, new ActionListener<KillResponse>() {
57-
@Override
58-
public void onResponse(KillResponse killResponse) {
59-
result.set(new RowCountResult(killResponse.numKilled()));
60-
}
61-
62-
@Override
63-
public void onFailure(Throwable e) {
64-
result.setException(e);
65-
}
66-
});
67-
68-
return result;
52+
FutureActionListener<KillResponse, TaskResult> listener = new FutureActionListener<>(KillTask.RESPONSE_TO_TASK_RESULT);
53+
nodeAction.executeKillOnAllNodes(request, listener);
54+
return listener;
6955
}
7056

7157
@Override

sql/src/main/java/io/crate/executor/transport/task/KillTask.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,21 @@
2323

2424
import com.google.common.base.Function;
2525
import com.google.common.util.concurrent.ListenableFuture;
26-
import com.google.common.util.concurrent.SettableFuture;
27-
import io.crate.action.ActionListeners;
26+
import io.crate.action.FutureActionListener;
2827
import io.crate.executor.JobTask;
2928
import io.crate.executor.RowCountResult;
3029
import io.crate.executor.TaskResult;
3130
import io.crate.executor.transport.kill.KillAllRequest;
3231
import io.crate.executor.transport.kill.KillResponse;
3332
import io.crate.executor.transport.kill.TransportKillAllNodeAction;
34-
import org.elasticsearch.action.ActionListener;
3533

3634
import javax.annotation.Nullable;
3735
import java.util.List;
3836
import java.util.UUID;
3937

4038
public class KillTask extends JobTask {
4139

42-
private static final Function<KillResponse, TaskResult> RESPONSE_TO_TASK_RESULT = new Function<KillResponse, TaskResult>() {
40+
static final Function<KillResponse, TaskResult> RESPONSE_TO_TASK_RESULT = new Function<KillResponse, TaskResult>() {
4341
@Nullable
4442
@Override
4543
public TaskResult apply(@Nullable KillResponse input) {
@@ -55,11 +53,9 @@ public KillTask(TransportKillAllNodeAction nodeAction, UUID jobId) {
5553

5654
@Override
5755
public ListenableFuture<TaskResult> execute() {
58-
SettableFuture<TaskResult> result = SettableFuture.create();
59-
ActionListener<KillResponse> actionListener = ActionListeners.wrap(result, RESPONSE_TO_TASK_RESULT);
60-
nodeAction.broadcast(new KillAllRequest(), actionListener);
61-
62-
return result;
56+
FutureActionListener<KillResponse, TaskResult> listener = new FutureActionListener<>(RESPONSE_TO_TASK_RESULT);
57+
nodeAction.broadcast(new KillAllRequest(), listener);
58+
return listener;
6359
}
6460

6561
@Override

sql/src/main/java/io/crate/executor/transport/task/elasticsearch/ESClusterUpdateSettingsTask.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,10 @@
2323

2424
import com.google.common.base.Functions;
2525
import com.google.common.util.concurrent.ListenableFuture;
26-
import com.google.common.util.concurrent.SettableFuture;
27-
import io.crate.action.ActionListeners;
26+
import io.crate.action.FutureActionListener;
2827
import io.crate.executor.JobTask;
2928
import io.crate.executor.TaskResult;
3029
import io.crate.planner.node.ddl.ESClusterUpdateSettingsPlan;
31-
import org.elasticsearch.action.ActionListener;
3230
import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsRequest;
3331
import org.elasticsearch.action.admin.cluster.settings.ClusterUpdateSettingsResponse;
3432
import org.elasticsearch.action.admin.cluster.settings.TransportClusterUpdateSettingsAction;
@@ -39,8 +37,6 @@ public class ESClusterUpdateSettingsTask extends JobTask {
3937

4038
private final TransportClusterUpdateSettingsAction transport;
4139
private final ClusterUpdateSettingsRequest request;
42-
private final ActionListener<ClusterUpdateSettingsResponse> listener;
43-
private final SettableFuture<TaskResult> result;
4440

4541
public ESClusterUpdateSettingsTask(ESClusterUpdateSettingsPlan plan,
4642
TransportClusterUpdateSettingsAction transport) {
@@ -56,14 +52,14 @@ public ESClusterUpdateSettingsTask(ESClusterUpdateSettingsPlan plan,
5652
if (plan.transientSettingsToRemove() != null) {
5753
request.transientSettingsToRemove(plan.transientSettingsToRemove());
5854
}
59-
result = SettableFuture.create();
60-
listener = ActionListeners.wrap(result, Functions.constant(TaskResult.ONE_ROW));
6155
}
6256

6357
@Override
6458
public ListenableFuture<TaskResult> execute() {
59+
FutureActionListener<ClusterUpdateSettingsResponse, TaskResult> listener =
60+
new FutureActionListener<>(Functions.<TaskResult>constant(TaskResult.ONE_ROW));
6561
transport.execute(request, listener);
66-
return result;
62+
return listener;
6763
}
6864

6965
@Override

0 commit comments

Comments
 (0)