diff --git a/.github/workflows/compatibility-e2e-v2.yml b/.github/workflows/compatibility-e2e-v2.yml index 38b67f235e4..2006fc8cc7b 100644 --- a/.github/workflows/compatibility-e2e-v2.yml +++ b/.github/workflows/compatibility-e2e-v2.yml @@ -28,19 +28,19 @@ jobs: include: - module: manager image: manager - image-tag: v2.1.53 + image-tag: v2.1.55 chart-name: manager - module: scheduler image: scheduler - image-tag: v2.1.53 + image-tag: v2.1.55 chart-name: scheduler - module: client image: client - image-tag: v0.1.96 + image-tag: v0.1.100 chart-name: client - module: seed-client image: client - image-tag: v0.1.96 + image-tag: v0.1.100 chart-name: seed-client steps: diff --git a/client-rs b/client-rs index 10125b55880..71efbe9abd5 160000 --- a/client-rs +++ b/client-rs @@ -1 +1 @@ -Subproject commit 10125b55880c89f730d5829b49dd56c5488cd557 +Subproject commit 71efbe9abd5344ca4fddf86be7bf8c142445e642 diff --git a/go.mod b/go.mod index a4b2faa64c4..d280e3609c6 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module d7y.io/dragonfly/v2 go 1.21 require ( - d7y.io/api/v2 v2.0.142 + d7y.io/api/v2 v2.0.148 github.com/MysteriousPotato/go-lockable v1.0.0 github.com/RichardKnop/machinery v1.10.8 github.com/Showmax/go-fqdn v1.0.0 @@ -129,7 +129,7 @@ require ( github.com/distribution/reference v0.5.0 // indirect github.com/docker/go-metrics v0.0.1 // indirect github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 // indirect - github.com/envoyproxy/protoc-gen-validate v1.0.4 // indirect + github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/gabriel-vasile/mimetype v1.4.4 // indirect diff --git a/go.sum b/go.sum index ddf602b93c4..5662981d482 100644 --- a/go.sum +++ b/go.sum @@ -53,8 +53,8 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -d7y.io/api/v2 v2.0.142 h1:u1gQZwCKJODdJB883J9e5SRK9VmOTmApX13FX/bR0Vk= -d7y.io/api/v2 v2.0.142/go.mod h1:IakrltEphFvcLIQs3NVeb9PAe66MGDnd2/HMs9DKYu8= +d7y.io/api/v2 v2.0.148 h1:11waj+EuaHdx95Fkr3hXJJckNGw9Hu5U0ohtCbpIirw= +d7y.io/api/v2 v2.0.148/go.mod h1:hyEaaIglThVWRHODk2yHN/tpa1L+/nPgdQFwPsL6fNc= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.0.0/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= @@ -434,8 +434,8 @@ github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5y github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= -github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= +github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= +github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= diff --git a/internal/job/constants.go b/internal/job/constants.go index c6303b375a6..d5d12e10d54 100644 --- a/internal/job/constants.go +++ b/internal/job/constants.go @@ -30,10 +30,10 @@ const ( // SyncPeersJob is the name of syncing peers job. SyncPeersJob = "sync_peers" - // ListTasksJob is the name of listing tasks job. - ListTasksJob = "list_tasks" + // GetTaskJob is the name of getting task job. + GetTaskJob = "get_task" - // DeleteTasksJob is the name of deleting tasks job. + // DeleteTaskJob is the name of deleting task job. DeleteTaskJob = "delete_task" ) diff --git a/internal/job/types.go b/internal/job/types.go index be1595d56a2..e7659665a92 100644 --- a/internal/job/types.go +++ b/internal/job/types.go @@ -18,6 +18,7 @@ package job import "d7y.io/dragonfly/v2/scheduler/resource" +// PreheatRequest defines the request parameters for preheating. type PreheatRequest struct { URL string `json:"url" validate:"required,url"` Tag string `json:"tag" validate:"omitempty"` @@ -26,20 +27,20 @@ type PreheatRequest struct { Headers map[string]string `json:"headers" validate:"omitempty"` Application string `json:"application" validate:"omitempty"` Priority int32 `json:"priority" validate:"omitempty"` - PieceLength uint32 `json:"pieceLength" validate:"omitempty"` } +// PreheatResponse defines the response parameters for preheating. type PreheatResponse struct { - TaskID string `json:"taskID"` + TaskID string `json:"task_id"` } -// ListTasksRequest defines the request parameters for listing tasks. -type ListTasksRequest struct { +// GetTaskRequest defines the request parameters for getting task. +type GetTaskRequest struct { TaskID string `json:"task_id" validate:"required"` } -// ListTasksResponse defines the response parameters for listing tasks. -type ListTasksResponse struct { +// GetTaskResponse defines the response parameters for getting task. +type GetTaskResponse struct { Peers []*resource.Peer `json:"peers"` } @@ -48,16 +49,14 @@ type DeleteTaskRequest struct { TaskID string `json:"task_id" validate:"required"` } -// Task includes information about a task along with peer details and a description. -type Task struct { - Task *resource.Task `json:"task"` - Peer *resource.Peer `json:"peer"` - Description string `json:"description"` +// DeleteTaskResponse defines the response parameters for deleting task. +type DeleteTaskResponse struct { + SuccessPeers []*DeletePeerResponse `json:"success_peers"` + FailurePeers []*DeletePeerResponse `json:"failure_peers"` } -// DeleteTaskResponse represents the response after attempting to delete tasks, -// categorizing them into successfully and unsuccessfully deleted. -type DeleteTaskResponse struct { - SuccessTasks []*Task `json:"success_tasks"` - FailureTasks []*Task `json:"failure_tasks"` +// DeletePeerResponse represents the response after attempting to delete a peer. +type DeletePeerResponse struct { + Peer *resource.Peer `json:"peer"` + Description string `json:"description"` } diff --git a/manager/config/config.go b/manager/config/config.go index 29914a6b94c..5c5e300d48b 100644 --- a/manager/config/config.go +++ b/manager/config/config.go @@ -296,9 +296,6 @@ type JobConfig struct { // Sync peers configuration. SyncPeers SyncPeersConfig `yaml:"syncPeers" mapstructure:"syncPeers"` - - // Manager tasks configuration. - ManagerTasks ManagerTasksConfig `yaml:"managerTasks" mapstructure:"managerTasks"` } type PreheatConfig struct { @@ -318,11 +315,6 @@ type SyncPeersConfig struct { Timeout time.Duration `yaml:"timeout" mapstructure:"timeout"` } -type ManagerTasksConfig struct { - // Timeout is the timeout for manager tasks information for the single scheduler. - Timeout time.Duration `yaml:"timeout" mapstructure:"timeout"` -} - type PreheatTLSClientConfig struct { // CACert is the CA certificate for preheat tls handshake, it can be path or PEM format string. CACert types.PEMContent `yaml:"caCert" mapstructure:"caCert"` @@ -463,9 +455,6 @@ func New() *Config { Interval: DefaultJobSyncPeersInterval, Timeout: DefaultJobSyncPeersTimeout, }, - ManagerTasks: ManagerTasksConfig{ - Timeout: DefaultJobManagerTasksTimeout, - }, }, ObjectStorage: ObjectStorageConfig{ Enable: false, diff --git a/manager/config/constant_otel.go b/manager/config/constant_otel.go index 07c34bbd4b2..f2a10ca0143 100644 --- a/manager/config/constant_otel.go +++ b/manager/config/constant_otel.go @@ -19,13 +19,11 @@ package config import "go.opentelemetry.io/otel/attribute" const ( - AttributeID = attribute.Key("d7y.manager.id") - AttributePreheatType = attribute.Key("d7y.manager.preheat.type") - AttributePreheatURL = attribute.Key("d7y.manager.preheat.url") - AttributeDeleteTaskID = attribute.Key("d7y.manager.delete_task.id") - AttributeListTasksID = attribute.Key("d7y.manager.list_tasks.id") - AttributeListTasksPage = attribute.Key("d7y.manager.list_tasks.page") - AttributeListTasksPerPage = attribute.Key("d7y.manager.list_tasks.per_page") + AttributeID = attribute.Key("d7y.manager.id") + AttributePreheatType = attribute.Key("d7y.manager.preheat.type") + AttributePreheatURL = attribute.Key("d7y.manager.preheat.url") + AttributeDeleteTaskID = attribute.Key("d7y.manager.delete_task.id") + AttributeGetTaskID = attribute.Key("d7y.manager.get_task.id") ) const ( @@ -34,5 +32,5 @@ const ( SpanGetLayers = "get-layers" SpanAuthWithRegistry = "auth-with-registry" SpanDeleteTask = "delete-task" - SpanListTasks = "list-tasks" + SpanGetTask = "get-task" ) diff --git a/manager/config/constants.go b/manager/config/constants.go index b73a6f337da..75e6ad8e0a7 100644 --- a/manager/config/constants.go +++ b/manager/config/constants.go @@ -98,9 +98,6 @@ const ( // DefaultJobSyncPeersTimeout is the default timeout for syncing all peers information from the scheduler. DefaultJobSyncPeersTimeout = 10 * time.Minute - - // DefaultJobManagerTasksTimeout is the default timeout for manager tasks, for delete task and list tasks. - DefaultJobManagerTasksTimeout = 10 * time.Minute ) const ( diff --git a/manager/handlers/job.go b/manager/handlers/job.go index e7937136173..8ebd8906b75 100644 --- a/manager/handlers/job.go +++ b/manager/handlers/job.go @@ -60,28 +60,28 @@ func (h *Handlers) CreateJob(ctx *gin.Context) { } ctx.JSON(http.StatusOK, job) - case job.DeleteTaskJob: - var json types.CreateDeleteTaskJobRequest + case job.GetTaskJob: + var json types.CreateGetTaskJobRequest if err := ctx.ShouldBindBodyWith(&json, binding.JSON); err != nil { ctx.JSON(http.StatusUnprocessableEntity, gin.H{"errors": err.Error()}) return } - job, err := h.service.CreateDeleteTaskJob(ctx.Request.Context(), json) + job, err := h.service.CreateGetTaskJob(ctx.Request.Context(), json) if err != nil { ctx.Error(err) // nolint: errcheck return } ctx.JSON(http.StatusOK, job) - case job.ListTasksJob: - var json types.CreateListTasksJobRequest + case job.DeleteTaskJob: + var json types.CreateDeleteTaskJobRequest if err := ctx.ShouldBindBodyWith(&json, binding.JSON); err != nil { ctx.JSON(http.StatusUnprocessableEntity, gin.H{"errors": err.Error()}) return } - job, err := h.service.CreateListTasksJob(ctx.Request.Context(), json) + job, err := h.service.CreateDeleteTaskJob(ctx.Request.Context(), json) if err != nil { ctx.Error(err) // nolint: errcheck return diff --git a/manager/handlers/job_test.go b/manager/handlers/job_test.go index 2a7f2f53771..9eb311f9a3c 100644 --- a/manager/handlers/job_test.go +++ b/manager/handlers/job_test.go @@ -39,9 +39,9 @@ var ( "user_id": 4, "bio": "bio" }` - mockListTasksJobReqBody = ` + mockGetTaskJobReqBody = ` { - "type": "list_tasks", + "type": "get_task", "user_id": 4, "bio": "bio" }` @@ -62,12 +62,12 @@ var ( Type: "preheat", BIO: "bio", } - mockListTasksCreateJobRequest = types.CreateListTasksJobRequest{ + mockCreateGetTaskJobRequest = types.CreateGetTaskJobRequest{ UserID: 4, - Type: "list_tasks", + Type: "get_task", BIO: "bio", } - mockDeleteTaskCreateJobRequest = types.CreateDeleteTaskJobRequest{ + mockCreateDeleteTaskJobRequest = types.CreateDeleteTaskJobRequest{ UserID: 4, Type: "delete_task", BIO: "bio", @@ -83,10 +83,10 @@ var ( BIO: "bio", TaskID: "2", } - mockListTasksJobModel = &models.Job{ + mockGetTaskJobModel = &models.Job{ BaseModel: mockBaseModel, UserID: 4, - Type: "list_tasks", + Type: "get_task", BIO: "bio", TaskID: "2", } @@ -153,9 +153,9 @@ func TestHandlers_CreateJob(t *testing.T) { }, { name: "success", - req: httptest.NewRequest(http.MethodPost, "/oapi/v1/jobs", strings.NewReader(mockListTasksJobReqBody)), + req: httptest.NewRequest(http.MethodPost, "/oapi/v1/jobs", strings.NewReader(mockGetTaskJobReqBody)), mock: func(ms *mocks.MockServiceMockRecorder) { - ms.CreateListTasksJob(gomock.Any(), gomock.Eq(mockListTasksCreateJobRequest)).Return(mockListTasksJobModel, nil).Times(1) + ms.CreateGetTaskJob(gomock.Any(), gomock.Eq(mockCreateGetTaskJobRequest)).Return(mockGetTaskJobModel, nil).Times(1) }, expect: func(t *testing.T, w *httptest.ResponseRecorder) { assert := assert.New(t) @@ -163,14 +163,14 @@ func TestHandlers_CreateJob(t *testing.T) { job := models.Job{} err := json.Unmarshal(w.Body.Bytes(), &job) assert.NoError(err) - assert.Equal(mockListTasksJobModel, &job) + assert.Equal(mockGetTaskJobModel, &job) }, }, { name: "success", req: httptest.NewRequest(http.MethodPost, "/oapi/v1/jobs", strings.NewReader(mockDeleteTaskJobReqBody)), mock: func(ms *mocks.MockServiceMockRecorder) { - ms.CreateDeleteTaskJob(gomock.Any(), gomock.Eq(mockDeleteTaskCreateJobRequest)).Return(mockDeleteTaskJobModel, nil).Times(1) + ms.CreateDeleteTaskJob(gomock.Any(), gomock.Eq(mockCreateDeleteTaskJobRequest)).Return(mockDeleteTaskJobModel, nil).Times(1) }, expect: func(t *testing.T, w *httptest.ResponseRecorder) { assert := assert.New(t) diff --git a/manager/job/job.go b/manager/job/job.go index e939e50f0a9..1f698a4164b 100644 --- a/manager/job/job.go +++ b/manager/job/job.go @@ -40,7 +40,7 @@ type Job struct { *internaljob.Job Preheat SyncPeers - ManagerTasks + Task } // New returns a new Job. @@ -75,13 +75,12 @@ func New(cfg *config.Config, gdb *gorm.DB) (*Job, error) { return nil, err } - managerTasks := newManagerTasks(j, cfg.Job.ManagerTasks.Timeout) - + task := newTask(j) return &Job{ - Job: j, - Preheat: preheat, - SyncPeers: syncPeers, - ManagerTasks: managerTasks, + Job: j, + Preheat: preheat, + SyncPeers: syncPeers, + Task: task, }, nil } @@ -96,18 +95,18 @@ func (j *Job) Stop() { } // getSchedulerQueues gets scheduler queues. -func getSchedulerQueues(schedulers []models.Scheduler) []internaljob.Queue { +func getSchedulerQueues(schedulers []models.Scheduler) ([]internaljob.Queue, error) { var queues []internaljob.Queue for _, scheduler := range schedulers { queue, err := internaljob.GetSchedulerQueue(scheduler.SchedulerClusterID, scheduler.Hostname) if err != nil { - continue + return nil, err } queues = append(queues, queue) } - return queues + return queues, nil } // getSchedulerQueue gets scheduler queue. diff --git a/manager/job/mocks/manager_tasks_mock.go b/manager/job/mocks/manager_tasks_mock.go deleted file mode 100644 index 1d9338422de..00000000000 --- a/manager/job/mocks/manager_tasks_mock.go +++ /dev/null @@ -1,72 +0,0 @@ -// Code generated by MockGen. DO NOT EDIT. -// Source: manager_tasks.go -// -// Generated by this command: -// -// mockgen -destination mocks/manager_tasks_mock.go -source manager_tasks.go -package mocks -// -// Package mocks is a generated GoMock package. -package mocks - -import ( - context "context" - reflect "reflect" - - job "d7y.io/dragonfly/v2/internal/job" - models "d7y.io/dragonfly/v2/manager/models" - types "d7y.io/dragonfly/v2/manager/types" - gomock "go.uber.org/mock/gomock" -) - -// MockManagerTasks is a mock of ManagerTasks interface. -type MockManagerTasks struct { - ctrl *gomock.Controller - recorder *MockManagerTasksMockRecorder -} - -// MockManagerTasksMockRecorder is the mock recorder for MockManagerTasks. -type MockManagerTasksMockRecorder struct { - mock *MockManagerTasks -} - -// NewMockManagerTasks creates a new mock instance. -func NewMockManagerTasks(ctrl *gomock.Controller) *MockManagerTasks { - mock := &MockManagerTasks{ctrl: ctrl} - mock.recorder = &MockManagerTasksMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockManagerTasks) EXPECT() *MockManagerTasksMockRecorder { - return m.recorder -} - -// CreateDeleteTask mocks base method. -func (m *MockManagerTasks) CreateDeleteTask(arg0 context.Context, arg1 []models.Scheduler, arg2 types.DeleteTasksArgs) (*job.GroupJobState, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateDeleteTask", arg0, arg1, arg2) - ret0, _ := ret[0].(*job.GroupJobState) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// CreateDeleteTask indicates an expected call of CreateDeleteTask. -func (mr *MockManagerTasksMockRecorder) CreateDeleteTask(arg0, arg1, arg2 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateDeleteTask", reflect.TypeOf((*MockManagerTasks)(nil).CreateDeleteTask), arg0, arg1, arg2) -} - -// CreateListTasks mocks base method. -func (m *MockManagerTasks) CreateListTasks(arg0 context.Context, arg1 []models.Scheduler, arg2 types.ListTasksArgs) (*job.GroupJobState, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateListTasks", arg0, arg1, arg2) - ret0, _ := ret[0].(*job.GroupJobState) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// CreateListTasks indicates an expected call of CreateListTasks. -func (mr *MockManagerTasksMockRecorder) CreateListTasks(arg0, arg1, arg2 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateListTasks", reflect.TypeOf((*MockManagerTasks)(nil).CreateListTasks), arg0, arg1, arg2) -} diff --git a/manager/job/mocks/task_mock.go b/manager/job/mocks/task_mock.go new file mode 100644 index 00000000000..82b59c2670e --- /dev/null +++ b/manager/job/mocks/task_mock.go @@ -0,0 +1,73 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: task.go +// +// Generated by this command: +// +// mockgen -destination mocks/task_mock.go -source task.go -package mocks +// + +// Package mocks is a generated GoMock package. +package mocks + +import ( + context "context" + reflect "reflect" + + job "d7y.io/dragonfly/v2/internal/job" + models "d7y.io/dragonfly/v2/manager/models" + types "d7y.io/dragonfly/v2/manager/types" + gomock "go.uber.org/mock/gomock" +) + +// MockTask is a mock of Task interface. +type MockTask struct { + ctrl *gomock.Controller + recorder *MockTaskMockRecorder +} + +// MockTaskMockRecorder is the mock recorder for MockTask. +type MockTaskMockRecorder struct { + mock *MockTask +} + +// NewMockTask creates a new mock instance. +func NewMockTask(ctrl *gomock.Controller) *MockTask { + mock := &MockTask{ctrl: ctrl} + mock.recorder = &MockTaskMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockTask) EXPECT() *MockTaskMockRecorder { + return m.recorder +} + +// CreateDeleteTask mocks base method. +func (m *MockTask) CreateDeleteTask(arg0 context.Context, arg1 []models.Scheduler, arg2 types.DeleteTaskArgs) (*job.GroupJobState, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CreateDeleteTask", arg0, arg1, arg2) + ret0, _ := ret[0].(*job.GroupJobState) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// CreateDeleteTask indicates an expected call of CreateDeleteTask. +func (mr *MockTaskMockRecorder) CreateDeleteTask(arg0, arg1, arg2 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateDeleteTask", reflect.TypeOf((*MockTask)(nil).CreateDeleteTask), arg0, arg1, arg2) +} + +// CreateGetTask mocks base method. +func (m *MockTask) CreateGetTask(arg0 context.Context, arg1 []models.Scheduler, arg2 types.GetTaskArgs) (*job.GroupJobState, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CreateGetTask", arg0, arg1, arg2) + ret0, _ := ret[0].(*job.GroupJobState) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// CreateGetTask indicates an expected call of CreateGetTask. +func (mr *MockTaskMockRecorder) CreateGetTask(arg0, arg1, arg2 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateGetTask", reflect.TypeOf((*MockTask)(nil).CreateGetTask), arg0, arg1, arg2) +} diff --git a/manager/job/preheat.go b/manager/job/preheat.go index b0697224688..fe1bf438066 100644 --- a/manager/job/preheat.go +++ b/manager/job/preheat.go @@ -109,7 +109,6 @@ func (p *preheat) CreatePreheat(ctx context.Context, schedulers []models.Schedul URL: json.URL, Tag: json.Tag, FilteredQueryParams: json.FilteredQueryParams, - PieceLength: json.PieceLength, Headers: json.Headers, }, } @@ -118,7 +117,11 @@ func (p *preheat) CreatePreheat(ctx context.Context, schedulers []models.Schedul } // Initialize queues. - queues := getSchedulerQueues(schedulers) + queues, err := getSchedulerQueues(schedulers) + if err != nil { + return nil, err + } + return p.createGroupJob(ctx, files, queues) } @@ -319,7 +322,6 @@ func (p *preheat) parseLayers(manifests []distribution.Manifest, args types.Preh URL: image.blobsURL(v.Digest.String()), Tag: args.Tag, FilteredQueryParams: args.FilteredQueryParams, - PieceLength: args.PieceLength, Headers: nethttp.HeaderToMap(header), } diff --git a/manager/job/manager_tasks.go b/manager/job/task.go similarity index 56% rename from manager/job/manager_tasks.go rename to manager/job/task.go index b42a5ce1734..5cfb8efdde1 100644 --- a/manager/job/manager_tasks.go +++ b/manager/job/task.go @@ -14,7 +14,7 @@ * limitations under the License. */ -//go:generate mockgen -destination mocks/manager_tasks_mock.go -source manager_tasks.go -package mocks +//go:generate mockgen -destination mocks/task_mock.go -source task.go -package mocks package job @@ -34,30 +34,27 @@ import ( "d7y.io/dragonfly/v2/manager/types" ) -// ManagerTask is an interface for delete and list tasks. -type ManagerTasks interface { +// Task is an interface for manager tasks. +type Task interface { // CreateDeleteTask create a delete task job - CreateDeleteTask(context.Context, []models.Scheduler, types.DeleteTasksArgs) (*internaljob.GroupJobState, error) - // CreateListTasks create a list tasks job - CreateListTasks(context.Context, []models.Scheduler, types.ListTasksArgs) (*internaljob.GroupJobState, error) + CreateDeleteTask(context.Context, []models.Scheduler, types.DeleteTaskArgs) (*internaljob.GroupJobState, error) + + // CreateGetTask create a get task job + CreateGetTask(context.Context, []models.Scheduler, types.GetTaskArgs) (*internaljob.GroupJobState, error) } -// managerTasks is an implementation of ManagerTasks. -type managerTasks struct { - job *internaljob.Job - registryTimeout time.Duration +// task is an implementation of Task. +type task struct { + job *internaljob.Job } -// newManagerTasks create a new ManagerTasks. -func newManagerTasks(job *internaljob.Job, registryTimeout time.Duration) ManagerTasks { - return &managerTasks{ - job: job, - registryTimeout: registryTimeout, - } +// newTask returns a new Task. +func newTask(job *internaljob.Job) Task { + return &task{job} } -// Create a delete task job. -func (m *managerTasks) CreateDeleteTask(ctx context.Context, schedulers []models.Scheduler, json types.DeleteTasksArgs) (*internaljob.GroupJobState, error) { +// CreateDeleteTask create a delete task job +func (t *task) CreateDeleteTask(ctx context.Context, schedulers []models.Scheduler, json types.DeleteTaskArgs) (*internaljob.GroupJobState, error) { var span trace.Span ctx, span = tracer.Start(ctx, config.SpanDeleteTask, trace.WithSpanKind(trace.SpanKindProducer)) span.SetAttributes(config.AttributeDeleteTaskID.String(json.TaskID)) @@ -70,15 +67,19 @@ func (m *managerTasks) CreateDeleteTask(ctx context.Context, schedulers []models } // Initialize queues. - queues := getSchedulerQueues(schedulers) - return m.createGroupJob(ctx, internaljob.DeleteTaskJob, args, queues) + queues, err := getSchedulerQueues(schedulers) + if err != nil { + return nil, err + } + + return t.createGroupJob(ctx, internaljob.DeleteTaskJob, args, queues) } -// Create a list tasks job. -func (m *managerTasks) CreateListTasks(ctx context.Context, schedulers []models.Scheduler, json types.ListTasksArgs) (*internaljob.GroupJobState, error) { +// CreateGetTask create a get task job +func (t *task) CreateGetTask(ctx context.Context, schedulers []models.Scheduler, json types.GetTaskArgs) (*internaljob.GroupJobState, error) { var span trace.Span - ctx, span = tracer.Start(ctx, config.SpanListTasks, trace.WithSpanKind(trace.SpanKindProducer)) - span.SetAttributes(config.AttributeListTasksID.String(json.TaskID)) + ctx, span = tracer.Start(ctx, config.SpanGetTask, trace.WithSpanKind(trace.SpanKindProducer)) + span.SetAttributes(config.AttributeGetTaskID.String(json.TaskID)) defer span.End() args, err := internaljob.MarshalRequest(json) @@ -88,12 +89,16 @@ func (m *managerTasks) CreateListTasks(ctx context.Context, schedulers []models. } // Initialize queues. - queues := getSchedulerQueues(schedulers) - return m.createGroupJob(ctx, internaljob.ListTasksJob, args, queues) + queues, err := getSchedulerQueues(schedulers) + if err != nil { + return nil, err + } + + return t.createGroupJob(ctx, internaljob.GetTaskJob, args, queues) } // createGroupJob creates a group job. -func (m *managerTasks) createGroupJob(ctx context.Context, name string, args []machineryv1tasks.Arg, queues []internaljob.Queue) (*internaljob.GroupJobState, error) { +func (t *task) createGroupJob(ctx context.Context, name string, args []machineryv1tasks.Arg, queues []internaljob.Queue) (*internaljob.GroupJobState, error) { var signatures []*machineryv1tasks.Signature for _, queue := range queues { signatures = append(signatures, &machineryv1tasks.Signature{ @@ -114,9 +119,9 @@ func (m *managerTasks) createGroupJob(ctx context.Context, name string, args []m tasks = append(tasks, *signature) } - logger.Infof("create manager tasks group %s in queues %v, tasks: %#v", group.GroupUUID, queues, tasks) - if _, err := m.job.Server.SendGroupWithContext(ctx, group, 0); err != nil { - logger.Errorf("create manager tasks group %s failed", group.GroupUUID, err) + logger.Infof("create task group %s in queues %v, tasks: %#v", group.GroupUUID, queues, tasks) + if _, err := t.job.Server.SendGroupWithContext(ctx, group, 0); err != nil { + logger.Errorf("create task group %s failed", group.GroupUUID, err) return nil, err } diff --git a/manager/service/job.go b/manager/service/job.go index 3b4319babec..a0f76deb034 100644 --- a/manager/service/job.go +++ b/manager/service/job.go @@ -37,10 +37,6 @@ func (s *service) CreatePreheatJob(ctx context.Context, json types.CreatePreheat return nil, err } - if json.Args.PieceLength == 0 { - json.Args.PieceLength = types.DefaultPreheatJobPieceLength - } - groupJobState, err := s.job.CreatePreheat(ctx, candidateSchedulers, json.Args) if err != nil { return nil, err @@ -115,13 +111,13 @@ func (s *service) CreateDeleteTaskJob(ctx context.Context, json types.CreateDele return &job, nil } -func (s *service) CreateListTasksJob(ctx context.Context, json types.CreateListTasksJobRequest) (*models.Job, error) { +func (s *service) CreateGetTaskJob(ctx context.Context, json types.CreateGetTaskJobRequest) (*models.Job, error) { candidateSchedulers, err := s.findCandidateSchedulers(ctx, json.SchedulerClusterIDs) if err != nil { return nil, err } - groupJobState, err := s.job.CreateListTasks(ctx, candidateSchedulers, json.Args) + groupJobState, err := s.job.CreateGetTask(ctx, candidateSchedulers, json.Args) if err != nil { return nil, err } @@ -153,7 +149,6 @@ func (s *service) CreateListTasksJob(ctx context.Context, json types.CreateListT go s.pollingJob(context.Background(), job.ID, job.TaskID) return &job, nil - } func (s *service) findCandidateSchedulers(ctx context.Context, schedulerClusterIDs []uint) ([]models.Scheduler, error) { diff --git a/manager/service/mocks/service_mock.go b/manager/service/mocks/service_mock.go index 81294cf9eab..1303453f37b 100644 --- a/manager/service/mocks/service_mock.go +++ b/manager/service/mocks/service_mock.go @@ -169,6 +169,12 @@ func (m *MockService) CreateConfig(arg0 context.Context, arg1 types.CreateConfig return ret0, ret1 } +// CreateConfig indicates an expected call of CreateConfig. +func (mr *MockServiceMockRecorder) CreateConfig(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateConfig", reflect.TypeOf((*MockService)(nil).CreateConfig), arg0, arg1) +} + // CreateDeleteTaskJob mocks base method. func (m *MockService) CreateDeleteTaskJob(arg0 context.Context, arg1 types.CreateDeleteTaskJobRequest) (*models.Job, error) { m.ctrl.T.Helper() @@ -184,25 +190,19 @@ func (mr *MockServiceMockRecorder) CreateDeleteTaskJob(arg0, arg1 any) *gomock.C return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateDeleteTaskJob", reflect.TypeOf((*MockService)(nil).CreateDeleteTaskJob), arg0, arg1) } -// CreateListTasksJob mocks base method. -func (m *MockService) CreateListTasksJob(arg0 context.Context, arg1 types.CreateListTasksJobRequest) (*models.Job, error) { +// CreateGetTaskJob mocks base method. +func (m *MockService) CreateGetTaskJob(arg0 context.Context, arg1 types.CreateGetTaskJobRequest) (*models.Job, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateListTasksJob", arg0, arg1) + ret := m.ctrl.Call(m, "CreateGetTaskJob", arg0, arg1) ret0, _ := ret[0].(*models.Job) ret1, _ := ret[1].(error) return ret0, ret1 } -// CreateListTasksJob indicates an expected call of CreateListTasksJob. -func (mr *MockServiceMockRecorder) CreateListTasksJob(arg0, arg1 any) *gomock.Call { +// CreateGetTaskJob indicates an expected call of CreateGetTaskJob. +func (mr *MockServiceMockRecorder) CreateGetTaskJob(arg0, arg1 any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateListTasksJob", reflect.TypeOf((*MockService)(nil).CreateListTasksJob), arg0, arg1) -} - -// CreateConfig indicates an expected call of CreateConfig. -func (mr *MockServiceMockRecorder) CreateConfig(arg0, arg1 any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateConfig", reflect.TypeOf((*MockService)(nil).CreateConfig), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateGetTaskJob", reflect.TypeOf((*MockService)(nil).CreateGetTaskJob), arg0, arg1) } // CreateOauth mocks base method. diff --git a/manager/service/preheat.go b/manager/service/preheat.go index cb4345a91eb..83f43ced3ae 100644 --- a/manager/service/preheat.go +++ b/manager/service/preheat.go @@ -51,7 +51,6 @@ func (s *service) CreateV1Preheat(ctx context.Context, json types.CreateV1Prehea Type: json.Type, URL: json.URL, FilteredQueryParams: json.FilteredQueryParams, - PieceLength: types.DefaultPreheatJobPieceLength, Headers: json.Headers, }, }) diff --git a/manager/service/service.go b/manager/service/service.go index 12548517cfd..fcbf6d63687 100644 --- a/manager/service/service.go +++ b/manager/service/service.go @@ -115,7 +115,7 @@ type Service interface { CreatePreheatJob(context.Context, types.CreatePreheatJobRequest) (*models.Job, error) CreateDeleteTaskJob(context.Context, types.CreateDeleteTaskJobRequest) (*models.Job, error) - CreateListTasksJob(context.Context, types.CreateListTasksJobRequest) (*models.Job, error) + CreateGetTaskJob(context.Context, types.CreateGetTaskJobRequest) (*models.Job, error) DestroyJob(context.Context, uint) error UpdateJob(context.Context, uint, types.UpdateJobRequest) (*models.Job, error) GetJob(context.Context, uint) (*models.Job, error) diff --git a/manager/types/job.go b/manager/types/job.go index 15e5265fd6a..7b436f66364 100644 --- a/manager/types/job.go +++ b/manager/types/job.go @@ -16,11 +16,6 @@ package types -const ( - // DefaultPreheatJobPieceLength is the default piece length for preheating. - DefaultPreheatJobPieceLength = 4 * 1024 * 1024 -) - type CreateJobRequest struct { BIO string `json:"bio" binding:"omitempty"` Type string `json:"type" binding:"required"` @@ -57,32 +52,6 @@ type CreatePreheatJobRequest struct { SchedulerClusterIDs []uint `json:"scheduler_cluster_ids" binding:"omitempty"` } -type CreateDeleteTaskJobRequest struct { - BIO string `json:"bio" binding:"omitempty"` - Type string `json:"type" binding:"required"` - Args DeleteTasksArgs `json:"args" binding:"omitempty"` - Result map[string]any `json:"result" binding:"omitempty"` - UserID uint `json:"user_id" binding:"omitempty"` - SchedulerClusterIDs []uint `json:"scheduler_cluster_ids" binding:"omitempty"` -} - -type DeleteTasksArgs struct { - TaskID string `json:"task_id" binding:"required"` -} - -type CreateListTasksJobRequest struct { - BIO string `json:"bio" binding:"omitempty"` - Type string `json:"type" binding:"required"` - Args ListTasksArgs `json:"args" binding:"omitempty"` - Result map[string]any `json:"result" binding:"omitempty"` - UserID uint `json:"user_id" binding:"omitempty"` - SchedulerClusterIDs []uint `json:"scheduler_cluster_ids" binding:"omitempty"` -} - -type ListTasksArgs struct { - TaskID string `json:"task_id" binding:"required"` -} - type PreheatArgs struct { // Type is the preheating type, support image and file. Type string `json:"type" binding:"required,oneof=image file"` @@ -96,9 +65,6 @@ type PreheatArgs struct { // FilteredQueryParams is the filtered query params for preheating. FilteredQueryParams string `json:"filtered_query_params" binding:"omitempty"` - // PieceLength is the piece length for preheating. - PieceLength uint32 `json:"piece_length" binding:"omitempty"` - // Headers is the http headers for authentication. Headers map[string]string `json:"headers" binding:"omitempty"` @@ -111,3 +77,29 @@ type PreheatArgs struct { // The image type preheating task can specify the image architecture type. eg: linux/amd64. Platform string `json:"platform" binding:"omitempty"` } + +type CreateGetTaskJobRequest struct { + BIO string `json:"bio" binding:"omitempty"` + Type string `json:"type" binding:"required"` + Args GetTaskArgs `json:"args" binding:"omitempty"` + Result map[string]any `json:"result" binding:"omitempty"` + UserID uint `json:"user_id" binding:"omitempty"` + SchedulerClusterIDs []uint `json:"scheduler_cluster_ids" binding:"omitempty"` +} + +type GetTaskArgs struct { + TaskID string `json:"task_id" binding:"required"` +} + +type CreateDeleteTaskJobRequest struct { + BIO string `json:"bio" binding:"omitempty"` + Type string `json:"type" binding:"required"` + Args DeleteTaskArgs `json:"args" binding:"omitempty"` + Result map[string]any `json:"result" binding:"omitempty"` + UserID uint `json:"user_id" binding:"omitempty"` + SchedulerClusterIDs []uint `json:"scheduler_cluster_ids" binding:"omitempty"` +} + +type DeleteTaskArgs struct { + TaskID string `json:"task_id" binding:"required"` +} diff --git a/pkg/idgen/task_id.go b/pkg/idgen/task_id.go index 2c03e371f83..993e6fe3969 100644 --- a/pkg/idgen/task_id.go +++ b/pkg/idgen/task_id.go @@ -17,7 +17,6 @@ package idgen import ( - "fmt" "strings" commonv1 "d7y.io/api/v2/pkg/apis/common/v1" @@ -92,11 +91,11 @@ func parseFilteredQueryParams(rawFilteredQueryParams string) []string { } // TaskIDV2 generates v2 version of task id. -func TaskIDV2(url, digest, tag, application string, pieceLength int32, filteredQueryParams []string) string { +func TaskIDV2(url, digest, tag, application string, filteredQueryParams []string) string { url, err := neturl.FilterQueryParams(url, filteredQueryParams) if err != nil { url = "" } - return pkgdigest.SHA256FromStrings(url, digest, tag, application, fmt.Sprint(pieceLength)) + return pkgdigest.SHA256FromStrings(url, digest, tag, application) } diff --git a/pkg/idgen/task_id_test.go b/pkg/idgen/task_id_test.go index 5f86e134df1..11cf4d003e5 100644 --- a/pkg/idgen/task_id_test.go +++ b/pkg/idgen/task_id_test.go @@ -113,7 +113,6 @@ func TestTaskIDV2(t *testing.T) { digest string tag string application string - pieceLength int32 filters []string expect func(t *testing.T, d any) }{ @@ -123,11 +122,10 @@ func TestTaskIDV2(t *testing.T) { digest: "sha256:c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", tag: "foo", application: "bar", - pieceLength: 1, filters: []string{}, expect: func(t *testing.T, d any) { assert := assert.New(t) - assert.Equal(d, "6acf73532a2e7b8c30dfc7abce2fd7d2a2cd3746f16b0d54d3e2f136ffa61c90") + assert.Equal(d, "c8659b8372599cf22c7a2de260dd6e148fca6d4e1c2940703022867f739d071d") }, }, { @@ -136,7 +134,7 @@ func TestTaskIDV2(t *testing.T) { digest: "sha256:c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", expect: func(t *testing.T, d any) { assert := assert.New(t) - assert.Equal(d, "b08a435da662ad5ae8ab8359a9c4ebd5027cf14d04b71ccc85f1e197e898adbd") + assert.Equal(d, "60469c583429af631a45540f05e08805b31ca4f84e7974cad35cfc84c197bcf8") }, }, { @@ -145,7 +143,7 @@ func TestTaskIDV2(t *testing.T) { tag: "foo", expect: func(t *testing.T, d any) { assert := assert.New(t) - assert.Equal(d, "274c3716c538b5a49e7296ee36dd412bae29948dfb6153e5ac9694e382144f83") + assert.Equal(d, "2773851c628744fb7933003195db436ce397c1722920696c4274ff804d86920b") }, }, { @@ -154,16 +152,7 @@ func TestTaskIDV2(t *testing.T) { application: "bar", expect: func(t *testing.T, d any) { assert := assert.New(t) - assert.Equal(d, "ca12c6591c38f726c238f35d9c7945559b52a0dcc10ae191920be6f5f8a0326a") - }, - }, - { - name: "generate taskID with pieceLength", - url: "https://example.com", - pieceLength: 1, - expect: func(t *testing.T, d any) { - assert := assert.New(t) - assert.Equal(d, "614fb0088e7d82b2538f1ccb5861db5940aaa665b587792898e4be1f591bafec") + assert.Equal(d, "63dee2822037636b0109876b58e95692233840753a882afa69b9b5ee82a6c57d") }, }, { @@ -172,14 +161,14 @@ func TestTaskIDV2(t *testing.T) { filters: []string{"foo", "bar"}, expect: func(t *testing.T, d any) { assert := assert.New(t) - assert.Equal(d, "4a89bbe790108d4987e7dc5127df2b99aea1c17828f1ff3e55176f49ac974b28") + assert.Equal(d, "100680ad546ce6a577f42f52df33b4cfdca756859e664b8d7de329b150d09ce9") }, }, } for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { - tc.expect(t, TaskIDV2(tc.url, tc.digest, tc.tag, tc.application, tc.pieceLength, tc.filters)) + tc.expect(t, TaskIDV2(tc.url, tc.digest, tc.tag, tc.application, tc.filters)) }) } } diff --git a/scheduler/job/job.go b/scheduler/job/job.go index 82c56a5a6d7..a03052627da 100644 --- a/scheduler/job/job.go +++ b/scheduler/job/job.go @@ -47,6 +47,7 @@ import ( const ( // preheatTimeout is timeout of preheating. preheatTimeout = 20 * time.Minute + // deleteTaskTimeout is timeout of deleting task. deleteTaskTimeout = 20 * time.Minute ) @@ -114,7 +115,7 @@ func New(cfg *config.Config, resource resource.Resource) (Job, error) { namedJobFuncs := map[string]any{ internaljob.PreheatJob: t.preheat, internaljob.SyncPeersJob: t.syncPeers, - internaljob.ListTasksJob: t.listTasks, + internaljob.GetTaskJob: t.getTask, internaljob.DeleteTaskJob: t.deleteTask, } @@ -248,7 +249,7 @@ func (j *job) preheatV1(ctx context.Context, req *internaljob.PreheatRequest) er // preheatV2 preheats job by v2 grpc protocol. func (j *job) preheatV2(ctx context.Context, req *internaljob.PreheatRequest) error { filteredQueryParams := strings.Split(req.FilteredQueryParams, idgen.FilteredQueryParamsSeparator) - taskID := idgen.TaskIDV2(req.URL, req.Digest, req.Tag, req.Application, int32(req.PieceLength), filteredQueryParams) + taskID := idgen.TaskIDV2(req.URL, req.Digest, req.Tag, req.Application, filteredQueryParams) log := logger.WithTask(taskID, req.URL) log.Infof("preheat(v2) %s tag: %s, filtered query params: %s, digest: %s, headers: %#v", @@ -264,7 +265,6 @@ func (j *job) preheatV2(ctx context.Context, req *internaljob.PreheatRequest) er Priority: commonv2.Priority(req.Priority), FilteredQueryParams: filteredQueryParams, RequestHeader: req.Headers, - PieceLength: uint64(req.PieceLength), }}) if err != nil { logger.Errorf("preheat(v2) %s failed: %s", req.URL, err.Error()) @@ -303,31 +303,28 @@ func (j *job) syncPeers() (string, error) { return internaljob.MarshalResponse(hosts) } -// listTasks is a job to list tasks. -func (j *job) listTasks(ctx context.Context, data string) (string, error) { - req := &internaljob.ListTasksRequest{} +// getTask is a job to get task. +func (j *job) getTask(ctx context.Context, data string) (string, error) { + req := &internaljob.GetTaskRequest{} if err := internaljob.UnmarshalRequest(data, req); err != nil { logger.Errorf("unmarshal request err: %s, request body: %s", err.Error(), data) return "", err } if err := validator.New().Struct(req); err != nil { - logger.Errorf("listTasks %s validate failed: %s", req.TaskID, err.Error()) - return "", err - } - - // Get all peers by task id - peers, err := j.getFinishedPeers(req.TaskID) - if err != nil { - logger.Errorf("get peers by task id %s failed: %s", req.TaskID, err.Error()) + logger.Errorf("getTask %s validate failed: %s", req.TaskID, err.Error()) return "", err } - listTaskResponse := &internaljob.ListTasksResponse{ - Peers: peers, + task, ok := j.resource.TaskManager().Load(req.TaskID) + if !ok { + logger.Errorf("task %s not found", req.TaskID) + return "", fmt.Errorf("task %s not found", req.TaskID) } - return internaljob.MarshalResponse(listTaskResponse) + return internaljob.MarshalResponse(&internaljob.GetTaskResponse{ + Peers: task.LoadPeers(), + }) } // deleteTask is a job to delete task. @@ -346,68 +343,51 @@ func (j *job) deleteTask(ctx context.Context, data string) (string, error) { return "", err } - // Get all peers by task id - peers, err := j.getFinishedPeers(req.TaskID) - if err != nil { - logger.Errorf("get peers by task id %s failed: %s", req.TaskID, err.Error()) - return "", err + task, ok := j.resource.TaskManager().Load(req.TaskID) + if !ok { + logger.Errorf("task %s not found", req.TaskID) + return "", fmt.Errorf("task %s not found", req.TaskID) } - // Delete task by task id and host id - successTasks := make([]*internaljob.Task, 0) - failureTasks := make([]*internaljob.Task, 0) + successPeers := []*internaljob.DeletePeerResponse{} + failurePeers := []*internaljob.DeletePeerResponse{} + + finishedPeers := task.LoadFinishedPeers() + for _, finishedPeer := range finishedPeers { + log := logger.WithPeer(finishedPeer.Host.ID, finishedPeer.Task.ID, finishedPeer.ID) - // TODO: Create a limiter to limit delete rpc concurrency - // and avoid too many rpc requests to the host. - for _, peer := range peers { - // Get dfdaemon client from host - target := fmt.Sprintf("%s:%d", peer.Host.IP, peer.Host.Port) - dfdaemonUploadClient, err := dfdaemonclient.GetV2ByAddr(ctx, target) + addr := fmt.Sprintf("%s:%d", finishedPeer.Host.IP, finishedPeer.Host.Port) + dfdaemonClient, err := dfdaemonclient.GetV2ByAddr(ctx, addr) if err != nil { - logger.Errorf("get dfdaemon client from %s failed: %s", target, err.Error()) - failureTasks = append(failureTasks, &internaljob.Task{ - Task: peer.Task, - Peer: peer, + log.Errorf("get client from %s failed: %s", addr, err.Error()) + failurePeers = append(failurePeers, &internaljob.DeletePeerResponse{ + Peer: finishedPeer, Description: err.Error(), }) + continue } - err = dfdaemonUploadClient.DeleteCacheTask(ctx, &dfdaemonv2.DeleteCacheTaskRequest{ + + if err = dfdaemonClient.DeleteCacheTask(ctx, &dfdaemonv2.DeleteCacheTaskRequest{ TaskId: req.TaskID, - }) - if err != nil { - logger.Errorf("delete task %s from %s failed: %s", req.TaskID, target, err.Error()) - failureTasks = append(failureTasks, &internaljob.Task{ - Task: peer.Task, - Peer: peer, + }); err != nil { + logger.Errorf("delete task failed: %s", err.Error()) + failurePeers = append(failurePeers, &internaljob.DeletePeerResponse{ + Peer: finishedPeer, Description: err.Error(), }) + continue } - successTasks = append(successTasks, &internaljob.Task{ - Task: peer.Task, - Peer: peer, - Description: fmt.Sprintf("delete task %s from %s success", req.TaskID, target), + successPeers = append(successPeers, &internaljob.DeletePeerResponse{ + Peer: finishedPeer, + Description: "", }) } - deleteTaskResponse := &internaljob.DeleteTaskResponse{ - SuccessTasks: successTasks, - FailureTasks: failureTasks, - } - - return internaljob.MarshalResponse(deleteTaskResponse) -} - -// getFinishedPeers try to get valid peers by task id -func (j *job) getFinishedPeers(taskID string) ([]*resource.Peer, error) { - // get task info by task id - task, ok := j.resource.TaskManager().Load(taskID) - if !ok { - logger.Errorf("task %s not found", taskID) - return nil, fmt.Errorf("task %s not found", taskID) - } - - return task.LoadFinishedPeers(), nil + return internaljob.MarshalResponse(&internaljob.DeleteTaskResponse{ + FailurePeers: failurePeers, + SuccessPeers: successPeers, + }) } diff --git a/scheduler/resource/task.go b/scheduler/resource/task.go index a9d0caa4c8c..6a6e1e132fb 100644 --- a/scheduler/resource/task.go +++ b/scheduler/resource/task.go @@ -34,6 +34,7 @@ import ( "d7y.io/dragonfly/v2/pkg/container/set" "d7y.io/dragonfly/v2/pkg/digest" "d7y.io/dragonfly/v2/pkg/graph/dag" + pkgstrings "d7y.io/dragonfly/v2/pkg/strings" "d7y.io/dragonfly/v2/pkg/types" ) @@ -249,18 +250,23 @@ func (t *Task) LoadRandomPeers(n uint) []*Peer { return peers } +// LoadPeers return all peers. +func (t *Task) LoadPeers() []*Peer { + var peers []*Peer + for _, vertex := range t.DAG.GetVertices() { + peers = append(peers, vertex.Value) + } + + return peers +} + // LoadFinishedPeers return finished peers. func (t *Task) LoadFinishedPeers() []*Peer { - // Choose finished peers var finishedPeers []*Peer for _, vertex := range t.DAG.GetVertices() { peer := vertex.Value - if peer == nil { - continue - } - - currentState := peer.FSM.Current() - if currentState == PeerStateSucceeded || currentState == PeerStateFailed { + peerState := peer.FSM.Current() + if pkgstrings.Contains([]string{PeerStateSucceeded, PeerStateFailed, PeerStateLeave}, peerState) { finishedPeers = append(finishedPeers, peer) } } diff --git a/scheduler/resource/task_test.go b/scheduler/resource/task_test.go index a597221cdd4..246aadc70d5 100644 --- a/scheduler/resource/task_test.go +++ b/scheduler/resource/task_test.go @@ -52,7 +52,7 @@ var ( mockTaskBackToSourceLimit int32 = 200 mockTaskURL = "http://example.com/foo" - mockTaskID = idgen.TaskIDV2(mockTaskURL, mockTaskDigest.String(), mockTaskTag, mockTaskApplication, mockTaskPieceLength, mockTaskFilteredQueryParams) + mockTaskID = idgen.TaskIDV2(mockTaskURL, mockTaskDigest.String(), mockTaskTag, mockTaskApplication, mockTaskFilteredQueryParams) mockTaskDigest = digest.New(digest.AlgorithmSHA256, "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4") mockTaskTag = "d7y" mockTaskApplication = "foo" diff --git a/scheduler/scheduling/evaluator/evaluator_base_test.go b/scheduler/scheduling/evaluator/evaluator_base_test.go index 19a0e784a0d..1f0e5da5f13 100644 --- a/scheduler/scheduling/evaluator/evaluator_base_test.go +++ b/scheduler/scheduling/evaluator/evaluator_base_test.go @@ -131,7 +131,7 @@ var ( mockTaskBackToSourceLimit int32 = 200 mockTaskURL = "http://example.com/foo" - mockTaskID = idgen.TaskIDV2(mockTaskURL, mockTaskDigest.String(), mockTaskTag, mockTaskApplication, mockTaskPieceLength, mockTaskFilteredQueryParams) + mockTaskID = idgen.TaskIDV2(mockTaskURL, mockTaskDigest.String(), mockTaskTag, mockTaskApplication, mockTaskFilteredQueryParams) mockTaskDigest = digest.New(digest.AlgorithmSHA256, "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4") mockTaskTag = "d7y" mockTaskApplication = "foo" diff --git a/scheduler/scheduling/scheduling_test.go b/scheduler/scheduling/scheduling_test.go index c790283c4e5..27a9b935c8c 100644 --- a/scheduler/scheduling/scheduling_test.go +++ b/scheduler/scheduling/scheduling_test.go @@ -159,7 +159,7 @@ var ( mockTaskBackToSourceLimit int32 = 200 mockTaskURL = "http://example.com/foo" - mockTaskID = idgen.TaskIDV2(mockTaskURL, mockTaskDigest.String(), mockTaskTag, mockTaskApplication, mockTaskPieceLength, mockTaskFilteredQueryParams) + mockTaskID = idgen.TaskIDV2(mockTaskURL, mockTaskDigest.String(), mockTaskTag, mockTaskApplication, mockTaskFilteredQueryParams) mockTaskDigest = digest.New(digest.AlgorithmSHA256, "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4") mockTaskTag = "d7y" mockTaskApplication = "foo" diff --git a/scheduler/service/service_v1_test.go b/scheduler/service/service_v1_test.go index 1f792cf0207..44ca42b43af 100644 --- a/scheduler/service/service_v1_test.go +++ b/scheduler/service/service_v1_test.go @@ -197,7 +197,7 @@ var ( mockTaskBackToSourceLimit int32 = 200 mockTaskURL = "http://example.com/foo" - mockTaskID = idgen.TaskIDV2(mockTaskURL, mockTaskDigest.String(), mockTaskTag, mockTaskApplication, mockTaskPieceLength, mockTaskFilteredQueryParams) + mockTaskID = idgen.TaskIDV2(mockTaskURL, mockTaskDigest.String(), mockTaskTag, mockTaskApplication, mockTaskFilteredQueryParams) mockTaskDigest = digest.New(digest.AlgorithmSHA256, "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4") mockTaskTag = "d7y" mockTaskApplication = "foo" diff --git a/test/e2e/v2/concurrency_test.go b/test/e2e/v2/concurrency_test.go index 62a1c6bf2b7..e5707cbcfae 100644 --- a/test/e2e/v2/concurrency_test.go +++ b/test/e2e/v2/concurrency_test.go @@ -37,7 +37,7 @@ var _ = Describe("Download Concurrency", func() { Expect(err).NotTo(HaveOccurred()) fileMetadata := util.FileMetadata{ - ID: "423990483b62613df9671fb8f3cf48f4c46b9486debf65e62a765719547a00d2", + ID: "de7d72a4f865bb1b1d3a9b7288bfd369a500277f5565736b2ba67aa205958df7", Sha256: "fc44bbbba20490450c73530db3d1b935f893f38d7d8084ca132952a765ff5ff6", } @@ -67,7 +67,7 @@ var _ = Describe("Download Concurrency", func() { Expect(err).NotTo(HaveOccurred()) fileMetadata := util.FileMetadata{ - ID: "f533d0d08acd4e6d57c0249e97aa08195deb41a470cf781cdfc15e4bf34a87e9", + ID: "510f018dc34c7e6ced07db2e88654a4e565e7982d5c73994e48e901f633c8113", Sha256: "dc102987a36be20846821ac74648534863ff0fe8897d4250273a6ffc80481d91", } @@ -97,7 +97,7 @@ var _ = Describe("Download Concurrency", func() { Expect(err).NotTo(HaveOccurred()) fileMetadata := util.FileMetadata{ - ID: "7eee7f3238d0e8c40ac822dbc156384c160d2b3ea0fab1bbddcbe91f31c7caae", + ID: "381ee3f1dd0b55d151997e107e5517e4ac315677a4ed67c3cd814fe7b86481d1", Sha256: "54e54b7ff54ef70d4db2adcd24a27e3b9af3cd99fc0213983bac1e8035429be6", } @@ -127,7 +127,7 @@ var _ = Describe("Download Concurrency", func() { Expect(err).NotTo(HaveOccurred()) fileMetadata := util.FileMetadata{ - ID: "90fd5db5089bee6c00a2eedd616df7b34cfe22894235bb6bbe44ac1e9a9051a6", + ID: "0068ce9e9beaca3ec33911d537be56de2d12e1b201bf3230aefe803919c373a5", Sha256: "87c09b7c338f258809ca2d436bbe06ac94a3166b3f3e1125a86f35d9a9aa1d2f", } diff --git a/test/e2e/v2/containerd_test.go b/test/e2e/v2/containerd_test.go index 14afc3cf0da..08e1e4d30ba 100644 --- a/test/e2e/v2/containerd_test.go +++ b/test/e2e/v2/containerd_test.go @@ -35,27 +35,27 @@ var _ = Describe("Containerd with CRI support", func() { taskMetadatas := []util.TaskMetadata{ { - ID: "ff679754c7951659b21b84fedc15c82e285909146329eae5114a762459b49221", + ID: "c6c9f8b1ded96e4355f46c56c858cc52906ece01df55ad2c9600bd3635af2b74", Sha256: "ca51217de9012bffe54390f1a91365af22a06279a3f2b3e57d4d2dc99b989588", }, { - ID: "cfe7b96cdd7af51b0433507da8c4239adb1985d27c8a62136b7ca4c2b0796d63", + ID: "389a7dd948c14ecaa3b36d0c3697a41b2547ea556ca0f1b427860b4b11e80815", Sha256: "0d816dfc0753b877a04e3df93557bd3597fc7d0e308726655b14401c22a3b92a", }, { - ID: "43ab6b508e9e57e990d38322572a39fd628fd5ec34d83ecd66aee5d199265f84", + ID: "d16441e8c63799b5148a46edb0af535dd017f43f684510bd5ddd358e901c36ad", Sha256: "b5941d5a445040d3a792e5be361ca42989d97fc30ff53031f3004ccea8e44520", }, { - ID: "88c81ef2a014504dd493eeb4ad140dbfe05e12a53038fea2f4f04e10fd4bcf38", + ID: "221de8465d2047153514e30cd586b9a6398bc8860ad5ea7c5853a3ca09b423c2", Sha256: "c1d6d1b2d5a367259e6e51a7f4d1ccd66a28cc9940d6599d8a8ea9544dd4b4a8", }, { - ID: "adad87ebcac1fc92d13051a8f15fc29f33f733a93ad322119e00764cbbbcb501", + ID: "71f89a34789a43c3ad7f55842890d0caf5a45a833bf4c8b72874b174f0358127", Sha256: "2a1bc4e0f20bb5ed9a2197ecffde7eace4a9b9179048614205d025df73ba97c7", }, { - ID: "1dcf30a9df83b64fd8ad85288ed01def4d8758ee9c433861b86ceced46b2c97d", + ID: "166359883b2334eb1ee9a9d49209a4286328c5e28605367e2d073fbdac6f5d0d", Sha256: "078ea4eebc352a499d7bb6ff65fab1325226e524acac89a9db922ad91cab88f1", }, } @@ -98,19 +98,19 @@ var _ = Describe("Containerd with CRI support", func() { taskMetadatas := []util.TaskMetadata{ { - ID: "69fa645056298e4809c88cf86c3fb559ffa62bb4d1f986cacf1aa81933e3d030", + ID: "b01e905eb9803c65ade52d10b56cd024d5437377a477a53488cbbd346e895918", Sha256: "0f4277a6444fbaf4eb5a7f39103e281dd57969953c7425edc7c8d4aa419347eb", }, { - ID: "23eaaf799cb4191256c352aec0a207089a26e105e779e7f93f3726598c975165", + ID: "f318e52bbbd81e2ba2afc697379118445ea32df733c92b20bfab6ba5183257a4", Sha256: "e55b67c1d5660c34dcb0d8e6923d0a50695a4f0d94f858353069bae17d0bfdea", }, { - ID: "4dbaa1695f5410bcd59560cf79408c1ae69d27c8cfd94259359ff69e026ebdaa", + ID: "5276a8a1dc433233d58c36a16a795511c946cf1f27b36ec60efeaae43a615b23", Sha256: "8572bc8fb8a32061648dd183b2c0451c82be1bd053a4ea8fae991436b92faebb", }, { - ID: "c65dac943d3f294a1e0005618ac197a4f8d38eb93176a631eba7e34913cb5747", + ID: "83f9961825895cb4890a15db88980832adf825070c148d4260dfeb703652cd7f", Sha256: "88bfc12bad0cc91b2d47de4c7a755f6547b750256cc4c8b284e07aae13e4e041", }, } @@ -154,27 +154,27 @@ var _ = Describe("Containerd with CRI support", func() { taskMetadatas := []util.TaskMetadata{ { - ID: "d6998ea9e6f6d0fe8dfa5efe1098d4bc29234a298a1bf857c3129d534c064dd5", + ID: "157855128cf9d03cf9d5dcc53ec5d13a1dd26b252c6eda628fec21ccf9a8c349", Sha256: "c8071d0de0f5bb17fde217dafdc9d2813ce9db77e60f6233bcd32f1c8888b121", }, { - ID: "9764b091db2dca99e2a0c09c776be3915e913f02def63e794435e048d2cb7ad7", + ID: "76773bad88ce3fded570cc165fe9c11b946622a07172727e18f64fb4316efc5a", Sha256: "e964513726885fa2f977425fc889eabbe25c9fa47e7a4b0ec5e2baef96290f47", }, { - ID: "e376fd3b1d92d8db1a29fc7aa307ae243eaa229a84ffc4f4f84247046fd75850", + ID: "c65a3d75938ab15d2520c6ed8a8680ae41921172f0c9359b6ed7e67573f7989d", Sha256: "0e304933d7eae4674e05b3bc409f236c65077e2b7055119bbd66ff613fe5e1ad", }, { - ID: "77fb97fa428921c5a5a72be510c69b1208db540479dda3a1ff765a248ed23287", + ID: "d96e650ebf7ec07618a8629880ca0da62fd9e36a9fe59eb309636c6c66410489", Sha256: "53b01ef3d5d676a8514ded6b469932e33d84738e5e00932ca124382a8567c44b", }, { - ID: "b58219de7051f520e222ce29c90e2d61b49649d714bd2d9e6ebcebbc83a15f2b", + ID: "666b5bdb2a3c0498dfb3b73b95bc85b2679d0c65ef5d8e80ae9038b92631bfec", Sha256: "c9d959fc168ad8bdc9a021066eb9c1dd4de8e860c03619a88d8ba0ff5479d9ea", }, { - ID: "4bceb8758fe687ac33610c23f503dc13d9050c15be3f20f9141b94a450070d9f", + ID: "886aaa587415010d418ce8d3848fda6c3c0d2c8ae733960d28e2bc9149e5ed07", Sha256: "b6acfae843b58bf14369ebbeafa96af5352cde9a89f8255ca51f92b233a6e405", }, } @@ -218,15 +218,15 @@ var _ = Describe("Containerd with CRI support", func() { taskMetadatas := []util.TaskMetadata{ { - ID: "5f04fd58b821860c616ad3f8cfe096c53969086a99ec9d63a7b6d75e643cd33f", + ID: "3a909585362079e870dd1f2286433b24fe1f2007599dadc6eaf5f73d8ba2b209", Sha256: "c58d97dd21c3b3121f262a1fbb5a278f77ab85dba7a02b819e710f34683cf746", }, { - ID: "67948562926bcaafea035f5e7ae8007f1b367c5fb050ed57fc70faa1b95d73af", + ID: "843ad9a841e99d9e8c18e5cccc200ed81e825bcecbeb749f6956bb7e43db0bfc", Sha256: "2ff0ae26fa61a2b0f88f470a8e50f7623ea48b224eb072a5878a20d663d5307d", }, { - ID: "ea70b1749ce2e542271512ba2a50b01787b4a17edd42a2c1450097c60845a10c", + ID: "89d8de8f4cabeba625ffe416425a4c821e327b8e687096351bbf072b34018a19", Sha256: "b1826117441e607acd3b98c93cdb16759c2cc2240852055b8a2b5860f3204f1e", }, } diff --git a/test/e2e/v2/dfget_test.go b/test/e2e/v2/dfget_test.go index 0fec9adf3e1..a4a1de2b35a 100644 --- a/test/e2e/v2/dfget_test.go +++ b/test/e2e/v2/dfget_test.go @@ -38,7 +38,7 @@ var _ = Describe("Download Using Dfget", func() { Expect(err).NotTo(HaveOccurred()) fileMetadata := util.FileMetadata{ - ID: "1fc5ed9922a3d741063c169ec49c2071a391db5fda8de30eb6a97f60b5038c16", + ID: "bca2831966564d5afc95ee720836e22ce064f28ab7afc3e8ad2374565bcf3873", Sha256: "6288d2a89e2a9611191c25a45de20e94d8d058c75f274a39970d41f60f367e6f", } @@ -75,7 +75,7 @@ var _ = Describe("Download Using Dfget", func() { Expect(err).NotTo(HaveOccurred()) fileMetadata := util.FileMetadata{ - ID: "aaa32162d94ffb18dd407dc9abf2ac915b6dac4687dcf936a364818717d0155b", + ID: "cc2a62a71cb3555a67e54ab905ff311a1f74a1cb82137a1af3eaa5c38219bd0d", Sha256: "327b4022d0bfd1d5e9c0701d4a3f989a536f7e6e865e102dcd77c7e7adb31f9a", } @@ -112,7 +112,7 @@ var _ = Describe("Download Using Dfget", func() { Expect(err).NotTo(HaveOccurred()) fileMetadata := util.FileMetadata{ - ID: "3e9135a3e652efb9e6ae0b430f61d36a91093208009ddb839a1c9a1979274f89", + ID: "fd60786a0e11228d949f1ca0e4c82e301c5daab3638159e3bb7202e3dffe12ea", Sha256: "a1cbf1bf2d66757121677fd7fefafacd4f843a2cb44a451131002803bae56a65", } @@ -149,7 +149,7 @@ var _ = Describe("Download Using Dfget", func() { Expect(err).NotTo(HaveOccurred()) fileMetadata := util.FileMetadata{ - ID: "a36732ab9c09237884ceefe8c1a007558fd15a9c891f1f905e4b95136266da70", + ID: "9cd2ae0296e11b8e9a300deb8c13f1edba54e90356716c6a29fbc405e6cdfd45", Sha256: "b0cfe211f851049a78f5812cf5b1d7cb4f3fbb101c02c1865c940d5797f4b73b", } @@ -186,7 +186,7 @@ var _ = Describe("Download Using Dfget", func() { Expect(err).NotTo(HaveOccurred()) fileMetadata := util.FileMetadata{ - ID: "f2efea3df39f19e192a395843f67cfbb4338f3616014d9c5857da4c14cd01621", + ID: "c288f941340197c0611b5c50e6682f367d087a3b5289cf75ac5048f8774cb7c1", Sha256: "c37f93c73cf2f303f874c094f6f76e47b2421a3da9f0e7e0b98bea8a3d685322", } @@ -212,191 +212,6 @@ var _ = Describe("Download Using Dfget", func() { }) }) - Context("/etc/containerd/config.toml file and set piece length to 128MB", func() { - It("download should be ok", Label("dfget", "download", "piece length 128MB"), func() { - clientPod, err := util.ClientExec() - fmt.Println(err) - Expect(err).NotTo(HaveOccurred()) - - out, err := clientPod.Command("sh", "-c", fmt.Sprintf("dfget %s --disable-back-to-source --piece-length 134217728 --output %s", util.GetFileURL("/etc/containerd/config.toml"), util.GetOutputPath("config.toml-2"))).CombinedOutput() - fmt.Println(string(out), err) - Expect(err).NotTo(HaveOccurred()) - - fileMetadata := util.FileMetadata{ - ID: "1ae51fe69c381a4604517f1d00d4315afef070bab3bcb475f11770fc5b194821", - Sha256: "6288d2a89e2a9611191c25a45de20e94d8d058c75f274a39970d41f60f367e6f", - } - - sha256sum, err := util.CalculateSha256ByTaskID([]*util.PodExec{clientPod}, fileMetadata.ID) - Expect(err).NotTo(HaveOccurred()) - Expect(fileMetadata.Sha256).To(Equal(sha256sum)) - - sha256sum, err = util.CalculateSha256ByOutput([]*util.PodExec{clientPod}, util.GetOutputPath("config.toml-2")) - Expect(err).NotTo(HaveOccurred()) - Expect(fileMetadata.Sha256).To(Equal(sha256sum)) - - time.Sleep(1 * time.Second) - seedClientPods := make([]*util.PodExec, 3) - for i := 0; i < 3; i++ { - seedClientPods[i], err = util.SeedClientExec(i) - fmt.Println(err) - Expect(err).NotTo(HaveOccurred()) - } - - sha256sum, err = util.CalculateSha256ByTaskID(seedClientPods, fileMetadata.ID) - Expect(err).NotTo(HaveOccurred()) - Expect(fileMetadata.Sha256).To(Equal(sha256sum)) - }) - }) - - Context("/bin/kubectl file and set piece length to 64MB", func() { - It("download should be ok", Label("dfget", "download", "piece length 64MB"), func() { - clientPod, err := util.ClientExec() - fmt.Println(err) - Expect(err).NotTo(HaveOccurred()) - - out, err := clientPod.Command("sh", "-c", fmt.Sprintf("dfget %s --disable-back-to-source --piece-length 67108864 --output %s", util.GetFileURL("/bin/kubectl"), util.GetOutputPath("kubectl-2"))).CombinedOutput() - fmt.Println(string(out), err) - Expect(err).NotTo(HaveOccurred()) - - fileMetadata := util.FileMetadata{ - ID: "617d59d9cf3f9bd394ee98f327a77fc0b45a34431e59938abd0db20b467d8713", - Sha256: "327b4022d0bfd1d5e9c0701d4a3f989a536f7e6e865e102dcd77c7e7adb31f9a", - } - - sha256sum, err := util.CalculateSha256ByTaskID([]*util.PodExec{clientPod}, fileMetadata.ID) - Expect(err).NotTo(HaveOccurred()) - Expect(fileMetadata.Sha256).To(Equal(sha256sum)) - - sha256sum, err = util.CalculateSha256ByOutput([]*util.PodExec{clientPod}, util.GetOutputPath("kubectl-2")) - Expect(err).NotTo(HaveOccurred()) - Expect(fileMetadata.Sha256).To(Equal(sha256sum)) - - time.Sleep(1 * time.Second) - seedClientPods := make([]*util.PodExec, 3) - for i := 0; i < 3; i++ { - seedClientPods[i], err = util.SeedClientExec(i) - fmt.Println(err) - Expect(err).NotTo(HaveOccurred()) - } - - sha256sum, err = util.CalculateSha256ByTaskID(seedClientPods, fileMetadata.ID) - Expect(err).NotTo(HaveOccurred()) - Expect(fileMetadata.Sha256).To(Equal(sha256sum)) - }) - }) - - Context("/bin/x86_64 file and set piece length to 32MB", func() { - It("download should be ok", Label("dfget", "download", "piece length 32MB"), func() { - clientPod, err := util.ClientExec() - fmt.Println(err) - Expect(err).NotTo(HaveOccurred()) - - out, err := clientPod.Command("sh", "-c", fmt.Sprintf("dfget %s --disable-back-to-source --piece-length 33554432 --output %s", util.GetFileURL("/bin/x86_64"), util.GetOutputPath("x86_64-2"))).CombinedOutput() - fmt.Println(string(out), err) - Expect(err).NotTo(HaveOccurred()) - - fileMetadata := util.FileMetadata{ - ID: "f6b341fff271d4508e6f4820511c44bac3027c005c237798f98b89743c311148", - Sha256: "a1cbf1bf2d66757121677fd7fefafacd4f843a2cb44a451131002803bae56a65", - } - - sha256sum, err := util.CalculateSha256ByTaskID([]*util.PodExec{clientPod}, fileMetadata.ID) - Expect(err).NotTo(HaveOccurred()) - Expect(fileMetadata.Sha256).To(Equal(sha256sum)) - - sha256sum, err = util.CalculateSha256ByOutput([]*util.PodExec{clientPod}, util.GetOutputPath("x86_64-2")) - Expect(err).NotTo(HaveOccurred()) - Expect(fileMetadata.Sha256).To(Equal(sha256sum)) - - time.Sleep(1 * time.Second) - seedClientPods := make([]*util.PodExec, 3) - for i := 0; i < 3; i++ { - seedClientPods[i], err = util.SeedClientExec(i) - fmt.Println(err) - Expect(err).NotTo(HaveOccurred()) - } - - sha256sum, err = util.CalculateSha256ByTaskID(seedClientPods, fileMetadata.ID) - Expect(err).NotTo(HaveOccurred()) - Expect(fileMetadata.Sha256).To(Equal(sha256sum)) - }) - }) - - Context("/bin/zless file and set piece length to 16MB", func() { - It("download should be ok", Label("dfget", "download", "piece length 16MB"), func() { - clientPod, err := util.ClientExec() - fmt.Println(err) - Expect(err).NotTo(HaveOccurred()) - - out, err := clientPod.Command("sh", "-c", fmt.Sprintf("dfget %s --disable-back-to-source --piece-length 16777216 --output %s", util.GetFileURL("/bin/zless"), util.GetOutputPath("zless-2"))).CombinedOutput() - fmt.Println(string(out), err) - Expect(err).NotTo(HaveOccurred()) - - fileMetadata := util.FileMetadata{ - ID: "c358a010a628bd2720634ca245886c06d6555db7c020561bbea96d6c3afc13c9", - Sha256: "b0cfe211f851049a78f5812cf5b1d7cb4f3fbb101c02c1865c940d5797f4b73b", - } - - sha256sum, err := util.CalculateSha256ByTaskID([]*util.PodExec{clientPod}, fileMetadata.ID) - Expect(err).NotTo(HaveOccurred()) - Expect(fileMetadata.Sha256).To(Equal(sha256sum)) - - sha256sum, err = util.CalculateSha256ByOutput([]*util.PodExec{clientPod}, util.GetOutputPath("zless-2")) - Expect(err).NotTo(HaveOccurred()) - Expect(fileMetadata.Sha256).To(Equal(sha256sum)) - - time.Sleep(1 * time.Second) - seedClientPods := make([]*util.PodExec, 3) - for i := 0; i < 3; i++ { - seedClientPods[i], err = util.SeedClientExec(i) - fmt.Println(err) - Expect(err).NotTo(HaveOccurred()) - } - - sha256sum, err = util.CalculateSha256ByTaskID(seedClientPods, fileMetadata.ID) - Expect(err).NotTo(HaveOccurred()) - Expect(fileMetadata.Sha256).To(Equal(sha256sum)) - }) - }) - - Context("/bin/bash file and set piece length to 1MB", func() { - It("download should be ok", Label("dfget", "download", "piece length 1MB"), func() { - clientPod, err := util.ClientExec() - fmt.Println(err) - Expect(err).NotTo(HaveOccurred()) - - out, err := clientPod.Command("sh", "-c", fmt.Sprintf("dfget %s --disable-back-to-source --piece-length 1048576 --output %s", util.GetFileURL("/bin/bash"), util.GetOutputPath("bash-2"))).CombinedOutput() - fmt.Println(string(out), err) - Expect(err).NotTo(HaveOccurred()) - - fileMetadata := util.FileMetadata{ - ID: "08b79b117296dd83c010d566c11b77e457d8021feb858f2d7b351686f12204e7", - Sha256: "c37f93c73cf2f303f874c094f6f76e47b2421a3da9f0e7e0b98bea8a3d685322", - } - - sha256sum, err := util.CalculateSha256ByTaskID([]*util.PodExec{clientPod}, fileMetadata.ID) - Expect(err).NotTo(HaveOccurred()) - Expect(fileMetadata.Sha256).To(Equal(sha256sum)) - - sha256sum, err = util.CalculateSha256ByOutput([]*util.PodExec{clientPod}, util.GetOutputPath("bash-2")) - Expect(err).NotTo(HaveOccurred()) - Expect(fileMetadata.Sha256).To(Equal(sha256sum)) - - time.Sleep(1 * time.Second) - seedClientPods := make([]*util.PodExec, 3) - for i := 0; i < 3; i++ { - seedClientPods[i], err = util.SeedClientExec(i) - fmt.Println(err) - Expect(err).NotTo(HaveOccurred()) - } - - sha256sum, err = util.CalculateSha256ByTaskID(seedClientPods, fileMetadata.ID) - Expect(err).NotTo(HaveOccurred()) - Expect(fileMetadata.Sha256).To(Equal(sha256sum)) - }) - }) - Context("/etc/containerd/config.toml file and set application to d7y", func() { It("download should be ok", Label("dfget", "download", "application d7y"), func() { clientPod, err := util.ClientExec() @@ -408,7 +223,7 @@ var _ = Describe("Download Using Dfget", func() { Expect(err).NotTo(HaveOccurred()) fileMetadata := util.FileMetadata{ - ID: "9746acdb4bd8bf2deeb5dd8a3275e51a7fdd4adf8b0dc1d9d26a4565d3ed6592", + ID: "27e00689dfe0410b5b34758452f95d063d916c62ffdd28b1ab35995107696a48", Sha256: "6288d2a89e2a9611191c25a45de20e94d8d058c75f274a39970d41f60f367e6f", } @@ -445,7 +260,7 @@ var _ = Describe("Download Using Dfget", func() { Expect(err).NotTo(HaveOccurred()) fileMetadata := util.FileMetadata{ - ID: "9746acdb4bd8bf2deeb5dd8a3275e51a7fdd4adf8b0dc1d9d26a4565d3ed6592", + ID: "27e00689dfe0410b5b34758452f95d063d916c62ffdd28b1ab35995107696a48", Sha256: "6288d2a89e2a9611191c25a45de20e94d8d058c75f274a39970d41f60f367e6f", } diff --git a/test/e2e/v2/manager/preheat.go b/test/e2e/v2/manager/preheat.go index 582eb6b734c..c312527e7e3 100644 --- a/test/e2e/v2/manager/preheat.go +++ b/test/e2e/v2/manager/preheat.go @@ -64,7 +64,7 @@ var _ = Describe("Preheat with Manager", func() { Expect(done).Should(BeTrue()) fileMetadata := util.FileMetadata{ - ID: "e8ef42dcc1e8da5e77b19bf39532f91f0bfeb85ed0d3ce277e1823f91c5a255a", + ID: "6ba5a8781902368d2b07eb8b6d6044a96f49d5008feace1ea8e3ebfc0b96d0a1", Sha256: "80f1d8cd843a98b23b30e90e7e43a14e05935351f354d678bc465f7be66ef3dd", } @@ -111,7 +111,7 @@ var _ = Describe("Preheat with Manager", func() { Expect(done).Should(BeTrue()) fileMetadata := util.FileMetadata{ - ID: "bf3cd4dd9b582ac4a9253d28d38f0d2cb942455572a2a2d2fc9a82e1e83eda4f", + ID: "f4d85d5d6db12bdcdee48a1f3ace8420756399bdfcbddd430b6b2330ad4c00df", Sha256: "4c7f0f298ab3350859f90664d706b8ccaa95072f1f1f3dd74f559642e5483cd5", } @@ -158,7 +158,7 @@ var _ = Describe("Preheat with Manager", func() { Expect(done).Should(BeTrue()) fileMetadata := util.FileMetadata{ - ID: "c6273a9e7140bc2af543fbb15e16186e8f07b054f7bfd1556dce5a76dba7dd28", + ID: "bd2024e044b8b29dcfd930ae1eae9594c8d94f89cc6403303cf07c892c00db7d", Sha256: "a1cbf1bf2d66757121677fd7fefafacd4f843a2cb44a451131002803bae56a65", } @@ -205,7 +205,7 @@ var _ = Describe("Preheat with Manager", func() { Expect(done).Should(BeTrue()) fileMetadata := util.FileMetadata{ - ID: "b9615c0754d6e5dafe0b3b8b1aafc836635efd528a3815288646728c946a0469", + ID: "039d6a3441cc8e47bf83d6bb504be958f6b08511d8c23afcb0dd8c266b23fa93", Sha256: "5a963cbdd08df27651e9c9d006567267ebb3c80f7b8fc0f218ade5771df2998b", } @@ -251,11 +251,11 @@ var _ = Describe("Preheat with Manager", func() { taskMetadatas := []util.TaskMetadata{ { - ID: "22b576f99cff7676bdb10a4fdf1f1ae5163ccf9023d07d5f1be355a86c3e99e7", + ID: "b32d9d9ab534cd803ae7ecf6655fe2e397edb6bc6e160d462d3d762ca4281150", Sha256: "a711f05d33845e2e9deffcfcc5adf082d7c6e97e3e3a881d193d9aae38f092a8", }, { - ID: "3ef8cc79ebac6ad32b68e0ea4b0a863b808b72377e645d1d87c73d073aea18d8", + ID: "21213381947bc939549355f00318f22c2f35fb3a907b79a145aab45f0a18aff7", Sha256: "f643e116a03d9604c344edb345d7592c48cc00f2a4848aaf773411f4fb30d2f5", }, } @@ -305,23 +305,23 @@ var _ = Describe("Preheat with Manager", func() { taskMetadatas := []util.TaskMetadata{ { - ID: "db5beca8a19049e0420e4efa08983e6b22162c1192de39a363ed16ea6459ee28", + ID: "f3d195d2de9da87385bd381258f436e163efaed266b3ff56eac7b89d40cacfb3", Sha256: "f1f1039835051ecc04909f939530e86a20f02d2ce5ad7a81c0fa3616f7303944", }, { - ID: "b89495f24d34cae8e9174df15b60d34d490547d3029e3c187079cc3b475ff250", + ID: "d5f00b6bdba48fdd8920ae419ca0a007b3e15ff93d0c10495da981aaea657ef0", Sha256: "c1d6d1b2d5a367259e6e51a7f4d1ccd66a28cc9940d6599d8a8ea9544dd4b4a8", }, { - ID: "efc4e319971484d86cc43a48a9e3eccc23736cabc50ba4d1e707a841eaf42e12", + ID: "5ae39f96a141d56d403f5098bcbefc13882ae3eeb1926d3c1fcfe8644f0ba7eb", Sha256: "871ab018db94b4ae7b137764837bc4504393a60656ba187189e985cd809064f7", }, { - ID: "5ff373729cb097252966b0fad599bad4c87e0dc96bf77c65b91badc99d2f7e99", + ID: "11b4932bf84ca19d80ef974d02f62b9d82bd42c1a7b9c2e5112097dbafcec601", Sha256: "f1a1d290795d904815786e41d39a41dc1af5de68a9e9020baba8bd83b32d8f95", }, { - ID: "99e12b50d80a25090c7928fe3ce35ca97bd373c45fe90870b3b70884bf9c34c9", + ID: "0d15761559736d2e40678c72f7df9f330328c13abdbc5e3aa4c027c17f42b1c6", Sha256: "f1ffc4b5459e82dc8e7ddd1d1a2ec469e85a1f076090c22851a1f2ce6f71e1a6", }, } @@ -369,23 +369,23 @@ var _ = Describe("Preheat with Manager", func() { taskMetadatas := []util.TaskMetadata{ { - ID: "4fed91258f022c3f8eb8c0408e871bff653bf8015f9e9ec71bd03a2bb639119b", + ID: "b742ff16c917a4559f1909a1f1bb1a8cf66d242344d33a8ef8ca4b5bfc588b6a", Sha256: "a0d7a8f11f7e25ca59f0bf470187dd9aa27e7ca951cf67a53c750deea5d3b076", }, { - ID: "fb47239bde6b518227ccce5ed86b0b1570a9e42ba94ca72f99f5db640350e22a", + ID: "3ed59c2363a552a8b3e9b1d4aed8efef18c7861678db52afd71db57ee238f317", Sha256: "a880266d3b77f75696023df2da1ef66c3c565e0f70596242395c9e68de955c7c", }, { - ID: "efc4e319971484d86cc43a48a9e3eccc23736cabc50ba4d1e707a841eaf42e12", + ID: "5ae39f96a141d56d403f5098bcbefc13882ae3eeb1926d3c1fcfe8644f0ba7eb", Sha256: "871ab018db94b4ae7b137764837bc4504393a60656ba187189e985cd809064f7", }, { - ID: "7860f1bd9cc5eca105df4c40719351562f04f5f0bda7805c34ed475ddd66d778", + ID: "7f83153778995fabe52d43913bc70cfe6e1f858e9450d93750903b9cbcd1007b", Sha256: "9b5952218d7711195c6c6fbddbef2780507d20851ca68845d180397d1348f0d8", }, { - ID: "34be7b23dcbb09487133810e30c1e701a4285f742d4dbe6f6fda496014f90af6", + ID: "9368993adbbee8e4eeedfbd9279c88c7ea8f6dfe9b6ff035eac5dc2bf351b706", Sha256: "889f4c960ac4ff70774e9c4cfa64efc4823ade0702d0f96c20ff0054ffbbe504", }, } diff --git a/test/e2e/v2/proxy_test.go b/test/e2e/v2/proxy_test.go index 7306c53c1c6..bf2d2df240e 100644 --- a/test/e2e/v2/proxy_test.go +++ b/test/e2e/v2/proxy_test.go @@ -39,7 +39,7 @@ var _ = Describe("Download Using Proxy", func() { fmt.Println(string(out)) fileMetadata := util.FileMetadata{ - ID: "0ef882badaeb3195aed759a203cfb61951d158bf614f90ab0a20504fb7f97992", + ID: "090278fc27871e8bb93c4546a0f44dd16126ed476a23bee7c4b0812357e2042b", Sha256: "6288d2a89e2a9611191c25a45de20e94d8d058c75f274a39970d41f60f367e6f", } @@ -77,7 +77,7 @@ var _ = Describe("Download Using Proxy", func() { fmt.Println(string(out)) fileMetadata := util.FileMetadata{ - ID: "e37fccc0c725a947c0a8856e2e1f6a14a4a5792338a73dcafa7e5ebd6443f7b4", + ID: "80c17d9f21dcfd8b6f4526d131e65cd70dd0ad644033ea1900ea9a7deeed6dc3", Sha256: "327b4022d0bfd1d5e9c0701d4a3f989a536f7e6e865e102dcd77c7e7adb31f9a", } @@ -115,7 +115,7 @@ var _ = Describe("Download Using Proxy", func() { fmt.Println(string(out)) fileMetadata := util.FileMetadata{ - ID: "7c7cf5c8303626754ba4ae6575c1c96cd3fcad985687ec0d15744e68b15661d6", + ID: "559fb82754b3cd804f75d4e9e58ae6cd9aba5c49e24e7f52891bee5c815ed2b8", Sha256: "a1cbf1bf2d66757121677fd7fefafacd4f843a2cb44a451131002803bae56a65", } @@ -153,7 +153,7 @@ var _ = Describe("Download Using Proxy", func() { fmt.Println(string(out)) fileMetadata := util.FileMetadata{ - ID: "297205e16a85e8cf803067c84fdd659c1877ff595e76e7633e4aa52b64321dee", + ID: "c8e05b7c9ebae46268691292fd2905c2cb4250af12ce91e53750e16eec69ce5a", Sha256: "b0cfe211f851049a78f5812cf5b1d7cb4f3fbb101c02c1865c940d5797f4b73b", } @@ -191,7 +191,7 @@ var _ = Describe("Download Using Proxy", func() { fmt.Println(string(out)) fileMetadata := util.FileMetadata{ - ID: "b4df90b001f49adcc64d71f68b1c01ad462f631c94c7c7ffc12d97f351874da1", + ID: "8a541eb07998f3980807ec1d183d74516bf6e2afe76d674e813ddca99938e02e", Sha256: "c37f93c73cf2f303f874c094f6f76e47b2421a3da9f0e7e0b98bea8a3d685322", } @@ -229,7 +229,7 @@ var _ = Describe("Download Using Proxy", func() { fmt.Println(string(out)) fileMetadata := util.FileMetadata{ - ID: "b56a0807131865baffe2d687440f121f40cf2071c478a5abfb0930bc57b7e715", + ID: "ef524d1361ee2c0f0b0a457f1d5e605b3fe4f3dd2fd131950004bb20fa83d6fa", Sha256: "cd00e292c5970d3c5e2f0ffa5171e555bc46bfc4faddfb4a418b6840b86e79a3", } @@ -267,7 +267,7 @@ var _ = Describe("Download Using Proxy", func() { fmt.Println(string(out)) fileMetadata := util.FileMetadata{ - ID: "0091f6a0373fe02d2e4cf6a83904889f5326a3590239015743bc812b02c51408", + ID: "d22bb2076dc27f0f0be5d3ecc1e95a63ea516ce5dff49d235cf2266e98625474", Sha256: "7bbfcb694f6acc69483751d3b48d5bdbdcb284f9e04c7b7caa04b5977cffddc8", } @@ -305,7 +305,7 @@ var _ = Describe("Download Using Proxy", func() { fmt.Println(string(out)) fileMetadata := util.FileMetadata{ - ID: "28ded7113a871c1eb08728204810514f08e200952131075ea5f7a3756973ceb2", + ID: "f58775d042d37c406dbe03a294446e994f183e5872e93477025ad049f62a0a85", Sha256: "ba9a10ceceb80562fc124dc9bc94ea2a38e3a71e3e746e2140e6381ac791cdeb", } @@ -343,7 +343,7 @@ var _ = Describe("Download Using Proxy", func() { fmt.Println(string(out)) fileMetadata := util.FileMetadata{ - ID: "871b9e11903e7f3cadcb25706be7fd2c153b76cdf138f713bd7b506f695fc863", + ID: "6353c7c65066bf24acdfe62601ba17a1636d217169e79f7ea3f2ebf7f0940e06", Sha256: "ba9a10ceceb80562fc124dc9bc94ea2a38e3a71e3e746e2140e6381ac791cdeb", } @@ -381,7 +381,7 @@ var _ = Describe("Download Using Proxy", func() { fmt.Println(string(out)) fileMetadata := util.FileMetadata{ - ID: "28ded7113a871c1eb08728204810514f08e200952131075ea5f7a3756973ceb2", + ID: "1ff704a22e421b2f9b99f7f8e2228e6f71d9c987ef242348acc031d003d3e941", Sha256: "327b4022d0bfd1d5e9c0701d4a3f989a536f7e6e865e102dcd77c7e7adb31f9a", } @@ -419,7 +419,7 @@ var _ = Describe("Download Using Proxy", func() { fmt.Println(string(out)) fileMetadata := util.FileMetadata{ - ID: "e5ccafcd80ee0dfc48aa1f313ef6086a1fd1e0021183452c096ae40d87d191c6", + ID: "dba445f5310c2a63fabeaad075511357e411b74f68a47bc579ed36f78a380013", Sha256: "8732360b941ad09a5e0e5d5f9891118bc068f6d0d5a56e3c6d483e4600fbc43f", } @@ -457,7 +457,7 @@ var _ = Describe("Download Using Proxy", func() { fmt.Println(string(out)) fileMetadata := util.FileMetadata{ - ID: "16d94182383e84a73f9c85a28a25d781a8a4e56ec37c6e3e61d1f946fb236e85", + ID: "ae82ec86b58e7a91853ce6a3d52a59a1d590365a91b30db57df922bd8a6bc952", Sha256: "d6d17dca18b8de59e38da525dc24c47b74fec1a790a9f64afdd6538f4f8fa90e", } @@ -497,7 +497,7 @@ var _ = Describe("Download Using Prefetch Proxy", func() { fmt.Println(string(out)) fileMetadata := util.FileMetadata{ - ID: "0fa5f40dfccfcd4c20b2d2dba0bab7205bfced189cc7a013919a6d155d841dab", + ID: "4a4df08f3aa3311e29556582de4269294a6805f81b7d8d38b83e8a91bc461d4e", Sha256: "6288d2a89e2a9611191c25a45de20e94d8d058c75f274a39970d41f60f367e6f", } @@ -523,7 +523,7 @@ var _ = Describe("Download Using Prefetch Proxy", func() { fmt.Println(string(out)) fileMetadata := util.FileMetadata{ - ID: "8cdfeba7c8858b1bf7dc6097aeb6bae12e3a4cb8ed32cc3b60bdb45765bda590", + ID: "3496028e92e0e35651f92e86ffde1dfa3c03a66265d248f8d3254ac78d30ef83", Sha256: "327b4022d0bfd1d5e9c0701d4a3f989a536f7e6e865e102dcd77c7e7adb31f9a", } @@ -549,7 +549,7 @@ var _ = Describe("Download Using Prefetch Proxy", func() { fmt.Println(string(out)) fileMetadata := util.FileMetadata{ - ID: "86b0c4424368f35e500045d5375b8b53940cadf69b71d0ae4b349ac972ad6bdb", + ID: "91ae78d5302e267bd245bae82c6ab90e18a8a4234bb87642f108901e801a1e2a", Sha256: "a1cbf1bf2d66757121677fd7fefafacd4f843a2cb44a451131002803bae56a65", } @@ -575,7 +575,7 @@ var _ = Describe("Download Using Prefetch Proxy", func() { fmt.Println(string(out)) fileMetadata := util.FileMetadata{ - ID: "d759035bb589e9334717660701c58ef91ebab49bb5790367ede36bf78daa52a1", + ID: "d2ccf9401074d729a88359394f1d9b4888ee6b7d9e4045e49bf1fa8d7caaf1d7", Sha256: "b0cfe211f851049a78f5812cf5b1d7cb4f3fbb101c02c1865c940d5797f4b73b", } @@ -601,7 +601,7 @@ var _ = Describe("Download Using Prefetch Proxy", func() { fmt.Println(string(out)) fileMetadata := util.FileMetadata{ - ID: "ecd74f0e4f9ff453e3c165934d473ef6946b088fecabb8a2eb7d11d2948f743c", + ID: "a8a7a947d233ce5298c937c7e3cb52321810533d89c526c751b71a2dd91bc908", Sha256: "c37f93c73cf2f303f874c094f6f76e47b2421a3da9f0e7e0b98bea8a3d685322", } @@ -627,7 +627,7 @@ var _ = Describe("Download Using Prefetch Proxy", func() { fmt.Println(string(out)) fileMetadata := util.FileMetadata{ - ID: "2d9e6ebe90a230ff5ffad7938163456c308e072e910eac3dd063f64f62112f05", + ID: "cbc6213119267fb7437947a971673a6a3eb65d3b972eac55b227104a4069f32c", Sha256: "cd00e292c5970d3c5e2f0ffa5171e555bc46bfc4faddfb4a418b6840b86e79a3", } @@ -655,7 +655,7 @@ var _ = Describe("Download Using Prefetch Proxy", func() { fmt.Println(string(out)) fileMetadata := util.FileMetadata{ - ID: "bd969c992e6faff240ac1601afe07bdeaa64c2b75bd5abb36a1fd6601895c542", + ID: "ab59a8e67be5672729f97ecd6c9824561ab6e77652d59ea4e7b6eaf18a5a443e", Sha256: "7bbfcb694f6acc69483751d3b48d5bdbdcb284f9e04c7b7caa04b5977cffddc8", } @@ -682,7 +682,7 @@ var _ = Describe("Download Using Prefetch Proxy", func() { fmt.Println(string(out)) fileMetadata := util.FileMetadata{ - ID: "a58f439c45c5737613f1c1d4f10b57c06239b675fccdc32a3d078af89d2bd870", + ID: "235c7f0377f3cea69659756c883243fd071ffb527c38d6abb407bf428ecc6489", Sha256: "ba9a10ceceb80562fc124dc9bc94ea2a38e3a71e3e746e2140e6381ac791cdeb", } @@ -709,7 +709,7 @@ var _ = Describe("Download Using Prefetch Proxy", func() { fmt.Println(string(out)) fileMetadata := util.FileMetadata{ - ID: "ba4b4a0a1be91ab6b2a76f99bbd8eac5977c388cfc7de73707d30e5d5cf0a6d4", + ID: "5135a54f35215fcbdfcea61313bc746ee4d2112781e7b346967aa53e3d266377", Sha256: "ba9a10ceceb80562fc124dc9bc94ea2a38e3a71e3e746e2140e6381ac791cdeb", } @@ -736,7 +736,7 @@ var _ = Describe("Download Using Prefetch Proxy", func() { fmt.Println(string(out)) fileMetadata := util.FileMetadata{ - ID: "66b8f945a2906550194aefee5a6da6c3a4c60b533e30340707c8bea67ce35eae", + ID: "c573851cdcabc1d5f7344c576ff67bdfe3f63f65b49e08942f24c15a1808a027", Sha256: "327b4022d0bfd1d5e9c0701d4a3f989a536f7e6e865e102dcd77c7e7adb31f9a", } @@ -763,7 +763,7 @@ var _ = Describe("Download Using Prefetch Proxy", func() { fmt.Println(string(out)) fileMetadata := util.FileMetadata{ - ID: "5cfbab580dd42ef5c3a4d28488fde7e82220115dffc8aff01c0c568665405bcb", + ID: "cc826acc16c2ab33525874eb66baddb180709b33380983d489e510d6674ef6bb", Sha256: "8732360b941ad09a5e0e5d5f9891118bc068f6d0d5a56e3c6d483e4600fbc43f", } @@ -790,7 +790,7 @@ var _ = Describe("Download Using Prefetch Proxy", func() { fmt.Println(string(out)) fileMetadata := util.FileMetadata{ - ID: "e376250edb769e967fe48bdd05d50f4124f89f3db367b0eee9850128c93043d7", + ID: "60645e89632f754c704450108e2d188f7496cb63bb6055a5b1bf5c71f29d0b3a", Sha256: "d6d17dca18b8de59e38da525dc24c47b74fec1a790a9f64afdd6538f4f8fa90e", }