Skip to content

Commit 194bfd4

Browse files
committed
errors
1 parent 99b6662 commit 194bfd4

5 files changed

Lines changed: 44 additions & 40 deletions

File tree

context.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,9 +150,9 @@ func (fc *frankenPHPContext) clientHasClosed() bool {
150150
}
151151

152152
// reject sends a response with the given status code and message
153-
func (fc *frankenPHPContext) reject(statusCode int, message string) {
153+
func (fc *frankenPHPContext) reject(statusCode int, message string) error {
154154
if fc.isDone {
155-
return
155+
return nil
156156
}
157157

158158
rw := fc.responseWriter
@@ -166,6 +166,8 @@ func (fc *frankenPHPContext) reject(statusCode int, message string) {
166166
}
167167

168168
fc.closeContext()
169+
170+
return ErrMaxTimeExceeded
169171
}
170172

171173
func (fc *frankenPHPContext) rejectBadRequest(message string) {

frankenphp.go

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ var (
5151
ErrRequestContextCreation = errors.New("error during request context creation")
5252
ErrScriptExecution = errors.New("error during PHP script execution")
5353
ErrNotRunning = errors.New("FrankenPHP is not running. For proper configuration visit: https://frankenphp.dev/docs/config/#caddyfile-config")
54+
ErrMaxTimeExceeded = errors.New("max request handling time exceeded")
5455

5556
isRunning bool
5657
onServerShutdown []func()
@@ -66,31 +67,31 @@ var (
6667
type syslogLevel int
6768

6869
const (
69-
emerg syslogLevel = iota // system is unusable
70-
alert // action must be taken immediately
71-
crit // critical conditions
72-
err // error conditions
73-
warning // warning conditions
74-
notice // normal but significant condition
75-
info // informational
76-
debug // debug-level messages
70+
syslogLevelEmerg syslogLevel = iota // system is unusable
71+
syslogLevelAlert // action must be taken immediately
72+
syslogLevelCrit // critical conditions
73+
syslogLevelErr // error conditions
74+
syslogLevelWarn // warning conditions
75+
syslogLevelNotice // normal but significant condition
76+
syslogLevelInfo // informational
77+
syslogLevelDebug // debug-level messages
7778
)
7879

7980
func (l syslogLevel) String() string {
8081
switch l {
81-
case emerg:
82+
case syslogLevelEmerg:
8283
return "emerg"
83-
case alert:
84+
case syslogLevelAlert:
8485
return "alert"
85-
case crit:
86+
case syslogLevelCrit:
8687
return "crit"
87-
case err:
88+
case syslogLevelErr:
8889
return "err"
89-
case warning:
90+
case syslogLevelWarn:
9091
return "warning"
91-
case notice:
92+
case syslogLevelNotice:
9293
return "notice"
93-
case debug:
94+
case syslogLevelDebug:
9495
return "debug"
9596
default:
9697
return "info"
@@ -337,14 +338,11 @@ func ServeHTTP(responseWriter http.ResponseWriter, request *http.Request) error
337338

338339
// Detect if a worker is available to handle this request
339340
if fc.worker != nil {
340-
fc.worker.handleRequest(fc)
341-
342-
return nil
341+
return fc.worker.handleRequest(fc)
343342
}
344343

345344
// If no worker was available, send the request to non-worker threads
346-
handleRequestWithRegularPHPThreads(fc)
347-
return nil
345+
return handleRequestWithRegularPHPThreads(fc)
348346
}
349347

350348
//export go_ub_write
@@ -561,19 +559,19 @@ func go_log(message *C.char, level C.int) {
561559
m := C.GoString(message)
562560

563561
var le syslogLevel
564-
if level < C.int(emerg) || level > C.int(debug) {
565-
le = info
562+
if level < C.int(syslogLevelEmerg) || level > C.int(syslogLevelDebug) {
563+
le = syslogLevelInfo
566564
} else {
567565
le = syslogLevel(level)
568566
}
569567

570568
switch le {
571-
case emerg, alert, crit, err:
569+
case syslogLevelEmerg, syslogLevelAlert, syslogLevelCrit, syslogLevelErr:
572570
logger.LogAttrs(context.Background(), slog.LevelError, m, slog.String("syslog_level", syslogLevel(level).String()))
573571

574-
case warning:
572+
case syslogLevelWarn:
575573
logger.LogAttrs(context.Background(), slog.LevelWarn, m, slog.String("syslog_level", syslogLevel(level).String()))
576-
case debug:
574+
case syslogLevelDebug:
577575
logger.LogAttrs(context.Background(), slog.LevelDebug, m, slog.String("syslog_level", syslogLevel(level).String()))
578576

579577
default:

threadregular.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,15 @@ func (handler *regularThread) afterRequest() {
8484
handler.requestContext = nil
8585
}
8686

87-
func handleRequestWithRegularPHPThreads(fc *frankenPHPContext) {
87+
func handleRequestWithRegularPHPThreads(fc *frankenPHPContext) error {
8888
metrics.StartRequest()
8989
select {
9090
case regularRequestChan <- fc:
9191
// a thread was available to handle the request immediately
9292
<-fc.done
9393
metrics.StopRequest()
94-
return
94+
95+
return nil
9596
default:
9697
// no thread was available
9798
}
@@ -104,14 +105,15 @@ func handleRequestWithRegularPHPThreads(fc *frankenPHPContext) {
104105
metrics.DequeuedRequest()
105106
<-fc.done
106107
metrics.StopRequest()
107-
return
108+
109+
return nil
108110
case scaleChan <- fc:
109111
// the request has triggered scaling, continue to wait for a thread
110112
case <-timeoutChan(maxWaitTime):
111113
// the request has timed out stalling
112114
metrics.DequeuedRequest()
113-
fc.reject(504, "Gateway Timeout")
114-
return
115+
116+
return fc.reject(504, "Gateway Timeout")
115117
}
116118
}
117119
}

worker.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ func (worker *worker) countThreads() int {
223223
return l
224224
}
225225

226-
func (worker *worker) handleRequest(fc *frankenPHPContext) {
226+
func (worker *worker) handleRequest(fc *frankenPHPContext) error {
227227
metrics.StartWorkerRequest(worker.name)
228228

229229
// dispatch requests to all worker threads in order
@@ -234,7 +234,8 @@ func (worker *worker) handleRequest(fc *frankenPHPContext) {
234234
worker.threadMutex.RUnlock()
235235
<-fc.done
236236
metrics.StopWorkerRequest(worker.name, time.Since(fc.startedAt))
237-
return
237+
238+
return nil
238239
default:
239240
// thread is busy, continue
240241
}
@@ -249,14 +250,15 @@ func (worker *worker) handleRequest(fc *frankenPHPContext) {
249250
metrics.DequeuedWorkerRequest(worker.name)
250251
<-fc.done
251252
metrics.StopWorkerRequest(worker.name, time.Since(fc.startedAt))
252-
return
253+
254+
return nil
253255
case scaleChan <- fc:
254256
// the request has triggered scaling, continue to wait for a thread
255257
case <-timeoutChan(maxWaitTime):
256-
metrics.DequeuedWorkerRequest(worker.name)
257258
// the request has timed out stalling
258-
fc.reject(504, "Gateway Timeout")
259-
return
259+
metrics.DequeuedWorkerRequest(worker.name)
260+
261+
return fc.reject(504, "Gateway Timeout")
260262
}
261263
}
262264
}

workerextension.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func (w *extensionWorkers) SendMessage(message any, rw http.ResponseWriter) (any
5050
fc.responseWriter = rw
5151
fc.handlerParameters = message
5252

53-
w.internalWorker.handleRequest(fc)
53+
err := w.internalWorker.handleRequest(fc)
5454

55-
return fc.handlerReturn, nil
55+
return fc.handlerReturn, err
5656
}

0 commit comments

Comments
 (0)