Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
ollama
Commits
738fe9c4
Unverified
Commit
738fe9c4
authored
Sep 07, 2023
by
Michael Yang
Committed by
GitHub
Sep 07, 2023
Browse files
Merge pull request #486 from jmorganca/mxyng/fix-push
fix: retry push on expired token
parents
09dd2aef
bf146fb0
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
32 additions
and
23 deletions
+32
-23
server/auth.go
server/auth.go
+1
-1
server/images.go
server/images.go
+6
-4
server/upload.go
server/upload.go
+25
-18
No files found.
server/auth.go
View file @
738fe9c4
...
@@ -103,7 +103,7 @@ func getAuthToken(ctx context.Context, redirData AuthRedirect, regOpts *Registry
...
@@ -103,7 +103,7 @@ func getAuthToken(ctx context.Context, redirData AuthRedirect, regOpts *Registry
headers
:=
make
(
http
.
Header
)
headers
:=
make
(
http
.
Header
)
headers
.
Set
(
"Authorization"
,
sig
)
headers
.
Set
(
"Authorization"
,
sig
)
resp
,
err
:=
makeRequest
(
ctx
,
"GET"
,
redirectURL
,
headers
,
nil
,
regOpts
)
resp
,
err
:=
makeRequest
(
ctx
,
"GET"
,
redirectURL
,
headers
,
nil
,
nil
)
if
err
!=
nil
{
if
err
!=
nil
{
log
.
Printf
(
"couldn't get token: %q"
,
err
)
log
.
Printf
(
"couldn't get token: %q"
,
err
)
}
}
...
...
server/images.go
View file @
738fe9c4
...
@@ -1313,10 +1313,12 @@ func makeRequest(ctx context.Context, method string, requestURL *url.URL, header
...
@@ -1313,10 +1313,12 @@ func makeRequest(ctx context.Context, method string, requestURL *url.URL, header
req
.
Header
=
headers
req
.
Header
=
headers
}
}
if
regOpts
.
Token
!=
""
{
if
regOpts
!=
nil
{
req
.
Header
.
Set
(
"Authorization"
,
"Bearer "
+
regOpts
.
Token
)
if
regOpts
.
Token
!=
""
{
}
else
if
regOpts
.
Username
!=
""
&&
regOpts
.
Password
!=
""
{
req
.
Header
.
Set
(
"Authorization"
,
"Bearer "
+
regOpts
.
Token
)
req
.
SetBasicAuth
(
regOpts
.
Username
,
regOpts
.
Password
)
}
else
if
regOpts
.
Username
!=
""
&&
regOpts
.
Password
!=
""
{
req
.
SetBasicAuth
(
regOpts
.
Username
,
regOpts
.
Password
)
}
}
}
req
.
Header
.
Set
(
"User-Agent"
,
fmt
.
Sprintf
(
"ollama/%s (%s %s) Go/%s"
,
version
.
Version
,
runtime
.
GOARCH
,
runtime
.
GOOS
,
runtime
.
Version
()))
req
.
Header
.
Set
(
"User-Agent"
,
fmt
.
Sprintf
(
"ollama/%s (%s %s) Go/%s"
,
version
.
Version
,
runtime
.
GOARCH
,
runtime
.
GOOS
,
runtime
.
Version
()))
...
...
server/upload.go
View file @
738fe9c4
...
@@ -66,31 +66,39 @@ func uploadBlobChunked(ctx context.Context, requestURL *url.URL, layer *Layer, r
...
@@ -66,31 +66,39 @@ func uploadBlobChunked(ctx context.Context, requestURL *url.URL, layer *Layer, r
sectionReader
:=
io
.
NewSectionReader
(
f
,
int64
(
offset
),
chunk
)
sectionReader
:=
io
.
NewSectionReader
(
f
,
int64
(
offset
),
chunk
)
for
try
:=
0
;
try
<
MaxRetries
;
try
++
{
for
try
:=
0
;
try
<
MaxRetries
;
try
++
{
ch
:=
make
(
chan
error
,
1
)
r
,
w
:=
io
.
Pipe
()
r
,
w
:=
io
.
Pipe
()
defer
r
.
Close
()
defer
r
.
Close
()
go
func
()
{
go
func
()
{
defer
w
.
Close
()
defer
w
.
Close
()
for
chunked
:=
int64
(
0
);
chunked
<
chunk
;
{
for
chunked
:=
int64
(
0
);
chunked
<
chunk
;
{
n
,
err
:=
io
.
CopyN
(
w
,
sectionReader
,
1024
*
1024
)
select
{
if
err
!=
nil
&&
!
errors
.
Is
(
err
,
io
.
EOF
)
{
case
err
:=
<-
ch
:
log
.
Printf
(
"chunk interrupted: %v"
,
err
)
return
default
:
n
,
err
:=
io
.
CopyN
(
w
,
sectionReader
,
1024
*
1024
)
if
err
!=
nil
&&
!
errors
.
Is
(
err
,
io
.
EOF
)
{
fn
(
api
.
ProgressResponse
{
Status
:
fmt
.
Sprintf
(
"error reading chunk: %v"
,
err
),
Digest
:
layer
.
Digest
,
Total
:
layer
.
Size
,
Completed
:
int
(
offset
),
})
return
}
chunked
+=
n
fn
(
api
.
ProgressResponse
{
fn
(
api
.
ProgressResponse
{
Status
:
fmt
.
Sprintf
(
"
error reading chunk: %v"
,
err
),
Status
:
fmt
.
Sprintf
(
"
uploading %s"
,
layer
.
Digest
),
Digest
:
layer
.
Digest
,
Digest
:
layer
.
Digest
,
Total
:
layer
.
Size
,
Total
:
layer
.
Size
,
Completed
:
int
(
offset
),
Completed
:
int
(
offset
)
+
int
(
chunked
)
,
})
})
return
}
}
chunked
+=
n
fn
(
api
.
ProgressResponse
{
Status
:
fmt
.
Sprintf
(
"uploading %s"
,
layer
.
Digest
),
Digest
:
layer
.
Digest
,
Total
:
layer
.
Size
,
Completed
:
int
(
offset
)
+
int
(
chunked
),
})
}
}
}()
}()
...
@@ -113,6 +121,8 @@ func uploadBlobChunked(ctx context.Context, requestURL *url.URL, layer *Layer, r
...
@@ -113,6 +121,8 @@ func uploadBlobChunked(ctx context.Context, requestURL *url.URL, layer *Layer, r
switch
{
switch
{
case
resp
.
StatusCode
==
http
.
StatusUnauthorized
:
case
resp
.
StatusCode
==
http
.
StatusUnauthorized
:
ch
<-
errors
.
New
(
"unauthorized"
)
auth
:=
resp
.
Header
.
Get
(
"www-authenticate"
)
auth
:=
resp
.
Header
.
Get
(
"www-authenticate"
)
authRedir
:=
ParseAuthRedirectString
(
auth
)
authRedir
:=
ParseAuthRedirectString
(
auth
)
token
,
err
:=
getAuthToken
(
ctx
,
authRedir
,
regOpts
)
token
,
err
:=
getAuthToken
(
ctx
,
authRedir
,
regOpts
)
...
@@ -121,10 +131,7 @@ func uploadBlobChunked(ctx context.Context, requestURL *url.URL, layer *Layer, r
...
@@ -121,10 +131,7 @@ func uploadBlobChunked(ctx context.Context, requestURL *url.URL, layer *Layer, r
}
}
regOpts
.
Token
=
token
regOpts
.
Token
=
token
if
_
,
err
:=
sectionReader
.
Seek
(
0
,
io
.
SeekStart
);
err
!=
nil
{
sectionReader
=
io
.
NewSectionReader
(
f
,
int64
(
offset
),
chunk
)
return
err
}
continue
continue
case
resp
.
StatusCode
>=
http
.
StatusBadRequest
:
case
resp
.
StatusCode
>=
http
.
StatusBadRequest
:
body
,
_
:=
io
.
ReadAll
(
resp
.
Body
)
body
,
_
:=
io
.
ReadAll
(
resp
.
Body
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment