Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NPE panic in the inventory #495

Open
bennyz opened this issue Aug 3, 2023 · 8 comments
Open

NPE panic in the inventory #495

bennyz opened this issue Aug 3, 2023 · 8 comments
Milestone

Comments

@bennyz
Copy link
Member

bennyz commented Aug 3, 2023

{"level":"error","ts":"2023-08-03 16:10:14.697","logger":"controller.mtv05","msg":"Could not wait for Cache to sync","error":"failed to wait for mtv05 caches to sync: timed out waiting for cache to be synced","stacktrace":"github.com/konveyor/forklift-controller/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start\n\tvendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:234\ngithub.com/konveyor/forklift-controller/vendor/sigs.k8s.io/controller-runtime/pkg/manager.(*controllerManager).startRunnable.func1\n\tvendor/sigs.k8s.io/controller-runtime/pkg/manager/internal.go:696"}
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x80 pc=0x12b9bc0]
goroutine 4857 [running]:
github.com/konveyor/forklift-controller/pkg/lib/inventory/model.(*Tx).End(0x0?)
pkg/lib/inventory/model/client.go:619 +0x40
github.com/konveyor/forklift-controller/pkg/controller/provider/container/ocp.(*Namespace).Reconcile(0xc001425ce0, {0x306d670, 0xc001c53e40})
pkg/controller/provider/container/ocp/collection.go:243 +0x5ef
github.com/konveyor/forklift-controller/pkg/lib/inventory/container/ocp.(*Collector).reconcileCollections(0xc0001cf9e0, {0x306d670, 0xc001c53e40})
pkg/lib/inventory/container/ocp/collector.go:208 +0x1c2
github.com/konveyor/forklift-controller/pkg/lib/inventory/container/ocp.(*Collector).start(0xc0001cf9e0, {0x306d670?, 0xc001c53e40})
pkg/lib/inventory/container/ocp/collector.go:190 +0x23f
github.com/konveyor/forklift-controller/pkg/lib/inventory/container/ocp.(*Collector).Start.func1()
pkg/lib/inventory/container/ocp/collector.go:146 +0x118
created by github.com/konveyor/forklift-controller/pkg/lib/inventory/container/ocp.(*Collector).Start
pkg/lib/inventory/container/ocp/collector.go:161 +0xdf

Seems to happen when the access to the provider is slow

Happened during the development of 2.5.0

@bennyz bennyz self-assigned this Aug 6, 2023
@ahadas ahadas added this to the 2.7.0 milestone Mar 14, 2024
@jsakil14
Copy link

@bennyz I just caught this today , is there a fix or workaround? Is it supposed to be informational error?

{"level":"info","ts":"2024-08-19 07:18:11.134","msg":"Observed a panic in reconciler: runtime error: invalid memory address or nil pointer dereference","controller":"plan","object":{"name":"lxnxtgrocpoc07","namespace":"konveyor-forklift"},"namespace":"konveyor-forklift","name":"lxnxtgrocpoc07","reconcileID":"5722a6c8-21d7-4a20-b31a-2e0c0293aead"}
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
        panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x8 pc=0x1f80ea1]

goroutine 441 [running]:
github.com/konveyor/forklift-controller/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Reconcile.func1()
        vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:116 +0x1e5
panic({0x2c46de0?, 0x542c320?})
        GOROOT/src/runtime/panic.go:914 +0x21f
github.com/konveyor/forklift-controller/pkg/controller/plan/adapter/ocp.(*Builder).ConfigMap(0xc001e59f80, {{0xc00202ef30, 0x24}, {0xc0004192e0, 0xe}, {0xc000425c80, 0x11}, {0x0, 0x0}}, 0x0, ...)
        pkg/controller/plan/adapter/ocp/builder.go:61 +0x1a1
github.com/konveyor/forklift-controller/pkg/controller/plan.(*KubeVirt).configMap(0xc000364fd8, {{0xc00202ef30, 0x24}, {0xc0004192e0, 0xe}, {0xc000425c80, 0x11}, {0x0, 0x0}})
        pkg/controller/plan/kubevirt.go:2103 +0x3ea
github.com/konveyor/forklift-controller/pkg/controller/plan.(*KubeVirt).ensureConfigMap(0xc000364fd8, {{0xc0005f96e0, 0x24}, {0xc0004192e0, 0xe}, {0xc000425c80, 0x11}, {0x0, 0x0}})
        pkg/controller/plan/kubevirt.go:2034 +0x479
github.com/konveyor/forklift-controller/pkg/controller/plan.(*KubeVirt).DataVolumes(0xc000364fd8, 0xc000c2a340)
        pkg/controller/plan/kubevirt.go:569 +0x39b
github.com/konveyor/forklift-controller/pkg/controller/plan.(*Migration).execute(0xc000364fc0, 0xc000c2a340)
        pkg/controller/plan/migration.go:787 +0x10629
github.com/konveyor/forklift-controller/pkg/controller/plan.(*Migration).Run(0xc000364fc0)
        pkg/controller/plan/migration.go:195 +0x285
github.com/konveyor/forklift-controller/pkg/controller/plan.(*Reconciler).execute(0xc0008e5800, 0xc0009d0800)
        pkg/controller/plan/controller.go:428 +0x98b
github.com/konveyor/forklift-controller/pkg/controller/plan.Reconciler.Reconcile({{{0x36a20f8, 0xc000c0cf40}, {0x36bde00, 0xc0008b67e0}, {0x36b49b8, 0xc0008dea40}}}, {0x36ccc60?, 0xc000445ce8?}, {{{0xc000425aa0, 0x11}, ...}})
        pkg/controller/plan/controller.go:257 +0x9de
github.com/konveyor/forklift-controller/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Reconcile(0x36b2c88?, {0x36af758?, 0xc0008e5770?}, {{{0xc000425aa0?, 0xb?}, {0xc0004191c0?, 0x0?}}})
        vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:119 +0xb7
github.com/konveyor/forklift-controller/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler(0xc000cb45a0, {0x36af790, 0xc0008e2eb0}, {0x2e6d920?, 0xc000ca2140?})
        vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:316 +0x3cc
github.com/konveyor/forklift-controller/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem(0xc000cb45a0, {0x36af790, 0xc0008e2eb0})
        vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:266 +0x1c9
github.com/konveyor/forklift-controller/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2()
        vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:227 +0x79
created by github.com/konveyor/forklift-controller/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2 in goroutine 158
        vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:223 +0x565

@bennyz bennyz removed their assignment Aug 19, 2024
@bennyz
Copy link
Member Author

bennyz commented Aug 19, 2024

@jsakil14 this looks like a different issue, it is definitely not intentional (we shouldn't hit NPEs), it seems to be coming from:
https://github.com/kubev2v/forklift/blob/6e96812f653906f72397185dfc9380c52e1a2470/pkg/controller/plan/adapter/ocp/builder.go#L61C6-L61C7

so I'd check the VirtualMachineExport instance you have to figure out why is it missing the certificate (or perhaps a different field is not set for some reason)

@jsakil14
Copy link

@bennyz thanks - I still cant wrap my head around this...Would you mind taking a look at this? pvc has some issues , but am trying to find relevant logs

- lastProbeTime: null
    lastTransitionTime: "2024-08-21T06:16:14Z"
    reason: Unknown
    status: "False"
    type: PVCReady

adding @ahadas Should I open this as a new issue?

controller logs with main container crashing,.,.

{"level":"info","ts":"2024-08-21 06:33:23.755","logger":"plan|57gdc","msg":"Reconcile started.","plan":{"name":"demo","namespace":"konveyor-forklift"}}
{"level":"info","ts":"2024-08-21 06:33:23.763","logger":"plan|57gdc","msg":"Found (active) migration.","plan":{"name":"demo","namespace":"konveyor-forklift"},"migration":"konveyor-forklift/demo-zz8b7"}
{"level":"info","ts":"2024-08-21 06:33:23.764","logger":"plan|57gdc","msg":"Migration [RUN]","plan":{"name":"demo","namespace":"konveyor-forklift"},"migration":"konveyor-forklift/demo-zz8b7","vm":" id:fa51c6cc-4d21-4fd0-aa28-002754d73686 name:'rocky-os-vm-01' ","phase":"CreateDataVolumes"}
{"level":"info","ts":"2024-08-21 06:33:23.770","logger":"plan|57gdc","msg":"VM-export is ready.","plan":{"name":"demo","namespace":"konveyor-forklift"},"migration":"konveyor-forklift/demo-zz8b7","vm":"rocky-os-vm-01"}
{"level":"debug","ts":"2024-08-21 06:33:23.799","logger":"plan|57gdc","msg":"Secret updated.","plan":{"name":"demo","namespace":"konveyor-forklift"},"migration":"konveyor-forklift/demo-zz8b7","secret":"konveyor-forklift/demo-fa51c6cc-4d21-4fd0-aa28-002754d73686-cvc4g","vm":" id:fa51c6cc-4d21-4fd0-aa28-002754d73686 name:'rocky-os-vm-01' "}
{"level":"info","ts":"2024-08-21 06:33:23.801","logger":"plan|57gdc","msg":"Fetching vmExport","plan":{"name":"demo","namespace":"konveyor-forklift"},"migration":"konveyor-forklift/demo-zz8b7","vmRef":{"id":"fa51c6cc-4d21-4fd0-aa28-002754d73686","name":"rocky-os-vm-01","namespace":"konveyor-forklift"}}
{"level":"info","ts":"2024-08-21 06:33:23.817","logger":"plan|57gdc","msg":"Reconcile ended.","plan":{"name":"demo","namespace":"konveyor-forklift"},"reQ":0}
{"level":"info","ts":"2024-08-21 06:33:23.817","msg":"Observed a panic in reconciler: runtime error: invalid memory address or nil pointer dereference","controller":"plan","object":{"name":"demo","namespace":"konveyor-forklift"},"namespace":"konveyor-forklift","name":"demo","reconcileID":"2bd47334-e81b-4d07-8153-14ac0af9ac7d"}
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
        panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x8 pc=0x1f81021]

goroutine 433 [running]:
github.com/konveyor/forklift-controller/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Reconcile.func1()
        vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:116 +0x1e5
panic({0x2c46f60?, 0x542c320?})
        GOROOT/src/runtime/panic.go:914 +0x21f
github.com/konveyor/forklift-controller/pkg/controller/plan/adapter/ocp.(*Builder).ConfigMap(0xc001191c50, {{0xc0016132c0, 0x24}, {0xc000da4d30, 0x10}, {0xc000b228d0, 0x11}, {0x0, 0x0}}, 0x0, ...)
        pkg/controller/plan/adapter/ocp/builder.go:61 +0x1a1
github.com/konveyor/forklift-controller/pkg/controller/plan.(*KubeVirt).configMap(0xc00118d6d8, {{0xc0016132c0, 0x24}, {0xc000da4d30, 0x10}, {0xc000b228d0, 0x11}, {0x0, 0x0}})
        pkg/controller/plan/kubevirt.go:2103 +0x3ea
github.com/konveyor/forklift-controller/pkg/controller/plan.(*KubeVirt).ensureConfigMap(0xc00118d6d8, {{0xc00101dbc0, 0x24}, {0xc000da4d30, 0x10}, {0xc000b228d0, 0x11}, {0x0, 0x0}})
        pkg/controller/plan/kubevirt.go:2034 +0x479
github.com/konveyor/forklift-controller/pkg/controller/plan.(*KubeVirt).DataVolumes(0xc00118d6d8, 0xc0031091e0)
        pkg/controller/plan/kubevirt.go:569 +0x39b
github.com/konveyor/forklift-controller/pkg/controller/plan.(*Migration).execute(0xc00118d6c0, 0xc0031091e0)
        pkg/controller/plan/migration.go:787 +0x10629
github.com/konveyor/forklift-controller/pkg/controller/plan.(*Migration).Run(0xc00118d6c0)
        pkg/controller/plan/migration.go:195 +0x285
github.com/konveyor/forklift-controller/pkg/controller/plan.(*Reconciler).execute(0xc002351dd0, 0xc00174a000)
        pkg/controller/plan/controller.go:428 +0x98b
github.com/konveyor/forklift-controller/pkg/controller/plan.Reconciler.Reconcile({{{0x36a22b8, 0xc00091e700}, {0x36bdfc0, 0xc00041a750}, {0x36b4b78, 0xc00077ffa0}}}, {0x36cce20?, 0xc0020f7ce8?}, {{{0xc000b22708, 0x11}, ...}})
        pkg/controller/plan/controller.go:257 +0x9de
github.com/konveyor/forklift-controller/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Reconcile(0x36b2e48?, {0x36af918?, 0xc002351da0?}, {{{0xc000b22708?, 0xb?}, {0xc000da4c08?, 0x0?}}})
        vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:119 +0xb7
github.com/konveyor/forklift-controller/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler(0xc0008b5ea0, {0x36af950, 0xc0007935e0}, {0x2e6daa0?, 0xc000ba0ee0?})
        vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:316 +0x3cc
github.com/konveyor/forklift-controller/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem(0xc0008b5ea0, {0x36af950, 0xc0007935e0})
        vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:266 +0x1c9
github.com/konveyor/forklift-controller/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2()
        vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:227 +0x79
created by github.com/konveyor/forklift-controller/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2 in goroutine 169
        vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:223 +0x565
k get virtualmachineexports.export.kubevirt.io rocky-os-vm-01 -o yaml
apiVersion: export.kubevirt.io/v1alpha1
kind: VirtualMachineExport
metadata:
  creationTimestamp: "2024-08-21T06:16:14Z"
  generation: 4
  name: rocky-os-vm-01
  namespace: konveyor-forklift
  resourceVersion: "168698602"
  uid: f93691da-18c4-41d5-b43b-87b87bdce2a5
spec:
  source:
    apiGroup: kubevirt.io
    kind: VirtualMachine
    name: rocky-os-vm-01
  ttlDuration: 12h0m0s
status:
  conditions:
  - lastProbeTime: null
    lastTransitionTime: "2024-08-21T06:17:00Z"
    reason: PodReady
    status: "True"
    type: Ready
  - lastProbeTime: null
    lastTransitionTime: "2024-08-21T06:16:14Z"
    reason: Unknown
    status: "False"
    type: PVCReady
  links:
    internal:
      cert: |-
        -----BEGIN CERTIFICATE-----
        ***
        -----END CERTIFICATE-----
      manifests:
      - type: all
        url: https://virt-export-rocky-os-vm-01.konveyor-forklift.svc/internal/manifests/all
      - type: auth-header-secret
        url: https://virt-export-rocky-os-vm-01.konveyor-forklift.svc/internal/manifests/secret
      volumes:
      - formats:
        - format: raw
          url: https://virt-export-rocky-os-vm-01.konveyor-forklift.svc/volumes/rocky-os-vm-01-boot/disk.img
        - format: gzip
          url: https://virt-export-rocky-os-vm-01.konveyor-forklift.svc/volumes/rocky-os-vm-01-boot/disk.img.gz
        name: rocky-os-vm-01-boot
  phase: Ready
  serviceName: virt-export-rocky-os-vm-01
  tokenSecretRef: export-token-rocky-os-vm-01
  ttlExpirationTime: "2024-08-21T18:16:14Z"
  virtualMachineName: rocky-os-vm-01
de197 forklift-console-plugin % kd virtualmachineexports.export.kubevirt.io rocky-os-vm-01           
Name:         rocky-os-vm-01
Namespace:    konveyor-forklift
Labels:       <none>
Annotations:  <none>
API Version:  export.kubevirt.io/v1alpha1
Kind:         VirtualMachineExport
Metadata:
  Creation Timestamp:  2024-08-21T06:16:14Z
  Generation:          4
  Managed Fields:
    API Version:  export.kubevirt.io/v1alpha1
    Fields Type:  FieldsV1
    fieldsV1:
      f:spec:
        .:
        f:source:
          .:
          f:apiGroup:
          f:kind:
          f:name:
        f:ttlDuration:
    Manager:      forklift-controller
    Operation:    Update
    Time:         2024-08-21T06:16:14Z
    API Version:  export.kubevirt.io/v1alpha1
    Fields Type:  FieldsV1
    fieldsV1:
      f:status:
        .:
        f:conditions:
        f:links:
          .:
          f:internal:
            .:
            f:cert:
            f:manifests:
              .:
              k:{"type":"all"}:
                .:
                f:type:
                f:url:
              k:{"type":"auth-header-secret"}:
                .:
                f:type:
                f:url:
            f:volumes:
              .:
              k:{"name":"rocky-os-vm-01-boot"}:
                .:
                f:formats:
                  .:
                  k:{"format":"gzip"}:
                    .:
                    f:format:
                    f:url:
                  k:{"format":"raw"}:
                    .:
                    f:format:
                    f:url:
                f:name:
        f:phase:
        f:serviceName:
        f:tokenSecretRef:
        f:ttlExpirationTime:
        f:virtualMachineName:
    Manager:         virt-controller
    Operation:       Update
    Time:            2024-08-21T06:17:00Z
  Resource Version:  168698602
  UID:               f93691da-18c4-41d5-b43b-87b87bdce2a5
Spec:
  Source:
    API Group:   kubevirt.io
    Kind:        VirtualMachine
    Name:        rocky-os-vm-01
  Ttl Duration:  12h0m0s
Status:
  Conditions:
    Last Probe Time:       <nil>
    Last Transition Time:  2024-08-21T06:17:00Z
    Reason:                PodReady
    Status:                True
    Type:                  Ready
    Last Probe Time:       <nil>
    Last Transition Time:  2024-08-21T06:16:14Z
    Reason:                Unknown
    Status:                False
    Type:                  PVCReady
  Links:
    Internal:
      Cert:  -----BEGIN CERTIFICATE-----
***
-----END CERTIFICATE-----
      Manifests:
        Type:  all
        URL:   https://virt-export-rocky-os-vm-01.konveyor-forklift.svc/internal/manifests/all
        Type:  auth-header-secret
        URL:   https://virt-export-rocky-os-vm-01.konveyor-forklift.svc/internal/manifests/secret
      Volumes:
        Formats:
          Format:        raw
          URL:           https://virt-export-rocky-os-vm-01.konveyor-forklift.svc/volumes/rocky-os-vm-01-boot/disk.img
          Format:        gzip
          URL:           https://virt-export-rocky-os-vm-01.konveyor-forklift.svc/volumes/rocky-os-vm-01-boot/disk.img.gz
        Name:            rocky-os-vm-01-boot
  Phase:                 Ready
  Service Name:          virt-export-rocky-os-vm-01
  Token Secret Ref:      export-token-rocky-os-vm-01
  Ttl Expiration Time:   2024-08-21T18:16:14Z
  Virtual Machine Name:  rocky-os-vm-01
Events:
  Type    Reason               Age                From               Message
  ----    ------               ----               ----               -------
  Normal  ServiceCreated       16m                export-controller  Created service konveyor-forklift/virt-export-rocky-os-vm-01
  Normal  SecretCreated        16m                export-controller  Created default secret konveyor-forklift/export-token-rocky-os-vm-01
  Normal  DataManifestCreated  16m                export-controller  Created exporter data manifest konveyor-forklift/exporter-vm-manifest-rocky-os-vm-01
  Normal  ExporterPodCreated   16m                export-controller  Created exporter pod konveyor-forklift/virt-export-rocky-os-vm-01
  Normal  SecretCreated        15m (x6 over 16m)  export-controller  Created exporter pod secret

@bennyz
Copy link
Member Author

bennyz commented Aug 21, 2024

@jsakil14 yes, this is separate issue.

It seems the issue is, based on your VirtualMachineExport yaml is that it is missing the external field which the code uses. There should probably be some validation in the code that they are indeed there.

https://kubevirt.io/user-guide/storage/export_api/#external-link-certificates
you should probably check that you indeed have the relevant route/ingress created for the export, if not I'd look further into kubevirt's logs

@jsakil14
Copy link

Looks like I need to setup ingress to make this work. documentation to perform migration between openshift clusters would be helpful...

@jsakil14 jsakil14 mentioned this issue Aug 21, 2024
Closed
@bennyz
Copy link
Member Author

bennyz commented Aug 21, 2024

Looks like I need to setup ingress to make this work. documentation to perform migration between openshift clusters would be helpful...

There were no additional steps required when tested with openshift and we have never seen this issue before, are you using plain k8s or some other k8s distribution?
perhaps in these cases there is another step required which we weren't aware of

@jsakil14
Copy link

jsakil14 commented Aug 21, 2024 via email

@bennyz
Copy link
Member Author

bennyz commented Aug 21, 2024

This is kubevirt running on k8s physical 3 node cluster. Still I am stuck, unsure on this approach.

On Wed, 21 Aug, 2024, 4:39 pm Benny Zlotnik, @.> wrote: Looks like I need to setup ingress to make this work. documentation to perform migration between openshift clusters would be helpful... There were no additional steps required when tested with openshift and we have never seen this issue before, are you using plain k8s or some other k8s distribution? perhaps in these cases there is another step required which we weren't aware of — Reply to this email directly, view it on GitHub <#495 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/APS2FWGQTKKNDMLY6UZKJD3ZSRYPJAVCNFSM6AAAAABMXHZYQOVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGMBRG44DSMZUHE . You are receiving this because you were mentioned.Message ID: @.>

I suggest asking in a kubevirt slack channel or mailing list, I don't have access to a k8s env right now

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants