@@ -32,11 +32,13 @@ import (
32
32
"github.com/cs3org/reva/internal/http/services/datagateway"
33
33
"github.com/cs3org/reva/pkg/appctx"
34
34
"github.com/cs3org/reva/pkg/rhttp"
35
+ "go.opencensus.io/trace"
35
36
)
36
37
37
38
func (s * svc ) handleCopy (w http.ResponseWriter , r * http.Request , ns string ) {
38
39
ctx := r .Context ()
39
- log := appctx .GetLogger (ctx )
40
+ ctx , span := trace .StartSpan (ctx , "head" )
41
+ defer span .End ()
40
42
41
43
ns = applyLayout (ctx , ns )
42
44
@@ -55,8 +57,8 @@ func (s *svc) handleCopy(w http.ResponseWriter, r *http.Request, ns string) {
55
57
}
56
58
dst = path .Join (ns , dst )
57
59
58
- log . Info (). Str ("source " , src ).Str ("destination " , dst ).
59
- Str ("overwrite" , overwrite ).Str ("depth" , depth ).Msg ("copy" )
60
+ sublog := appctx . GetLogger ( ctx ). With (). Str ("src " , src ).Str ("dst " , dst ).Logger ()
61
+ sublog . Debug (). Str ("overwrite" , overwrite ).Str ("depth" , depth ).Msg ("copy" )
60
62
61
63
overwrite = strings .ToUpper (overwrite )
62
64
if overwrite == "" {
@@ -75,7 +77,7 @@ func (s *svc) handleCopy(w http.ResponseWriter, r *http.Request, ns string) {
75
77
76
78
client , err := s .getClient ()
77
79
if err != nil {
78
- log .Error ().Err (err ).Msg ("error getting grpc client" )
80
+ sublog .Error ().Err (err ).Msg ("error getting grpc client" )
79
81
w .WriteHeader (http .StatusInternalServerError )
80
82
return
81
83
}
@@ -87,23 +89,13 @@ func (s *svc) handleCopy(w http.ResponseWriter, r *http.Request, ns string) {
87
89
srcStatReq := & provider.StatRequest {Ref : ref }
88
90
srcStatRes , err := client .Stat (ctx , srcStatReq )
89
91
if err != nil {
90
- log .Error ().Err (err ).Msg ("error sending grpc stat request" )
92
+ sublog .Error ().Err (err ).Msg ("error sending grpc stat request" )
91
93
w .WriteHeader (http .StatusInternalServerError )
92
94
return
93
95
}
94
96
95
97
if srcStatRes .Status .Code != rpc .Code_CODE_OK {
96
- switch srcStatRes .Status .Code {
97
- case rpc .Code_CODE_NOT_FOUND :
98
- log .Debug ().Str ("src" , src ).Interface ("status" , srcStatRes .Status ).Msg ("resource not found" )
99
- w .WriteHeader (http .StatusNotFound )
100
- case rpc .Code_CODE_PERMISSION_DENIED :
101
- log .Debug ().Str ("src" , src ).Interface ("status" , srcStatRes .Status ).Msg ("permission denied" )
102
- w .WriteHeader (http .StatusForbidden )
103
- default :
104
- log .Error ().Str ("src" , src ).Interface ("status" , srcStatRes .Status ).Msg ("grpc stat request failed" )
105
- w .WriteHeader (http .StatusInternalServerError )
106
- }
98
+ handleErrorStatus (& sublog , w , srcStatRes .Status )
107
99
return
108
100
}
109
101
@@ -114,19 +106,12 @@ func (s *svc) handleCopy(w http.ResponseWriter, r *http.Request, ns string) {
114
106
dstStatReq := & provider.StatRequest {Ref : ref }
115
107
dstStatRes , err := client .Stat (ctx , dstStatReq )
116
108
if err != nil {
117
- log .Error ().Err (err ).Msg ("error sending grpc stat request" )
109
+ sublog .Error ().Err (err ).Msg ("error sending grpc stat request" )
118
110
w .WriteHeader (http .StatusInternalServerError )
119
111
return
120
112
}
121
113
if dstStatRes .Status .Code != rpc .Code_CODE_OK && dstStatRes .Status .Code != rpc .Code_CODE_NOT_FOUND {
122
- switch dstStatRes .Status .Code {
123
- case rpc .Code_CODE_PERMISSION_DENIED :
124
- log .Debug ().Str ("dst" , dst ).Interface ("status" , dstStatRes .Status ).Msg ("permission denied" )
125
- w .WriteHeader (http .StatusForbidden )
126
- default :
127
- log .Error ().Str ("dst" , dst ).Interface ("status" , dstStatRes .Status ).Msg ("grpc stat request failed" )
128
- w .WriteHeader (http .StatusInternalServerError )
129
- }
114
+ handleErrorStatus (& sublog , w , srcStatRes .Status )
130
115
return
131
116
}
132
117
@@ -135,7 +120,7 @@ func (s *svc) handleCopy(w http.ResponseWriter, r *http.Request, ns string) {
135
120
successCode = http .StatusNoContent // 204 if target already existed, see https://tools.ietf.org/html/rfc4918#section-9.8.5
136
121
137
122
if overwrite == "F" {
138
- log .Warn ().Str ("dst " , dst ).Msg ("dst already exists" )
123
+ sublog .Warn ().Str ("overwrite " , overwrite ).Msg ("dst already exists" )
139
124
w .WriteHeader (http .StatusPreconditionFailed ) // 412, see https://tools.ietf.org/html/rfc4918#section-9.8.5
140
125
return
141
126
}
@@ -149,21 +134,17 @@ func (s *svc) handleCopy(w http.ResponseWriter, r *http.Request, ns string) {
149
134
intStatReq := & provider.StatRequest {Ref : ref }
150
135
intStatRes , err := client .Stat (ctx , intStatReq )
151
136
if err != nil {
152
- log .Error ().Err (err ).Msg ("error sending grpc stat request" )
137
+ sublog .Error ().Err (err ).Msg ("error sending grpc stat request" )
153
138
w .WriteHeader (http .StatusInternalServerError )
154
139
return
155
140
}
156
141
if intStatRes .Status .Code != rpc .Code_CODE_OK {
157
- switch intStatRes .Status .Code {
158
- case rpc .Code_CODE_NOT_FOUND :
142
+ if intStatRes .Status .Code == rpc .Code_CODE_NOT_FOUND {
159
143
// 409 if intermediate dir is missing, see https://tools.ietf.org/html/rfc4918#section-9.8.5
144
+ sublog .Debug ().Str ("parent" , intermediateDir ).Interface ("status" , intStatRes .Status ).Msg ("conflict" )
160
145
w .WriteHeader (http .StatusConflict )
161
- case rpc .Code_CODE_PERMISSION_DENIED :
162
- log .Debug ().Str ("dst" , dst ).Interface ("status" , intStatRes .Status ).Msg ("permission denied" )
163
- w .WriteHeader (http .StatusForbidden )
164
- default :
165
- log .Error ().Str ("dst" , dst ).Interface ("status" , intStatRes .Status ).Msg ("grpc stat request failed" )
166
- w .WriteHeader (http .StatusInternalServerError )
146
+ } else {
147
+ handleErrorStatus (& sublog , w , srcStatRes .Status )
167
148
}
168
149
return
169
150
}
@@ -172,7 +153,7 @@ func (s *svc) handleCopy(w http.ResponseWriter, r *http.Request, ns string) {
172
153
173
154
err = s .descend (ctx , client , srcStatRes .Info , dst , depth == "infinity" )
174
155
if err != nil {
175
- log .Error ().Err (err ).Msg ("error descending directory" )
156
+ sublog .Error ().Err (err ). Str ( "depth" , depth ).Msg ("error descending directory" )
176
157
w .WriteHeader (http .StatusInternalServerError )
177
158
return
178
159
}
0 commit comments