-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patherrors.go
More file actions
80 lines (66 loc) · 2.42 KB
/
Copy patherrors.go
File metadata and controls
80 lines (66 loc) · 2.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/*
Copyright 2025 BubuStack.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package sdk
import (
"errors"
"fmt"
"time"
)
// ErrBatchTimeout is a sentinel used with errors.Is to detect batch timeouts.
var ErrBatchTimeout = errors.New("bubu batch execution timed out")
// ErrStoryRunNotFound indicates that a requested StoryRun could not be located.
var ErrStoryRunNotFound = errors.New("storyrun not found")
// ErrImpulseSessionExists indicates that a dispatcher session key is already active.
var ErrImpulseSessionExists = errors.New("impulse session already active")
// ErrImpulseSessionNotFound indicates that a dispatcher session key has no active session.
var ErrImpulseSessionNotFound = errors.New("impulse session not found")
// BatchTimeoutError conveys that a batch engram exceeded its configured timeout.
type BatchTimeoutError struct {
// Timeout is the configured duration limit that was exceeded.
Timeout time.Duration
// Cause is the underlying timeout-related error, when one is available.
Cause error
}
// Error implements the error interface.
func (e *BatchTimeoutError) Error() string {
if e == nil {
return ErrBatchTimeout.Error()
}
if e.Cause != nil {
return fmt.Sprintf("batch execution timed out after %s: %v", e.Timeout, e.Cause)
}
return fmt.Sprintf("batch execution timed out after %s", e.Timeout)
}
// Unwrap exposes the underlying cause for errors.Unwrap / errors.Is checks.
func (e *BatchTimeoutError) Unwrap() error {
if e == nil {
return nil
}
return e.Cause
}
// Is allows errors.Is(err, ErrBatchTimeout) to match *BatchTimeoutError values.
func (e *BatchTimeoutError) Is(target error) bool {
return target == ErrBatchTimeout
}
// BatchExitCode returns the recommended container exit code for an error.
// Timeout errors map to 124 (GNU timeout), all other non-nil errors default to 1.
func BatchExitCode(err error) int {
switch {
case err == nil:
return 0
case errors.Is(err, ErrBatchTimeout):
return 124
default:
return 1
}
}