Class: Ci::BuildTraceMetadata
Constant Summary
collapse
- MAX_ATTEMPTS =
5
ApplicationRecord::MAX_PLUCK
HasCheckConstraints::NOT_NULL_CHECK_PATTERN
ResetOnColumnErrors::MAX_RESET_PERIOD
Class Method Summary
collapse
Instance Method Summary
collapse
registered_models
model_name, table_name_prefix
===, cached_column_list, #create_or_load_association, current_transaction, declarative_enum, default_select_columns, delete_all_returning, #deleted_from_database?, id_in, id_not_in, iid_in, nullable_column?, primary_key_in, #readable_by?, safe_ensure_unique, safe_find_or_create_by, safe_find_or_create_by!, #to_ability_name, underscore, where_exists, where_not_exists, with_fast_read_statement_timeout, without_order
#sharding_organization
#reset_on_union_error, #reset_on_unknown_attribute_error
#serializable_hash
Class Method Details
.find_or_upsert_for!(build_id, partition_id, project_id) ⇒ Object
29
30
31
32
33
34
35
36
|
# File 'app/models/ci/build_trace_metadata.rb', line 29
def self.find_or_upsert_for!(build_id, partition_id, project_id)
record = find_by(build_id: build_id, partition_id: partition_id)
return record if record
upsert({ build_id: build_id, partition_id: partition_id, project_id: project_id },
unique_by: %w[build_id partition_id])
find_by!(build_id: build_id, partition_id: partition_id)
end
|
Instance Method Details
#archival_attempts_available? ⇒ Boolean
47
48
49
|
# File 'app/models/ci/build_trace_metadata.rb', line 47
def archival_attempts_available?
archival_attempts <= MAX_ATTEMPTS
end
|
#archival_attempts_message ⇒ Object
59
60
61
62
63
64
65
|
# File 'app/models/ci/build_trace_metadata.rb', line 59
def archival_attempts_message
if archival_attempts_available?
'The job can not be archived right now.'
else
'The job is out of archival attempts.'
end
end
|
#can_attempt_archival_now? ⇒ Boolean
The job is retried around 5 times during the 7 days retention period for trace chunks as defined in Ci::BuildTraceChunks::RedisBase::CHUNK_REDIS_TTL
40
41
42
43
44
45
|
# File 'app/models/ci/build_trace_metadata.rb', line 40
def can_attempt_archival_now?
return false unless archival_attempts_available?
return true unless last_archival_attempt_at
(last_archival_attempt_at + backoff).past?
end
|
#increment_archival_attempts! ⇒ Object
51
52
53
|
# File 'app/models/ci/build_trace_metadata.rb', line 51
def increment_archival_attempts!
increment!(:archival_attempts, touch: :last_archival_attempt_at)
end
|
#remote_checksum_valid? ⇒ Boolean
67
68
69
70
|
# File 'app/models/ci/build_trace_metadata.rb', line 67
def remote_checksum_valid?
checksum.present? &&
checksum == remote_checksum
end
|
#successfully_archived? ⇒ Boolean
72
73
74
75
76
|
# File 'app/models/ci/build_trace_metadata.rb', line 72
def successfully_archived?
return false unless archived_at
remote_checksum.nil? || remote_checksum_valid?
end
|
#track_archival!(trace_artifact_id, checksum) ⇒ Object
55
56
57
|
# File 'app/models/ci/build_trace_metadata.rb', line 55
def track_archival!(trace_artifact_id, checksum)
update!(trace_artifact_id: trace_artifact_id, checksum: checksum, archived_at: Time.current)
end
|