mirror of
https://github.com/containers/podman.git
synced 2025-07-02 00:30:00 +08:00
Merge pull request #22691 from nalind/events-bad-filters
`podman events`: check for an error after we finish reading events
This commit is contained in:
@ -162,8 +162,7 @@ func eventsCmd(cmd *cobra.Command, _ []string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
err := registry.ContainerEngine().Events(context.Background(), eventOptions)
|
errChannel <- registry.ContainerEngine().Events(context.Background(), eventOptions)
|
||||||
errChannel <- err
|
|
||||||
}()
|
}()
|
||||||
|
|
||||||
for {
|
for {
|
||||||
@ -171,6 +170,13 @@ func eventsCmd(cmd *cobra.Command, _ []string) error {
|
|||||||
case event, ok := <-eventChannel:
|
case event, ok := <-eventChannel:
|
||||||
if !ok {
|
if !ok {
|
||||||
// channel was closed we can exit
|
// channel was closed we can exit
|
||||||
|
select {
|
||||||
|
case err := <-errChannel:
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
switch {
|
switch {
|
||||||
|
@ -43,7 +43,7 @@ func GetEvents(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
libpodFilters, err := util.FiltersFromRequest(r)
|
libpodFilters, err := util.FiltersFromRequest(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.Error(w, http.StatusBadRequest, fmt.Errorf("failed to parse parameters for %s: %w", r.URL.String(), err))
|
utils.Error(w, http.StatusBadRequest, fmt.Errorf("failed to parse filters for %s: %w", r.URL.String(), err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
eventChannel := make(chan *events.Event)
|
eventChannel := make(chan *events.Event)
|
||||||
@ -68,8 +68,13 @@ func GetEvents(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
w.Header().Set("Content-Type", "application/json")
|
w.Header().Set("Content-Type", "application/json")
|
||||||
w.WriteHeader(http.StatusOK)
|
wroteContent := false
|
||||||
flush()
|
defer func() {
|
||||||
|
if !wroteContent {
|
||||||
|
w.WriteHeader(http.StatusOK)
|
||||||
|
flush()
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
coder := json.NewEncoder(w)
|
coder := json.NewEncoder(w)
|
||||||
coder.SetEscapeHTML(true)
|
coder.SetEscapeHTML(true)
|
||||||
@ -78,8 +83,8 @@ func GetEvents(w http.ResponseWriter, r *http.Request) {
|
|||||||
select {
|
select {
|
||||||
case err := <-errorChannel:
|
case err := <-errorChannel:
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// FIXME StatusOK already sent above cannot send 500 here
|
|
||||||
utils.InternalServerError(w, err)
|
utils.InternalServerError(w, err)
|
||||||
|
wroteContent = true
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
case evt := <-eventChannel:
|
case evt := <-eventChannel:
|
||||||
@ -103,6 +108,7 @@ func GetEvents(w http.ResponseWriter, r *http.Request) {
|
|||||||
if err := coder.Encode(e); err != nil {
|
if err := coder.Encode(e); err != nil {
|
||||||
logrus.Errorf("Unable to write json: %q", err)
|
logrus.Errorf("Unable to write json: %q", err)
|
||||||
}
|
}
|
||||||
|
wroteContent = true
|
||||||
flush()
|
flush()
|
||||||
case <-r.Context().Done():
|
case <-r.Context().Done():
|
||||||
return
|
return
|
||||||
|
@ -42,6 +42,10 @@ func Events(ctx context.Context, eventChan chan types.Event, cancelChan chan boo
|
|||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if response.StatusCode != http.StatusOK {
|
||||||
|
return response.Process(nil)
|
||||||
|
}
|
||||||
|
|
||||||
dec := json.NewDecoder(response.Body)
|
dec := json.NewDecoder(response.Body)
|
||||||
for err = (error)(nil); err == nil; {
|
for err = (error)(nil); err == nil; {
|
||||||
var e = types.Event{}
|
var e = types.Event{}
|
||||||
|
@ -406,3 +406,8 @@ EOF
|
|||||||
run_podman events --since=1m --stream=false --filter volume=${vname:0:5}
|
run_podman events --since=1m --stream=false --filter volume=${vname:0:5}
|
||||||
assert "$output" = "$notrunc_results"
|
assert "$output" = "$notrunc_results"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test "events - invalid filter" {
|
||||||
|
run_podman 125 events --since="the dawn of time...ish"
|
||||||
|
assert "$output" =~ "failed to parse event filters"
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user