jiebi/CodeConvo huggingface dataset:
Change:
Looks like similar issue with
That's the PV controller this is the attach controller, thus separate issues.

Discussion:
err) } } else { <del> // If volume is not safe to detach (is mounted) wait a max amount of time before detaching any way. </del> <ins> // If volume is not safe to detach (is mounted) wait a max amount of time before detaching anyway. </ins> if timeElapsed > rc.maxWaitForUnmountDuration { glog.V(5).Infof("Attempting to start DetachVolume for volume %q from node %q. Volume is not safe to detach, but maxWaitForUnmountDuration expired.", attachedVolume.VolumeName, attachedVolume.NodeName) err := rc.attacherDetacher.DetachVolume(attachedVolume.AttachedVolume, false /* verifySafeToDetach */, rc.actualStateOfWorld)

reconcilerLoopPeriod, maxWaitForUnmountDuration, dsw, asw, ad, nsu) // Act <del> go reconciler.Run(wait.NeverStop) </del> <ins> ch := make(chan struct{}) go reconciler.Run(ch) defer close(ch) </ins> // Assert waitForNewAttacherCallCount(t, 0 /* expectedCallCount */, fakePlugin)

} // Act <del> go reconciler.Run(wait.NeverStop) </del> <ins> ch := make(chan struct{}) go reconciler.Run(ch) defer close(ch) </ins> // Assert waitForNewAttacherCallCount(t, 1 /* expectedCallCount */, fakePlugin)
Change:
Looks like similar issue with
That's the PV controller this is the attach controller, thus separate issues.

Discussion:
t *testing.T, expectedAttachCallCount int, fakePlugin *volumetesting.FakeVolumePlugin) { <del> if len(fakePlugin.Attachers) == 0 && expectedAttachCallCount == 0 { </del> <ins> if len(fakePlugin.GetAttachers()) == 0 && expectedAttachCallCount == 0 { </ins> return } err := retryWithExponentialBackOff( time.Duration(5*time.Millisecond), func() (bool, error) { <del> for i, attacher := range fakePlugin.Attachers { </del> <ins> for i, attacher := range fakePlugin.GetAttachers() { </ins> actualCallCount := attacher.GetAttachCallCount() if actualCallCount == expectedAttachCallCount { return true, nil

t *testing.T, expectedDetachCallCount int, fakePlugin *volumetesting.FakeVolumePlugin) { <del> if len(fakePlugin.Detachers) == 0 && expectedDetachCallCount == 0 { </del> <ins> if len(fakePlugin.GetDetachers()) == 0 && expectedDetachCallCount == 0 { </ins> return } err := retryWithExponentialBackOff( time.Duration(5*time.Millisecond), func() (bool, error) { <del> for i, detacher := range fakePlugin.Detachers { </del> <ins> for i, detacher := range fakePlugin.GetDetachers() { </ins> actualCallCount := detacher.GetDetachCallCount() if actualCallCount == expectedDetachCallCount { return true, nil

return plugin.getFakeVolume(&plugin.Attachers), nil } <ins> func (plugin *FakeVolumePlugin) GetAttachers() (Attachers []*FakeVolume) { plugin.RLock() defer plugin.RUnlock() return plugin.Attachers } </ins> func (plugin *FakeVolumePlugin) GetNewAttacherCallCount() int { plugin.RLock() defer plugin.RUnlock()

return plugin.getFakeVolume(&plugin.Detachers), nil } <ins> func (plugin *FakeVolumePlugin) GetDetachers() (Detachers []*FakeVolume) { plugin.RLock() defer plugin.RUnlock() return plugin.Detachers } </ins> func (plugin *FakeVolumePlugin) GetNewDetacherCallCount() int { plugin.RLock() defer plugin.RUnlock()
Change:
Kubelet (v1.2.4) can consume a lot cycles and when it keeps trying to tear orphaned volumes down:
See also cc
Assigning (all seem related--secret volume tear down issues with hyperkube) to for investigation.
/cc

Discussion:
glog.V(5).Infof("findmnt: directory %s does not exist", file) return true, err } <del> args := []string{"--mount=/rootfs/proc/1/ns/mnt", "--", n.absHostPath("findmnt"), "-o", "target", "--noheadings", "--target", file} </del> <ins> // Add --first-only option: since we are testing for the absense of a mountpoint, it is sufficient to get only // the first of multiple possible mountpoints using --first-only. // Also add fstype output to make sure that the output of target file will give the full path // TODO: Need more refactoring for this function. Track the solution with issue #26996 args := []string{"--mount=/rootfs/proc/1/ns/mnt", "--", n.absHostPath("findmnt"), "-o", "target,fstype", "--noheadings", "--first-only", "--target", file} </ins> glog.V(5).Infof("findmnt command: %v %v", nsenterPath, args) exec := exec.New()

// It's safer to assume that it's not a mount point. return true, nil } <del> strOut := strings.TrimSuffix(string(out), "n") </del> <ins> mountTarget := strings.Split(string(out), " ")[0] mountTarget = strings.TrimSuffix(mountTarget, "n") glog.V(5).Infof("IsLikelyNotMountPoint findmnt output for path %s: %v:", file, mountTarget) </ins> <del> glog.V(5).Infof("IsLikelyNotMountPoint findmnt output for path %s: %v", file, strOut) if strOut == file { </del> <ins> if mountTarget == file { glog.V(5).Infof("IsLikelyNotMountPoint: %s is a mount point", file) </ins> return false, nil } <ins> glog.V(5).Infof("IsLikelyNotMountPoint: %s is not a mount point", file) </ins> return true, nil }
Change:
With rkt as the container runtime, the e2e test fails with I dove into it a bit further and it looks like a real issue. With additional logging it appears that the probe does fail (exec happens and returns incorrectly as expected), but when calls it never gets that the given ID exists. The pod definition I've been using is: It restarts very slowly with rkt (on the order of an hour I believe, see sleep 600), but restarts very frequently with docker. cc

Discussion:
return 0 } <ins> func newRktExitError(e error) error { if exitErr, ok := e.(*exec.ExitError); ok { return &rktExitError{exitErr} } return e } </ins> func (r *Runtime) AttachContainer(containerID kubecontainer.ContainerID, stdin io.Reader, stdout, stderr io.WriteCloser, tty bool) error { return fmt.Errorf("unimplemented") }

if stdout != nil { go io.Copy(stdout, p) } <del> return command.Wait() </del> <ins> return newRktExitError(command.Wait()) </ins> } if stdin != nil { // Use an os.Pipe here as it returns true *os.File objects.

// of the pipe. r, w, err := r.os.Pipe() if err != nil { <del> return err </del> <ins> return newRktExitError(err) </ins> } go io.Copy(w, stdin)

if stderr != nil { command.Stderr = stderr } <del> return command.Run() </del> <ins> return newRktExitError(command.Run()) </ins> } // PortForward executes socat in the pod's network namespace and copies
Change:
This is deterministically failing only in kubernetes-e2e-gce-serial with and so on. cc/
Docker 1.11 probably just has a higher resource footprint ()
We moved containerd to the docker cgroup in , and the build started to fail () I'll bump the memory limit now for docker 1.11.
Thanks Yu-ju, this issue got lost in the noise for me.

Discussion:
podsPerNode: 35, cpuLimits: framework.ContainersCPUSummary{ stats.SystemContainerKubelet: {0.50: 0.12, 0.95: 0.14}, <del> stats.SystemContainerRuntime: {0.50: 0.06, 0.95: 0.08}, </del> <ins> stats.SystemContainerRuntime: {0.50: 0.05, 0.95: 0.07}, </ins> }, // We set the memory limits generously because the distribution // of the addon pods affect the memory usage on each node. memLimits: framework.ResourceUsagePerContainer{ <del> stats.SystemContainerRuntime: &framework.ContainerResourceUsage{MemoryRSSInBytes: 100 * 1024 * 1024}, </del> <ins> stats.SystemContainerKubelet: &framework.ContainerResourceUsage{MemoryRSSInBytes: 70 * 1024 * 1024}, stats.SystemContainerRuntime: &framework.ContainerResourceUsage{MemoryRSSInBytes: 150 * 1024 * 1024}, </ins> }, }, { <del> // TODO(yujuhong): Set the limits after collecting enough data. </del> <ins> cpuLimits: framework.ContainersCPUSummary{ stats.SystemContainerKubelet: {0.50: 0.15, 0.95: 0.20}, stats.SystemContainerRuntime: {0.50: 0.06, 0.95: 0.09}, }, </ins> podsPerNode: 100, <ins> // We set the memory limits generously because the distribution // of the addon pods affect the memory usage on each node. memLimits: framework.ResourceUsagePerContainer{ stats.SystemContainerKubelet: &framework.ContainerResourceUsage{MemoryRSSInBytes: 80 * 1024 * 1024}, stats.SystemContainerRuntime: &framework.ContainerResourceUsage{MemoryRSSInBytes: 300 * 1024 * 1024}, }, </ins> }, } for _, testArg := range rTests {
Change:
requires the binary but the binary is not available in . is provided by the Debian package.
It seems the problem has been introduced with PR : the file is missing in the command
Thank you for the fix! Is this planned for the next 1.2.x release?
I'll be fixed with the upcoming release.

Discussion:
iptables  ethtool  ca-certificates  <ins> conntrack  </ins> file  util-linux  socat
Change:
Hi, there is a minor bug in the script or at least some inconsistency. When I run the update script white spaces are ignores with the option but in the white spaces are not ignored. So for consistency we should either ignore white spaces at all or we should diff white spaces (what I would prefer). I wanted to discuss with you the different options before providing a pull request because it's very confusing when you run the update script and afterwards the verify script tells you there are diffs. Thanks!
cc

Discussion:
# By now, the contents should be normalized and stripped of any # auto-managed content. <del> if diff -Bw >/dev/null <(echo "${original}") <(echo "${generated}"); then </del> <ins> if diff -B >/dev/null <(echo "${original}") <(echo "${generated}"); then </ins> # actual contents same, overwrite generated with original. cp "${OUTPUT}/${file}" "${OUTPUT_TMP}/${file}" fi
Change:
On 2k nodes, this test took 53m. We should either do it in batches of nodes, or just subsample the nodes.
And it probably doesn't need to test 4 different variant command sets against all of the nodes, either. :P
When you asked me about the 2k node test, this was the test that was running. I'm not sure why other tests weren't also running in parallel or if this was just the final long pole, but it's a beastly test. PR incoming.
- thanks for looking into it. THe PR is already lgtm-ed by me.

Discussion:
. "github.com/onsi/ginkgo" ) <ins> const maxNodes = 100 </ins> var _ = framework.KubeDescribe("SSH", func() { f := framework.NewDefaultFramework("ssh")

expectedCode   int expectedError  error }{ <del> {`echo "Hello"`, true, "Hello", "", 0, nil}, // Same as previous, but useful for test output diagnostics. </del> <ins> // Keep this test first - this variant runs on all nodes. </ins> {`echo "Hello from $(whoami)@$(hostname)"`, false, "", "", 0, nil}, {`echo "foo" | grep "bar"`, true, "", "", 1, nil}, {`echo "Out" && echo "Error" >&2 && exit 7`, true, "Out", "Error", 7, nil}, } <del> // Run commands on all nodes via SSH. for _, testCase := range testCases { By(fmt.Sprintf("SSH'ing to all nodes and running %s", testCase.cmd)) for _, host := range hosts { </del> <ins> for i, testCase := range testCases { // Only run the first testcase against max 100 nodes. Run // the rest against the first node we find only, since // they're basically testing SSH semantics (and we don't // need to do that against each host in the cluster). nodes := len(hosts) if i > 0 { nodes = 1 } else if nodes > maxNodes { nodes = maxNodes } testhosts := hosts[:nodes] By(fmt.Sprintf("SSH'ing to %d nodes and running %s", len(testhosts), testCase.cmd)) for _, host := range testhosts { </ins> result, err := framework.SSH(testCase.cmd, host, framework.TestContext.Provider) stdout, stderr := strings.TrimSpace(result.Stdout), strings.TrimSpace(result.Stderr) if err != testCase.expectedError {
Change:
For: "Pod Disks should schedule a pod w/ a RW PD, remove it, then schedule it on another host" "Pod Disks should schedule a pod w/ a readonly PD on two hosts, then remove both." (this is not happening on v1.3 master with v1.1 nodes, nor with v1.2 tests against a v1.3 cluster) View logs and artifacts at
Mind taking a look? You should be able to repro by turning up a v1.3 cluster and running v1.1 tests against it.
for your queue
I found the cause of the test failure. The following are the main steps in the test host0Pod, and wait for it running a file to the host0Pod, and then delete it host1Pod, and waiting for it running the file from host1Pod, and then delete it disk with deletePDWithRetry() function, which has 3 minutes timeout defer() function, clean up test environment, and also run deletePDWithRetry() again just in case The problem arises from step 5. In the above test, deletePDWithRetry tried to delete PD every 5 second, but failed in 3 minutes. After it exits retry loop, it failed for the expectNoError(err, "Error deleting PD") in this function. Although it deleted the PD successfully right after this during the clean up phase (step 6). So the main issue for this test failure is the timeout is a little bit short. To fix it issue, we can either increase the timeout, or not fail when calling deletePDWithRetry for the first time. We can fail it if it cannot delete it after calling deletePDWIthRetry second time in step 6. The following is the retry loop and error code in the deletePDWIthRetry(). In current 1.3 version, we only call deletePDWithRetry once in defer() function during clean up. I think to be safe we should increase timeout to 5 minutes, and set it in the constance instead of coding it directly inside of the function.
So two options to fix this: port test fixes from main branch to the 1.1 branch to make the test more robust against delays. for to be merged, which will decrease the time it takes for a volume to be detached and therefore how long it takes to be deleted.

Discussion:
gcePDDetachPollTime = 10 * time.Second nodeStatusTimeout   = 1 * time.Minute nodeStatusPollTime  = 1 * time.Second <ins> gcePDRetryTimeout   = 5 * time.Minute gcePDRetryPollTime  = 5 * time.Second </ins> ) var _ = framework.KubeDescribe("Pod Disks", func() {

func createPDWithRetry() (string, error) { newDiskName := "" var err error <del> for start := time.Now(); time.Since(start) < 180*time.Second; time.Sleep(5 * time.Second) { </del> <ins> for start := time.Now(); time.Since(start) < gcePDRetryTimeout; time.Sleep(gcePDRetryPollTime) { </ins> if newDiskName, err = createPD(); err != nil { framework.Logf("Couldn't create a new PD. Sleeping 5 seconds (%v)", err) continue

func deletePDWithRetry(diskName string) { var err error <del> for start := time.Now(); time.Since(start) < 180*time.Second; time.Sleep(5 * time.Second) { </del> <ins> for start := time.Now(); time.Since(start) < gcePDRetryTimeout; time.Sleep(gcePDRetryPollTime) { </ins> if err = deletePD(diskName); err != nil { framework.Logf("Couldn't delete PD %q. Sleeping 5 seconds (%v)", diskName, err) continue
Change:
As of now node e2e requires all the tests to pass. There are tests like the container conformance tests which have been flaky in the past - , , We need ability to mark certain tests as flaky and not run them as part of merge queue.
Ginkgo flags makes it possible to skip tests. We can use a prefix to not run flaky tests in our existing jenkins CIs.
Closing via

Discussion:
cl = client.NewOrDie(&restclient.Config{Host: *apiServerAddress}) }) <del> Describe("image conformance blackbox test", func() { </del> <ins> Describe("[FLAKY] image conformance blackbox test", func() { </ins> Context("when testing images that exist", func() { var conformImages []ConformanceImage BeforeEach(func() {

} }) <del> It("It should present successfully [Conformance]", func() { </del> <ins> It("It should present successfully", func() { </ins> for _, conformImage := range conformImages { present, err := conformImage.Present() Expect(err).ShouldNot(HaveOccurred())

} }) <del> It("should list pulled images [Conformance]", func() { </del> <ins> It("should list pulled images", func() { </ins> image, _ := NewConformanceImage("docker", "") tags, err := image.List() Expect(err).ShouldNot(HaveOccurred())

conformImages = append(conformImages, conformImage) } <del> By("not presenting images [Conformance]", func() { </del> <ins> By("not presenting images", func() { </ins> for _, conformImage := range conformImages { present, err := conformImage.Present() Expect(err).ShouldNot(HaveOccurred())

} }) <del> By("not listing pulled images [Conformance]", func() { </del> <ins> By("not listing pulled images", func() { </ins> image, _ := NewConformanceImage("docker", "") tags, err := image.List() Expect(err).ShouldNot(HaveOccurred())

} }) <del> By("not removing non-exist images [Conformance]", func() { </del> <ins> By("not removing non-exist images", func() { </ins> for _, conformImage := range conformImages { err := conformImage.Remove() Expect(err).Should(HaveOccurred())

GCE_IMAGE_PROJECT=kubernetes-jenkins INSTALL_GODEP=true CLEANUP=true <del> GINKGO_FLAGS= </del> <ins> GINKGO_FLAGS=--ginkgo.skip=FLAKY </ins> SETUP_NODE=false

GCE_IMAGE_PROJECT=kubernetes-jenkins-pull INSTALL_GODEP=true CLEANUP=true <del> GINKGO_FLAGS= </del> <ins> GINKGO_FLAGS=--ginkgo.skip=FLAKY </ins> SETUP_NODE=false  No newline at end of file

Ready            bool } <del> var _ = Describe("Container runtime Conformance Test", func() { </del> <ins> var _ = Describe("[FLAKY] Container runtime Conformance Test", func() { </ins> var cl *client.Client BeforeEach(func() {
Change:
I hit a test flake in Example build:
Assigning to per spreadsheet
cc
Failure log: Most likely there are two unit tests using this file running in parallel and they raced.
Robot more optimistic than my "May fix #XXX" message warrants, but OK. If this occurs again, please reopen.

Discussion:
) func TestNewOIDCAuthProvider(t *testing.T) { <del> cert := path.Join(os.TempDir(), "oidc-cert") key := path.Join(os.TempDir(), "oidc-key") </del> <ins> tempDir, err := ioutil.TempDir(os.TempDir(), "oidc_test") if err != nil { t.Fatalf("Cannot make temp dir %v", err) } cert := path.Join(tempDir, "oidc-cert") key := path.Join(tempDir, "oidc-key") </ins> defer os.Remove(cert) defer os.Remove(key) <ins> defer os.Remove(tempDir) </ins> oidctesting.GenerateSelfSignedCert(t, "127.0.0.1", cert, key) op := oidctesting.NewOIDCProvider(t)
Change:
Description of problem: Create PVC failed when using labelSelector Version-Release number of selected component (if applicable): Server Version: version.Info{Major:"1", Minor:"3+", GitVersion:"v1.3.0-alpha.5.131+", GitCommit:"", GitTreeState:"clean", BuildDate:"2016-06-06T02:42:14Z", GoVersion:"go1.6.2", Compiler:"gc", Platform:"linux/amd64"} How reproducible: Always Steps to Reproduce: k8s env a pvc according to pr error validating "": error validating data: unexpected type: unversioned.LabelSelector; if you choose to ignore these errors, turn validation off with --validate=false
here is the problem line
Can this issue be closed? (PR seems to have merged)
yes, issue is fixed. (pmorie's on vacation)
Closing as per above comment /assign
/close

Discussion:
} // This matches type name in the swagger spec, such as "v1.Binding". <del> var versionRegexp = regexp.MustCompile(`^v.+..*`) </del> <ins> var versionRegexp = regexp.MustCompile(`^(v.+|unversioned)..*`) </ins> func (s *SwaggerSchema) validateField(value interface{}, fieldName, fieldType string, fieldDetails *swagger.ModelProperty) []error { allErrs := []error{}
Change:
The output looks like below: What is expected behavior? Does restart counter should increase when init containers are failing? Does restart counter should be reseted when InitContainer will start work and normal containers start? cc
Restarts are tracked per container - I'd be concerned that the restarts the user is concerned with don't map exactly to the init container restarts, although knowing how many attempts to init have been made are useful. Since init containers are processed serially, when an init container passes, do we reset the restart count to zero? I think we could show the current init container restart count (if pod is in init) in this field. But once the init container succeeds it has to drop back to zero.
For normal containers field shows the sum of from containers status. I think for init containers as we know which container is running (when is merged) we can show restart count for current init container. For normal containers behavior should not change. So it would look like these: First init container is failing Second init container is failing Normal container is failing For better readability we may also add word like in status: Second init container is failing What do you think?
Yeah, although I don't know that we need the Init prefix in the status. I think users can reasonably be expected to infer that RESTARTS is subordinate to STATUS. The init prefix makes it harder to read without adding a ton. , Łukasz Oleś wrote:
Ah, I messed up. shows status of normal containers. in Status shows status of init containers: I think this part should be always showed. So it will look like these: What do you think?
Ok, I decided to use the same approach as for normal containers. RESTARTS just shows sum of all init containers restarts.
Fix is merged

Discussion:
initializing := false for i := range pod.Status.InitContainerStatuses { container := pod.Status.InitContainerStatuses[i] <ins> restarts += int(container.RestartCount) </ins> switch { case container.State.Terminated != nil && container.State.Terminated.ExitCode == 0: continue

break } if !initializing { <ins> restarts = 0 </ins> for i := len(pod.Status.ContainerStatuses) - 1; i >= 0; i-- { container := pod.Status.ContainerStatuses[i]
Change:
I'd like to run local in agent host. The parameters is used to set executor, but it did not set 's arguments. The proposal is to provide an argument to set the local path of in agent host. cc
It seems we have a hidden parameter , I'll try it firstly.
any suggestion?
how did work out? if you ran into problems .. what were they?
Just have a try, it seems not work; I'm on sure whether configuration issue.
, just go through the code; the will only point to the binaries in master and Mesos agent will fetch it. It did not match this requirement. Do you have time on this? I'd like to work on this and let you review it :).
, would you help to review the patch?
Yes, just provided some feedback on your PR , Klaus Ma wrote:

Discussion:
func (s *SchedulerServer) AddHyperkubeFlags(fs *pflag.FlagSet) { s.addCoreFlags(fs) <del> fs.StringVar(&s.kmPath, "km-path", s.kmPath, "Location of the km executable, may be a URI or an absolute file path.") </del> <ins> fs.StringVar(&s.kmPath, "km-path", s.kmPath, "Location of the km executable, may be a URI or an absolute file path; may be prefixed with 'file://' to specify the path to a pre-installed, agent-local km binary.") </ins> } // returns (downloadURI, basename(path))

return nil, fmt.Errorf("either run this scheduler via km or else --executor-path is required") } else { if strings.Index(s.kmPath, "://") > 0 { <del> // URI could point directly to executable, e.g. hdfs:///km // or else indirectly, e.g. http://acmestorage/tarball.tgz // so we assume that for this case the command will always "km" ci.Uris = append(ci.Uris, &mesos.CommandInfo_URI{Value: proto.String(s.kmPath), Executable: proto.Bool(true)}) ci.Value = proto.String("./km") // TODO(jdef) extract constant </del> <ins> if strings.HasPrefix(s.kmPath, "file://") { // If `kmPath` started with "file://", `km` in agent local path was used. ci.Value = proto.String(strings.TrimPrefix(s.kmPath, "file://")) } else { // URI could point directly to executable, e.g. hdfs:///km // or else indirectly, e.g. http://acmestorage/tarball.tgz // so we assume that for this case the command will always "km" ci.Uris = append(ci.Uris, &mesos.CommandInfo_URI{Value: proto.String(s.kmPath), Executable: proto.Bool(true)}) ci.Value = proto.String("./km") // TODO(jdef) extract constant } </ins> } else if s.kmPath != "" { uri, kmCmd := s.serveFrameworkArtifact(s.kmPath) ci.Uris = append(ci.Uris, &mesos.CommandInfo_URI{Value: proto.String(uri), Executable: proto.Bool(true)})