From 7ea5147df90875dbc18ba3df55ca0378bd305098 Mon Sep 17 00:00:00 2001 From: Seongmin Lee Date: Mon, 13 Apr 2026 09:00:48 +0900 Subject: [PATCH] appview: add more logs to debug knot xrpc failure Signed-off-by: Seongmin Lee --- appview/pulls/pulls.go | 40 ++++++++++++++++++++++------------------ appview/repo/artifact.go | 2 +- appview/repo/blob.go | 2 +- appview/repo/branches.go | 14 ++++++-------- appview/repo/compare.go | 10 +++++----- appview/repo/log.go | 4 ++-- appview/repo/repo.go | 15 +++++++++------ appview/repo/settings.go | 12 ++++++------ appview/repo/tags.go | 3 ++- appview/repo/tree.go | 2 +- appview/state/state.go | 6 +++--- 11 files changed, 58 insertions(+), 52 deletions(-) diff --git a/appview/pulls/pulls.go b/appview/pulls/pulls.go index 04392bf9..0485965b 100644 --- a/appview/pulls/pulls.go +++ b/appview/pulls/pulls.go @@ -345,7 +345,7 @@ func (s *Pulls) mergeCheck(r *http.Request, f *models.Repo, pull *models.Pull, s // combine each patch patch := mergeable.CombinedPatch() - resp, xe := tangled.RepoMergeCheck( + resp, err := tangled.RepoMergeCheck( r.Context(), &xrpcc, &tangled.RepoMergeCheck_Input{ @@ -355,10 +355,10 @@ func (s *Pulls) mergeCheck(r *http.Request, f *models.Repo, pull *models.Pull, s Patch: patch, }, ) - if err := xrpcclient.HandleXrpcErr(xe); err != nil { - s.logger.Error("failed to check for mergeability", "err", err, "pull_id", pull.PullId, "target_branch", pull.TargetBranch) + if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { + s.logger.Error("failed to check for mergeability", "xrpcerr", xrpcerr, "err", err, "pull_id", pull.PullId, "target_branch", pull.TargetBranch) return types.MergeCheckResponse{ - Error: fmt.Sprintf("failed to check merge status: %s", err.Error()), + Error: fmt.Sprintf("failed to check merge status: %s", xrpcerr.Error()), } } @@ -423,6 +423,7 @@ func (s *Pulls) branchDeleteStatus(r *http.Request, repo *models.Repo, pull *mod xrpcc := &indigoxrpc.Client{Host: s.config.KnotMirror.Url} resp, err := tangled.GitTempGetBranch(r.Context(), xrpcc, branch, repo.RepoAt().String()) if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { + s.logger.Error("failed to get branch", "xrpcerr", xrpcerr, "err", err) return nil } @@ -448,7 +449,7 @@ func (s *Pulls) resubmitCheck(r *http.Request, repo *models.Repo, pull *models.P branchResp, err := tangled.GitTempGetBranch(r.Context(), xrpcc, pull.PullSource.Branch, sourceRepo.String()) if err != nil { if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { - s.logger.Error("failed to call XRPC repo.branches", "err", xrpcerr, "pull_id", pull.PullId, "branch", pull.PullSource.Branch) + s.logger.Error("failed to call XRPC repo.branches", "xrpcerr", xrpcerr, "err", err, "pull_id", pull.PullId, "branch", pull.PullSource.Branch) return pages.Unknown } s.logger.Error("failed to reach knotserver", "err", err, "pull_id", pull.PullId) @@ -934,7 +935,7 @@ func (s *Pulls) NewPull(w http.ResponseWriter, r *http.Request) { xrpcBytes, err := tangled.GitTempListBranches(r.Context(), xrpcc, "", 0, f.RepoAt().String()) if err != nil { if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { - l.Error("failed to call XRPC repo.branches", "err", xrpcerr) + l.Error("failed to call XRPC repo.branches", "xrpcerr", xrpcerr, "err", err) s.pages.Error503(w) return } @@ -1101,7 +1102,7 @@ func (s *Pulls) handleBranchBasedPull( xrpcBytes, err := tangled.RepoCompare(r.Context(), xrpcc, repo.RepoIdentifier(), targetBranch, sourceBranch) if err != nil { if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { - l.Error("failed to call XRPC repo.compare", "err", xrpcerr) + l.Error("failed to call XRPC repo.compare", "xrpcerr", xrpcerr, "err", err) s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.") return } @@ -1179,8 +1180,9 @@ func (s *Pulls) handleForkBasedPull(w http.ResponseWriter, r *http.Request, repo Repo: fork.RepoAt().String(), }, ) - if err := xrpcclient.HandleXrpcErr(err); err != nil { - s.pages.Notice(w, "pull", err.Error()) + if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { + s.logger.Error("failed to set hidden ref", "xrpcerr", xrpcerr, "err", err) + s.pages.Notice(w, "pull", xrpcerr.Error()) return } @@ -1211,7 +1213,7 @@ func (s *Pulls) handleForkBasedPull(w http.ResponseWriter, r *http.Request, repo forkXrpcBytes, err := tangled.RepoCompare(r.Context(), forkXrpcc, fork.RepoIdentifier(), hiddenRef, sourceBranch) if err != nil { if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { - l.Error("failed to call XRPC repo.compare for fork", "err", xrpcerr, "hidden_ref", hiddenRef) + l.Error("failed to call XRPC repo.compare for fork", "xrpcerr", xrpcerr, "err", err, "hidden_ref", hiddenRef) s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.") return } @@ -1665,7 +1667,7 @@ func (s *Pulls) CompareForksBranchesFragment(w http.ResponseWriter, r *http.Requ sourceXrpcBytes, err := tangled.GitTempListBranches(r.Context(), xrpcc, "", 0, repo.RepoAt().String()) if err != nil { if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { - l.Error("failed to call XRPC repo.branches for source", "err", xrpcerr) + l.Error("failed to call XRPC repo.branches for source", "xrpcerr", xrpcerr, "err", err) s.pages.Error503(w) return } @@ -1684,7 +1686,7 @@ func (s *Pulls) CompareForksBranchesFragment(w http.ResponseWriter, r *http.Requ targetXrpcBytes, err := tangled.GitTempListBranches(r.Context(), xrpcc, "", 0, f.RepoAt().String()) if err != nil { if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { - l.Error("failed to call XRPC repo.branches for target", "err", xrpcerr) + l.Error("failed to call XRPC repo.branches for target", "xrpcerr", xrpcerr, "err", err) s.pages.Error503(w) return } @@ -1828,7 +1830,7 @@ func (s *Pulls) resubmitBranch(w http.ResponseWriter, r *http.Request) { xrpcBytes, err := tangled.RepoCompare(r.Context(), xrpcc, f.RepoIdentifier(), pull.TargetBranch, pull.PullSource.Branch) if err != nil { if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { - l.Error("failed to call XRPC repo.compare", "err", xrpcerr, "source_branch", pull.PullSource.Branch) + l.Error("failed to call XRPC repo.compare", "xrpcerr", xrpcerr, "err", err, "source_branch", pull.PullSource.Branch) s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.") return } @@ -1907,8 +1909,9 @@ func (s *Pulls) resubmitFork(w http.ResponseWriter, r *http.Request) { Repo: forkRepo.RepoAt().String(), }, ) - if err := xrpcclient.HandleXrpcErr(err); err != nil { - s.pages.Notice(w, "resubmit-error", err.Error()) + if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { + s.logger.Error("failed to set hidden ref", "xrpcerr", xrpcerr, "err", err) + s.pages.Notice(w, "resubmit-error", xrpcerr.Error()) return } if !resp.Success { @@ -1927,7 +1930,7 @@ func (s *Pulls) resubmitFork(w http.ResponseWriter, r *http.Request) { forkXrpcBytes, err := tangled.RepoCompare(r.Context(), &indigoxrpc.Client{Host: forkHost}, forkRepo.RepoIdentifier(), hiddenRef, pull.PullSource.Branch) if err != nil { if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { - l.Error("failed to call XRPC repo.compare for fork", "err", xrpcerr, "hidden_ref", hiddenRef, "source_branch", pull.PullSource.Branch) + l.Error("failed to call XRPC repo.compare for fork", "xrpcerr", xrpcerr, "err", err, "hidden_ref", hiddenRef, "source_branch", pull.PullSource.Branch) s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.") return } @@ -2390,8 +2393,9 @@ func (s *Pulls) MergePull(w http.ResponseWriter, r *http.Request) { } err = tangled.RepoMerge(r.Context(), client, mergeInput) - if err := xrpcclient.HandleXrpcErr(err); err != nil { - s.pages.Notice(w, "pull-merge-error", err.Error()) + if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { + s.logger.Error("failed to merge", "xrpcerr", xrpcerr, "err", err) + s.pages.Notice(w, "pull-merge-error", xrpcerr.Error()) return } diff --git a/appview/repo/artifact.go b/appview/repo/artifact.go index d721046f..9ee08a7b 100644 --- a/appview/repo/artifact.go +++ b/appview/repo/artifact.go @@ -312,7 +312,7 @@ func (rp *Repo) resolveTag(ctx context.Context, f *models.Repo, tagParam string) xrpcBytes, err := tangled.GitTempListTags(ctx, xrpcc, "", 0, f.RepoAt().String()) if err != nil { if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { - l.Error("failed to call XRPC repo.tags", "err", xrpcerr) + l.Error("failed to call XRPC repo.tags", "xrpcerr", xrpcerr, "err", err) return nil, xrpcerr } l.Error("failed to reach knotserver", "err", err) diff --git a/appview/repo/blob.go b/appview/repo/blob.go index 79ddefb4..77df88da 100644 --- a/appview/repo/blob.go +++ b/appview/repo/blob.go @@ -61,7 +61,7 @@ func (rp *Repo) Blob(w http.ResponseWriter, r *http.Request) { } resp, err := tangled.RepoBlob(r.Context(), xrpcc, filePath, false, ref, f.RepoIdentifier()) if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { - l.Error("failed to call XRPC repo.blob", "err", xrpcerr) + l.Error("failed to call XRPC repo.blob", "xrpcerr", xrpcerr, "err", err) rp.pages.Error503(w) return } diff --git a/appview/repo/branches.go b/appview/repo/branches.go index 25d53c9d..82e27726 100644 --- a/appview/repo/branches.go +++ b/appview/repo/branches.go @@ -52,13 +52,9 @@ func (rp *Repo) DeleteBranch(w http.ResponseWriter, r *http.Request) { return } noticeId := "delete-branch-error" - fail := func(msg string, err error) { - l.Error(msg, "err", err) - rp.pages.Notice(w, noticeId, msg) - } branch := r.FormValue("branch") if branch == "" { - fail("No branch provided.", nil) + rp.pages.Notice(w, noticeId, "No branch provided.") return } client, err := rp.oauth.ServiceClient( @@ -68,7 +64,8 @@ func (rp *Repo) DeleteBranch(w http.ResponseWriter, r *http.Request) { oauth.WithDev(rp.config.Core.Dev), ) if err != nil { - fail("Failed to connect to knotserver", nil) + l.Warn("Failed to connect to knotserver", "err", err) + rp.pages.Notice(w, noticeId, "Failed to connect to knotserver") return } err = tangled.RepoDeleteBranch( @@ -79,8 +76,9 @@ func (rp *Repo) DeleteBranch(w http.ResponseWriter, r *http.Request) { Repo: f.RepoAt().String(), }, ) - if err := xrpcclient.HandleXrpcErr(err); err != nil { - fail(fmt.Sprintf("Failed to delete branch: %s", err), err) + if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { + l.Error("Faield to delete branch", "xrpcerr", xrpcerr, "err", err) + rp.pages.Notice(w, noticeId, fmt.Sprintf("Failed to delete branch: %s", xrpcerr)) return } l.Error("deleted branch from knot", "branch", branch, "repo", f.RepoAt()) diff --git a/appview/repo/compare.go b/appview/repo/compare.go index ceee5e59..9f8bf4f5 100644 --- a/appview/repo/compare.go +++ b/appview/repo/compare.go @@ -31,7 +31,7 @@ func (rp *Repo) CompareNew(w http.ResponseWriter, r *http.Request) { branchBytes, err := tangled.GitTempListBranches(r.Context(), xrpcc, "", 0, f.RepoAt().String()) if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { - l.Error("failed to call XRPC repo.branches", "err", xrpcerr) + l.Error("failed to call XRPC repo.branches", "xrpcerr", xrpcerr, "err", err) rp.pages.Error503(w) return } @@ -68,7 +68,7 @@ func (rp *Repo) CompareNew(w http.ResponseWriter, r *http.Request) { tagBytes, err := tangled.GitTempListTags(r.Context(), xrpcc, "", 0, f.RepoAt().String()) if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { - l.Error("failed to call XRPC repo.tags", "err", xrpcerr) + l.Error("failed to call XRPC repo.tags", "xrpcerr", xrpcerr, "err", err) rp.pages.Error503(w) return } @@ -145,7 +145,7 @@ func (rp *Repo) Compare(w http.ResponseWriter, r *http.Request) { branchBytes, err := tangled.RepoBranches(r.Context(), xrpcc, "", 0, repoId) if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { - l.Error("failed to call XRPC repo.branches", "err", xrpcerr) + l.Error("failed to call XRPC repo.branches", "xrpcerr", xrpcerr, "err", err) rp.pages.Error503(w) return } @@ -159,7 +159,7 @@ func (rp *Repo) Compare(w http.ResponseWriter, r *http.Request) { tagBytes, err := tangled.RepoTags(r.Context(), xrpcc, "", 0, repoId) if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { - l.Error("failed to call XRPC repo.tags", "err", xrpcerr) + l.Error("failed to call XRPC repo.tags", "xrpcerr", xrpcerr, "err", err) rp.pages.Error503(w) return } @@ -173,7 +173,7 @@ func (rp *Repo) Compare(w http.ResponseWriter, r *http.Request) { compareBytes, err := tangled.RepoCompare(r.Context(), xrpcc, repoId, base, head) if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { - l.Error("failed to call XRPC repo.compare", "err", xrpcerr) + l.Error("failed to call XRPC repo.compare", "xrpcerr", xrpcerr, "err", err) rp.pages.Error503(w) return } diff --git a/appview/repo/log.go b/appview/repo/log.go index c6b3e255..3e11e3ae 100644 --- a/appview/repo/log.go +++ b/appview/repo/log.go @@ -57,7 +57,7 @@ func (rp *Repo) serveRawCommit(w http.ResponseWriter, r *http.Request, format st xrpcBytes, err := tangled.RepoDiff(r.Context(), xrpcc, ref, f.RepoIdentifier()) if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { - l.Error("failed to call XRPC repo.diff", "err", xrpcerr) + l.Error("failed to call XRPC repo.diff", "xrpcerr", xrpcerr, "err", err) rp.pages.Error503(w) return } @@ -227,7 +227,7 @@ func (rp *Repo) Commit(w http.ResponseWriter, r *http.Request) { xrpcBytes, err := tangled.RepoDiff(r.Context(), xrpcc, ref, f.RepoIdentifier()) if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { - l.Error("failed to call XRPC repo.diff", "err", xrpcerr) + l.Error("failed to call XRPC repo.diff", "xrpcerr", xrpcerr, "err", err) rp.pages.Error503(w) return } diff --git a/appview/repo/repo.go b/appview/repo/repo.go index a3ca4d55..f10900be 100644 --- a/appview/repo/repo.go +++ b/appview/repo/repo.go @@ -879,8 +879,9 @@ func (rp *Repo) DeleteRepo(w http.ResponseWriter, r *http.Request) { Rkey: f.Rkey, }, ) - if err := xrpcclient.HandleXrpcErr(err); err != nil { - rp.pages.Notice(w, noticeId, err.Error()) + if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { + l.Error("failed to call XRPC repo.delete", "xrpcerr", xrpcerr, "err", err) + rp.pages.Notice(w, noticeId, xrpcerr.Error()) return } l.Info("deleted repo from knot") @@ -985,7 +986,8 @@ func (rp *Repo) SyncRepoFork(w http.ResponseWriter, r *http.Request) { Branch: ref, }, ) - if err := xrpcclient.HandleXrpcErr(err); err != nil { + if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { + l.Error("failed to call XRPC repo.forkSync", "xrpcerr", xrpcerr, "err", err) rp.pages.Notice(w, "repo", err.Error()) return } @@ -1092,13 +1094,14 @@ func (rp *Repo) ForkRepo(w http.ResponseWriter, r *http.Request) { Name: forkName, Source: &forkSourceUrl, } - createResp, createErr := tangled.RepoCreate( + createResp, err := tangled.RepoCreate( r.Context(), client, forkInput, ) - if err := xrpcclient.HandleXrpcErr(createErr); err != nil { - rp.pages.Notice(w, "repo", err.Error()) + if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { + l.Error("failed to call XRPC repo.create", "xrpcerr", xrpcerr, "err", err) + rp.pages.Notice(w, "repo", xrpcerr.Error()) return } diff --git a/appview/repo/settings.go b/appview/repo/settings.go index 0d8179b5..c55a7905 100644 --- a/appview/repo/settings.go +++ b/appview/repo/settings.go @@ -54,7 +54,7 @@ func (rp *Repo) SetDefaultBranch(w http.ResponseWriter, r *http.Request) { return } - xe := tangled.RepoSetDefaultBranch( + err = tangled.RepoSetDefaultBranch( r.Context(), client, &tangled.RepoSetDefaultBranch_Input{ @@ -62,9 +62,9 @@ func (rp *Repo) SetDefaultBranch(w http.ResponseWriter, r *http.Request) { DefaultBranch: branch, }, ) - if err := xrpcclient.HandleXrpcErr(xe); err != nil { - l.Error("xrpc failed", "err", xe) - rp.pages.Notice(w, noticeId, err.Error()) + if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { + l.Error("failed to call XRPC repo.setDefaultBranch", "xrpcerr", xrpcerr, "err", err) + rp.pages.Notice(w, noticeId, xrpcerr.Error()) return } @@ -200,7 +200,7 @@ func (rp *Repo) sitesSettings(w http.ResponseWriter, r *http.Request) { repo := fmt.Sprintf("%s/%s", f.Did, f.Name) xrpcBytes, err := tangled.RepoBranches(r.Context(), xrpcc, "", 0, repo) if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { - l.Error("failed to call XRPC repo.branches", "err", xrpcerr) + l.Error("failed to call XRPC repo.branches", "xrpcerr", xrpcerr, "err", err) rp.pages.Error503(w) return } @@ -385,7 +385,7 @@ func (rp *Repo) generalSettings(w http.ResponseWriter, r *http.Request) { xrpcBytes, err := tangled.GitTempListBranches(r.Context(), xrpcc, "", 0, f.RepoAt().String()) var result types.RepoBranchesResponse if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { - l.Error("failed to call XRPC repo.branches", "err", xrpcerr) + l.Error("failed to call XRPC git.listBranches", "xrpcerr", xrpcerr, "err", err) } else if err := json.Unmarshal(xrpcBytes, &result); err != nil { l.Error("failed to decode XRPC response", "err", err) rp.pages.Error503(w) diff --git a/appview/repo/tags.go b/appview/repo/tags.go index 90d08c45..fa3574b3 100644 --- a/appview/repo/tags.go +++ b/appview/repo/tags.go @@ -90,10 +90,11 @@ func (rp *Repo) Tag(w http.ResponseWriter, r *http.Request) { if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { // if we don't match an existing tag, and the tag we're trying // to match is "latest", resolve to the most recent tag + l.Info("failed to call XRPC git.getTag", "xrpcerr", xrpcerr, "err", err, "tag", tag) if tag == "latest" { tagsBytes, err := tangled.GitTempListTags(r.Context(), xrpcc, "", 1, f.RepoAt().String()) if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { - l.Error("failed to call XRPC repo.tags for latest", "err", xrpcerr) + l.Error("failed to call XRPC git.ListTags for latest", "xrpcerr", xrpcerr, "err", err) rp.pages.Error503(w) return } diff --git a/appview/repo/tree.go b/appview/repo/tree.go index 04a8e814..23355c3d 100644 --- a/appview/repo/tree.go +++ b/appview/repo/tree.go @@ -37,7 +37,7 @@ func (rp *Repo) Tree(w http.ResponseWriter, r *http.Request) { xrpcc := &indigoxrpc.Client{Host: rp.config.KnotMirror.Url} xrpcResp, err := tangled.GitTempGetTree(r.Context(), xrpcc, treePath, ref, f.RepoAt().String()) if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { - l.Error("failed to call XRPC repo.tree", "err", xrpcerr) + l.Error("failed to call XRPC repo.tree", "xrpcerr", xrpcerr, "err", err) rp.pages.Error503(w) return } diff --git a/appview/state/state.go b/appview/state/state.go index 99ba558b..de95850d 100644 --- a/appview/state/state.go +++ b/appview/state/state.go @@ -479,13 +479,13 @@ func (s *State) NewRepo(w http.ResponseWriter, r *http.Request) { Name: repoName, DefaultBranch: &defaultBranch, } - createResp, xe := tangled.RepoCreate( + createResp, err := tangled.RepoCreate( r.Context(), client, input, ) - if err := xrpcclient.HandleXrpcErr(xe); err != nil { - l.Error("xrpc error", "xe", xe) + if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { + l.Error("failed to call XRPC repo.create", "xrpcerr", xrpcerr, "err", err) s.pages.Notice(w, "repo", err.Error()) return } -- 2.51.2