fix circular dependency on LicensesService

Original commit: elastic/x-pack-elasticsearch@d419878c35
This commit is contained in:
Areek Zillur 2014-10-07 13:04:13 -04:00
parent a034f96497
commit 533220e15a
4 changed files with 23 additions and 12 deletions

View File

@ -51,15 +51,16 @@ public class LicensePlugin extends AbstractPlugin {
module.registerAction(PutLicenseAction.INSTANCE, TransportPutLicenseAction.class);
module.registerAction(GetLicenseAction.INSTANCE, TransportGetLicenseAction.class);
}
@Override
public Collection<Class<? extends LifecycleComponent>> services() {
return ImmutableSet.<Class<? extends LifecycleComponent>>of(LicensesService.class);
}
/*
@Override
public Collection<Class<? extends Module>> modules() {
return ImmutableSet.<Class<? extends Module>>of(LicenseModule.class);
}*/
}
//TODO: module binding? (LicenseModule)
}

View File

@ -61,7 +61,7 @@ public class TransportDeleteLicenseAction extends TransportMasterNodeOperationAc
//listener.onResponse(new DeleteLicenseResponse(licenses));
//TODO:: add features of the license to be deleted
licensesService.unregisteredLicenses("delete_licenses []", request, new ActionListener<ClusterStateUpdateResponse>() {
licensesService.unregisteredLicenses(clusterService, "delete_licenses []", request, new ActionListener<ClusterStateUpdateResponse>() {
@Override
public void onResponse(ClusterStateUpdateResponse clusterStateUpdateResponse) {
listener.onResponse(new DeleteLicenseResponse(clusterStateUpdateResponse.isAcknowledged()));

View File

@ -19,6 +19,7 @@ import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.license.plugin.core.LicensesService;
import org.elasticsearch.threadpool.ThreadPool;
import org.elasticsearch.transport.TransportService;
import org.elasticsearch.node.Node;
public class TransportPutLicenseAction extends TransportMasterNodeOperationAction<PutLicenseRequest, PutLicenseResponse> {
@ -55,7 +56,7 @@ public class TransportPutLicenseAction extends TransportMasterNodeOperationActio
@Override
protected void masterOperation(final PutLicenseRequest request, ClusterState state, final ActionListener<PutLicenseResponse> listener) throws ElasticsearchException {
//TODO
licensesService.registerLicenses("put_licenses []",request, new ActionListener<ClusterStateUpdateResponse>() {
licensesService.registerLicenses(clusterService, "put_licenses []",request, new ActionListener<ClusterStateUpdateResponse>() {
@Override
public void onResponse(ClusterStateUpdateResponse clusterStateUpdateResponse) {
listener.onResponse(new PutLicenseResponse(clusterStateUpdateResponse.isAcknowledged()));

View File

@ -20,6 +20,8 @@ import org.elasticsearch.license.core.LicenseBuilders;
import org.elasticsearch.license.plugin.action.delete.DeleteLicenseRequest;
import org.elasticsearch.license.plugin.action.put.PutLicenseRequest;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* Service responsible for maintaining and providing access to licenses on nodes.
*
@ -31,20 +33,22 @@ public class LicensesService extends AbstractLifecycleComponent<LicensesService>
// private final Injector injector;
private final ClusterService clusterService;
//private final ClusterService clusterService;
//private volatile ESLicenses licenses = null;//ImmutableMap.of();
private AtomicBoolean registerClusterStateListener = new AtomicBoolean(false);
@Inject
public LicensesService(Settings settings, ClusterService clusterService/*, Injector injector*/) {
public LicensesService(Settings settings /*ClusterService clusterService, Injector injector*/) {
super(settings);
//this.injector = injector;
this.clusterService = clusterService;
//this.clusterService = clusterService;
// Doesn't make sense to maintain repositories on non-master and non-data nodes
// Nothing happens there anyway
if (DiscoveryNode.dataNode(settings) || DiscoveryNode.masterNode(settings)) {
clusterService.add(this);
}
//if (DiscoveryNode.dataNode(settings) || DiscoveryNode.masterNode(settings)) {
// clusterService.add(this);
//}
}
/**
@ -53,7 +57,12 @@ public class LicensesService extends AbstractLifecycleComponent<LicensesService>
* This method can be only called on the master node. It tries to create a new licenses on the master
* and if it was successful it adds the license to cluster metadata.
*/
public void registerLicenses(final String source, final PutLicenseRequest request, final ActionListener<ClusterStateUpdateResponse> listener) {
public void registerLicenses(ClusterService clusterService, String source, final PutLicenseRequest request, final ActionListener<ClusterStateUpdateResponse> listener) {
if (registerClusterStateListener.compareAndSet(false, true)) {
if (DiscoveryNode.dataNode(settings) || DiscoveryNode.masterNode(settings)) {
clusterService.add(this);
}
}
final LicensesMetaData newLicenseMetaData = new LicensesMetaData(request.license());
//TODO: add a source field to request
clusterService.submitStateUpdateTask(source, new AckedClusterStateUpdateTask<ClusterStateUpdateResponse>(request, listener) {
@ -84,7 +93,7 @@ public class LicensesService extends AbstractLifecycleComponent<LicensesService>
}
//TODO
public void unregisteredLicenses(final String source, final DeleteLicenseRequest request, final ActionListener<ClusterStateUpdateResponse> listener) {
public void unregisteredLicenses(ClusterService clusterService, String source, final DeleteLicenseRequest request, final ActionListener<ClusterStateUpdateResponse> listener) {
clusterService.submitStateUpdateTask(source, new AckedClusterStateUpdateTask<ClusterStateUpdateResponse>(request, listener) {
@Override
protected ClusterStateUpdateResponse newResponse(boolean acknowledged) {