Skip to content
This repository has been archived by the owner on Feb 27, 2023. It is now read-only.

Commit

Permalink
define the interface of seed
Browse files Browse the repository at this point in the history
Signed-off-by: allen.wq <allen.wq@alipay.com>
  • Loading branch information
wangforthinker committed Apr 22, 2020
1 parent 19f1613 commit cb47003
Show file tree
Hide file tree
Showing 3 changed files with 162 additions and 0 deletions.
53 changes: 53 additions & 0 deletions dfdaemon/seed/manager.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/*
* Copyright The Dragonfly Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package seed

import "time"

// Manager is an interface which manages the seeds.
type Manager interface {
// Register a seed.
Register(key string, info BaseInfo) (Seed, error)

// UnRegister seed by key.
UnRegister(key string) error

// RefreshExpireTime refreshes expire time of seed.
RefreshExpireTime(key string, expireTimeDur time.Duration) error

// NotifyExpired get the expired chan of seed, it will be notified if seed expired.
NotifyExpired(key string) (<-chan struct{}, error)

// Prefetch will add seed to the prefetch list, and then prefetch by the concurrent limit.
Prefetch(key string, perDownloadSize int64) (<-chan struct{}, error)

// GetPrefetchResult should be called after notify by prefetch chan.
GetPrefetchResult(key string) (PreFetchResult, error)

// SetPrefetchLimit limits the concurrency of prefetching seed.
// Default is defaultDownloadConcurrency.
SetConcurrentLimit(limit int) (validLimit int)

// Get gets the seed by key.
Get(key string) (Seed, error)

// List lists the seeds.
List() ([]Seed, error)

// Stop stops the SeedManager.
Stop()
}
53 changes: 53 additions & 0 deletions dfdaemon/seed/seed.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/*
* Copyright The Dragonfly Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package seed

import "io"

// Seed describes the seed file which represents the resource file defined by taskUrl.
type Seed interface {
// Prefetch will start to download seed file to local cache.
Prefetch(perDownloadSize int64) (<-chan struct{}, error)

// GetPrefetchResult should be called after notify by prefetch chan.
GetPrefetchResult() (PreFetchResult, error)

// Delete will delete the local cache and release the resource.
Delete() error

// Download providers the range download, if local cache of seed do not include the range,
// it will download the range data from rss and reply to request.
Download(off int64, size int64) (io.ReadCloser, error)

// stop the internal loop and release execution resource.
Stop()

// GetFullSize gets the full size of seed file.
GetFullSize() int64

// GetStatus gets the status of seed file.
GetStatus() string

// GetURL gets the url of seed file.
GetURL() string

// GetHeaders gets the headers of seed file.
GetHeaders() map[string][]string

// GetHeaders gets the taskID of seed file.
GetTaskID() string
}
56 changes: 56 additions & 0 deletions dfdaemon/seed/types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/*
* Copyright The Dragonfly Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package seed

import (
"time"
)

// BaseInfo describes the base info of seed.
type BaseInfo struct {
// the url of seed file.
URL string

// the taskID of seed file.
TaskID string

// the header of seed file.
Header map[string][]string

// URL may contains some changeful query parameters such as authentication parameters. Dragonfly will
// filter these parameter via 'filter'. The usage of it is that different URL may generate the same
// download url.
Filters []string

// the full length of seed file.
FullLength int64

// Seed will download data from rss which is divided by blocks.
// And block size is defined by BlockOrder. It should be limited [10, 31].
BlockOrder uint32

// expire time duration of seed file.
ExpireTimeDur time.Duration
}

// PreFetchResult shows the result of prefetch.
type PreFetchResult struct {
Success bool
Err error
// if canceled, caller need not to do other.
Canceled bool
}

0 comments on commit cb47003

Please sign in to comment.