Skip to content

Commit 577fc9e

Browse files
authored
Merge pull request #1997 from bitshares/es7_fix
Fix for ES7 : Specifying types is deprecated.
2 parents dd244e7 + 76f4438 commit 577fc9e

File tree

7 files changed

+170
-101
lines changed

7 files changed

+170
-101
lines changed

.github/workflows/build-and-test.ubuntu-debug.yml

+12-12
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
runs-on: ${{ matrix.os }}
1313
services:
1414
elasticsearch:
15-
image: docker://elasticsearch:7.10.1
15+
image: docker://elasticsearch:7.16.2
1616
options: --env discovery.type=single-node --publish 9200:9200 --publish 9300:9300
1717
steps:
1818
- name: Install dependencies
@@ -51,14 +51,14 @@ jobs:
5151
pwd
5252
df -h .
5353
mkdir -p _build
54-
sudo mkdir -p /_build/libraries /_build/programs /mnt/_build/tests
55-
sudo chmod a+rwx /_build/libraries /_build/programs /mnt/_build/tests
54+
sudo mkdir -p /_build/libraries /_build/programs /_build/tests /mnt/_build
55+
sudo chmod a+rwx /_build/libraries /_build/programs /_build/tests
5656
ln -s /_build/libraries _build/libraries
5757
ln -s /_build/programs _build/programs
58-
ln -s /mnt/_build/tests _build/tests
58+
ln -s /_build/tests _build/tests
5959
sudo ln -s /_build/libraries /mnt/_build/libraries
6060
sudo ln -s /_build/programs /mnt/_build/programs
61-
sudo ln -s /mnt/_build/tests /_build/tests
61+
sudo ln -s /_build/tests /mnt/_build/tests
6262
ls -al _build
6363
pushd _build
6464
export -n BOOST_ROOT BOOST_INCLUDEDIR BOOST_LIBRARYDIR
@@ -83,13 +83,13 @@ jobs:
8383
export CCACHE_DIR="$GITHUB_WORKSPACE/ccache"
8484
mkdir -p "$CCACHE_DIR"
8585
df -h
86-
make -j 2 -C _build chain_test
87-
make -j 2 -C _build cli_test
88-
make -j 2 -C _build app_test
89-
make -j 2 -C _build es_test
90-
make -j 2 -C _build cli_wallet
91-
make -j 2 -C _build witness_node
92-
make -j 2 -C _build
86+
make -j 1 -C _build chain_test
87+
make -j 1 -C _build cli_test
88+
make -j 1 -C _build app_test
89+
make -j 1 -C _build es_test
90+
make -j 1 -C _build cli_wallet
91+
make -j 1 -C _build witness_node
92+
make -j 1 -C _build
9393
df -h
9494
du -hs _build/libraries/* _build/programs/* _build/tests/*
9595
du -hs _build/*

.github/workflows/build-and-test.ubuntu-release.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
runs-on: ${{ matrix.os }}
1313
services:
1414
elasticsearch:
15-
image: docker://elasticsearch:7.10.1
15+
image: docker://elasticsearch:7.16.2
1616
options: --env discovery.type=single-node --publish 9200:9200 --publish 9300:9300
1717
steps:
1818
- name: Install dependencies

libraries/plugins/elasticsearch/elasticsearch_plugin.cpp

+69-35
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
#include <graphene/chain/hardfork.hpp>
2929
#include <curl/curl.h>
3030

31+
#include <boost/algorithm/string.hpp>
32+
3133
namespace graphene { namespace elasticsearch {
3234

3335
namespace detail
@@ -51,6 +53,9 @@ class elasticsearch_plugin_impl
5153
return _self.database();
5254
}
5355

56+
friend class graphene::elasticsearch::elasticsearch_plugin;
57+
58+
private:
5459
elasticsearch_plugin& _self;
5560
primary_index< operation_history_index >* _oho_index;
5661

@@ -78,8 +83,10 @@ class elasticsearch_plugin_impl
7883
std::string bulk_line;
7984
std::string index_name;
8085
bool is_sync = false;
81-
private:
82-
bool add_elasticsearch( const account_id_type account_id, const optional<operation_history_object>& oho, const uint32_t block_number );
86+
bool is_es_version_7_or_above = true;
87+
88+
bool add_elasticsearch( const account_id_type account_id, const optional<operation_history_object>& oho,
89+
const uint32_t block_number );
8390
const account_transaction_history_object& addNewEntry(const account_statistics_object& stats_obj,
8491
const account_id_type& account_id,
8592
const optional <operation_history_object>& oho);
@@ -94,6 +101,7 @@ class elasticsearch_plugin_impl
94101
void createBulkLine(const account_transaction_history_object& ath);
95102
void prepareBulk(const account_transaction_history_id_type& ath_id);
96103
void populateESstruct();
104+
void init_program_options(const boost::program_options::variables_map& options);
97105
};
98106

99107
elasticsearch_plugin_impl::~elasticsearch_plugin_impl()
@@ -104,10 +112,20 @@ elasticsearch_plugin_impl::~elasticsearch_plugin_impl()
104112
}
105113
}
106114

115+
static std::string generateIndexName( const fc::time_point_sec& block_date,
116+
const std::string& _elasticsearch_index_prefix )
117+
{
118+
auto block_date_string = block_date.to_iso_string();
119+
std::vector<std::string> parts;
120+
boost::split(parts, block_date_string, boost::is_any_of("-"));
121+
std::string index_name = _elasticsearch_index_prefix + parts[0] + "-" + parts[1];
122+
return index_name;
123+
}
124+
107125
bool elasticsearch_plugin_impl::update_account_histories( const signed_block& b )
108126
{
109127
checkState(b.timestamp);
110-
index_name = graphene::utilities::generateIndexName(b.timestamp, _elasticsearch_index_prefix);
128+
index_name = generateIndexName(b.timestamp, _elasticsearch_index_prefix);
111129

112130
graphene::chain::database& db = database();
113131
const vector<optional< operation_history_object > >& hist = db.get_applied_operations();
@@ -288,7 +306,8 @@ void elasticsearch_plugin_impl::doVisitor(const optional <operation_history_obje
288306
vs.transfer_data.asset = o_v.transfer_asset_id;
289307
vs.transfer_data.asset_name = transfer_asset.symbol;
290308
vs.transfer_data.amount = o_v.transfer_amount;
291-
vs.transfer_data.amount_units = (o_v.transfer_amount.value)/(double)asset::scaled_precision(transfer_asset.precision).value;
309+
vs.transfer_data.amount_units = (o_v.transfer_amount.value)
310+
/ (double)asset::scaled_precision(transfer_asset.precision).value;
292311
vs.transfer_data.from = o_v.transfer_from;
293312
vs.transfer_data.to = o_v.transfer_to;
294313

@@ -299,14 +318,18 @@ void elasticsearch_plugin_impl::doVisitor(const optional <operation_history_obje
299318
vs.fill_data.pays_asset_id = o_v.fill_pays_asset_id;
300319
vs.fill_data.pays_asset_name = fill_pays_asset.symbol;
301320
vs.fill_data.pays_amount = o_v.fill_pays_amount;
302-
vs.fill_data.pays_amount_units = (o_v.fill_pays_amount.value)/(double)asset::scaled_precision(fill_pays_asset.precision).value;
321+
vs.fill_data.pays_amount_units = (o_v.fill_pays_amount.value)
322+
/ (double)asset::scaled_precision(fill_pays_asset.precision).value;
303323
vs.fill_data.receives_asset_id = o_v.fill_receives_asset_id;
304324
vs.fill_data.receives_asset_name = fill_receives_asset.symbol;
305325
vs.fill_data.receives_amount = o_v.fill_receives_amount;
306-
vs.fill_data.receives_amount_units = (o_v.fill_receives_amount.value)/(double)asset::scaled_precision(fill_receives_asset.precision).value;
326+
vs.fill_data.receives_amount_units = (o_v.fill_receives_amount.value)
327+
/ (double)asset::scaled_precision(fill_receives_asset.precision).value;
307328

308-
auto fill_price = (o_v.fill_receives_amount.value/(double)asset::scaled_precision(fill_receives_asset.precision).value) /
309-
(o_v.fill_pays_amount.value/(double)asset::scaled_precision(fill_pays_asset.precision).value);
329+
auto fill_price = (o_v.fill_receives_amount.value
330+
/ (double)asset::scaled_precision(fill_receives_asset.precision).value)
331+
/ (o_v.fill_pays_amount.value
332+
/ (double)asset::scaled_precision(fill_pays_asset.precision).value);
310333
vs.fill_data.fill_price_units = fill_price;
311334
vs.fill_data.fill_price = o_v.fill_fill_price;
312335
vs.fill_data.is_maker = o_v.fill_is_maker;
@@ -319,6 +342,7 @@ bool elasticsearch_plugin_impl::add_elasticsearch( const account_id_type account
319342
const auto &stats_obj = getStatsObject(account_id);
320343
const auto &ath = addNewEntry(stats_obj, account_id, oho);
321344
growStats(stats_obj, ath);
345+
322346
if(block_number > _elasticsearch_start_es_after_block) {
323347
createBulkLine(ath);
324348
prepareBulk(ath.id);
@@ -354,9 +378,10 @@ const account_statistics_object& elasticsearch_plugin_impl::getStatsObject(const
354378
return stats_obj;
355379
}
356380

357-
const account_transaction_history_object& elasticsearch_plugin_impl::addNewEntry(const account_statistics_object& stats_obj,
358-
const account_id_type& account_id,
359-
const optional <operation_history_object>& oho)
381+
const account_transaction_history_object& elasticsearch_plugin_impl::addNewEntry(
382+
const account_statistics_object& stats_obj,
383+
const account_id_type& account_id,
384+
const optional <operation_history_object>& oho)
360385
{
361386
graphene::chain::database& db = database();
362387
const auto &ath = db.create<account_transaction_history_object>([&](account_transaction_history_object &obj) {
@@ -396,15 +421,17 @@ void elasticsearch_plugin_impl::prepareBulk(const account_transaction_history_id
396421
const std::string _id = fc::json::to_string(ath_id);
397422
fc::mutable_variant_object bulk_header;
398423
bulk_header["_index"] = index_name;
399-
bulk_header["_type"] = "data";
424+
if(!is_es_version_7_or_above)
425+
bulk_header["_type"] = "_doc";
400426
bulk_header["_id"] = fc::to_string(ath_id.space_id) + "." + fc::to_string(ath_id.type_id) + "."
401427
+ fc::to_string(ath_id.instance.value);
402428
prepare = graphene::utilities::createBulk(bulk_header, std::move(bulk_line));
403429
std::move(prepare.begin(), prepare.end(), std::back_inserter(bulk_lines));
404430
prepare.clear();
405431
}
406432

407-
void elasticsearch_plugin_impl::cleanObjects(const account_transaction_history_id_type& ath_id, const account_id_type& account_id)
433+
void elasticsearch_plugin_impl::cleanObjects( const account_transaction_history_id_type& ath_id,
434+
const account_id_type& account_id )
408435
{
409436
graphene::chain::database& db = database();
410437
// remove everything except current object from ath
@@ -494,44 +521,49 @@ void elasticsearch_plugin::plugin_set_program_options(
494521
cfg.add(cli);
495522
}
496523

497-
void elasticsearch_plugin::plugin_initialize(const boost::program_options::variables_map& options)
524+
void detail::elasticsearch_plugin_impl::init_program_options(const boost::program_options::variables_map& options)
498525
{
499-
my->_oho_index = database().add_index< primary_index< operation_history_index > >();
500-
database().add_index< primary_index< account_transaction_history_index > >();
501-
502526
if (options.count("elasticsearch-node-url") > 0) {
503-
my->_elasticsearch_node_url = options["elasticsearch-node-url"].as<std::string>();
527+
_elasticsearch_node_url = options["elasticsearch-node-url"].as<std::string>();
504528
}
505529
if (options.count("elasticsearch-bulk-replay") > 0) {
506-
my->_elasticsearch_bulk_replay = options["elasticsearch-bulk-replay"].as<uint32_t>();
530+
_elasticsearch_bulk_replay = options["elasticsearch-bulk-replay"].as<uint32_t>();
507531
}
508532
if (options.count("elasticsearch-bulk-sync") > 0) {
509-
my->_elasticsearch_bulk_sync = options["elasticsearch-bulk-sync"].as<uint32_t>();
533+
_elasticsearch_bulk_sync = options["elasticsearch-bulk-sync"].as<uint32_t>();
510534
}
511535
if (options.count("elasticsearch-visitor") > 0) {
512-
my->_elasticsearch_visitor = options["elasticsearch-visitor"].as<bool>();
536+
_elasticsearch_visitor = options["elasticsearch-visitor"].as<bool>();
513537
}
514538
if (options.count("elasticsearch-basic-auth") > 0) {
515-
my->_elasticsearch_basic_auth = options["elasticsearch-basic-auth"].as<std::string>();
539+
_elasticsearch_basic_auth = options["elasticsearch-basic-auth"].as<std::string>();
516540
}
517541
if (options.count("elasticsearch-index-prefix") > 0) {
518-
my->_elasticsearch_index_prefix = options["elasticsearch-index-prefix"].as<std::string>();
542+
_elasticsearch_index_prefix = options["elasticsearch-index-prefix"].as<std::string>();
519543
}
520544
if (options.count("elasticsearch-operation-object") > 0) {
521-
my->_elasticsearch_operation_object = options["elasticsearch-operation-object"].as<bool>();
545+
_elasticsearch_operation_object = options["elasticsearch-operation-object"].as<bool>();
522546
}
523547
if (options.count("elasticsearch-start-es-after-block") > 0) {
524-
my->_elasticsearch_start_es_after_block = options["elasticsearch-start-es-after-block"].as<uint32_t>();
548+
_elasticsearch_start_es_after_block = options["elasticsearch-start-es-after-block"].as<uint32_t>();
525549
}
526550
if (options.count("elasticsearch-operation-string") > 0) {
527-
my->_elasticsearch_operation_string = options["elasticsearch-operation-string"].as<bool>();
551+
_elasticsearch_operation_string = options["elasticsearch-operation-string"].as<bool>();
528552
}
529553
if (options.count("elasticsearch-mode") > 0) {
530554
const auto option_number = options["elasticsearch-mode"].as<uint16_t>();
531555
if(option_number > mode::all)
532556
FC_THROW_EXCEPTION(graphene::chain::plugin_exception, "Elasticsearch mode not valid");
533-
my->_elasticsearch_mode = static_cast<mode>(options["elasticsearch-mode"].as<uint16_t>());
557+
_elasticsearch_mode = static_cast<mode>(options["elasticsearch-mode"].as<uint16_t>());
534558
}
559+
}
560+
561+
void elasticsearch_plugin::plugin_initialize(const boost::program_options::variables_map& options)
562+
{
563+
my->_oho_index = database().add_index< primary_index< operation_history_index > >();
564+
database().add_index< primary_index< account_transaction_history_index > >();
565+
566+
my->init_program_options( options );
535567

536568
if(my->_elasticsearch_mode != mode::only_query) {
537569
if (my->_elasticsearch_mode == mode::all && !my->_elasticsearch_operation_string)
@@ -544,18 +576,21 @@ void elasticsearch_plugin::plugin_initialize(const boost::program_options::varia
544576
"Error populating ES database, we are going to keep trying.");
545577
});
546578
}
547-
}
548579

549-
void elasticsearch_plugin::plugin_startup()
550-
{
551580
graphene::utilities::ES es;
552581
es.curl = my->curl;
553582
es.elasticsearch_url = my->_elasticsearch_node_url;
554583
es.auth = my->_elasticsearch_basic_auth;
555584

556585
if(!graphene::utilities::checkES(es))
557-
FC_THROW_EXCEPTION(fc::exception, "ES database is not up in url ${url}", ("url", my->_elasticsearch_node_url));
558-
ilog("elasticsearch ACCOUNT HISTORY: plugin_startup() begin");
586+
FC_THROW( "ES database is not up in url ${url}", ("url", my->_elasticsearch_node_url) );
587+
588+
graphene::utilities::checkESVersion7OrAbove(es, my->is_es_version_7_or_above);
589+
}
590+
591+
void elasticsearch_plugin::plugin_startup()
592+
{
593+
// Nothing to do
559594
}
560595

561596
operation_history_object elasticsearch_plugin::get_operation_by_id(operation_history_id_type id)
@@ -624,7 +659,7 @@ vector<operation_history_object> elasticsearch_plugin::get_account_history(
624659

625660
const auto response = graphene::utilities::simpleQuery(es);
626661
variant variant_response = fc::json::from_string(response);
627-
662+
628663
const auto hits = variant_response["hits"]["total"];
629664
uint32_t size;
630665
if( hits.is_object() ) // ES-7 ?
@@ -672,7 +707,7 @@ graphene::utilities::ES elasticsearch_plugin::prepareHistoryQuery(string query)
672707
es.curl = curl;
673708
es.elasticsearch_url = my->_elasticsearch_node_url;
674709
es.index_prefix = my->_elasticsearch_index_prefix;
675-
es.endpoint = es.index_prefix + "*/data/_search";
710+
es.endpoint = es.index_prefix + "*/_doc/_search";
676711
es.query = query;
677712

678713
return es;
@@ -683,5 +718,4 @@ mode elasticsearch_plugin::get_running_mode()
683718
return my->_elasticsearch_mode;
684719
}
685720

686-
687721
} }

0 commit comments

Comments
 (0)