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

K8s resources in uncategorized are not updated an change #3096

Closed
elemental-lf opened this issue Mar 19, 2020 · 15 comments
Closed

K8s resources in uncategorized are not updated an change #3096

elemental-lf opened this issue Mar 19, 2020 · 15 comments
Assignees
Labels
bug Something isn't working

Comments

@elemental-lf
Copy link

I'm seeing this with 0.12.8 at the moment but the behaviour has been the same in older versions I think: Changes to K8s resources which are grouped under uncategorized are not reapplied automatically. I've been bitten be this multiple times when correcting permission issues in ClusterRoles during development. This also affects CRDs for which this would probably harder to fix as they are largely immutable after creation and recreating them would have some side-effects as it would delete all custom resources of that kind.

This is related to the discussion in #2989 I think.

(I still like to point out that Tilt is an awesome tool that has helped me immensely during development as it simplifies deployment and container image publishing, reduces turn-around times significantly and also visualizes all the related logs to quickly find a problem . I've looked at one competing solution in the meantime and I couldn't get it to run properly (which also might be my fault). It also felt more invasive than Tilt and made more changes to the Kubernetes cluster which I didn't like. Keep up the good work! Thank you!)

@jazzdan jazzdan added the bug Something isn't working label Mar 19, 2020
@jazzdan jazzdan self-assigned this Mar 19, 2020
@jazzdan
Copy link
Contributor

jazzdan commented Mar 19, 2020

Hi @elemental-lf, thanks for the kind words! We really appreciate it. 🤗

I wasn't able to reproduce this problem with this example repo: https://github.com/jazzdan/uncategorized-example

Is it possible you're telling Tilt about your YAML in a different way? Are you using a local to generate your YAML, or Helm/Kustomize or something?

Hope we can get this fixed because it sounds super annoying. Thanks for hanging in there and thanks for your help!

@elemental-lf
Copy link
Author

Hmm, thanks for the quick feedback, Dan! I've tried your example and it works for me, too. I originally suspected that my problem was simply the way Tilt was currently designed, but your example proofs me wrong.

My Tilefile contains:

helm_template = str(
    helm('charts/benji-k8s',
         namespace='rook-ceph',
         name='benji',
         values=['../../dual/dual/addons/values/global/benji.yaml', '../../dual/dual/addons/values/dev/benji.yaml']))
helm_template = helm_template[helm_template.index('---'):]
k8s_yaml(blob(helm_template))

The string splicing is a work-around for #2805. When I change something in the chart the changed file is detected and listed in the Tilefile section but no kubectl apply under the uncategorized section is attempted. I tried removing the workaround for #2805 but it still doesn't work.

On the other hand I tried to reproduce it based on your example by extending it to use a simple Helm chart. And it worked every time when I tried to reproduce it: I tried including a CRD in the chart, I tried with a ClusterRole resource, I tried with and without the workaround for #2805, I tried with and without the type conversion (also leaving out the string splicing of course). I'm at a loss and I'm probably missing something. I will have another go at it tomorrow.

@jazzdan
Copy link
Contributor

jazzdan commented Mar 19, 2020

Thanks @elemental-lf, this example is super helpful. Let me try to create a more faithful example project and get back to you

@elemental-lf
Copy link
Author

@jazzda, as an afterthought, I'm not sure any more if my last paragraph is completely unambiguous: I could not reproduce it with the extended example with the different variations I tried. It always worked. It is always broken with my original project so there must be some other difference between the two which I haven't discovered yet.

@jazzdan
Copy link
Contributor

jazzdan commented Mar 19, 2020

@elemental-lf sweet, just to be extra clear :P

This:

helm_template = str(
    helm('charts/benji-k8s',
         namespace='rook-ceph',
         name='benji',
         values=['../../dual/dual/addons/values/global/benji.yaml', '../../dual/dual/addons/values/dev/benji.yaml']))
helm_template = helm_template[helm_template.index('---'):]
k8s_yaml(blob(helm_template))

Is the part of your Tiltfile that causes the problem.

But when you tried to adapt that in to a standalone example, you couldn't get it to reproduce? Is that what you mean?

@jazzdan
Copy link
Contributor

jazzdan commented Mar 19, 2020

@elemental-lf what file are you changing, that you are expecting to trigger an update?

Can you send me the output of these two commands? You'll need to have jq installed and you need to run these commands while Tilt is running:

  1. tilt dump engine | jq '.ConfigFiles'
  2. tilt dump engine | jq '.ManifestTargets.uncategorized'

Thanks!

@elemental-lf
Copy link
Author

@jazzdan I've got another clue. It seems that I have a hanging tilt kubectl --context kind-kind apply -o yaml -f - process. These processes are also accumulating when I terminate Tilt and restart it again (tilt up, CTRL-C, tilt up). I don't see this with the bare-bone example project: There the tilt kubectl process is only present for a short time after changes to the K8s manifests.

strace on the tilt kubectl process doesn't yield anything significant unfortunately:

strace -p 1321607
strace: Process 1321607 attached
futex(0x3962808, FUTEX_WAIT_PRIVATE, 0, NULL^Cstrace: Process 1321607 detached
 <detached ...>

Is there a way to activate additional logging? To find out what resource produces the hang?
In addition it is probably a good idea to add a timeout to these tilt kubectl calls, so that the process is terminated and the timeout is reported to the user after some time.

@jazzdan
Copy link
Contributor

jazzdan commented Mar 20, 2020

@elemental-lf you could try getting a golang stack prace by sending it the ABRT signal like so: kill -ABRT $PID that might shed more light on the problem.

Also can you paste the output of tilt doctor?

As for additional logging, there doesn't appear to be any but let me look in to adding timeouts to those kubectl calls.

@elemental-lf
Copy link
Author

Thank you for looking into this, here's the output from tilt doctor followed by the stack trace.

Tilt: v0.12.8, built 2020-03-12
System: linux-amd64
---
Docker
- Host: [default]
- Version: 1.39
- Builder: 2
---
Kubernetes
- Env: kind-0.6+
- Context: kind-kind
- Cluster Name: kind-kind
- Namespace: default
- Container Runtime: containerd
- Version: v1.17.0
---
Thanks for seeing the Tilt Doctor!
Please send the info above when filing bug reports. 💗

The info below helps us understand how you're using Tilt so we can improve,
but is not required to ask for help.
---
Analytics Settings
- User Mode: opt-out
- Machine: [redacted]
- Repo: [redacted]

Build Failed: kubectl apply:
stderr: SIGABRT: abort
PC=0x4616f0 m=0 sigcode=0

goroutine 0 [idle]:
runtime.epollwait(0x7fff00000004, 0x7fff77ba2a70, 0xffffffff00000080, 0x19000000000, 0xffffffff00000000, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
	/usr/local/Cellar/go/1.13.4/libexec/src/runtime/sys_linux_amd64.s:673 +0x20
runtime.netpoll(0xc00007c501, 0xc00006c001)
	/usr/local/Cellar/go/1.13.4/libexec/src/runtime/netpoll_epoll.go:71 +0x140
runtime.findrunnable(0xc00006c000, 0x0)
	/usr/local/Cellar/go/1.13.4/libexec/src/runtime/proc.go:2372 +0x515
runtime.schedule()
	/usr/local/Cellar/go/1.13.4/libexec/src/runtime/proc.go:2524 +0x2be
runtime.park_m(0xc000001b00)
	/usr/local/Cellar/go/1.13.4/libexec/src/runtime/proc.go:2610 +0x9d
runtime.mcall(0x0)
	/usr/local/Cellar/go/1.13.4/libexec/src/runtime/asm_amd64.s:318 +0x5b

goroutine 1 [runnable]:
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc00057e2d0, 0x1eb73c0, 0xc00094e180, 0xc00094d948)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:311 +0x1b3
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc00057e2a0, 0x1eb73c0, 0xc00094e150, 0xc00094d718)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:316 +0x365
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc00057e120, 0x1eb73c0, 0xc00093dfb0, 0xc00094da68)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc00057e0f0, 0x1eb73c0, 0xc00093df80, 0xc00094db88)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc00057e0c0, 0x1eb73c0, 0xc00093df50, 0xc000952088)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:316 +0x365
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc00057e090, 0x1eb73c0, 0xc00093df20, 0xc0009521a8)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc00057e060, 0x1eb73c0, 0xc00093def0, 0xc00094ce18)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:316 +0x365
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc00057dc50, 0x1eb73c0, 0xc00093db00, 0xc0009522c8)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc00057dc20, 0x1eb73c0, 0xc00093dad0, 0xc00094b5f8)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:316 +0x365
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc00057d440, 0x1eb73c0, 0xc00093d2f0, 0xc000959048)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:316 +0x365
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc00057d410, 0x1eb73c0, 0xc00093d2c0, 0xc000bec988)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc00057d3b0, 0x1eb73c0, 0xc00093d260, 0xc0009bb168)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc00057d380, 0x1eb73c0, 0xc00093d230, 0xc0009483f8)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc00057c660, 0x1eb73c0, 0xc00093c510, 0xc0009bb288)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:316 +0x365
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc00057c630, 0x1eb73c0, 0xc00093c4e0, 0xc00093e0e8)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:316 +0x365
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc00057c300, 0x1eb73c0, 0xc00093c1b0, 0xc0009bb4c8)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:316 +0x365
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc00057c2d0, 0x1eb73c0, 0xc00093c180, 0xc000939dd8)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:316 +0x365
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc000579590, 0x1eb73c0, 0xc0008fd440, 0xc0009bb5e8)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc000579560, 0x1eb73c0, 0xc0008fd410, 0xc000934d08)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:316 +0x365
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc0005794d0, 0x1eb73c0, 0xc0008fd380, 0xc0009bbb88)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:316 +0x365
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc0005794a0, 0x1eb73c0, 0xc0008fd350, 0xc000919978)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc000578720, 0x1eb73c0, 0xc0008fc5d0, 0xc0009c6bc8)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc0005786f0, 0x1eb73c0, 0xc0008fc5a0, 0xc000919718)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc000578690, 0x1eb73c0, 0xc0008fc540, 0xc000a4c988)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc000578660, 0x1eb73c0, 0xc0008fc510, 0xc000a4caa8)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc000578630, 0x1eb73c0, 0xc0008fc4e0, 0xc000a4cbc8)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc000578600, 0x1eb73c0, 0xc0008fc4b0, 0xc000a4cce8)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc0005785d0, 0x1eb73c0, 0xc0008fc480, 0xc0009194d8)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
github.com/evanphx/json-patch.matchesValue(0x1eb73c0, 0xc0005785a0, 0x1eb73c0, 0xc0008fc450, 0xc0008ff320)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
github.com/evanphx/json-patch.matchesArray(0xc0009f80f0, 0x1, 0x1, 0xc000a46310, 0x1, 0x1, 0x30)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:275 +0xab
github.com/evanphx/json-patch.getDiff(0xc000578510, 0xc0008fc3f0, 0x0, 0xc000a4a2a0, 0xc0008fee38)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:361 +0x4d6
github.com/evanphx/json-patch.getDiff(0xc000578420, 0xc000578450, 0x2548f, 0x1dc7600, 0xc00103c028)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:348 +0x35d
github.com/evanphx/json-patch.createObjectMergePatch(0xc001076000, 0x257e1, 0x257e1, 0xc0010f4000, 0x2548f, 0x2548f, 0xc000a3c760, 0x402dc1, 0x203000, 0x60, ...)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:218 +0x13a
github.com/evanphx/json-patch.CreateMergePatch(0xc001076000, 0x257e1, 0x257e1, 0xc0010f4000, 0x2548f, 0x2548f, 0x40c3d6, 0xc000aba4c0, 0x20, 0x18, ...)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/evanphx/json-patch/merge.go:195 +0x123
k8s.io/apimachinery/pkg/util/jsonmergepatch.CreateThreeWayJSONMergePatch(0xc0006da000, 0x10fc7, 0x12000, 0xc0010f4000, 0x2548f, 0x2548f, 0xc001076000, 0x257e1, 0x257e1, 0xc000a3ca38, ...)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/k8s.io/apimachinery/pkg/util/jsonmergepatch/patch.go:42 +0xe7
k8s.io/kubectl/pkg/cmd/apply.(*Patcher).patchSimple(0xc000a3ced0, 0x260e6e0, 0xc00103c008, 0xc0010f4000, 0x2548f, 0x2548f, 0x22630d3, 0x5, 0x0, 0x0, ...)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/k8s.io/kubectl/pkg/cmd/apply/apply.go:901 +0x10fc
k8s.io/kubectl/pkg/cmd/apply.(*Patcher).Patch(0xc000a3ced0, 0x260e6e0, 0xc00103c008, 0xc0010f4000, 0x2548f, 0x2548f, 0x22630d3, 0x5, 0x0, 0x0, ...)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/k8s.io/kubectl/pkg/cmd/apply/apply.go:964 +0xec
k8s.io/kubectl/pkg/cmd/apply.(*ApplyOptions).Run.func1(0xc00019ee00, 0x0, 0x0, 0x0, 0x0)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/k8s.io/kubectl/pkg/cmd/apply/apply.go:546 +0x105d
k8s.io/cli-runtime/pkg/resource.DecoratedVisitor.Visit.func1(0xc00019ee00, 0x0, 0x0, 0xc0007d36e0, 0xc0006d5d80)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go:335 +0xdc
k8s.io/cli-runtime/pkg/resource.ContinueOnErrorVisitor.Visit.func1(0xc00019ee00, 0x0, 0x0, 0x22767c3, 0x10)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go:359 +0x114
k8s.io/cli-runtime/pkg/resource.FlattenListVisitor.Visit.func1(0xc00019ee00, 0x0, 0x0, 0x156cac2, 0xc000a3d2e0)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go:399 +0x9a4
k8s.io/cli-runtime/pkg/resource.FlattenListVisitor.Visit.func1(0xc00019ee00, 0x0, 0x0, 0xc000e00040, 0x18)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go:399 +0x9a4
k8s.io/cli-runtime/pkg/resource.EagerVisitorList.Visit.func1(0xc00019ee00, 0x0, 0x0, 0x12000, 0x22630d3)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go:218 +0x114
k8s.io/cli-runtime/pkg/resource.(*StreamVisitor).Visit(0xc000b6e080, 0xc00025d920, 0x1000, 0xc000194000)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go:597 +0x25d
k8s.io/cli-runtime/pkg/resource.(*FileVisitor).Visit(0xc00025d700, 0xc00025d920, 0x0, 0x0)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go:528 +0x238
k8s.io/cli-runtime/pkg/resource.EagerVisitorList.Visit(0xc000c72240, 0x1, 0x1, 0xc000b6e140, 0xc000b6e101, 0xc000b6e140)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go:213 +0xc5
k8s.io/cli-runtime/pkg/resource.FlattenListVisitor.Visit(0x25f3d40, 0xc00025d740, 0x2614420, 0x397f060, 0xc000daaf60, 0xc000b6e100, 0x2000, 0xc00103b780)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go:391 +0x86
k8s.io/cli-runtime/pkg/resource.FlattenListVisitor.Visit(0x25f3d80, 0xc000daaff0, 0x2614420, 0x397f060, 0xc000daaf60, 0xc00025d8a0, 0x40c3d6, 0xc00103b830)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go:391 +0x86
k8s.io/cli-runtime/pkg/resource.ContinueOnErrorVisitor.Visit(0x25f3d80, 0xc000dab050, 0xc000b6e0c0, 0x203001, 0xc000b6e0c0)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go:354 +0x9c
k8s.io/cli-runtime/pkg/resource.DecoratedVisitor.Visit(0x25f3d00, 0xc000c72260, 0xc00025d7e0, 0x3, 0x4, 0xc000166c00, 0xc000166c00, 0x0)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go:326 +0x86
k8s.io/cli-runtime/pkg/resource.(*Result).Visit(0xc000a70580, 0xc000166c00, 0x0, 0x0)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/k8s.io/cli-runtime/pkg/resource/result.go:99 +0x62
k8s.io/kubectl/pkg/cmd/apply.(*ApplyOptions).Run(0xc000119e40, 0x0, 0x2359738)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/k8s.io/kubectl/pkg/cmd/apply/apply.go:377 +0x44b
k8s.io/kubectl/pkg/cmd/apply.NewCmdApply.func1(0xc00074ec80, 0xc0000ae420, 0x0, 0x6)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/k8s.io/kubectl/pkg/cmd/apply/apply.go:170 +0xff
github.com/spf13/cobra.(*Command).execute(0xc00074ec80, 0xc0000ae360, 0x6, 0x6, 0xc00074ec80, 0xc0000ae360)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/spf13/cobra/command.go:830 +0x2aa
github.com/spf13/cobra.(*Command).ExecuteC(0xc00073af00, 0xc000737ed8, 0x1, 0x1)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/spf13/cobra/command.go:914 +0x2fb
github.com/spf13/cobra.(*Command).Execute(...)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/github.com/spf13/cobra/command.go:864
github.com/windmilleng/tilt/internal/cli.Execute()
	/Users/maia/code/go/src/github.com/windmilleng/tilt/internal/cli/cli.go:79 +0x689
main.main()
	/Users/maia/code/go/src/github.com/windmilleng/tilt/cmd/tilt/main.go:20 +0xaa

goroutine 18 [chan receive]:
k8s.io/klog.(*loggingT).flushDaemon(0x3961360)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/k8s.io/klog/klog.go:1010 +0x8b
created by k8s.io/klog.init.0
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/k8s.io/klog/klog.go:411 +0xd6

goroutine 19 [syscall, 2 minutes]:
os/signal.signal_recv(0x0)
	/usr/local/Cellar/go/1.13.4/libexec/src/runtime/sigqueue.go:147 +0x9c
os/signal.loop()
	/usr/local/Cellar/go/1.13.4/libexec/src/os/signal/signal_unix.go:23 +0x22
created by os/signal.init.0
	/usr/local/Cellar/go/1.13.4/libexec/src/os/signal/signal_unix.go:29 +0x41

goroutine 50 [select]:
k8s.io/apimachinery/pkg/util/wait.JitterUntil(0x2359718, 0x12a05f200, 0x0, 0x1, 0xc00005e120)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:164 +0x181
k8s.io/apimachinery/pkg/util/wait.Until(0x2359718, 0x12a05f200, 0xc00005e120)
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:88 +0x4d
created by k8s.io/kubectl/pkg/util/logs.InitLogs
	/Users/maia/code/go/src/github.com/windmilleng/tilt/vendor/k8s.io/kubectl/pkg/util/logs/logs.go:51 +0x96

rax    0xfffffffffffffffc
rbx    0xffffffff
rcx    0x4616f0
rdx    0x80
rdi    0x4
rsi    0x7fff77ba2a70
rbp    0x7fff77ba3070
rsp    0x7fff77ba2a30
r8     0x0
r9     0x3
r10    0xffffffff
r11    0x202
r12    0x18
r13    0x0
r14    0x25a96be
r15    0x0
rip    0x4616f0
rflags 0x202
cs     0x33
fs     0x0
gs     0x0
: exit status 2

@elemental-lf
Copy link
Author

And here's the other requested output. I needed to redact some things in the manifests of the second one.
tilt dump engine | jq '.ConfigFiles'

[
  "/home/lf/src/backy2/benji/.tiltignore",
  "/home/lf/src/backy2/benji/Tiltfile",
  "/home/lf/src/backy2/benji/tilt_config.json",
  "/home/lf/src/backy2/benji/images/benji/Dockerfile",
  "/home/lf/src/backy2/benji/images/benji-k8s/Dockerfile",
  "/home/lf/src/backy2/benji/images/benji-k8s-operator/Dockerfile",
  "/home/lf/src/dual/dual/addons/values/global/benji.yaml",
  "/home/lf/src/dual/dual/addons/values/dev/benji.yaml",
  "/home/lf/src/backy2/benji/charts/benji-k8s",
  "/home/lf/src/backy2/benji/.dockerignore"
]

tilt dump engine | jq '.ManifestTargets.uncategorized'
https://pastebin.com/PTJQAASx (expires in 2 weeks)

@jazzdan
Copy link
Contributor

jazzdan commented Mar 20, 2020

@elemental-lf I'm still working on adding the timeouts, but out of curiosity, does applying that YAML by hand with kubectl apply also hang?

@elemental-lf
Copy link
Author

I've tested some more and kubectl apply indeed also hangs. I've used the following command:

 tilt dump engine | jq -r '.ManifestTargets.uncategorized.Manifest.deployTarget.YAML' | kubectl apply -f -

From the output of kubectl apply I could identify the first resource affected: customresourcedefinitions/benjioperatorconfigs.benji-backup.me
I increased the verbosity of kubectl and got the following:

 kubectl apply -f affected-crd.yaml --v=8
I0323 13:56:40.410192 3006825 loader.go:375] Config loaded from file:  /home/lf/.kube/config
I0323 13:56:40.411225 3006825 round_trippers.go:420] GET https://127.0.0.1:32773/openapi/v2?timeout=32s
I0323 13:56:40.411238 3006825 round_trippers.go:427] Request Headers:
I0323 13:56:40.411245 3006825 round_trippers.go:431]     Accept: application/com.github.proto-openapi.spec.v2@v1.0+protobuf
I0323 13:56:40.411252 3006825 round_trippers.go:431]     User-Agent: kubectl/v1.17.3 (linux/amd64) kubernetes/06ad960
I0323 13:56:40.454494 3006825 round_trippers.go:446] Response Status: 200 OK in 43 milliseconds
I0323 13:56:40.454516 3006825 round_trippers.go:449] Response Headers:
I0323 13:56:40.454526 3006825 round_trippers.go:452]     Content-Type: application/octet-stream
I0323 13:56:40.454537 3006825 round_trippers.go:452]     Etag: "2645329A37D6BFA1A95715A114E393A6D7AE88F80D82E7F81C49122E4226F3080F4F00F07E104E0318A44C94C746A1CA50A04B7488499368AC67952DC20DE873"
I0323 13:56:40.454545 3006825 round_trippers.go:452]     Last-Modified: Mon, 23 Mar 2020 12:49:06 GMT
I0323 13:56:40.454550 3006825 round_trippers.go:452]     Accept-Ranges: bytes
I0323 13:56:40.454555 3006825 round_trippers.go:452]     Date: Mon, 23 Mar 2020 12:56:40 GMT
I0323 13:56:40.454560 3006825 round_trippers.go:452]     Vary: Accept-Encoding
I0323 13:56:40.454566 3006825 round_trippers.go:452]     Vary: Accept
I0323 13:56:40.454572 3006825 round_trippers.go:452]     X-From-Cache: 1
I0323 13:56:40.454578 3006825 round_trippers.go:452]     X-Varied-Accept: application/com.github.proto-openapi.spec.v2@v1.0+protobuf
I0323 13:56:40.729904 3006825 request.go:1015] Response Body:
00000000  0a 03 32 2e 30 12 15 0a  0a 4b 75 62 65 72 6e 65  |..2.0....Kuberne|
00000010  74 65 73 12 07 76 31 2e  31 37 2e 30 42 ea d9 9f  |tes..v1.17.0B...|
00000020  01 12 ad 0c 0a 31 2f 61  70 69 2f 76 31 2f 6e 61  |.....1/api/v1/na|
00000030  6d 65 73 70 61 63 65 73  2f 7b 6e 61 6d 65 73 70  |mespaces/{namesp|
00000040  61 63 65 7d 2f 70 6f 64  73 2f 7b 6e 61 6d 65 7d  |ace}/pods/{name}|
00000050  2f 61 74 74 61 63 68 12  f7 0b 12 96 02 0a 07 63  |/attach........c|
00000060  6f 72 65 5f 76 31 1a 25  63 6f 6e 6e 65 63 74 20  |ore_v1.%connect |
00000070  47 45 54 20 72 65 71 75  65 73 74 73 20 74 6f 20  |GET requests to |
00000080  61 74 74 61 63 68 20 6f  66 20 50 6f 64 2a 23 63  |attach of Pod*#c|
00000090  6f 6e 6e 65 63 74 43 6f  72 65 56 31 47 65 74 4e  |onnectCoreV1GetN|
000000a0  61 6d 65 73 70 61 63 65  64 50 6f 64 41 74 74 61  |amespacedPodAtta|
000000b0  63 68 32 03 2a 2f 2a 3a  03 2a 2f 2a 4a 37 0a 1c  |ch2.*/*:.*/*J7..|
000000c0  0a 03 32 30 30 12 15 0a  13 0a 02 4f 4b 12 0d 0a  |..200......OK.. [truncated 16751623 chars]
I0323 13:56:40.899533 3006825 round_trippers.go:420] GET https://127.0.0.1:32773/apis/apiextensions.k8s.io/v1/customresourcedefinitions/benjioperatorconfigs.benji-backup.me
I0323 13:56:40.899562 3006825 round_trippers.go:427] Request Headers:
I0323 13:56:40.899575 3006825 round_trippers.go:431]     Accept: application/json
I0323 13:56:40.899587 3006825 round_trippers.go:431]     User-Agent: kubectl/v1.17.3 (linux/amd64) kubernetes/06ad960
I0323 13:56:40.936044 3006825 round_trippers.go:446] Response Status: 200 OK in 36 milliseconds
I0323 13:56:40.936070 3006825 round_trippers.go:449] Response Headers:
I0323 13:56:40.936095 3006825 round_trippers.go:452]     Content-Type: application/json
I0323 13:56:40.936108 3006825 round_trippers.go:452]     Vary: Accept-Encoding
I0323 13:56:40.936116 3006825 round_trippers.go:452]     Date: Mon, 23 Mar 2020 12:56:40 GMT
I0323 13:56:40.938927 3006825 request.go:1017] Response Body: {"kind":"CustomResourceDefinition","apiVersion":"apiextensions.k8s.io/v1","metadata":{"name":"benjioperatorconfigs.benji-backup.me","selfLink":"/apis/apiextensions.k8s.io/v1/customresourcedefinitions/benjioperatorconfigs.benji-backup.me","uid":"32ba9833-0772-44b4-8d1f-0c79ac23d28f","resourceVersion":"17466","generation":1,"creationTimestamp":"2020-03-23T12:11:22Z","labels":{"component":"benji"},"annotations":{"helm.sh/hook":"crd-install","kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"apiextensions.k8s.io/v1\",\"kind\":\"CustomResourceDefinition\",\"metadata\":{\"annotations\":{\"helm.sh/hook\":\"crd-install\"},\"labels\":{\"component\":\"benji\"},\"name\":\"benjioperatorconfigs.benji-backup.me\"},\"spec\":{\"group\":\"benji-backup.me\",\"names\":{\"kind\":\"BenjiOperatorConfig\",\"plural\":\"benjioperatorconfigs\",\"shortNames\":[\"benjiocs\",\"benjioc\"],\"singular\":\"benjioperatorconfig\"},\"scope\":\"Namespaced\",\"versions\":[{\"name\":\"v1alpha1\",\"schema\":{\"openAPIV3Schema\":{ [truncated 153561 chars]
^C

The stack trace looks similar to the one we got from tilt kubectl:

SIGABRT: abort
PC=0x45f371 m=0 sigcode=0

goroutine 0 [idle]:
runtime.futex(0x2d8ada8, 0x80, 0x0, 0x0, 0x7fed00000000, 0x7ffe00000000, 0x458ae0, 0x2d909a8, 0x7ffea7aa9888, 0x40acef, ...)
	/usr/local/go/src/runtime/sys_linux_amd64.s:535 +0x21
runtime.futexsleep(0x2d8ada8, 0x0, 0xffffffffffffffff)
	/usr/local/go/src/runtime/os_linux.go:44 +0x46
runtime.notesleep(0x2d8ada8)
	/usr/local/go/src/runtime/lock_futex.go:151 +0x9f
runtime.stopm()
	/usr/local/go/src/runtime/proc.go:1928 +0xc0
runtime.findrunnable(0xc00005ea00, 0x0)
	/usr/local/go/src/runtime/proc.go:2391 +0x53f
runtime.schedule()
	/usr/local/go/src/runtime/proc.go:2524 +0x2be
runtime.park_m(0xc000000c00)
	/usr/local/go/src/runtime/proc.go:2610 +0x9d
runtime.mcall(0x0)
	/usr/local/go/src/runtime/asm_amd64.s:318 +0x5b

goroutine 1 [runnable]:
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc0009dfcb0, 0x185eca0, 0xc000ad1b60, 0xc000adb288)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:316 +0x2f0
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc0009dfc80, 0x185eca0, 0xc000ad1b30, 0xc000adb3a8)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc0009dfc50, 0x185eca0, 0xc000ad1b00, 0xc000adc628)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc0009dfc20, 0x185eca0, 0xc000ad1ad0, 0xc000adc748)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc0009dfbf0, 0x185eca0, 0xc000ad1aa0, 0xc000ae0088)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:316 +0x365
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc0009dfbc0, 0x185eca0, 0xc000ad1a70, 0xc00314d4c8)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc0009df350, 0x185eca0, 0xc000ad1200, 0xc000aea508)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc0009df320, 0x185eca0, 0xc000ad11d0, 0xc000aea628)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc0009df2f0, 0x185eca0, 0xc000ad11a0, 0xc00310a8c8)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:316 +0x365
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc0009d3b90, 0x185eca0, 0xc000ac3a40, 0xc000b1bb88)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:316 +0x365
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc0009d3b60, 0x185eca0, 0xc000ac3a10, 0xc000acccf8)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:316 +0x365
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc0009d2e40, 0x185eca0, 0xc000ac2cf0, 0xc000b1bca8)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc0009d2e10, 0x185eca0, 0xc000ac2cc0, 0xc000ac6c28)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc0009d2ae0, 0x185eca0, 0xc000ac2990, 0xc000b1bee8)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc0009d2ab0, 0x185eca0, 0xc000ac2960, 0xc000ac6998)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:316 +0x365
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc000967d70, 0x185eca0, 0xc000a8bc20, 0xc000b1c088)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc000967d40, 0x185eca0, 0xc000a8bbf0, 0xc000abd848)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc000967cb0, 0x185eca0, 0xc000a8bb60, 0xc000b1c628)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc000967c80, 0x185eca0, 0xc000a8bb30, 0xc000ab8538)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc000966f00, 0x185eca0, 0xc000a8adb0, 0xc000b1d5e8)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc000966ed0, 0x185eca0, 0xc000a8ad80, 0xc000ab82d8)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc000966e70, 0x185eca0, 0xc000a8ad20, 0xc000b7f3a8)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc000966e40, 0x185eca0, 0xc000a8acf0, 0xc000b7f4c8)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc000966e10, 0x185eca0, 0xc000a8acc0, 0xc000b7f5e8)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc000966de0, 0x185eca0, 0xc000a8ac90, 0xc000b7f708)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc000966db0, 0x185eca0, 0xc000a8ac60, 0xc000ab8098)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesValue(0x185eca0, 0xc000966d80, 0x185eca0, 0xc000a8ac30, 0xc000917d40)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:311 +0x228
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.matchesArray(0xc000a73840, 0x1, 0x1, 0xc000b61950, 0x1, 0x1, 0x30)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:275 +0xab
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.getDiff(0xc000966cf0, 0xc000a8abd0, 0x0, 0xc000b7aa80, 0xc000916538)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:361 +0x4d6
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.getDiff(0xc000966300, 0xc000966330, 0x2548f, 0x17b6e40, 0xc002244038)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:348 +0x35d
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.createObjectMergePatch(0xc000968000, 0x25bd9, 0x25bd9, 0xc0006c8000, 0x2548f, 0x2548f, 0xc0021cc7b8, 0x402dc1, 0x203000, 0x60, ...)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:218 +0x13a
k8s.io/kubernetes/vendor/github.com/evanphx/json-patch.CreateMergePatch(0xc000968000, 0x25bd9, 0x25bd9, 0xc0006c8000, 0x2548f, 0x2548f, 0x40c1d6, 0xc0021b93e0, 0x20, 0x18, ...)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/evanphx/json-patch/merge.go:195 +0x123
k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/jsonmergepatch.CreateThreeWayJSONMergePatch(0xc00098e000, 0x10fc7, 0x12000, 0xc0006c8000, 0x2548f, 0x2548f, 0xc000968000, 0x25bd9, 0x25bd9, 0xc0021cca90, ...)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/jsonmergepatch/patch.go:42 +0xe7
k8s.io/kubernetes/vendor/k8s.io/kubectl/pkg/cmd/apply.(*Patcher).patchSimple(0xc0021ccf28, 0x1d41340, 0xc002244020, 0xc0006c8000, 0x2548f, 0x2548f, 0x2bb4310, 0x1, 0x0, 0x0, ...)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/kubectl/pkg/cmd/apply/apply.go:901 +0x10fc
k8s.io/kubernetes/vendor/k8s.io/kubectl/pkg/cmd/apply.(*Patcher).Patch(0xc0021ccf28, 0x1d41340, 0xc002244020, 0xc0006c8000, 0x2548f, 0x2548f, 0x2bb4310, 0x1, 0x0, 0x0, ...)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/kubectl/pkg/cmd/apply/apply.go:964 +0xec
k8s.io/kubernetes/vendor/k8s.io/kubectl/pkg/cmd/apply.(*ApplyOptions).Run.func1(0xc0029bee70, 0x0, 0x0, 0x0, 0x0)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/kubectl/pkg/cmd/apply/apply.go:546 +0x105d
k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource.DecoratedVisitor.Visit.func1(0xc0029bee70, 0x0, 0x0, 0xc0030c39e0, 0xc003188060)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go:335 +0xdc
k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource.ContinueOnErrorVisitor.Visit.func1(0xc0029bee70, 0x0, 0x0, 0x1aaf885, 0x10)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go:359 +0x114
k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource.FlattenListVisitor.Visit.func1(0xc0029bee70, 0x0, 0x0, 0x110fb42, 0xc0021cd338)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go:399 +0x9a4
k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource.FlattenListVisitor.Visit.func1(0xc0029bee70, 0x0, 0x0, 0xc002cf5ba0, 0x18)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go:399 +0x9a4
k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource.EagerVisitorList.Visit.func1(0xc0029bee70, 0x0, 0x0, 0x12000, 0x2bb4310)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go:218 +0x114
k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource.(*StreamVisitor).Visit(0xc002687200, 0xc0026fe060, 0x1000, 0xc002700000)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go:597 +0x25d
k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource.(*FileVisitor).Visit(0xc0026f9f60, 0xc0026fe060, 0x0, 0x0)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go:528 +0x238
k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource.EagerVisitorList.Visit(0xc0026a2b50, 0x1, 0x1, 0xc0026872c0, 0xc002687201, 0xc0026872c0)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go:213 +0xc5
k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource.FlattenListVisitor.Visit(0x1d36720, 0xc0026f9f80, 0x1d44100, 0x2da7308, 0xc0026fc1e0, 0xc002687280, 0x1007fed3f0e0b10, 0xc0021cd7d8)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go:391 +0x86
k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource.FlattenListVisitor.Visit(0x1d36760, 0xc0026fc210, 0x1d44100, 0x2da7308, 0xc0026fc1e0, 0xc0026fe020, 0x40c1d6, 0xc0021cd888)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go:391 +0x86
k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource.ContinueOnErrorVisitor.Visit(0x1d36760, 0xc0026fc270, 0xc002687240, 0x203001, 0xc002687240)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go:354 +0x9c
k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource.DecoratedVisitor.Visit(0x1d366e0, 0xc0026a2b70, 0xc0026f9fc0, 0x3, 0x4, 0xc0026f5260, 0xc0026f5260, 0x0)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource/visitor.go:326 +0x86
k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource.(*Result).Visit(0xc002625b80, 0xc0026f5260, 0x0, 0x0)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/cli-runtime/pkg/resource/result.go:99 +0x62
k8s.io/kubernetes/vendor/k8s.io/kubectl/pkg/cmd/apply.(*ApplyOptions).Run(0xc0005cedc0, 0x0, 0x1b82768)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/kubectl/pkg/cmd/apply/apply.go:377 +0x44b
k8s.io/kubernetes/vendor/k8s.io/kubectl/pkg/cmd/apply.NewCmdApply.func1(0xc0005e2000, 0xc00012d860, 0x0, 0x3)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/kubectl/pkg/cmd/apply/apply.go:170 +0xff
k8s.io/kubernetes/vendor/github.com/spf13/cobra.(*Command).execute(0xc0005e2000, 0xc00012d830, 0x3, 0x3, 0xc0005e2000, 0xc00012d830)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/spf13/cobra/command.go:830 +0x2aa
k8s.io/kubernetes/vendor/github.com/spf13/cobra.(*Command).ExecuteC(0xc000677680, 0xc00009c180, 0xc00003a050, 0x5)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/spf13/cobra/command.go:914 +0x2fb
k8s.io/kubernetes/vendor/github.com/spf13/cobra.(*Command).Execute(...)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/github.com/spf13/cobra/command.go:864
main.main()
	_output/dockerized/go/src/k8s.io/kubernetes/cmd/kubectl/kubectl.go:49 +0x1f9

goroutine 6 [chan receive]:
k8s.io/kubernetes/vendor/k8s.io/klog.(*loggingT).flushDaemon(0x2d89c80)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/klog/klog.go:1010 +0x8b
created by k8s.io/kubernetes/vendor/k8s.io/klog.init.0
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/klog/klog.go:411 +0xd6

goroutine 20 [syscall]:
os/signal.signal_recv(0x0)
	/usr/local/go/src/runtime/sigqueue.go:147 +0x9c
os/signal.loop()
	/usr/local/go/src/os/signal/signal_unix.go:23 +0x22
created by os/signal.init.0
	/usr/local/go/src/os/signal/signal_unix.go:29 +0x41

goroutine 21 [select]:
k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait.JitterUntil(0x1b826a0, 0x12a05f200, 0x0, 0x1, 0xc00004c180)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:164 +0x181
k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait.Until(0x1b826a0, 0x12a05f200, 0xc00004c180)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:88 +0x4d
created by k8s.io/kubernetes/vendor/k8s.io/kubectl/pkg/util/logs.InitLogs
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/kubectl/pkg/util/logs/logs.go:51 +0x96

goroutine 16 [IO wait]:
internal/poll.runtime_pollWait(0x7fed3f34ff08, 0x72, 0xffffffffffffffff)
	/usr/local/go/src/runtime/netpoll.go:184 +0x55
internal/poll.(*pollDesc).wait(0xc000466518, 0x72, 0x1a00, 0x1af0, 0xffffffffffffffff)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:87 +0x45
internal/poll.(*pollDesc).waitRead(...)
	/usr/local/go/src/internal/poll/fd_poll_runtime.go:92
internal/poll.(*FD).Read(0xc000466500, 0xc00061e000, 0x1af0, 0x1af0, 0x0, 0x0, 0x0)
	/usr/local/go/src/internal/poll/fd_unix.go:169 +0x1cf
net.(*netFD).Read(0xc000466500, 0xc00061e000, 0x1af0, 0x1af0, 0x203000, 0x0, 0x1aeb)
	/usr/local/go/src/net/fd_unix.go:202 +0x4f
net.(*conn).Read(0xc000520020, 0xc00061e000, 0x1af0, 0x1af0, 0x0, 0x0, 0x0)
	/usr/local/go/src/net/net.go:184 +0x68
crypto/tls.(*atLeastReader).Read(0xc0020b00a0, 0xc00061e000, 0x1af0, 0x1af0, 0x80, 0x1402d90fd8, 0xc0005b7970)
	/usr/local/go/src/crypto/tls/conn.go:780 +0x60
bytes.(*Buffer).ReadFrom(0xc00025d758, 0x1d32740, 0xc0020b00a0, 0x40a1b5, 0x18aa220, 0x1a26cc0)
	/usr/local/go/src/bytes/buffer.go:204 +0xb4
crypto/tls.(*Conn).readFromUntil(0xc00025d500, 0x1d35180, 0xc000520020, 0x5, 0xc000520020, 0x203000)
	/usr/local/go/src/crypto/tls/conn.go:802 +0xec
crypto/tls.(*Conn).readRecordOrCCS(0xc00025d500, 0x0, 0x0, 0x40bd34)
	/usr/local/go/src/crypto/tls/conn.go:609 +0x124
crypto/tls.(*Conn).readRecord(...)
	/usr/local/go/src/crypto/tls/conn.go:577
crypto/tls.(*Conn).Read(0xc00025d500, 0xc0000e8000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
	/usr/local/go/src/crypto/tls/conn.go:1255 +0x161
bufio.(*Reader).Read(0xc00063a0c0, 0xc000026578, 0x9, 0x9, 0xc0005b7d10, 0x0, 0x8b9ff2)
	/usr/local/go/src/bufio/bufio.go:226 +0x26a
io.ReadAtLeast(0x1d32560, 0xc00063a0c0, 0xc000026578, 0x9, 0x9, 0x9, 0xc000090060, 0x0, 0x1d32940)
	/usr/local/go/src/io/io.go:310 +0x87
io.ReadFull(...)
	/usr/local/go/src/io/io.go:329
k8s.io/kubernetes/vendor/golang.org/x/net/http2.readFrameHeader(0xc000026578, 0x9, 0x9, 0x1d32560, 0xc00063a0c0, 0x0, 0x0, 0xc000538090, 0x0)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/golang.org/x/net/http2/frame.go:237 +0x87
k8s.io/kubernetes/vendor/golang.org/x/net/http2.(*Framer).ReadFrame(0xc000026540, 0xc000538090, 0x0, 0x0, 0x0)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/golang.org/x/net/http2/frame.go:492 +0xa1
k8s.io/kubernetes/vendor/golang.org/x/net/http2.(*clientConnReadLoop).run(0xc0005b7fb8, 0x8a365d, 0xc00063a7e0)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/golang.org/x/net/http2/transport.go:1686 +0x8c
k8s.io/kubernetes/vendor/golang.org/x/net/http2.(*ClientConn).readLoop(0xc0000a9680)
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/golang.org/x/net/http2/transport.go:1614 +0xa3
created by k8s.io/kubernetes/vendor/golang.org/x/net/http2.(*Transport).newClientConn
	/workspace/anago-v1.17.3-beta.0.40+c94b9acd4b784f/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/golang.org/x/net/http2/transport.go:673 +0x62f

rax    0xca
rbx    0x2d8ac60
rcx    0x45f373
rdx    0x0
rdi    0x2d8ada8
rsi    0x80
rbp    0x7ffea7aa9850
rsp    0x7ffea7aa9808
r8     0x0
r9     0x0
r10    0x0
r11    0x286
r12    0x5
r13    0x1
r14    0xc00083c120
r15    0x0
rip    0x45f371
rflags 0x286
cs     0x33
fs     0x0
gs     0x0

And this led me to this kubectl issue: kubernetes/kubectl#698.
The resolution of the issue is not clear to me. Was the update of the 3rd library integrated or are they waiting for the problem to disappear with server-side apply? Anyway, I tested with the latest stable version of kubectl (1.17.4) and the problem still exists. As a final test I tested with server-side apply (--server-side=true) and this works!

I think the following options should be investigated if time permits:

For the time being it would help if Tilt would expose a flag to use server-side apply (passing --server-side=true to tilt kubectl apply) or if Tilt would implement a way to pass additional arguments to tilt kubectl apply. Both would work as a stop-gap measure and we could wait out the kubectl problem if neccessary.

@nicks
Copy link
Member

nicks commented Mar 23, 2020

wow, nice find!

Ya, it might be worth trying to pull in json-patch from upstream and see if that helps.

apply --server-side=true might also be work exposing, in the same way that we have --klog to turn on debug logging

@nicks
Copy link
Member

nicks commented Mar 24, 2020

ugh, the problem is that json-patch is currently broken with go modules, see evanphx/json-patch#98

@nicks
Copy link
Member

nicks commented Mar 27, 2020

should be fixed in the latest release

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants