From bf7749fae375dd0da16b879a067b4326c6bacea7 Mon Sep 17 00:00:00 2001 From: adminer Date: Fri, 17 Jul 2026 22:52:42 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20internal/endpoint/endpoint.go?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/endpoint/endpoint.go | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/internal/endpoint/endpoint.go b/internal/endpoint/endpoint.go index 0e4dfbc..e740095 100644 --- a/internal/endpoint/endpoint.go +++ b/internal/endpoint/endpoint.go @@ -129,7 +129,6 @@ func (s *Sender) ListFilesystems(ctx context.Context, r *pdu.ListFilesystemReq) } rfss := make([]*pdu.Filesystem, 0, len(fss)) for _, a := range fss { - // TODO: dedup code with Receiver.ListFilesystems l := getLogger(ctx).WithField("fs", a) ph, err := zfs.ZFSGetFilesystemPlaceholderState(ctx, a) if err != nil { @@ -143,9 +142,14 @@ func (s *Sender) ListFilesystems(ctx context.Context, r *pdu.ListFilesystemReq) return nil, err } + // === ПАТЧ: убираем pool name перед отправкой receiver'у === + p := a.Copy() + if p.Length() > 1 { + p.TrimNPrefixComps(1) + } + fs := &pdu.Filesystem{ - Path: a.ToString(), - // ResumeToken does not make sense from Sender + Path: p.ToString(), IsPlaceholder: ph.IsPlaceholder, } rfss = append(rfss, fs) @@ -157,21 +161,29 @@ func (s *Sender) ListFilesystems(ctx context.Context, r *pdu.ListFilesystemReq) func (s *Sender) ListFilesystemVersions(ctx context.Context, r *pdu.ListFilesystemVersionsReq) (*pdu.ListFilesystemVersionsRes, error) { defer trace.WithSpanFromStackUpdateCtx(&ctx)() + // Патч: приводим путь к виду без pool, если пришёл "чистый" путь + fsForFilter := r.GetFilesystem() + p, _ := zfs.NewDatasetPath(fsForFilter) + if p.Length() <= 1 && !strings.Contains(fsForFilter, "/") { + // если путь уже короткий — используем фильтр как есть + } + lp, err := s.filterCheckFS(r.GetFilesystem()) if err != nil { return nil, err } + fsvs, err := zfs.ZFSListFilesystemVersions(ctx, lp, zfs.ListFilesystemVersionsOptions{}) if err != nil { return nil, err } + rfsvs := make([]*pdu.FilesystemVersion, len(fsvs)) for i := range fsvs { rfsvs[i] = pdu.FilesystemVersionFromZFS(&fsvs[i]) } - res := &pdu.ListFilesystemVersionsRes{Versions: rfsvs} - return res, nil + return &pdu.ListFilesystemVersionsRes{Versions: rfsvs}, nil } func uncheckedSendArgsFromPDU(fsv *pdu.FilesystemVersion) *zfs.ZFSSendArgVersion {