Details
diff --git a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestWithFakeKPMPlugin.java b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestWithFakeKPMPlugin.java
index 4a351ac..4113d01 100644
--- a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestWithFakeKPMPlugin.java
+++ b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestWithFakeKPMPlugin.java
@@ -37,6 +37,7 @@ import org.killbill.billing.notification.plugin.api.ExtBusEvent;
import org.killbill.billing.notification.plugin.api.ExtBusEventType;
import org.killbill.billing.osgi.BundleRegistry;
import org.killbill.billing.osgi.BundleWithConfig;
+import org.killbill.billing.osgi.FileInstall;
import org.killbill.billing.osgi.PureOSGIBundleFinder;
import org.killbill.billing.osgi.api.PluginInfo;
import org.killbill.billing.osgi.api.PluginStateChange;
@@ -50,6 +51,7 @@ import org.killbill.billing.osgi.pluginconf.PluginConfigException;
import org.killbill.billing.osgi.pluginconf.PluginFinder;
import org.killbill.billing.platform.api.KillbillConfigSource;
import org.killbill.billing.util.jackson.ObjectMapper;
+import org.killbill.billing.util.nodes.KillbillNodesApi;
import org.killbill.billing.util.nodes.NodeCommand;
import org.killbill.billing.util.nodes.NodeCommandMetadata;
import org.killbill.billing.util.nodes.NodeCommandProperty;
@@ -223,8 +225,8 @@ public class TestWithFakeKPMPlugin extends TestIntegrationBase {
private final List<BundleWithMetadata> bundles;
@Inject
- public FakeBundleRegistry(final PureOSGIBundleFinder osgiBundleFinder, final PluginFinder pluginFinder, final PluginConfigServiceApi pluginConfigServiceApi) {
- super(osgiBundleFinder, pluginFinder, pluginConfigServiceApi);
+ public FakeBundleRegistry() {
+ super(null);
bundles = new ArrayList<BundleWithMetadata>();
}
diff --git a/util/src/main/java/org/killbill/billing/util/nodes/DefaultKillbillNodesApi.java b/util/src/main/java/org/killbill/billing/util/nodes/DefaultKillbillNodesApi.java
index 13bcb98..3d097f4 100644
--- a/util/src/main/java/org/killbill/billing/util/nodes/DefaultKillbillNodesApi.java
+++ b/util/src/main/java/org/killbill/billing/util/nodes/DefaultKillbillNodesApi.java
@@ -20,6 +20,8 @@ package org.killbill.billing.util.nodes;
import java.io.IOException;
import java.util.List;
+import javax.annotation.Nullable;
+
import org.killbill.CreatorName;
import org.killbill.billing.broadcast.BroadcastApi;
import org.killbill.billing.osgi.api.PluginInfo;
@@ -34,6 +36,7 @@ import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.google.common.base.Function;
+import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.inject.Inject;
@@ -47,6 +50,7 @@ public class DefaultKillbillNodesApi implements KillbillNodesApi {
private final NodeInfoMapper mapper;
private final Clock clock;
private final PluginsInfoApi pluginInfoApi;
+ private final Function<NodeInfoModelDao, NodeInfo> nodeTransfomer;
@Inject
public DefaultKillbillNodesApi(final NodeInfoDao nodeInfoDao, final BroadcastApi broadcastApi, final NodeInfoMapper mapper, final Clock clock, final PluginsInfoApi pluginInfoApi) {
@@ -55,29 +59,35 @@ public class DefaultKillbillNodesApi implements KillbillNodesApi {
this.pluginInfoApi = pluginInfoApi;
this.clock = clock;
this.mapper = mapper;
- }
-
- @Override
- public Iterable<NodeInfo> getNodesInfo() {
- final List<NodeInfoModelDao> allNodes = nodeInfoDao.getAll();
-
- final Iterable<NodeInfoModelJson> allModelNodes = Iterables.transform(allNodes, new Function<NodeInfoModelDao, NodeInfoModelJson>() {
+ this.nodeTransfomer = new Function<NodeInfoModelDao, NodeInfo>() {
@Override
- public NodeInfoModelJson apply(final NodeInfoModelDao input) {
+ public NodeInfo apply(final NodeInfoModelDao input) {
try {
- return mapper.deserializeNodeInfo(input.getNodeInfo());
- } catch (IOException e) {
+ final NodeInfoModelJson nodeInfoModelJson = mapper.deserializeNodeInfo(input.getNodeInfo());
+ return new DefaultNodeInfo(nodeInfoModelJson);
+ } catch (final IOException e) {
throw new RuntimeException(e);
}
}
- });
+ };
+ }
+
+ @Override
+ public Iterable<NodeInfo> getNodesInfo() {
+ final List<NodeInfoModelDao> allNodes = nodeInfoDao.getAll();
+ return Iterables.transform(allNodes, nodeTransfomer);
+ }
- return Iterables.transform(allModelNodes, new Function<NodeInfoModelJson, NodeInfo>() {
+ @Override
+ public NodeInfo getCurrentNodeInfo() {
+ final List<NodeInfoModelDao> allNodes = nodeInfoDao.getAll();
+ final NodeInfoModelDao current = Iterables.find(allNodes, new Predicate<NodeInfoModelDao>() {
@Override
- public NodeInfo apply(final NodeInfoModelJson input) {
- return new DefaultNodeInfo(input);
+ public boolean apply(final NodeInfoModelDao input) {
+ return input.getNodeName().equals(CreatorName.get());
}
});
+ return nodeTransfomer.apply(current);
}
@Override
diff --git a/util/src/main/java/org/killbill/billing/util/nodes/DefaultKillbillNodesService.java b/util/src/main/java/org/killbill/billing/util/nodes/DefaultKillbillNodesService.java
index a5b2a74..6236bb3 100644
--- a/util/src/main/java/org/killbill/billing/util/nodes/DefaultKillbillNodesService.java
+++ b/util/src/main/java/org/killbill/billing/util/nodes/DefaultKillbillNodesService.java
@@ -66,10 +66,22 @@ public class DefaultKillbillNodesService implements KillbillNodesService {
return NODES_SERVICE_NAME;
}
- @LifecycleHandlerType(LifecycleHandlerType.LifecycleLevel.START_SERVICE)
+ @LifecycleHandlerType(LifecycleLevel.BOOT)
+ public void init() {
+ try {
+ // Compute a first version early on before plugins were installed to at least provide info about Kill Bill component versions
+ createBootNodeInfo(true);
+ } catch (JsonProcessingException e) {
+ logger.error("Failed to create bootNodeInfo", e);
+ }
+ }
+
+
+ @LifecycleHandlerType(LifecycleLevel.START_SERVICE)
public void start() {
try {
- createBootNodeInfo();
+ // Re-Compute including the plugins
+ createBootNodeInfo(false);
} catch (JsonProcessingException e) {
logger.error("Failed to create bootNodeInfo", e);
}
@@ -80,10 +92,10 @@ public class DefaultKillbillNodesService implements KillbillNodesService {
nodeInfoDao.delete(CreatorName.get());
}
- private void createBootNodeInfo() throws JsonProcessingException {
+ private void createBootNodeInfo(final boolean skipPlugins) throws JsonProcessingException {
final DateTime bootTime = clock.getUTCNow();
- final Iterable<PluginInfo> rawPluginInfo = pluginInfoApi.getPluginsInfo();
+ final Iterable<PluginInfo> rawPluginInfo = skipPlugins ? ImmutableList.<PluginInfo>of() : pluginInfoApi.getPluginsInfo();
final List<PluginInfo> pluginInfo = rawPluginInfo.iterator().hasNext() ? ImmutableList.<PluginInfo>copyOf(rawPluginInfo) : ImmutableList.<PluginInfo>of();
final String kbVersion = org.killbill.billing.util.nodes.KillbillVersions.getKillbillVersion();
final String kbApiVersion = org.killbill.billing.util.nodes.KillbillVersions.getApiVersion();