Skip to content

Commit

Permalink
feat: Display Log retention days and Remaining log retention days in …
Browse files Browse the repository at this point in the history
…Trials Details
  • Loading branch information
salonig23 committed May 10, 2024
1 parent c3901c8 commit 01210e0
Show file tree
Hide file tree
Showing 15 changed files with 4,247 additions and 3,559 deletions.
51 changes: 51 additions & 0 deletions harness/determined/common/api/bindings.py

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

34 changes: 34 additions & 0 deletions master/internal/api_trials.go
Original file line number Diff line number Diff line change
Expand Up @@ -645,6 +645,40 @@ func (a *apiServer) GetExperimentTrials(
return resp, nil
}

func (a *apiServer) GetTrialRemainingLogRetentionDays(
ctx context.Context, req *apiv1.GetTrialRemainingLogRetentionDaysRequest,
) (resp *apiv1.GetTrialRemainingLogRetentionDaysResponse, err error) {
t, err := db.TrialByID(ctx, int(req.Id))
if err != nil {
return nil, fmt.Errorf("getting trial %v: %w", req.Id, err)
}

q := `
SELECT
CASE
WHEN MIN(t.end_time) <= ( retention_timestamp() - make_interval(days => ?) ) THEN 0
ELSE extract(day from MIN(end_time) + make_interval(days => ?) - NOW())::int
END remaining_log_retention_days
FROM tasks t
JOIN run_id_task_id as r ON t.task_id = r.task_id
WHERE r.run_id = ?
`
resp = &apiv1.GetTrialRemainingLogRetentionDaysResponse{}
if t.LogRetentionDays == nil || *t.LogRetentionDays == -1 {
days := int32(-1)
resp.RemainingDays = &days
} else {
var days *int32
err = db.Bun().NewRaw(q, t.LogRetentionDays, t.LogRetentionDays, t.ID).Scan(ctx, &days)
if err != nil {
return nil, fmt.Errorf("getting remaining log days for trial %v: %w", t.ID, err)
}
resp.RemainingDays = days
}

return resp, nil
}

func (a *apiServer) GetTrial(ctx context.Context, req *apiv1.GetTrialRequest) (
*apiv1.GetTrialResponse, error,
) {
Expand Down
58 changes: 58 additions & 0 deletions master/internal/api_trials_intg_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"crypto/rand"
"encoding/json"
"fmt"
"log"
"strings"
"testing"
"time"
Expand Down Expand Up @@ -1447,3 +1448,60 @@ func TestPutTrialRetainLogs(t *testing.T) {
require.NoError(t, err)
require.Equal(t, updatedLogRetentionDays, newLogRetentionDays)
}

func completeTrialsandTasks(ctx context.Context, trialID int, endTimeDays int) error {
_, err := db.Bun().NewUpdate().Table("runs").
Set("state = ?", model.CompletedState).
Where("id = ?", trialID).
Exec(ctx)
if err != nil {
return err
}

_, err = db.Bun().NewUpdate().
Table("tasks", "run_id_task_id").
Set("end_time = (NOW() - make_interval(days => ?))", endTimeDays).
Where("run_id_task_id.run_id = ? and tasks.task_id = run_id_task_id.task_id", trialID).
Exec(ctx)
if err != nil {
return err
}
return nil
}

func TestGetTrialRemainingLogRetentionDays(t *testing.T) {
api, _, ctx := setupAPITest(t, nil)

tests := []struct {
name string
logRetentionDays string
expRemainingDays []int32
}{
{"test-null-days", "", []int32{-1, -1, -1, -1}},
{"test-forever", `
retention_policy:
log_retention_days: -1
`, []int32{-1, -1, -1, -1}},
{"test-10days", `
retention_policy:
log_retention_days: 10
`, []int32{0, 0, 4, 9}},
}

for _, tt := range tests {
log.Printf("Starting %v", tt.name)
testEndTimes := []int{15, 10, 5, 0}
_, trialIDs, _ := CreateTestRetentionExperiment(ctx, t, api, tt.logRetentionDays, len(testEndTimes))

for i, v := range testEndTimes {
err := completeTrialsandTasks(ctx, trialIDs[i], v)
require.NoError(t, err)

d, err := api.GetTrialRemainingLogRetentionDays(ctx, &apiv1.GetTrialRemainingLogRetentionDaysRequest{
Id: int32(trialIDs[i]),
})
require.NoError(t, err)
require.Equal(t, tt.expRemainingDays[i], *d.RemainingDays)
}
}
}
Loading

0 comments on commit 01210e0

Please sign in to comment.