Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
16e7c6ee
Commit
16e7c6ee
authored
Nov 02, 2017
by
Yu-Ju Hong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Close the file before renaming in FileStore
Also change the unit test to use a real file system to detect errors like this.
parent
b3fa2aeb
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
33 additions
and
12 deletions
+33
-12
BUILD
pkg/kubelet/util/store/BUILD
+1
-0
filestore.go
pkg/kubelet/util/store/filestore.go
+15
-5
filestore_test.go
pkg/kubelet/util/store/filestore_test.go
+17
-7
No files found.
pkg/kubelet/util/store/BUILD
View file @
16e7c6ee
...
@@ -23,6 +23,7 @@ go_test(
...
@@ -23,6 +23,7 @@ go_test(
deps = [
deps = [
"//pkg/util/filesystem:go_default_library",
"//pkg/util/filesystem:go_default_library",
"//vendor/github.com/stretchr/testify/assert:go_default_library",
"//vendor/github.com/stretchr/testify/assert:go_default_library",
"//vendor/github.com/stretchr/testify/require:go_default_library",
],
],
)
)
...
...
pkg/kubelet/util/store/filestore.go
View file @
16e7c6ee
...
@@ -117,14 +117,17 @@ func writeFile(fs utilfs.Filesystem, path string, data []byte) (retErr error) {
...
@@ -117,14 +117,17 @@ func writeFile(fs utilfs.Filesystem, path string, data []byte) (retErr error) {
}
}
tmpPath
:=
tmpFile
.
Name
()
tmpPath
:=
tmpFile
.
Name
()
shouldClose
:=
true
defer
func
()
{
defer
func
()
{
// Close the file.
// Close the file.
if
err
:=
tmpFile
.
Close
();
err
!=
nil
{
if
shouldClose
{
if
retErr
==
nil
{
if
err
:=
tmpFile
.
Close
();
err
!=
nil
{
retErr
=
err
if
retErr
==
nil
{
}
else
{
retErr
=
fmt
.
Errorf
(
"close error: %v"
,
err
)
retErr
=
fmt
.
Errorf
(
"failed to close temp file after error %v; close error: %v"
,
retErr
,
err
)
}
else
{
retErr
=
fmt
.
Errorf
(
"failed to close temp file after error %v; close error: %v"
,
retErr
,
err
)
}
}
}
}
}
...
@@ -146,6 +149,13 @@ func writeFile(fs utilfs.Filesystem, path string, data []byte) (retErr error) {
...
@@ -146,6 +149,13 @@ func writeFile(fs utilfs.Filesystem, path string, data []byte) (retErr error) {
return
err
return
err
}
}
// Closing the file before renaming.
err
=
tmpFile
.
Close
()
shouldClose
=
false
if
err
!=
nil
{
return
err
}
return
fs
.
Rename
(
tmpPath
,
path
)
return
fs
.
Rename
(
tmpPath
,
path
)
}
}
...
...
pkg/kubelet/util/store/filestore_test.go
View file @
16e7c6ee
...
@@ -22,15 +22,25 @@ import (
...
@@ -22,15 +22,25 @@ import (
"testing"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"k8s.io/kubernetes/pkg/util/filesystem"
"k8s.io/kubernetes/pkg/util/filesystem"
)
)
func
TestFileStore
(
t
*
testing
.
T
)
{
func
TestFileStore
(
t
*
testing
.
T
)
{
path
,
err
:=
ioutil
.
TempDir
(
""
,
"FileStore"
)
path
,
err
:=
ioutil
.
TempDir
(
""
,
"FileStore"
)
assert
.
NoError
(
t
,
err
)
assert
.
NoError
(
t
,
err
)
store
,
err
:=
NewFileStore
(
path
,
filesystem
.
NewFakeFs
()
)
store
,
err
:=
NewFileStore
(
path
,
filesystem
.
DefaultFs
{}
)
assert
.
NoError
(
t
,
err
)
assert
.
NoError
(
t
,
err
)
testStore
(
t
,
store
)
}
func
TestFakeFileStore
(
t
*
testing
.
T
)
{
store
,
err
:=
NewFileStore
(
"/tmp/test-fake-file-store"
,
filesystem
.
NewFakeFs
())
assert
.
NoError
(
t
,
err
)
testStore
(
t
,
store
)
}
func
testStore
(
t
*
testing
.
T
,
store
Store
)
{
testCases
:=
[]
struct
{
testCases
:=
[]
struct
{
key
string
key
string
data
string
data
string
...
@@ -70,20 +80,20 @@ func TestFileStore(t *testing.T) {
...
@@ -70,20 +80,20 @@ func TestFileStore(t *testing.T) {
// Test add data.
// Test add data.
for
_
,
c
:=
range
testCases
{
for
_
,
c
:=
range
testCases
{
_
,
err
=
store
.
Read
(
c
.
key
)
t
.
Log
(
"test case: "
,
c
)
_
,
err
:=
store
.
Read
(
c
.
key
)
assert
.
Error
(
t
,
err
)
assert
.
Error
(
t
,
err
)
err
=
store
.
Write
(
c
.
key
,
[]
byte
(
c
.
data
))
err
=
store
.
Write
(
c
.
key
,
[]
byte
(
c
.
data
))
if
c
.
expectErr
{
if
c
.
expectErr
{
assert
.
Error
(
t
,
err
)
assert
.
Error
(
t
,
err
)
continue
continue
}
else
{
assert
.
NoError
(
t
,
err
)
}
}
require
.
NoError
(
t
,
err
)
// Test read data by key.
// Test read data by key.
data
,
err
:=
store
.
Read
(
c
.
key
)
data
,
err
:=
store
.
Read
(
c
.
key
)
assert
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
assert
.
Equal
(
t
,
string
(
data
),
c
.
data
)
assert
.
Equal
(
t
,
string
(
data
),
c
.
data
)
}
}
...
@@ -100,7 +110,7 @@ func TestFileStore(t *testing.T) {
...
@@ -100,7 +110,7 @@ func TestFileStore(t *testing.T) {
}
}
err
=
store
.
Delete
(
c
.
key
)
err
=
store
.
Delete
(
c
.
key
)
assert
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
_
,
err
=
store
.
Read
(
c
.
key
)
_
,
err
=
store
.
Read
(
c
.
key
)
assert
.
EqualValues
(
t
,
ErrKeyNotFound
,
err
)
assert
.
EqualValues
(
t
,
ErrKeyNotFound
,
err
)
}
}
...
@@ -111,6 +121,6 @@ func TestFileStore(t *testing.T) {
...
@@ -111,6 +121,6 @@ func TestFileStore(t *testing.T) {
// Test list keys.
// Test list keys.
keys
,
err
=
store
.
List
()
keys
,
err
=
store
.
List
()
assert
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
assert
.
Equal
(
t
,
len
(
keys
),
0
)
assert
.
Equal
(
t
,
len
(
keys
),
0
)
}
}
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