From 1052f49f5d4895518c4375e827e00112b52badc3 Mon Sep 17 00:00:00 2001 From: Eric Frias Date: Fri, 29 Mar 2019 16:20:45 -0400 Subject: [PATCH] Make indexes on blockchain objects related to betting markets into unique indexes to ensure the order betting market groups are resolved is consistent between different nodes. This bumps the database version which will trigger a replay on the first run after this upgrade. --- .../graphene/chain/betting_market_object.hpp | 16 ++++++++++++---- .../chain/include/graphene/chain/config.hpp | 2 +- .../graphene/chain/event_group_object.hpp | 6 +++++- .../include/graphene/chain/event_object.hpp | 10 ++++++++-- .../include/graphene/chain/tournament_object.hpp | 10 ++++++---- 5 files changed, 32 insertions(+), 12 deletions(-) diff --git a/libraries/chain/include/graphene/chain/betting_market_object.hpp b/libraries/chain/include/graphene/chain/betting_market_object.hpp index f69b03f3..9d1ee1b6 100644 --- a/libraries/chain/include/graphene/chain/betting_market_object.hpp +++ b/libraries/chain/include/graphene/chain/betting_market_object.hpp @@ -247,8 +247,12 @@ typedef multi_index_container< betting_market_group_object, indexed_by< ordered_unique< tag, member< object, object_id_type, &object::id > >, - ordered_non_unique< tag, member >, - ordered_non_unique< tag, member, &betting_market_group_object::settling_time> > + ordered_unique< tag, composite_key, + member > >, + ordered_unique< tag, composite_key, &betting_market_group_object::settling_time>, + member > > > > betting_market_group_object_multi_index_type; typedef generic_index betting_market_group_object_index; @@ -256,7 +260,9 @@ typedef multi_index_container< betting_market_object, indexed_by< ordered_unique< tag, member< object, object_id_type, &object::id > >, - ordered_non_unique< tag, member > + ordered_unique< tag, composite_key, + member > > > > betting_market_object_multi_index_type; typedef generic_index betting_market_object_index; @@ -593,7 +599,9 @@ typedef multi_index_container< indexed_by< ordered_unique< tag, member< object, object_id_type, &object::id > >, ordered_unique< tag, identity, compare_bet_by_odds >, - ordered_non_unique< tag, member >, + ordered_unique< tag, composite_key, + member > >, ordered_unique< tag, identity, compare_bet_by_bettor_then_odds > > > bet_object_multi_index_type; typedef generic_index bet_object_index; diff --git a/libraries/chain/include/graphene/chain/config.hpp b/libraries/chain/include/graphene/chain/config.hpp index fcd3b7c1..d85cc093 100644 --- a/libraries/chain/include/graphene/chain/config.hpp +++ b/libraries/chain/include/graphene/chain/config.hpp @@ -151,7 +151,7 @@ #define GRAPHENE_RECENTLY_MISSED_COUNT_INCREMENT 4 #define GRAPHENE_RECENTLY_MISSED_COUNT_DECREMENT 3 -#define GRAPHENE_CURRENT_DB_VERSION "PPY2.0" +#define GRAPHENE_CURRENT_DB_VERSION "PPY2.1" #define GRAPHENE_IRREVERSIBLE_THRESHOLD (70 * GRAPHENE_1_PERCENT) diff --git a/libraries/chain/include/graphene/chain/event_group_object.hpp b/libraries/chain/include/graphene/chain/event_group_object.hpp index c618ba2a..38fb9f2d 100644 --- a/libraries/chain/include/graphene/chain/event_group_object.hpp +++ b/libraries/chain/include/graphene/chain/event_group_object.hpp @@ -27,6 +27,8 @@ #include #include +#include + namespace graphene { namespace chain { class database; @@ -49,7 +51,9 @@ typedef multi_index_container< event_group_object, indexed_by< ordered_unique< tag, member< object, object_id_type, &object::id > >, - ordered_non_unique< tag, member< event_group_object, sport_id_type, &event_group_object::sport_id > > > + ordered_unique< tag, composite_key, + member > > > > event_group_object_multi_index_type; typedef generic_index event_group_object_index; diff --git a/libraries/chain/include/graphene/chain/event_object.hpp b/libraries/chain/include/graphene/chain/event_object.hpp index 7682addc..e6989240 100644 --- a/libraries/chain/include/graphene/chain/event_object.hpp +++ b/libraries/chain/include/graphene/chain/event_object.hpp @@ -28,6 +28,8 @@ #include #include +#include + namespace graphene { namespace chain { class event_object; } } @@ -100,8 +102,12 @@ typedef multi_index_container< event_object, indexed_by< ordered_unique< tag, member< object, object_id_type, &object::id > >, - ordered_non_unique< tag, member< event_object, event_group_id_type, &event_object::event_group_id > >, - ordered_non_unique< tag, const_mem_fun< event_object, event_status, &event_object::get_status > > > > event_object_multi_index_type; + ordered_unique< tag, composite_key, + member > >, + ordered_unique< tag, composite_key, + member > > > > event_object_multi_index_type; typedef generic_index event_object_index; diff --git a/libraries/chain/include/graphene/chain/tournament_object.hpp b/libraries/chain/include/graphene/chain/tournament_object.hpp index 531a0b98..ffde72f8 100644 --- a/libraries/chain/include/graphene/chain/tournament_object.hpp +++ b/libraries/chain/include/graphene/chain/tournament_object.hpp @@ -133,14 +133,16 @@ namespace graphene { namespace chain { tournament_object, indexed_by< ordered_unique< tag, member< object, object_id_type, &object::id > >, - ordered_non_unique< tag, + ordered_unique< tag, composite_key, - const_mem_fun > >, - ordered_non_unique< tag, + const_mem_fun, + member< object, object_id_type, &object::id > > >, + ordered_unique< tag, composite_key, - member, &tournament_object::start_time> > > + member, &tournament_object::start_time>, + member< object, object_id_type, &object::id > > > > > tournament_object_multi_index_type; typedef generic_index tournament_index;