storj/satellite/satellitedb/dbx/satellitedb.dbx
Ivan Fraixedes 35c8648330
[v3-1914] Storage node disqualification: Change type from bool to timestamp (#2212)
* 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.).
2019-06-18 11:14:31 +02:00

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 ()