carlos / platform Public

Clone
git clone https://amadan.net/carlos/platform

Plain git — no account needed to clone.

Download

Download this file

1package host
2
3import (
4 "context"
5 "github.com/carlosframework/platform/internal/hostguard"
6 "github.com/carlosframework/platform/internal/stopevidence"
7)
8
9// Preserve root's optional observation contracts when isolated launch wraps
10// the stop kernel. Unit absence is checked before and after the inner kernel scan.
11func (k claimUnitStopKernel) VerifyWritersStopped(ctx context.Context, t hostguard.FenceTarget, inv StopInventory, peer StopPeer, hints []stopevidence.DescriptorHint) (WritersKernelEvidence, error) {
12 inner, ok := k.Inner.(stopWritersKernel)
13 if !ok || k.Journal == nil || k.Units == nil {
14 return WritersKernelEvidence{}, ErrClaimStopUnavailable
15 }
16 in, err := k.Journal.Read(ctx, t)
17 if err != nil {
18 return WritersKernelEvidence{}, err
19 }
20 if !in.WritersClosed {
21 return WritersKernelEvidence{}, ErrClaimStopInventory
22 }
23 if err := k.Units.Gone(ctx, t.Host, ""); err != nil {
24 return WritersKernelEvidence{}, err
25 }
26 if _, err := k.settleUnits(ctx, t); err != nil {
27 return WritersKernelEvidence{}, err
28 }
29 seen, err := inner.VerifyWritersStopped(ctx, t, inv, peer, hints)
30 if err != nil {
31 return WritersKernelEvidence{}, err
32 }
33 if err := k.Units.Gone(ctx, t.Host, ""); err != nil {
34 return WritersKernelEvidence{}, err
35 }
36 return seen, nil
37}
38
39func (k claimUnitStopKernel) VerifyNoProcess(ctx context.Context, t hostguard.FenceTarget, inv StopInventory) (StopKernelEvidence, error) {
40 inner, ok := k.Inner.(stopNoProcessKernel)
41 if !ok || k.Units == nil || t.Session != 0 {
42 return StopKernelEvidence{}, ErrClaimStopUnavailable
43 }
44 if err := k.Units.Gone(ctx, t.Host, ""); err != nil {
45 return StopKernelEvidence{}, err
46 }
47 return inner.VerifyNoProcess(ctx, t, inv)
48}
49