diff --git a/proxmox/nodes/tasks/tasks_types.go b/proxmox/nodes/tasks/tasks_types.go index 4cf80ee5..249cb293 100644 --- a/proxmox/nodes/tasks/tasks_types.go +++ b/proxmox/nodes/tasks/tasks_types.go @@ -28,8 +28,8 @@ type GetTaskStatusResponseData struct { // TaskID contains the components of a PVE task ID. type TaskID struct { NodeName string - PID int - PStart int + PID int64 + PStart int64 StartTime time.Time Type string ID string @@ -51,17 +51,17 @@ func ParseTaskID(taskID string) (TaskID, error) { return TaskID{}, fmt.Errorf("missing node name in task ID: %s", taskID) } - pid, err := strconv.ParseInt(parts[2], 16, 32) + pid, err := strconv.ParseInt(parts[2], 16, 64) if err != nil { return TaskID{}, fmt.Errorf("error parsing task ID: %w", err) } - pstart, err := strconv.ParseInt(parts[3], 16, 32) + pstart, err := strconv.ParseInt(parts[3], 16, 64) if err != nil { return TaskID{}, fmt.Errorf("error parsing pstart in task ID: %q: %w", taskID, err) } - stime, err := strconv.ParseInt(parts[4], 16, 32) + stime, err := strconv.ParseInt(parts[4], 16, 64) if err != nil { return TaskID{}, fmt.Errorf("error parsing start time in task ID: %q: %w", taskID, err) } @@ -76,8 +76,8 @@ func ParseTaskID(taskID string) (TaskID, error) { return TaskID{ NodeName: parts[1], - PID: int(pid), - PStart: int(pstart), + PID: pid, + PStart: pstart, StartTime: time.Unix(stime, 0).UTC(), Type: parts[5], ID: parts[6], diff --git a/proxmox/nodes/tasks/tasks_types_test.go b/proxmox/nodes/tasks/tasks_types_test.go index 143d8d46..41b2e08b 100644 --- a/proxmox/nodes/tasks/tasks_types_test.go +++ b/proxmox/nodes/tasks/tasks_types_test.go @@ -17,10 +17,12 @@ import ( func TestParseTaskID(t *testing.T) { t.Parallel() - stime, err := time.Parse(time.RFC3339, "2023-08-30T21:28:16-04:00") - require.NoError(t, err) + parseTime := func(s string) time.Time { + stime, err := time.Parse(time.RFC3339, s) + require.NoError(t, err) - stime = stime.UTC() + return stime.UTC() + } tests := []struct { name string @@ -35,7 +37,7 @@ func TestParseTaskID(t *testing.T) { NodeName: "pve", PID: 400563, PStart: 17540764, - StartTime: stime, + StartTime: parseTime("2023-08-30T21:28:16-04:00"), Type: "imgcopy", ID: "", User: "root@pam", @@ -48,12 +50,25 @@ func TestParseTaskID(t *testing.T) { NodeName: "pve", PID: 400563, PStart: 17540764, - StartTime: stime, + StartTime: parseTime("2023-08-30T21:28:16-04:00"), Type: "qmcreate", ID: "101", User: "root@pam", }, }, + { + name: "large pid", + taskID: "UPID:pve-srv:0012D68C:8206F38C:65144CB7:qmcreate:501:root@pam:", + want: TaskID{ + NodeName: "pve-srv", + PID: 1234572, + PStart: 2181493644, + StartTime: parseTime("2023-09-27T15:39:35Z"), + Type: "qmcreate", + ID: "501", + User: "root@pam", + }, + }, { name: "missing node", taskID: "UPID::00061CB3:010BA69C:64EFECB0:qmcreate:101:root@pam:",