35c8648330
* satellite/satellitedb: Alter nodes disqualification column Change the type of the 'disqualification' column of the nodes table from boolean to timestamp. * overlay/cache: Change Disqualified field type Change the Disqualified field type the NodeDossier struct type from bool to time.Time to match with the disqualified type used by the DB layer. * satellite/satellitedb: Update queries uses disqualified Update the queries which uses the disqualified column due to the column type has been changed from boolean to nullable timestamp. * docs/design: Update disqualification due impl changes Update the disqualification design document to contain the architectural change required to be able to restore unfair disqualified nodes in case of an unexpected cause (bug, mistake, hard network disconnection, etc.).
718 lines
16 KiB
Plaintext
718 lines
16 KiB
Plaintext
// dbx.v1 golang satellitedb.dbx .
|
|
|
|
//--- Value Attribution ---//
|
|
model value_attribution (
|
|
key project_id bucket_name
|
|
|
|
field project_id blob
|
|
field bucket_name blob
|
|
field partner_id blob
|
|
field last_updated utimestamp
|
|
)
|
|
|
|
//--- containment ---//
|
|
model pending_audits (
|
|
key node_id
|
|
|
|
field node_id blob
|
|
field piece_id blob
|
|
field stripe_index int64
|
|
field share_size int64
|
|
field expected_share_hash blob
|
|
field reverify_count int64 ( updatable )
|
|
)
|
|
|
|
create pending_audits ( )
|
|
update pending_audits ( where pending_audits.node_id = ? )
|
|
delete pending_audits ( where pending_audits.node_id = ? )
|
|
read one (
|
|
select pending_audits
|
|
where pending_audits.node_id = ?
|
|
)
|
|
|
|
//--- irreparableDB ---//
|
|
|
|
model irreparabledb (
|
|
key segmentpath
|
|
|
|
field segmentpath blob
|
|
field segmentdetail blob ( updatable )
|
|
field pieces_lost_count int64 ( updatable )
|
|
field seg_damaged_unix_sec int64 ( updatable )
|
|
field repair_attempt_count int64 ( updatable )
|
|
)
|
|
|
|
create irreparabledb ( )
|
|
update irreparabledb ( where irreparabledb.segmentpath = ? )
|
|
delete irreparabledb ( where irreparabledb.segmentpath = ? )
|
|
|
|
read one (
|
|
select irreparabledb
|
|
where irreparabledb.segmentpath = ?
|
|
)
|
|
|
|
read limitoffset (
|
|
select irreparabledb
|
|
orderby asc irreparabledb.segmentpath
|
|
)
|
|
|
|
//--- accounting ---//
|
|
|
|
// accounting_timestamps just allows us to save the last time/thing that happened
|
|
model accounting_timestamps (
|
|
key name
|
|
|
|
field name text
|
|
field value timestamp ( updatable )
|
|
)
|
|
|
|
create accounting_timestamps ( )
|
|
update accounting_timestamps ( where accounting_timestamps.name = ? )
|
|
|
|
read scalar (
|
|
select accounting_timestamps.value
|
|
where accounting_timestamps.name = ?
|
|
)
|
|
|
|
model accounting_rollup (
|
|
key id
|
|
|
|
field id serial64
|
|
field node_id blob
|
|
field start_time timestamp
|
|
field put_total int64
|
|
field get_total int64
|
|
field get_audit_total int64
|
|
field get_repair_total int64
|
|
field put_repair_total int64
|
|
field at_rest_total float64
|
|
)
|
|
|
|
create accounting_rollup ( )
|
|
delete accounting_rollup ( where accounting_rollup.id = ? )
|
|
|
|
read one (
|
|
select accounting_rollup
|
|
where accounting_rollup.id = ?
|
|
)
|
|
|
|
read all (
|
|
select accounting_rollup
|
|
where accounting_rollup.start_time >= ?
|
|
)
|
|
|
|
//--- statdb ---//
|
|
|
|
model node (
|
|
key id
|
|
|
|
index (
|
|
name node_last_ip
|
|
fields last_ip
|
|
)
|
|
|
|
field id blob
|
|
field address text ( updatable ) // TODO: use compressed format
|
|
field last_ip text ( updatable )
|
|
field protocol int ( updatable )
|
|
field type int ( updatable )
|
|
field email text ( updatable )
|
|
field wallet text ( updatable ) // TODO: use compressed format
|
|
field free_bandwidth int64 ( updatable )
|
|
field free_disk int64 ( updatable )
|
|
|
|
field major int64 ( updatable )
|
|
field minor int64 ( updatable )
|
|
field patch int64 ( updatable )
|
|
field hash text ( updatable )
|
|
field timestamp timestamp ( updatable )
|
|
field release bool ( updatable )
|
|
|
|
field latency_90 int64 ( updatable )
|
|
field audit_success_count int64 ( updatable )
|
|
field total_audit_count int64 ( updatable )
|
|
field audit_success_ratio float64 ( updatable )
|
|
field uptime_success_count int64 ( updatable )
|
|
field total_uptime_count int64 ( updatable )
|
|
field uptime_ratio float64 ( updatable )
|
|
|
|
field created_at timestamp ( autoinsert )
|
|
field updated_at timestamp ( autoinsert, autoupdate )
|
|
field last_contact_success timestamp ( updatable )
|
|
field last_contact_failure timestamp ( updatable )
|
|
|
|
field contained bool ( updatable )
|
|
field disqualified timestamp ( updatable, nullable )
|
|
)
|
|
|
|
create node ( )
|
|
update node ( where node.id = ? )
|
|
delete node ( where node.id = ? )
|
|
|
|
// "Get" query; fails if node not found
|
|
read one (
|
|
select node
|
|
where node.id = ?
|
|
)
|
|
|
|
read all (
|
|
select node.id
|
|
)
|
|
|
|
read limitoffset (
|
|
select node
|
|
where node.id >= ?
|
|
orderby asc node.id
|
|
)
|
|
|
|
//--- repairqueue ---//
|
|
|
|
model injuredsegment (
|
|
key path
|
|
|
|
field path text
|
|
field data blob
|
|
field attempted utimestamp (updatable, nullable)
|
|
)
|
|
|
|
//--- satellite console ---//
|
|
|
|
model user (
|
|
key id
|
|
|
|
field id blob
|
|
field email text ( updatable )
|
|
field full_name text ( updatable )
|
|
field short_name text ( updatable, nullable )
|
|
field password_hash blob ( updatable )
|
|
|
|
field status int ( updatable, autoinsert )
|
|
|
|
field created_at timestamp ( autoinsert )
|
|
)
|
|
|
|
create user ( )
|
|
update user ( where user.id = ? )
|
|
delete user ( where user.id = ? )
|
|
|
|
read one (
|
|
select user
|
|
where user.email = ?
|
|
where user.status != 0
|
|
)
|
|
read one (
|
|
select user
|
|
where user.id = ?
|
|
)
|
|
|
|
// add payment method id to indentify if it has been set up
|
|
model user_payment (
|
|
key user_id
|
|
unique customer_id
|
|
|
|
field user_id user.id cascade
|
|
field customer_id blob
|
|
|
|
field created_at timestamp ( autoinsert )
|
|
)
|
|
|
|
create user_payment ( )
|
|
|
|
read one (
|
|
select user_payment
|
|
where user_payment.user_id = ?
|
|
)
|
|
|
|
model project (
|
|
key id
|
|
|
|
field id blob
|
|
|
|
field name text
|
|
field description text ( updatable )
|
|
field usage_limit int64 ( updatable )
|
|
|
|
field created_at timestamp ( autoinsert )
|
|
)
|
|
|
|
create project ( )
|
|
update project ( where project.id = ? )
|
|
delete project ( where project.id = ? )
|
|
|
|
read one (
|
|
select project
|
|
where project.id = ?
|
|
)
|
|
read all (
|
|
select project
|
|
)
|
|
read all (
|
|
select project
|
|
where project.created_at < ?
|
|
orderby asc project.created_at
|
|
)
|
|
read all (
|
|
select project
|
|
join project.id = project_member.project_id
|
|
where project_member.member_id = ?
|
|
orderby asc project.name
|
|
)
|
|
|
|
// add is default, make composite key
|
|
model project_payment (
|
|
key project_id
|
|
|
|
field project_id project.id cascade
|
|
field payer_id user_payment.user_id cascade
|
|
field payment_method_id blob
|
|
|
|
field created_at timestamp ( autoinsert )
|
|
)
|
|
|
|
create project_payment ( )
|
|
|
|
read one (
|
|
select project_payment
|
|
where project_payment.project_id = ?
|
|
)
|
|
read one (
|
|
select project_payment
|
|
where project_payment.payer_id = ?
|
|
)
|
|
|
|
model project_invoice_stamp (
|
|
key project_id start_date end_date
|
|
unique invoice_id
|
|
|
|
field project_id project.id cascade
|
|
field invoice_id blob
|
|
|
|
field start_date timestamp
|
|
field end_date timestamp
|
|
|
|
field created_at timestamp
|
|
)
|
|
|
|
create project_invoice_stamp ( )
|
|
|
|
read one (
|
|
select project_invoice_stamp
|
|
where project_invoice_stamp.project_id = ?
|
|
where project_invoice_stamp.start_date = ?
|
|
)
|
|
// pagination ?
|
|
read all (
|
|
select project_invoice_stamp
|
|
where project_invoice_stamp.project_id = ?
|
|
orderby desc project_invoice_stamp.start_date
|
|
)
|
|
|
|
model project_member (
|
|
key member_id project_id
|
|
|
|
field member_id user.id cascade
|
|
field project_id project.id cascade
|
|
|
|
field created_at timestamp ( autoinsert )
|
|
)
|
|
|
|
create project_member ( )
|
|
delete project_member (
|
|
where project_member.member_id = ?
|
|
where project_member.project_id = ?
|
|
)
|
|
|
|
read all (
|
|
select project_member
|
|
where project_member.member_id = ?
|
|
)
|
|
read limitoffset (
|
|
select project_member
|
|
where project_member.project_id = ?
|
|
)
|
|
|
|
model api_key (
|
|
key id
|
|
unique head
|
|
unique name project_id
|
|
|
|
field id blob
|
|
field project_id project.id cascade
|
|
field head blob
|
|
field name text (updatable)
|
|
field secret blob
|
|
field created_at timestamp (autoinsert)
|
|
)
|
|
|
|
create api_key ()
|
|
update api_key ( where api_key.id = ? )
|
|
delete api_key ( where api_key.id = ? )
|
|
|
|
read one (
|
|
select api_key
|
|
where api_key.id = ?
|
|
)
|
|
read one (
|
|
select api_key
|
|
where api_key.head = ?
|
|
)
|
|
read all (
|
|
select api_key
|
|
where api_key.project_id = ?
|
|
orderby asc api_key.name
|
|
)
|
|
|
|
//-----bucket_usage----//
|
|
|
|
model bucket_usage (
|
|
key id
|
|
index (
|
|
name bucket_id_rollup
|
|
fields bucket_id rollup_end_time
|
|
unique
|
|
)
|
|
|
|
field id blob
|
|
field bucket_id blob //--TODO: add foreign key constraint--//
|
|
|
|
field rollup_end_time timestamp
|
|
|
|
field remote_stored_data uint64
|
|
field inline_stored_data uint64
|
|
field remote_segments uint
|
|
field inline_segments uint
|
|
field objects uint
|
|
field metadata_size uint64
|
|
field repair_egress uint64
|
|
field get_egress uint64
|
|
field audit_egress uint64
|
|
)
|
|
|
|
create bucket_usage ()
|
|
delete bucket_usage ( where bucket_usage.id = ? )
|
|
|
|
read one (
|
|
select bucket_usage
|
|
where bucket_usage.id = ?
|
|
)
|
|
read limitoffset (
|
|
select bucket_usage
|
|
where bucket_usage.bucket_id = ?
|
|
where bucket_usage.rollup_end_time > ?
|
|
where bucket_usage.rollup_end_time <= ?
|
|
orderby asc bucket_usage.rollup_end_time
|
|
)
|
|
read limitoffset (
|
|
select bucket_usage
|
|
where bucket_usage.bucket_id = ?
|
|
where bucket_usage.rollup_end_time > ?
|
|
where bucket_usage.rollup_end_time <= ?
|
|
orderby desc bucket_usage.rollup_end_time
|
|
)
|
|
|
|
//--- tracking serial numbers ---//
|
|
|
|
model serial_number (
|
|
key id
|
|
index (
|
|
name serial_number
|
|
fields serial_number
|
|
unique
|
|
)
|
|
|
|
field id serial
|
|
field serial_number blob
|
|
|
|
field bucket_id blob
|
|
field expires_at utimestamp
|
|
|
|
index (
|
|
fields expires_at
|
|
)
|
|
)
|
|
|
|
model used_serial (
|
|
key serial_number_id storage_node_id
|
|
|
|
field serial_number_id serial_number.id cascade
|
|
field storage_node_id blob
|
|
)
|
|
|
|
// inserting a new serial number
|
|
create serial_number ()
|
|
|
|
// finding out information about the serial number
|
|
read scalar (
|
|
select serial_number
|
|
where serial_number.serial_number = ?
|
|
)
|
|
|
|
// deleting expired serial numbers
|
|
delete serial_number (
|
|
where serial_number.expires_at <= ?
|
|
)
|
|
|
|
// for preventing duplicate serial numbers
|
|
create used_serial ()
|
|
|
|
// --- bucket accounting tables --- //
|
|
|
|
model bucket_bandwidth_rollup (
|
|
key bucket_name project_id interval_start action
|
|
index (
|
|
name bucket_name_project_id_interval_start_interval_seconds
|
|
fields bucket_name project_id interval_start interval_seconds
|
|
)
|
|
|
|
field bucket_name blob
|
|
field project_id blob
|
|
|
|
field interval_start utimestamp
|
|
field interval_seconds uint
|
|
field action uint
|
|
|
|
field inline uint64 ( updatable )
|
|
field allocated uint64 ( updatable )
|
|
field settled uint64 ( updatable )
|
|
)
|
|
|
|
read scalar (
|
|
select bucket_bandwidth_rollup
|
|
where bucket_bandwidth_rollup.bucket_name = ?
|
|
where bucket_bandwidth_rollup.project_id = ?
|
|
where bucket_bandwidth_rollup.interval_start = ?
|
|
where bucket_bandwidth_rollup.action = ?
|
|
)
|
|
|
|
model bucket_storage_tally (
|
|
key bucket_name project_id interval_start
|
|
|
|
field bucket_name blob
|
|
field project_id blob
|
|
|
|
field interval_start utimestamp
|
|
|
|
field inline uint64
|
|
field remote uint64
|
|
|
|
field remote_segments_count uint
|
|
field inline_segments_count uint
|
|
field object_count uint
|
|
|
|
field metadata_size uint64
|
|
)
|
|
|
|
create bucket_storage_tally ()
|
|
|
|
read first (
|
|
select bucket_storage_tally
|
|
where bucket_storage_tally.project_id = ?
|
|
orderby desc bucket_storage_tally.interval_start
|
|
)
|
|
|
|
read all (
|
|
select bucket_storage_tally
|
|
where bucket_storage_tally.project_id = ?
|
|
where bucket_storage_tally.bucket_name = ?
|
|
where bucket_storage_tally.interval_start >= ?
|
|
where bucket_storage_tally.interval_start <= ?
|
|
orderby desc bucket_storage_tally.interval_start
|
|
)
|
|
|
|
// --- storage node accounting tables --- //
|
|
|
|
model storagenode_bandwidth_rollup (
|
|
key storagenode_id interval_start action
|
|
index (
|
|
name storagenode_id_interval_start_interval_seconds
|
|
fields storagenode_id interval_start interval_seconds
|
|
)
|
|
|
|
field storagenode_id blob
|
|
field interval_start utimestamp
|
|
field interval_seconds uint
|
|
field action uint
|
|
|
|
field allocated uint64 ( updatable )
|
|
field settled uint64 ( updatable )
|
|
)
|
|
|
|
read scalar (
|
|
select storagenode_bandwidth_rollup
|
|
where storagenode_bandwidth_rollup.storagenode_id = ?
|
|
where storagenode_bandwidth_rollup.interval_start = ?
|
|
where storagenode_bandwidth_rollup.action = ?
|
|
)
|
|
|
|
read all (
|
|
select storagenode_bandwidth_rollup
|
|
where storagenode_bandwidth_rollup.interval_start >= ?
|
|
)
|
|
|
|
model storagenode_storage_tally (
|
|
key id
|
|
|
|
field id serial64
|
|
field node_id blob
|
|
field interval_end_time timestamp
|
|
field data_total float64
|
|
)
|
|
|
|
create storagenode_storage_tally ()
|
|
delete storagenode_storage_tally ( where storagenode_storage_tally.id = ? )
|
|
read one (
|
|
select storagenode_storage_tally
|
|
where storagenode_storage_tally.id = ?
|
|
)
|
|
read all (
|
|
select storagenode_storage_tally
|
|
)
|
|
read all (
|
|
select storagenode_storage_tally
|
|
where storagenode_storage_tally.interval_end_time >= ?
|
|
)
|
|
|
|
//--- certRecord ---//
|
|
|
|
model certRecord (
|
|
key id
|
|
|
|
field publickey blob //--uplink public key--//
|
|
field id blob //--uplink node id --//
|
|
field update_at timestamp ( autoinsert, autoupdate )
|
|
)
|
|
|
|
create certRecord ( )
|
|
delete certRecord ( where certRecord.id = ? )
|
|
update certRecord ( where certRecord.id = ? )
|
|
|
|
read one (
|
|
select certRecord
|
|
where certRecord.id = ?
|
|
)
|
|
|
|
//--- satellite registration token for Vanguard release (temporary table) ---//
|
|
|
|
model registration_token (
|
|
key secret
|
|
unique owner_id
|
|
|
|
field secret blob
|
|
field owner_id blob ( updatable, nullable )
|
|
|
|
field project_limit int
|
|
|
|
field created_at timestamp ( autoinsert )
|
|
)
|
|
|
|
create registration_token ( )
|
|
read one (
|
|
select registration_token
|
|
where registration_token.secret = ?
|
|
)
|
|
read one (
|
|
select registration_token
|
|
where registration_token.owner_id = ?
|
|
)
|
|
update registration_token ( where registration_token.secret = ? )
|
|
|
|
//--- satellite reset password token ---//
|
|
|
|
model reset_password_token (
|
|
key secret
|
|
unique owner_id
|
|
|
|
field secret blob
|
|
field owner_id blob ( updatable )
|
|
|
|
field created_at timestamp ( autoinsert )
|
|
)
|
|
|
|
create reset_password_token ( )
|
|
read one (
|
|
select reset_password_token
|
|
where reset_password_token.secret = ?
|
|
)
|
|
read one (
|
|
select reset_password_token
|
|
where reset_password_token.owner_id = ?
|
|
)
|
|
delete reset_password_token ( where reset_password_token.secret = ? )
|
|
|
|
|
|
//--- offer table ---//
|
|
|
|
model offer (
|
|
key id
|
|
|
|
field id serial
|
|
field name text ( updatable )
|
|
field description text ( updatable )
|
|
|
|
field award_credit_in_cents int ( updatable )
|
|
field invitee_credit_in_cents int ( updatable )
|
|
|
|
field award_credit_duration_days int ( updatable )
|
|
field invitee_credit_duration_days int ( updatable )
|
|
|
|
field redeemable_cap int ( updatable )
|
|
field num_redeemed int ( updatable, autoinsert )
|
|
|
|
field expires_at timestamp ( updatable )
|
|
field created_at timestamp ( autoinsert )
|
|
|
|
// status has three possible value: NoStatus=0, Default=1, Active=2.
|
|
field status int ( updatable )
|
|
// type has two possible value: FREE_CREDIT=0, REFERRAL=1
|
|
field type int ( updatable )
|
|
)
|
|
|
|
read one (
|
|
select offer
|
|
where offer.id = ?
|
|
)
|
|
|
|
read all (
|
|
select offer
|
|
)
|
|
|
|
update offer (
|
|
where offer.id = ?
|
|
)
|
|
|
|
create offer ( )
|
|
|
|
|
|
//--- user credit table ---//
|
|
|
|
model user_credit (
|
|
key id
|
|
|
|
field id serial
|
|
|
|
field user_id user.id restrict
|
|
field offer_id offer.id restrict
|
|
field referred_by user.id restrict ( nullable )
|
|
|
|
field credits_earned_in_cents int
|
|
field credits_used_in_cents int ( updatable, autoinsert )
|
|
|
|
field expires_at timestamp ( updatable )
|
|
field created_at timestamp ( autoinsert )
|
|
)
|
|
|
|
read all (
|
|
select user_credit
|
|
where user_credit.user_id = ?
|
|
where user_credit.expires_at > ?
|
|
where user_credit.credits_used_in_cents < user_credit.credits_earned_in_cents
|
|
orderby asc user_credit.expires_at
|
|
)
|
|
|
|
read count (
|
|
select user_credit
|
|
where user_credit.referred_by = ?
|
|
)
|
|
|
|
create user_credit ()
|