Lỗi môi trường chạy và hỗ trợ
Phạm vi
Phần tiêu đề “Phạm vi”Các mục này lập tài liệu cho các ngoại lệ được nêu ra bởi lớp hỗ trợ môi trường chạy: chính sách suy giảm, truyền tải HTTP dựa-trên-cURL, circuit breaker khả-năng-phục-hồi, bộ phát Security Information and Event Management (SIEM), render manifest, kiểm tra PDF, và hệ thống con kỹ thuật chaos.
Mọi ngoại lệ NextPDF đều mở rộng NextPdfException, vốn hiện thực
ContextAwareExceptionInterface và phơi bày getContext(): array cho việc
ghi nhật ký chẩn đoán có cấu trúc. Một lớp con điền mảng đó chỉ khi nó
ghi đè getContext(); lớp cơ sở trả về một mảng rỗng. Ba ngoại lệ trên
trang này (DegradedException, CircuitBreakerOpenException, và InspectException) mở rộng
trực tiếp RuntimeException của PHP và phơi bày dữ liệu của chúng qua các thuộc tính
công khai readonly thay vì getContext(). Mỗi mục bên dưới nêu tên chính xác các
thuộc tính hoặc khóa context mà lớp mang theo, lấy từ mã nguồn.
Chính sách suy giảm
Phần tiêu đề “Chính sách suy giảm”DegradedException
Phần tiêu đề “DegradedException”- Được ném khi. Quy trình kết xuất gặp một năng lực bị suy giảm
vi phạm chính sách suy giảm đang hoạt động. Dưới
DegradationPolicy::Strict, bất kỳ suy giảm có tác động cao nào (ComplianceRisk,SemanticLoss, hoặcBlocking) đều nêu nó ra; dướiDegradationPolicy::Balanced, chỉ một tác độngBlockingmới nêu nó ra. - Lớp. Mở rộng trực tiếp
RuntimeException(không phảiNextPdfException), nên nó không manggetContext(). - Dữ liệu mang theo. Hai thuộc tính công khai
readonly:$capability(đối tượng giá trịCapabilityđã kích hoạt việc từ chối, bao gồmid,status,reason,fallbackTarget, vàimpactcủa nó) và$policy(chính sáchDegradationPolicyđang hoạt động tại thời điểm từ chối). Thông báo có dạngFeature "<id>" is <status>: <reason> (policy: <policy>). - Khôi phục. Kiểm tra
$capabilityđể xác định tính năng còn thiếu và nguyên nhân của nó. Hoặc cài đặt thành phần mà năng lực yêu cầu, chấp nhận một cấu hình tác-động-thấp-hơn, hoặc nới chính sách từStrictvềBalancedkhi suy giảm là chấp nhận được cho trường hợp dùng. Gọi$capability->isAvailable()/isDegraded()để điều khiển thông điệp hướng tới người dùng.
Truyền tải HTTP
Phần tiêu đề “Truyền tải HTTP”Ba ngoại lệ này bắt nguồn từ ứng dụng khách PSR-18 dựa-trên-cURL và bộ trang trí
nhận-biết-bảo-mật của nó. Hai cái đầu mở rộng NextPdfException nhưng không
ghi đè getContext(), nên getContext() của chúng trả về một mảng rỗng;
dữ liệu chẩn đoán được với tới qua accessor PSR-18 getRequest() và
throwable trước trong chuỗi.
CurlNetworkException
Phần tiêu đề “CurlNetworkException”- Được ném khi. Yêu cầu HTTP không thể hoàn tất vì một lỗi cấp-mạng: lỗi phân giải Domain Name System (DNS), timeout kết nối, hoặc lỗi handshake Transport Layer Security (TLS). Nó cũng là lớp mà bộ trang trí nhận-biết-bảo-mật nêu ra cho một từ chối bảo mật (từ chối Server-Side Request Forgery, từ chối DNS-rebinding, hoặc một redirect bị từ chối).
- Lớp. Hiện thực PSR-18
Psr\Http\Client\NetworkExceptionInterface. - Dữ liệu mang theo.
getRequest()trả vềRequestInterfacethất bại. Lỗi truyền tải bắt nguồn, khi có, là throwable trước trong chuỗi.getContext()trả về một mảng rỗng (mặc định cơ sở). - Khôi phục. Một lỗi mạng có thể là nhất thời — thử lại với backoff nếu yêu cầu là idempotent. Một từ chối bảo mật không nhất thời và phải thất bại theo hướng đóng: đừng thử lại; thay vào đó sửa URL đích hoặc chính sách SSRF. Đọc thông báo và throwable trước để phân biệt hai cái.
CurlRequestException
Phần tiêu đề “CurlRequestException”- Được ném khi. Bản thân yêu cầu không thể được gửi vì nó bị hỏng khuôn, ví dụ một URL không hợp lệ hoặc một yêu cầu thất bại ở xác thực SSRF trước bất kỳ lệnh gọi mạng nào.
- Lớp. Hiện thực PSR-18
Psr\Http\Client\RequestExceptionInterface. - Dữ liệu mang theo.
getRequest()trả vềRequestInterfacegây lỗi; nguyên nhân nền, khi có, là throwable trước trong chuỗi.getContext()trả về một mảng rỗng. - Khôi phục. Đây là một lỗi đầu-vào-của-caller hoặc lỗi chính sách, không phải một lỗi nhất thời. Đừng thử lại khi chưa thay đổi. Sửa URL yêu cầu, header, hoặc thân, hoặc điều chỉnh allowlist SSRF nếu đích được phép một cách chính đáng, rồi phát lại yêu cầu.
TransientHttpException
Phần tiêu đề “TransientHttpException”- Được ném khi. Nội bộ, bên trong
SecurityAwareHttpClient, để đánh dấu một lỗi truyền-tải-trong nhất thời thực sự (DNS, kết nối, hoặc timeout được nêu bởi ứng dụng khách PSR-18 bên trong) là đủ điều kiện cho ngân sách thử lại có giới hạn. Nó là lớp đủ-điều-kiện-thử-lại duy nhất mà vòng lặp thử-lại của bộ trang trí nhận diện; một ngoại lệ không-bọc (một từ chối bảo mật do bộ trang trí nêu) được coi là chí mạng. - Lớp. Hiện thực PSR-18
Psr\Http\Client\NetworkExceptionInterface. Đánh dấu@internal— nó được tạo và mở-bọc hoàn toàn trongSecurityAwareHttpClientvà không bao giờ lọt khỏi bộ trang trí. - Dữ liệu mang theo.
getRequest()trả về yêu cầu thất bại.ClientExceptionInterfacetruyền-tải-trong gốc được giữ là throwable trước trong chuỗi (getPrevious()) và được phơi bày lại nguyên văn cho caller một khi ngân sách thử lại cạn kiệt, nên hợp đồng PSR-18 công khai không đổi.getContext()trả về một mảng rỗng. - Khôi phục. Mã ứng dụng không bắt kiểu này trực tiếp. Bắt ngoại lệ bên trong được phơi-bày-lại mà bộ trang trí trả về sau khi ngân sách thử-lại cạn kiệt, và coi các lỗi nhất thời lặp lại là một vấn đề về tính sẵn sàng phía thượng nguồn.
Khả năng phục hồi
Phần tiêu đề “Khả năng phục hồi”CircuitBreakerOpenException
Phần tiêu đề “CircuitBreakerOpenException”- Được ném khi. Một
CircuitBreakerở trạng tháiCircuitBreakerState::Opentừ chối một lệnh gọi theo kiểu fail-fast, trước bất kỳ lệnh gọi hạ nguồn nào. Nó tồn tại để cho phép các caller phân biệt “dịch vụ từ xa hiện không thể tiếp cận” (một lỗi truyền tải nhất thời, đáng suy giảm) với “connection pool sẽ bị cạn kiệt bởi lệnh gọi này” (fail-fast, không có mạng nào được thử) — biện pháp giảm thiểu từ-chối-dịch-vụ theo lô cần thiết cho các ứng dụng khách Public Key Infrastructure (PKI). - Lớp. Mở rộng trực tiếp
RuntimeException, nên nó không manggetContext(). - Dữ liệu mang theo. Hai thuộc tính công khai
readonly:$breakerName(định danh của breaker đang mở) và$secondsUntilHalfOpen(thời gian cooldown gần đúng còn lại trước khi breaker chuyển sang half-open). Thông báo có dạngCircuit breaker "<name>" is OPEN (cooldown ~<n>s remaining); call rejected fail-fast. - Khôi phục. Đừng dồn dập gọi breaker — chờ ít nhất
$secondsUntilHalfOpentrước khi thử lại, hoặc suy giảm thao tác. Không lệnh gọi mạng nào được thử, nên đây không phải là bằng chứng rằng dịch vụ từ xa tự nó thất bại; nó là back-pressure bảo vệ connection pool.
Khả năng quan sát
Phần tiêu đề “Khả năng quan sát”SiemEmitterException
Phần tiêu đề “SiemEmitterException”- Được ném khi. Một bộ phát sự kiện SIEM không thể lưu hoặc móc xích một bản ghi. Nó
phơi bày các lỗi cấp-hệ-thống-tệp (
open,lock,seek,write,fflush,read) và các lỗi toàn vẹn hash-chain (chain: chỉ mục sai thứ tự, bản ghi đuôi hỏng khuôn, hoặc lệch round-trip JSON) chia sẻ giữa log sự kiện hash-chain và các adapter bộ phát tệp JSON-lines. - Lớp. Mở rộng
NextPdfExceptionvà ghi đègetContext(). - Khóa context.
operation(một trongopen,lock,seek,write,fflush,read,chain),path(đường dẫn log đích), vàdetail(một chi tiết dễ đọc cho con người như số byte hoặc chỉ-mục-mong-đợi-so-với-thực-tế). Những thứ này cũng được với tới quagetOperation(),getPath(), vàgetDetail(). Thông báo có dạngSIEM emitter <operation> failed for <path>: <detail>. - Khôi phục. Đây là việc có thể hành động bởi hạ tầng hoặc SecOps, không phải bởi
logic ứng dụng. Kiểm tra mount của log-volume, quyền thư mục,
các file descriptor khả dụng, và sức khỏe hệ thống tệp. Một lỗi thao tác
chaincho thấy một tín hiệu giả mạo hoặc hỏng trong log audit và nên được điều tra, không âm thầm thử lại.
Manifest kết xuất
Phần tiêu đề “Manifest kết xuất”RenderManifestException
Phần tiêu đề “RenderManifestException”- Được ném khi. Một
RenderManifestkhông thể được dựng, giải-tuần-tự-hóa, hoặc đọc vì một lỗi cấu trúc, kiểu, hoặc tương-thích-schema. Manifest là một hợp đồng công khai được đánh phiên bản do mọi truyền tải gửi (CLI, hàng đợi Laravel, Symfony, API SaaS), nên một manifest hỏng khuôn hoặc không tương thích được phơi bày trực tiếp thay vì bị ép về mặc định. - Lớp. Mở rộng
NextPdfExceptionvà ghi đègetContext(). Các constructor có tên đặt một mã ổn định, máy đọc được trong không gian tênSPEC-MANIFEST-*:RenderManifestException::shape()→SPEC-MANIFEST-001— lỗi hình dạng hoặc kiểu trongRenderManifest::fromArray().RenderManifestException::incompatibleVersion()→SPEC-MANIFEST-002— phiên bản schema chính không tương thích (không thể được đọc).RenderManifestException::missingField()→SPEC-MANIFEST-003— thiếu một trường bắt buộc trong khi hoàn tất builder.RenderManifestException::unsupported()→SPEC-MANIFEST-004— một manifest hợp khuôn tham chiếu một đầu vào hoặc template mà trình kết xuất hiện tại không thể phân giải (ví dụ một đầu vào URI hoặc một engine template chỉ-chạy-trên-host).
- Khóa context.
manifest_code(định danhSPEC-MANIFEST-*) vàreason(mô tả lỗi dễ đọc cho con người). Những thứ này cũng được với tới quagetManifestCode()vàgetReason(). Thông báo có dạng[<code>] <reason>. - Khôi phục. Rẽ nhánh theo
manifest_code. VớiSPEC-MANIFEST-001vàSPEC-MANIFEST-003, sửa payload manifest (sửa kiểu trường hoặc cung cấp trường còn thiếu). VớiSPEC-MANIFEST-002, tạo lại manifest đối với một phiên bản schema chính được hỗ trợ hoặc nâng cấp trình kết xuất. VớiSPEC-MANIFEST-004, cung cấp một đầu vào hoặc engine template mà phiên bản hiện tại có thể phân giải.
Kiểm tra
Phần tiêu đề “Kiểm tra”InspectException
Phần tiêu đề “InspectException”- Được ném khi. Kiểm tra PDF thất bại.
- Lớp. Mở rộng trực tiếp
RuntimeException(không phảiNextPdfException), nên nó không manggetContext(). - Dữ liệu mang theo. Hai thuộc tính công khai
readonly:$inspectCode(một mã máy đọc được trong không gian tênINSPECT-*) và$retryable(một boolean cho biết caller có nên thử lại — ví dụ khi một sidecar kiểm tra tạm thời ngừng). Nguyên nhân bắt nguồn, khi có, là throwable trước trong chuỗi. - Khôi phục. Rẽ nhánh theo
$inspectCodecho lớp lỗi cụ thể. Khi$retryablelàtrue, thử lại với backoff vì lỗi được kỳ vọng là nhất thời (chẳng hạn một lần khởi động lại sidecar); khifalse, coi đầu vào hoặc cấu hình là khiếm khuyết và đừng thử lại khi chưa thay đổi.
Kỹ thuật chaos
Phần tiêu đề “Kỹ thuật chaos”ChaosReportWriteException
Phần tiêu đề “ChaosReportWriteException”- Được ném khi.
ChaosScenarioRunner::writeReport()không thể lưu báo cáo chaos-day tổng hợp xuống đĩa. Nó là một thay thế có-kiểu-theo-lĩnh-vực cho một lỗi môi-trường-chạy chung, nên các caller có thể bắt lỗi đĩa-báo-cáo cụ thể mà không lẫn nó với các lỗi được nêu bên trong các bộ mô phỏng kịch bản (runner ghi lại những lỗi đó dưới dạng các trườngChaosOutcome). - Lớp. Mở rộng
NextPdfExceptionvà ghi đègetContext(). - Khóa context.
output_path(đường dẫn tuyệt đối mà runner đã cố ghi). Nó cũng được với tới quagetOutputPath(). Thông báo có dạngChaosScenarioRunner: failed to write report to "<path>". - Khôi phục. Đây là một lỗi phía-ghi của sink báo cáo, không phải của các kịch bản. Kiểm tra thư mục output tồn tại và ghi được và rằng dung lượng đĩa có sẵn, rồi chạy lại lần ghi báo cáo. Bản thân các kết quả chaos không bị ảnh hưởng.
RetrievalUnavailableException
Phần tiêu đề “RetrievalUnavailableException”- Được ném khi. Một điểm cuối truy xuất (ví dụ một dịch vụ Voyage Retrieval Augmented Generation) không có sẵn và hệ thống hoặc dự phòng về chế độ chỉ-cache hoặc thất bại theo hướng đóng.
- Lớp. Mở rộng
NextPdfExceptionvà ghi đègetContext(). - Khóa context.
mode(chế độ vận hành sau lỗi —CACHED_ONLYkhi kết quả được phục vụ chỉ từ cache ngữ nghĩa, hoặcFAIL_CLOSEDkhi yêu cầu bị từ chối hoàn toàn không có dữ liệu cũ) vàendpoint(điểm cuối đã trở nên không thể tiếp cận). Những thứ này cũng được với tới quagetMode()vàgetEndpoint(). Thông báo có dạngRetrieval endpoint "<endpoint>" is unavailable; operating in <mode> mode. - Khôi phục. Đọc
modeđể biết hệ thống đã suy giảm thế nào. DướiCACHED_ONLY, kết quả có thể cũ; làm mới một khi điểm cuối khôi phục. DướiFAIL_CLOSED, yêu cầu đã bị từ chối theo thiết kế và phải được thử lại sau khi điểm cuối có thể tiếp cận. Khôi phục kết nối tới điểm cuối (mạng, thông tin xác thực, sức khỏe dịch vụ) trước khi phụ thuộc vào truy xuất tươi.