Skip to content

Commit

Permalink
Remove tempdir for packerManager
Browse files Browse the repository at this point in the history
  • Loading branch information
fd0 committed Mar 6, 2016
1 parent 015cea0 commit cda7616
Show file tree
Hide file tree
Showing 9 changed files with 27 additions and 69 deletions.
5 changes: 1 addition & 4 deletions src/cmds/restic/cmd_init.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,7 @@ func (cmd CmdInit) Execute(args []string) error {
"enter password again: ")
}

s, err := repository.New(be)
if err != nil {
return err
}
s := repository.New(be)

err = s.Init(cmd.global.password)
if err != nil {
Expand Down
5 changes: 1 addition & 4 deletions src/cmds/restic/global.go
Original file line number Diff line number Diff line change
Expand Up @@ -208,10 +208,7 @@ func (o GlobalOptions) OpenRepository() (*repository.Repository, error) {
return nil, err
}

s, err := repository.New(be)
if err != nil {
return nil, err
}
s := repository.New(be)

if o.password == "" {
o.password = o.ReadPassword("enter password for repository: ")
Expand Down
5 changes: 1 addition & 4 deletions src/restic/archiver_duplication_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,10 +78,7 @@ func testArchiverDuplication(t *testing.T) {
t.Fatal(err)
}

repo, err := repository.New(forgetfulBackend())
if err != nil {
t.Fatal(err)
}
repo := repository.New(forgetfulBackend())

err = repo.Init("foo")
if err != nil {
Expand Down
6 changes: 2 additions & 4 deletions src/restic/checker/checker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -239,8 +239,7 @@ func induceError(data []byte) {
func TestCheckerModifiedData(t *testing.T) {
be := mem.New()

repo, err := repository.New(be)
OK(t, err)
repo := repository.New(be)
OK(t, repo.Init(TestPassword))

arch := restic.NewArchiver(repo)
Expand All @@ -249,8 +248,7 @@ func TestCheckerModifiedData(t *testing.T) {
t.Logf("archived as %v", id.Str())

beError := &errorBackend{Backend: be}
checkRepo, err := repository.New(beError)
OK(t, err)
checkRepo := repository.New(beError)
OK(t, checkRepo.SearchKey(TestPassword))

chkr := checker.New(checkRepo)
Expand Down
34 changes: 15 additions & 19 deletions src/restic/repository/packer_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ type packerManager struct {
pm sync.Mutex
packs []*pack.Packer

tempdir string
pool sync.Pool
}

const minPackSize = 4 * 1024 * 1024
Expand All @@ -34,23 +34,21 @@ const maxPackers = 200

// NewPackerManager returns an new packer manager which writes temporary files
// to a temporary directory
func NewPackerManager(be Saver, key *crypto.Key) (pm *packerManager, err error) {
pm = &packerManager{
func NewPackerManager(be Saver, key *crypto.Key) *packerManager {
return &packerManager{
be: be,
key: key,
pool: sync.Pool{
New: func() interface{} {
return make([]byte, (minPackSize+maxPackSize)/2)
},
},
}

pm.tempdir, err = ioutil.TempDir("", fmt.Sprintf("restic-packs-%d-", os.Getpid()))
if err != nil {
return nil, err
}

return pm, nil
}

// findPacker returns a packer for a new blob of size bytes. Either a new one is
// created or one is returned that already has some blobs.
func (r *packerManager) findPacker(size uint) (*pack.Packer, error) {
func (r *packerManager) findPacker(size uint) (packer *pack.Packer, err error) {
r.pm.Lock()
defer r.pm.Unlock()

Expand All @@ -69,7 +67,7 @@ func (r *packerManager) findPacker(size uint) (*pack.Packer, error) {

// no suitable packer found, return new
debug.Log("Repo.findPacker", "create new pack for %d bytes", size)
tmpfile, err := ioutil.TempFile(r.tempdir, "restic-pack-")
tmpfile, err := ioutil.TempFile("", "restic-temp-pack-")
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -122,6 +120,11 @@ func (r *Repository) savePacker(p *pack.Packer) error {

debug.Log("Repo.savePacker", "saved as %v", h)

err = os.Remove(tmpfile.Name())
if err != nil {
return err
}

// update blobs in the index
for _, b := range p.Blobs() {
debug.Log("Repo.savePacker", " updating blob %v to pack %v", b.ID.Str(), id.Str())
Expand All @@ -144,10 +147,3 @@ func (r *packerManager) countPacker() int {

return len(r.packs)
}

// removeTempdir deletes the temporary directory.
func (r *packerManager) removeTempdir() error {
err := os.RemoveAll(r.tempdir)
r.tempdir = ""
return err
}
19 changes: 2 additions & 17 deletions src/restic/repository/packer_manager_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,31 +120,21 @@ func TestPackerManager(t *testing.T) {
rnd := rand.New(rand.NewSource(23))

be := mem.New()
pm, err := NewPackerManager(be, crypto.NewRandomKey())
if err != nil {
t.Fatal(err)
}
pm := NewPackerManager(be, crypto.NewRandomKey())

blobBuf := make([]byte, maxBlobSize)

bytes := fillPacks(t, rnd, be, pm, blobBuf)
bytes += flushRemainingPacks(t, rnd, be, pm)

t.Logf("saved %d bytes", bytes)
err = pm.removeTempdir()
if err != nil {
t.Fatal(err)
}
}

func BenchmarkPackerManager(t *testing.B) {
rnd := rand.New(rand.NewSource(23))

be := &fakeBackend{}
pm, err := NewPackerManager(be, crypto.NewRandomKey())
if err != nil {
t.Fatal(err)
}
pm := NewPackerManager(be, crypto.NewRandomKey())
blobBuf := make([]byte, maxBlobSize)

t.ResetTimer()
Expand All @@ -156,9 +146,4 @@ func BenchmarkPackerManager(t *testing.B) {

bytes += flushRemainingPacks(t, rnd, be, pm)
t.Logf("saved %d bytes", bytes)

err = pm.removeTempdir()
if err != nil {
t.Fatal(err)
}
}
12 changes: 3 additions & 9 deletions src/restic/repository/repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,19 +27,14 @@ type Repository struct {
}

// New returns a new repository with backend be.
func New(be backend.Backend) (*Repository, error) {
pm, err := NewPackerManager(be, nil)
if err != nil {
return nil, err
}

func New(be backend.Backend) *Repository {
repo := &Repository{
be: be,
idx: NewMasterIndex(),
packerManager: pm,
packerManager: NewPackerManager(be, nil),
}

return repo, nil
return repo
}

// Find loads the list of all blobs of type t and searches for names which start
Expand Down Expand Up @@ -304,7 +299,6 @@ func (r *Repository) Flush() error {
}
}
r.packs = r.packs[:0]

return nil
}

Expand Down
5 changes: 1 addition & 4 deletions src/restic/test/backend.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,7 @@ func SetupRepo() *repository.Repository {
panic(err)
}

repo, err := repository.New(b)
if err != nil {
panic(err)
}
repo := repository.New(b)
err = repo.Init(TestPassword)
if err != nil {
panic(err)
Expand Down
5 changes: 1 addition & 4 deletions src/restic/test/helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -213,10 +213,7 @@ func OpenLocalRepo(t testing.TB, dir string) *repository.Repository {
be, err := local.Open(dir)
OK(t, err)

repo, err := repository.New(be)
if err != nil {
t.Fatal(err)
}
repo := repository.New(be)
err = repo.SearchKey(TestPassword)
OK(t, err)

Expand Down

0 comments on commit cda7616

Please sign in to comment.