You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by as...@apache.org on 2020/01/24 17:09:07 UTC
[camel-k] 06/07: feat(trait): Add options to configure JVM remote
debugging
This is an automated email from the ASF dual-hosted git repository.
astefanutti pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit c9ab8d26c32ac81676a146f9865efbe9598cd532
Author: Antonin Stefanutti <an...@stefanutti.fr>
AuthorDate: Thu Jan 23 15:56:12 2020 +0100
feat(trait): Add options to configure JVM remote debugging
---
docs/modules/ROOT/pages/traits/jvm.adoc | 8 ++++++++
pkg/trait/jvm.go | 16 +++++++++++++--
pkg/trait/jvm_test.go | 35 +++++++++++++++++++++++++++++++++
3 files changed, 57 insertions(+), 2 deletions(-)
diff --git a/docs/modules/ROOT/pages/traits/jvm.adoc b/docs/modules/ROOT/pages/traits/jvm.adoc
index bdbe13c..8dbfad4 100755
--- a/docs/modules/ROOT/pages/traits/jvm.adoc
+++ b/docs/modules/ROOT/pages/traits/jvm.adoc
@@ -30,6 +30,14 @@ The following configuration options are available:
| bool
| Activates remote debugging, so that a debugger can be attached to the JVM, e.g., using port-forwarding
+| jvm.debug-suspend
+| bool
+| Suspends the target JVM immediately before the main class is loaded
+
+| jvm.debug-address
+| string
+| Transport address at which to listen for the newly launched JVM
+
| jvm.options
| string
| A comma-separated list of JVM options
diff --git a/pkg/trait/jvm.go b/pkg/trait/jvm.go
index b5ece60..b1a783b 100644
--- a/pkg/trait/jvm.go
+++ b/pkg/trait/jvm.go
@@ -42,6 +42,10 @@ type jvmTrait struct {
BaseTrait `property:",squash"`
// Activates remote debugging, so that a debugger can be attached to the JVM, e.g., using port-forwarding
Debug bool `property:"debug"`
+ // Suspends the target JVM immediately before the main class is loaded
+ DebugSuspend bool `property:"debug-suspend"`
+ // Transport address at which to listen for the newly launched JVM
+ DebugAddress string `property:"debug-address"`
// A comma-separated list of JVM options
Options *string `property:"options"`
}
@@ -49,6 +53,8 @@ type jvmTrait struct {
func newJvmTrait() *jvmTrait {
return &jvmTrait{
BaseTrait: newBaseTrait("jvm"),
+ // To be defaulted to "*:5005" when upgrading the default base image to JDK9+
+ DebugAddress: "5005",
}
}
@@ -108,9 +114,15 @@ func (t *jvmTrait) Apply(e *Environment) error {
container.Command = []string{"java"}
container.WorkingDir = "/deployments"
+ // Remote debugging
if t.Debug {
- // TODO: Add options to configure debugging agent
- container.Args = append(container.Args, "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005")
+ suspend := "n"
+ if t.DebugSuspend {
+ suspend = "y"
+ }
+ container.Args = append(container.Args,
+ fmt.Sprintf("-agentlib:jdwp=transport=dt_socket,server=y,suspend=%s,address=%s",
+ suspend, t.DebugAddress))
}
// Add JVM options
diff --git a/pkg/trait/jvm_test.go b/pkg/trait/jvm_test.go
index 57260db..e180202 100644
--- a/pkg/trait/jvm_test.go
+++ b/pkg/trait/jvm_test.go
@@ -141,6 +141,41 @@ func TestApplyJvmTraitWithKNativeResource(t *testing.T) {
})
}
+func TestApplyJvmTraitWithDebugEnabled(t *testing.T) {
+ trait, environment := createNominalJvmTest()
+ trait.Debug = true
+ trait.DebugSuspend = true
+
+ d := appsv1.Deployment{
+ Spec: appsv1.DeploymentSpec{
+ Template: corev1.PodTemplateSpec{
+ Spec: corev1.PodSpec{
+ Containers: []corev1.Container{
+ {
+ Name: defaultContainerName,
+ VolumeMounts: []corev1.VolumeMount{
+ {
+ MountPath: "/mount/path",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ }
+
+ environment.Resources.Add(&d)
+
+ err := trait.Apply(environment)
+
+ assert.Nil(t, err)
+
+ assert.Contains(t, d.Spec.Template.Spec.Containers[0].Args,
+ "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005",
+ )
+}
+
func createNominalJvmTest() (*jvmTrait, *Environment) {
return createJvmTestWithKitType(v1.IntegrationKitTypePlatform)
}