Compare commits

..

239 Commits

Author SHA1 Message Date
bert-e 5da4b90c21 Merge branch 'bugfix/S3C-3505_backport_to_stabilization' into tmp/octopus/w/8.1/bugfix/S3C-3505_backport_to_stabilization 2020-12-29 19:57:11 +00:00
Taylor McKinnon 08ab0b56f6 bf(S3C-3505): Add support for --bucket flag to s3_reindex.py
(cherry picked from commit 1e4b7bd9f2)
2020-12-29 11:55:03 -08:00
bert-e 97784eaa70 Merge branch 'bugfix/S3C-3763_batch_ingestion_of_shards' into tmp/octopus/w/8.1/bugfix/S3C-3763_batch_ingestion_of_shards 2020-12-28 19:22:40 +00:00
Taylor McKinnon 0fb3b79e71 bf(S3C-3763): Batch shard ingestion 2020-12-28 11:18:54 -08:00
bert-e cd88e9f4bf Merge branches 'w/8.1/bugfix/S3C-3505_support_bucket_option_in_v1_reindex' and 'q/853/7.9/bugfix/S3C-3505_support_bucket_option_in_v1_reindex' into tmp/octopus/q/8.1 2020-12-15 19:06:43 +00:00
bert-e 558840c55c Merge branch 'bugfix/S3C-3505_support_bucket_option_in_v1_reindex' into q/7.9 2020-12-15 19:06:43 +00:00
bert-e c784f09bc0 Merge branch 'bugfix/S3C-3505_support_bucket_option_in_v1_reindex' into tmp/octopus/w/8.1/bugfix/S3C-3505_support_bucket_option_in_v1_reindex 2020-12-15 18:51:54 +00:00
Taylor McKinnon 1e4b7bd9f2 bf(S3C-3505): Add support for --bucket flag to s3_reindex.py 2020-12-15 10:49:26 -08:00
bert-e d61f9997c8 Merge branch 'bugfix/S3C-3680_fix_mpu_edgecase_in_migration' into tmp/octopus/w/8.1/bugfix/S3C-3680_fix_mpu_edgecase_in_migration 2020-12-11 21:58:07 +00:00
Taylor McKinnon e61655baea bf(S3C-3680): Handle pending MPU edgecase in migration 2020-12-11 13:57:29 -08:00
bert-e d911aadd15 Merge branch 'bugfix/S3C-3696_bump_default_java_max_heap' into q/7.9 2020-12-11 21:41:28 +00:00
bert-e d9555e0038 Merge branches 'w/8.1/bugfix/S3C-3696_bump_default_java_max_heap' and 'q/849/7.9/bugfix/S3C-3696_bump_default_java_max_heap' into tmp/octopus/q/8.1 2020-12-11 21:41:28 +00:00
bert-e e5a814aa13 Merge branch 'bugfix/S3C-3696_bump_default_java_max_heap' into tmp/octopus/w/8.1/bugfix/S3C-3696_bump_default_java_max_heap 2020-12-11 20:15:43 +00:00
Taylor McKinnon adf9ee325f bf(S3C-3696): Bump default java max heap to 4GiB 2020-12-11 12:15:08 -08:00
bert-e acf5bc273c Merge branch 'bugfix/S3C-3689_fix_incorrect_Date.now' into q/7.9 2020-12-11 20:08:14 +00:00
bert-e 1ed1b901c2 Merge branches 'w/8.1/bugfix/S3C-3689_fix_incorrect_Date.now' and 'q/845/7.9/bugfix/S3C-3689_fix_incorrect_Date.now' into tmp/octopus/q/8.1 2020-12-11 20:08:14 +00:00
bert-e 8ebb10c051 Merge branch 'bugfix/S3C-3679_cleanup_closed_redis_client' into q/7.9 2020-12-11 19:53:54 +00:00
bert-e 04a8021fe5 Merge branches 'w/8.1/bugfix/S3C-3679_cleanup_closed_redis_client' and 'q/841/7.9/bugfix/S3C-3679_cleanup_closed_redis_client' into tmp/octopus/q/8.1 2020-12-11 19:53:54 +00:00
bert-e d80bd66387 Merge branch 'bugfix/S3C-3679_cleanup_closed_redis_client' into tmp/octopus/w/8.1/bugfix/S3C-3679_cleanup_closed_redis_client 2020-12-11 19:49:20 +00:00
Taylor McKinnon 1caa33cf9e remove usage of -ci variant of warp 10 2020-12-09 14:21:41 -08:00
bert-e 4678fdae05 Merge branch 'bugfix/S3C-3689_fix_incorrect_Date.now' into tmp/octopus/w/8.1/bugfix/S3C-3689_fix_incorrect_Date.now 2020-12-08 19:46:35 +00:00
Taylor McKinnon 304bca04c7 bf(S3C-3689): Fix InterpolatedClock 2020-12-08 11:46:01 -08:00
Taylor McKinnon c05d2dbaf6 bf(S3C-3679): cleanup redis client on disconnect 2020-12-06 10:31:08 -08:00
bert-e 0814b59fda Merge branch 'bugfix/S3C-3553_improve_redis_reconnection_logic' into tmp/octopus/w/7.9/bugfix/S3C-3553_improve_redis_reconnection_logic 2020-11-18 23:53:16 +00:00
bert-e 3f7ea3e121 Merge branch 'w/7.9/bugfix/S3C-3553_improve_redis_reconnection_logic' into tmp/octopus/w/8.1/bugfix/S3C-3553_improve_redis_reconnection_logic 2020-11-18 23:53:16 +00:00
Taylor McKinnon d17e5545b3 bf(S3C-3553): Prevent leaking timeout event handlers 2020-11-18 11:46:30 -08:00
bert-e 3d9d949b05 Merge branch 'bugfix/S3C-3516_fix_authz_for_account_lvl_metrics' into q/7.9 2020-11-12 18:16:20 +00:00
bert-e f136d7d994 Merge branches 'w/8.1/bugfix/S3C-3516_fix_authz_for_account_lvl_metrics' and 'q/823/7.9/bugfix/S3C-3516_fix_authz_for_account_lvl_metrics' into tmp/octopus/q/8.1 2020-11-12 18:16:20 +00:00
bert-e d36af35db5 Merge branch 'improvement/S3C-3520_drop_hex_encoding_for_warp10_data' into q/7.9 2020-11-11 23:50:04 +00:00
bert-e a1e6c4d11a Merge branches 'w/8.1/improvement/S3C-3520_drop_hex_encoding_for_warp10_data' and 'q/828/7.9/improvement/S3C-3520_drop_hex_encoding_for_warp10_data' into tmp/octopus/q/8.1 2020-11-11 23:50:04 +00:00
bert-e 97014cf67b Merge branch 'bugfix/S3C-3516_fix_authz_for_account_lvl_metrics' into tmp/octopus/w/8.1/bugfix/S3C-3516_fix_authz_for_account_lvl_metrics 2020-11-11 23:49:42 +00:00
Taylor McKinnon 61cc5de8b5 bf(S3C-3516): Rework authz and accountId conversion 2020-11-11 15:49:12 -08:00
bert-e c8ac4cf688 Merge branch 'improvement/S3C-3520_drop_hex_encoding_for_warp10_data' into tmp/octopus/w/8.1/improvement/S3C-3520_drop_hex_encoding_for_warp10_data 2020-11-11 22:08:42 +00:00
Taylor McKinnon eb785bf3b3 impr(S3C-3520): Remove intermediate hex encoding for warp10 datapoints 2020-11-11 14:03:12 -08:00
bert-e 4554828a52 Merge branch 'bugfix/S3C-3514_add_missing_logline' into tmp/octopus/w/8.1/bugfix/S3C-3514_add_missing_logline 2020-11-09 23:46:53 +00:00
Taylor McKinnon 64c2f7307a bf(S3C-3514): Add missing call to responseLoggerMiddleware in errorMiddleware 2020-11-09 15:46:21 -08:00
bert-e 4caa7f5641 Merge branch 'w/7.9/feature/S3C-3484_extend_warp10_image' into tmp/octopus/w/8.1/feature/S3C-3484_extend_warp10_image 2020-10-28 22:06:32 +00:00
bert-e 9b800a062f Merge branch 'feature/S3C-3484_extend_warp10_image' into tmp/octopus/w/7.8/feature/S3C-3484_extend_warp10_image 2020-10-28 22:06:31 +00:00
Taylor McKinnon 99d3f7e2b8
Update images/warp10/s6/cont-init.d/20-install-config
Co-authored-by: miniscruff <halfpint1170@gmail.com>
2020-10-28 15:06:26 -07:00
bert-e 92ffbcc3d7 Merge branch 'w/7.9/feature/S3C-3484_extend_warp10_image' into tmp/octopus/w/8.1/feature/S3C-3484_extend_warp10_image 2020-10-28 19:10:21 +00:00
bert-e 77d311b01d Merge branch 'feature/S3C-3484_extend_warp10_image' into tmp/octopus/w/7.8/feature/S3C-3484_extend_warp10_image 2020-10-28 19:10:21 +00:00
Taylor McKinnon 90ac30d288 ft(S3C-3484): Add Sensision and extend warp10 tunables 2020-10-28 12:09:49 -07:00
bert-e 1197733b17 Merge branch 'w/7.9/bugfix/S3C-3485_fix_listMetrics_handler' into tmp/octopus/w/8.1/bugfix/S3C-3485_fix_listMetrics_handler 2020-10-27 23:39:12 +00:00
bert-e 72383df256 Merge branch 'bugfix/S3C-3485_fix_listMetrics_handler' into tmp/octopus/w/7.8/bugfix/S3C-3485_fix_listMetrics_handler 2020-10-27 23:39:12 +00:00
bert-e 78bc6290b2 Merge branch 'w/7.9/bugfix/S3C-3483_adjust_default_schedules' into tmp/octopus/w/8.1/bugfix/S3C-3483_adjust_default_schedules 2020-10-27 20:21:53 +00:00
bert-e 2073211a60 Merge branch 'bugfix/S3C-3483_adjust_default_schedules' into tmp/octopus/w/7.8/bugfix/S3C-3483_adjust_default_schedules 2020-10-27 20:21:53 +00:00
bert-e 124744b562 Merge branches 'w/8.1/bugfix/S3C-3426_fix_user_creds_support' and 'q/785/7.9/bugfix/S3C-3426_fix_user_creds_support' into tmp/octopus/q/8.1 2020-10-23 05:47:28 +00:00
bert-e 478d5d69db Merge branches 'w/7.8/bugfix/S3C-3426_fix_user_creds_support' and 'q/785/7.8.0/bugfix/S3C-3426_fix_user_creds_support' into tmp/octopus/q/7.8 2020-10-23 05:47:27 +00:00
bert-e 4a806da678 Merge branches 'w/8.1/bugfix/S3C-3446_convert_account_to_canonical_id' and 'q/794/7.9/bugfix/S3C-3446_convert_account_to_canonical_id' into tmp/octopus/q/8.1 2020-10-23 05:33:40 +00:00
bert-e b198553bf1 Merge branches 'w/7.8/bugfix/S3C-3446_convert_account_to_canonical_id' and 'q/794/7.8.0/bugfix/S3C-3446_convert_account_to_canonical_id' into tmp/octopus/q/7.8 2020-10-23 05:33:39 +00:00
bert-e 3f4f34976c Merge branch 'w/7.9/bugfix/S3C-3446_convert_account_to_canonical_id' into tmp/octopus/w/8.1/bugfix/S3C-3446_convert_account_to_canonical_id 2020-10-23 00:37:32 +00:00
bert-e 8a934e1b51 Merge branch 'bugfix/S3C-3446_convert_account_to_canonical_id' into tmp/octopus/w/7.8/bugfix/S3C-3446_convert_account_to_canonical_id 2020-10-23 00:37:31 +00:00
bert-e 74b8c91244 Merge branches 'w/8.1/feature/S3C-3010_add_migrate_task' and 'q/769/7.9/feature/S3C-3010_add_migrate_task' into tmp/octopus/q/8.1 2020-10-23 00:23:34 +00:00
bert-e 97b65aaa5a Merge branches 'w/7.8/feature/S3C-3010_add_migrate_task' and 'q/769/7.8.0/feature/S3C-3010_add_migrate_task' into tmp/octopus/q/7.8 2020-10-23 00:23:34 +00:00
bert-e df4e96132c Merge branch 'w/7.9/feature/S3C-3010_add_migrate_task' into tmp/octopus/w/8.1/feature/S3C-3010_add_migrate_task 2020-10-21 23:45:37 +00:00
bert-e a76cc118e9 Merge branch 'feature/S3C-3010_add_migrate_task' into tmp/octopus/w/7.8/feature/S3C-3010_add_migrate_task 2020-10-21 23:45:36 +00:00
bert-e ffe3ece284 Merge branch 'w/7.9/bugfix/S3C-3426_fix_user_creds_support' into tmp/octopus/w/8.1/bugfix/S3C-3426_fix_user_creds_support 2020-10-21 23:42:51 +00:00
bert-e 979a8cc804 Merge branch 'bugfix/S3C-3426_fix_user_creds_support' into tmp/octopus/w/7.8/bugfix/S3C-3426_fix_user_creds_support 2020-10-21 23:42:50 +00:00
bert-e d6d53eed8a Merge branch 'w/7.9/bugfix/S3C-3447_switch_to_node_schedule' into tmp/octopus/w/8.1/bugfix/S3C-3447_switch_to_node_schedule 2020-10-21 21:15:29 +00:00
bert-e bb3017e3b5 Merge branch 'bugfix/S3C-3447_switch_to_node_schedule' into tmp/octopus/w/7.8/bugfix/S3C-3447_switch_to_node_schedule 2020-10-21 21:15:28 +00:00
bert-e e3a6844fc5 Merge branch 'w/7.9/bugfix/S3C-3438_add_missing_reindex_schema' into tmp/octopus/w/8.1/bugfix/S3C-3438_add_missing_reindex_schema 2020-10-19 22:30:06 +00:00
bert-e 1f010bebde Merge branch 'bugfix/S3C-3438_add_missing_reindex_schema' into tmp/octopus/w/7.8/bugfix/S3C-3438_add_missing_reindex_schema 2020-10-19 22:30:06 +00:00
bert-e 58c73db7c3 Merge branch 'w/7.9/bugfix/S3C-2576-update-vaultclient' into tmp/octopus/w/8.1/bugfix/S3C-2576-update-vaultclient 2020-10-13 14:48:06 +00:00
Anurag Mittal d98bac3a75 bugfix: S3C-2576-updated-vaultclient 2020-10-13 16:46:48 +02:00
bert-e 9a7ea1e564 Merge branch 'w/7.9/bugfix/S3C-3322_bump_vaultclient' into tmp/octopus/w/8.1/bugfix/S3C-3322_bump_vaultclient 2020-10-12 20:56:10 +00:00
bert-e 117f2a37cd Merge branch 'bugfix/S3C-3322_bump_vaultclient' into tmp/octopus/w/7.8/bugfix/S3C-3322_bump_vaultclient 2020-10-12 20:56:09 +00:00
bert-e 3a6e0a4c40 Merge branch 'w/7.9/bugfix/S3C-3424_remove_creds_from_client' into tmp/octopus/w/8.1/bugfix/S3C-3424_remove_creds_from_client 2020-10-08 23:17:10 +00:00
bert-e 641dbdc9f8 Merge branch 'bugfix/S3C-3424_remove_creds_from_client' into tmp/octopus/w/7.8/bugfix/S3C-3424_remove_creds_from_client 2020-10-08 23:17:09 +00:00
bert-e 62498fa330 Merge branches 'w/8.1/feature/S3C-3423_add_client_ip_limiting_middleware' and 'q/741/7.9/feature/S3C-3423_add_client_ip_limiting_middleware' into tmp/octopus/q/8.1 2020-10-08 20:54:35 +00:00
bert-e ad31123c0f Merge branches 'w/7.8/feature/S3C-3423_add_client_ip_limiting_middleware' and 'q/741/7.8.0/feature/S3C-3423_add_client_ip_limiting_middleware' into tmp/octopus/q/7.8 2020-10-08 20:54:35 +00:00
bert-e e9a252f3c4 Merge branch 'w/7.9/feature/S3C-3423_add_client_ip_limiting_middleware' into tmp/octopus/w/8.1/feature/S3C-3423_add_client_ip_limiting_middleware 2020-10-08 20:50:22 +00:00
bert-e c382a6647c Merge branch 'feature/S3C-3423_add_client_ip_limiting_middleware' into tmp/octopus/w/7.8/feature/S3C-3423_add_client_ip_limiting_middleware 2020-10-08 20:50:22 +00:00
bert-e 1b1d1ce35c Merge branch 'w/7.9/feature/S3C-3418_change_on_wire_ingestion_format_json' into tmp/octopus/w/8.1/feature/S3C-3418_change_on_wire_ingestion_format_json 2020-10-07 22:32:37 +00:00
bert-e dfbe4d61ab Merge branch 'feature/S3C-3418_change_on_wire_ingestion_format_json' into tmp/octopus/w/7.8/feature/S3C-3418_change_on_wire_ingestion_format_json 2020-10-07 22:32:37 +00:00
bert-e 0b308adf07 Merge branches 'w/8.1/bugfix/S3C-3307_handle_deleted_buckets_in_reindex_port' and 'q/726/7.9/bugfix/S3C-3307_handle_deleted_buckets_in_reindex_port' into tmp/octopus/q/8.1 2020-10-06 22:55:41 +00:00
bert-e c718de352a Merge branches 'w/7.8/bugfix/S3C-3307_handle_deleted_buckets_in_reindex_port' and 'q/726/7.8.0/bugfix/S3C-3307_handle_deleted_buckets_in_reindex_port' into tmp/octopus/q/7.8 2020-10-06 22:55:40 +00:00
bert-e 73735f0f27 Merge branch 'w/7.9/bugfix/S3C-3307_handle_deleted_buckets_in_reindex_port' into tmp/octopus/w/8.1/bugfix/S3C-3307_handle_deleted_buckets_in_reindex_port 2020-10-06 21:19:03 +00:00
bert-e af4937019c Merge branch 'bugfix/S3C-3307_handle_deleted_buckets_in_reindex_port' into tmp/octopus/w/7.8/bugfix/S3C-3307_handle_deleted_buckets_in_reindex_port 2020-10-06 21:19:03 +00:00
bert-e 7b1ed984e8 Merge branches 'w/8.1/bugfix/S3C-3307_handle_deleted_buckets_in_reindex' and 'q/695/7.9/bugfix/S3C-3307_handle_deleted_buckets_in_reindex' into tmp/octopus/q/8.1 2020-10-06 19:08:10 +00:00
bert-e 700df82aa4 Merge branch 'w/7.8/bugfix/S3C-3307_handle_deleted_buckets_in_reindex' into tmp/octopus/q/7.8 2020-10-06 19:08:09 +00:00
bert-e 0adb775a1c Merge branch 'w/7.9/bugfix/S3C-3308_fix_mpuShadowBucket_counters_for_v2' into tmp/octopus/w/8.1/bugfix/S3C-3308_fix_mpuShadowBucket_counters_for_v2 2020-10-05 17:42:07 +00:00
bert-e a64b25c26e Merge branch 'w/7.9/bugfix/S3C-3307_handle_deleted_buckets_in_reindex' into tmp/octopus/w/8.1/bugfix/S3C-3307_handle_deleted_buckets_in_reindex 2020-10-05 17:36:57 +00:00
bert-e 8b827052dd Merge branch 'bugfix/S3C-3307_handle_deleted_buckets_in_reindex' into tmp/octopus/w/7.8/bugfix/S3C-3307_handle_deleted_buckets_in_reindex 2020-10-05 17:36:57 +00:00
bert-e 392636df76 Merge branch 'w/7.8/bugfix/S3C-3376_remove_requirement_for_access_key' into tmp/octopus/w/8.1/bugfix/S3C-3376_remove_requirement_for_access_key 2020-10-01 18:14:21 +00:00
bert-e 32920a5a97 Merge branches 'w/8.1/feature/S3C-3382_add_configuration_for_ingestion_speed' and 'q/698/7.8/feature/S3C-3382_add_configuration_for_ingestion_speed' into tmp/octopus/q/8.1 2020-10-01 17:25:48 +00:00
bert-e b875c72451 Merge branches 'w/8.1/bugfix/S3C-3361_bump_v2_toggle_timeout' and 'q/702/7.8/bugfix/S3C-3361_bump_v2_toggle_timeout' into tmp/octopus/q/8.1 2020-09-30 00:11:03 +00:00
bert-e abbbad9f5f Merge branch 'bugfix/S3C-3361_bump_v2_toggle_timeout' into tmp/octopus/w/8.1/bugfix/S3C-3361_bump_v2_toggle_timeout 2020-09-29 21:43:20 +00:00
bert-e 4028b265f3 Merge branch 'feature/S3C-3382_add_configuration_for_ingestion_speed' into tmp/octopus/w/8.1/feature/S3C-3382_add_configuration_for_ingestion_speed 2020-09-29 21:33:15 +00:00
Taylor McKinnon c2254443dc print -> _log.info 2020-09-29 12:28:52 -07:00
Taylor McKinnon dd48282e9c bf(S3C-3307): Handle deleted buckets in reindex 2020-09-29 12:08:02 -07:00
bert-e 6051cada33 Merge branch 'w/7.8/bugfix/S3C-3308_fix_mpuShadowBucket_counters' into tmp/octopus/w/8.1/bugfix/S3C-3308_fix_mpuShadowBucket_counters 2020-09-28 20:05:41 +00:00
bert-e dd1ef6860e Merge branch 'bugfix/S3C-3363_add_missing_logger_for_replay' into tmp/octopus/w/8.1/bugfix/S3C-3363_add_missing_logger_for_replay 2020-09-24 20:54:47 +00:00
bert-e 33c1af303d Merge branches 'w/8.1/bugfix/S3C-3362_fix_reindex_default_schedule' and 'q/683/7.8/bugfix/S3C-3362_fix_reindex_default_schedule' into tmp/octopus/q/8.1 2020-09-24 02:53:34 +00:00
bert-e 3d79444672 Merge branches 'w/8.1/feature/S3C-3324_redis_backed_routes' and 'q/668/7.8/feature/S3C-3324_redis_backed_routes' into tmp/octopus/q/8.1 2020-09-24 02:53:08 +00:00
bert-e 1bd45ffd68 Merge branch 'bugfix/S3C-3362_fix_reindex_default_schedule' into tmp/octopus/w/8.1/bugfix/S3C-3362_fix_reindex_default_schedule 2020-09-24 01:10:25 +00:00
bert-e f19018f9e7 Merge branch 'feature/S3C-3324_redis_backed_routes' into tmp/octopus/w/8.1/feature/S3C-3324_redis_backed_routes 2020-09-24 00:48:00 +00:00
bert-e 87658b4351 Merge branches 'w/8.1/bugfix/S3C-1997_fix_ioredis_failover' and 'q/671/7.8/bugfix/S3C-1997_fix_ioredis_failover' into tmp/octopus/q/8.1 2020-09-24 00:07:29 +00:00
bert-e 91eed09651 Merge branch 'bugfix/S3C-1997_fix_ioredis_failover' into tmp/octopus/w/8.1/bugfix/S3C-1997_fix_ioredis_failover 2020-09-24 00:03:21 +00:00
bert-e 728d54501b Merge branches 'w/8.1/bugfix/S3C-3358_fix_metrics_resp_for_single_resource' and 'q/674/7.8/bugfix/S3C-3358_fix_metrics_resp_for_single_resource' into tmp/octopus/q/8.1 2020-09-23 18:20:27 +00:00
bert-e 911cfb3c36 Merge branch 'bugfix/S3C-3358_fix_metrics_resp_for_single_resource' into tmp/octopus/w/8.1/bugfix/S3C-3358_fix_metrics_resp_for_single_resource 2020-09-23 18:06:30 +00:00
bert-e 5d7ed8520f Merge branches 'w/8.1/feature/S3C-3351_cache_node_deps_backport' and 'q/659/7.8/feature/S3C-3351_cache_node_deps_backport' into tmp/octopus/q/8.1 2020-09-23 17:23:14 +00:00
Taylor McKinnon dd118e4a44 Merge remote-tracking branch 'origin/feature/S3C-3286_add_reindex_task' into w/8.1/feature/S3C-3286_add_reindex_task 2020-09-17 11:57:37 -07:00
bert-e 3076eaf115 Merge branch 'w/7.8/feature/S3C-3351_cache_node_deps_backport' into tmp/octopus/w/8.1/feature/S3C-3351_cache_node_deps_backport 2020-09-17 18:47:55 +00:00
bert-e fcd74b5707 Merge branches 'w/8.1/feature/S3C-3351_cache_node_deps' and 'q/656/7.8/feature/S3C-3351_cache_node_deps' into tmp/octopus/q/8.1 2020-09-17 17:20:16 +00:00
bert-e ad52015f73 Merge branch 'feature/S3C-3351_cache_node_deps' into tmp/octopus/w/8.1/feature/S3C-3351_cache_node_deps 2020-09-17 17:11:39 +00:00
bert-e 60d0dc794d Merge branches 'w/8.1/feature/S3C-3324_add_counter_backend_to_cache' and 'q/651/7.8/feature/S3C-3324_add_counter_backend_to_cache' into tmp/octopus/q/8.1 2020-09-16 17:21:13 +00:00
bert-e 14db2c93ce Merge branch 'feature/S3C-3324_add_counter_backend_to_cache' into tmp/octopus/w/8.1/feature/S3C-3324_add_counter_backend_to_cache 2020-09-11 22:28:44 +00:00
bert-e 4d4906dc94 Merge branch 'improvement/S3C-3325-support-bucket-notification-apis-utapi' into tmp/octopus/w/8.1/improvement/S3C-3325-support-bucket-notification-apis-utapi 2020-09-09 18:59:27 +00:00
bert-e 7a9ce9bf2c Merge branches 'w/8.1/feature/S3C-3269_add_tls_support' and 'q/642/7.8/feature/S3C-3269_add_tls_support' into tmp/octopus/q/8.1 2020-09-04 22:24:54 +00:00
bert-e d203a94367 Merge branch 'feature/S3C-3269_add_tls_support' into tmp/octopus/w/8.1/feature/S3C-3269_add_tls_support 2020-09-04 21:52:16 +00:00
Taylor McKinnon bea0a4607a Merge remote-tracking branch 'origin/bugfix/S3C-3087_bump_version' into w/8.1/bugfix/S3C-3087_bump_version 2020-08-24 12:05:39 -07:00
bert-e 047aa4f8eb Merge branch 'feature/S3C-3265_warp10_failover' into tmp/octopus/w/8.1/feature/S3C-3265_warp10_failover 2020-08-15 02:37:51 +00:00
bert-e 4aae68208c Merge branch 'bugfix/S3C-3264_fix_sentinel_parsing' into tmp/octopus/w/8.1/bugfix/S3C-3264_fix_sentinel_parsing 2020-08-14 18:46:21 +00:00
bert-e 0b7781d3b8 Merge branches 'w/8.1/bugfix/S3C-3255_ensure_ingest_timestamp_precision' and 'q/624/7.8/bugfix/S3C-3255_ensure_ingest_timestamp_precision' into tmp/octopus/q/8.1 2020-08-13 21:46:34 +00:00
bert-e 2a2f818745 Merge branch 'bugfix/S3C-3255_ensure_ingest_timestamp_precision' into tmp/octopus/w/8.1/bugfix/S3C-3255_ensure_ingest_timestamp_precision 2020-08-13 20:57:20 +00:00
bert-e 8064180984 Merge branch 'feature/S3C-3003_add_repair_process' into tmp/octopus/w/8.1/feature/S3C-3003_add_repair_process 2020-08-13 19:55:43 +00:00
bert-e 6e096c9d39 Merge branches 'w/8.1/bugfix/S3C-3242_rework_redis_config' and 'q/614/7.8/bugfix/S3C-3242_rework_redis_config' into tmp/octopus/q/8.1 2020-08-11 17:30:55 +00:00
bert-e 86285d1e45 Merge branches 'w/8.1/bugfix/S3C-3240_fix_tasks_exports' and 'q/611/7.8/bugfix/S3C-3240_fix_tasks_exports' into tmp/octopus/q/8.1 2020-08-10 23:43:30 +00:00
bert-e 8ea9a5dc0a Merge branches 'w/8.1/bugfix/S3C-3243_fix_warp10_token_config' and 'q/609/7.8/bugfix/S3C-3243_fix_warp10_token_config' into tmp/octopus/q/8.1 2020-08-10 23:29:27 +00:00
bert-e 390f1bb3c1 Merge branch 'w/7.8/bugfix/S3C-3240_fix_tasks_exports' into tmp/octopus/w/8.1/bugfix/S3C-3240_fix_tasks_exports 2020-08-10 23:23:15 +00:00
bert-e 3b2fc1b045 Merge branch 'w/7.8/bugfix/S3C-3242_rework_redis_config' into tmp/octopus/w/8.1/bugfix/S3C-3242_rework_redis_config 2020-08-10 23:18:17 +00:00
bert-e 58f20049f3 Merge branch 'bugfix/S3C-3243_fix_warp10_token_config' into tmp/octopus/w/8.1/bugfix/S3C-3243_fix_warp10_token_config 2020-08-10 23:13:09 +00:00
bert-e db05aaf2a3 Merge branch 'bugfix/S3C-3241_remove_warp10_workaround' into tmp/octopus/w/8.1/bugfix/S3C-3241_remove_warp10_workaround 2020-08-10 23:11:48 +00:00
bert-e 16c43c202b Merge branch 'feature/S3C-3235_fix_getMetricsAt_with_no_data_81' into q/8.1 2020-08-07 19:08:16 +00:00
bert-e 90beac2fa7 Merge branch 'w/7.8/feature/S3C-3230_add_authv4_support' into tmp/octopus/w/8.1/feature/S3C-3230_add_authv4_support 2020-08-05 23:03:09 +00:00
bert-e 14446a10c2 Merge branch 'w/7.8/bugfix/S3C-3235_fix_getMetricsAt_with_no_data' into tmp/octopus/w/8.1/bugfix/S3C-3235_fix_getMetricsAt_with_no_data 2020-08-04 20:04:49 +00:00
bert-e 8e1417ad6b Merge branch 'w/7.8/feature/S3C-3020_add_functional_test_for_snapshot_task' into tmp/octopus/w/8.1/feature/S3C-3020_add_functional_test_for_snapshot_task 2020-08-03 21:49:18 +00:00
bert-e ae29a7d346 Merge branch 'w/7.8/feature/S3C-3020_add_functional_test_for_checkpoint_task' into tmp/octopus/w/8.1/feature/S3C-3020_add_functional_test_for_checkpoint_task 2020-08-03 21:42:48 +00:00
bert-e 646f921ded Merge branch 'w/7.8/feature/S3C-3020_add_functional_test_ingest_task' into tmp/octopus/w/8.1/feature/S3C-3020_add_functional_test_ingest_task 2020-08-03 19:39:54 +00:00
bert-e 31ff2aa63b Merge branch 'w/7.8/feature/S3C-3007_Add_listMetrics_handler' into tmp/octopus/w/8.1/feature/S3C-3007_Add_listMetrics_handler 2020-08-03 19:30:40 +00:00
bert-e 37f6b4ddc5 Merge branch 'w/7.8/feature/S3C-3132-utapi-v2-push-metric' into tmp/octopus/w/8.1/feature/S3C-3132-utapi-v2-push-metric 2020-07-31 20:37:59 +00:00
bert-e d043d8dcae Merge branch 'w/7.8/feature/S3C-3006_add_metric_calculation_macro' into tmp/octopus/w/8.1/feature/S3C-3006_add_metric_calculation_macro 2020-07-29 21:52:13 +00:00
bert-e 6dbc500fa9 Merge branch 'w/7.8/feature/S3C-3196-update-node' into tmp/octopus/w/8.1/feature/S3C-3196-update-node 2020-07-27 21:55:34 +00:00
bert-e 8e1550d61a Merge branch 'w/7.8/feature/S3C-3196-update-node' into tmp/octopus/w/8.1/feature/S3C-3196-update-node 2020-07-27 07:40:11 +00:00
bert-e 4a811d7e86 Merge branch 'w/7.8/feature/S3C-3196-update-node' into tmp/octopus/w/8.1/feature/S3C-3196-update-node 2020-07-25 03:28:19 +00:00
bert-e 1225f45805 Merge branch 'w/7.8/feature/S3C-3020_add_lag_flag_to_task' into tmp/octopus/w/8.1/feature/S3C-3020_add_lag_flag_to_task 2020-07-20 21:40:30 +00:00
bert-e 81e5c9e98c Merge branch 'w/7.8/feature/S3C-3020_add_snapshot_creation_task' into tmp/octopus/w/8.1/feature/S3C-3020_add_snapshot_creation_task 2020-07-20 20:21:06 +00:00
bert-e cdb9ef06d1 Merge branch 'w/7.8/feature/S3C-3002_add_checkpoint_creation_task' into tmp/octopus/w/8.1/feature/S3C-3002_add_checkpoint_creation_task 2020-07-20 19:21:38 +00:00
bert-e 186807e798 Merge branch 'w/7.8/feature/S3C-3001_add_redis_to_warp10_task' into tmp/octopus/w/8.1/feature/S3C-3001_add_redis_to_warp10_task 2020-07-16 17:21:16 +00:00
bert-e 25ffbe3bbc Merge branch 'w/7.8/feature/S3C-3001_Add_shard_tracking_to_redis_backend' into tmp/octopus/w/8.1/feature/S3C-3001_Add_shard_tracking_to_redis_backend 2020-07-13 19:06:58 +00:00
bert-e 77f8fc4b11 Merge branch 'w/7.8/feature/S3C-3001_usec_resolution_for_shards' into tmp/octopus/w/8.1/feature/S3C-3001_usec_resolution_for_shards 2020-07-13 00:25:33 +00:00
bert-e a02fd4830c Merge branch 'w/7.8/feature/S3C-3005_add_ingest_api' into tmp/octopus/w/8.1/feature/S3C-3005_add_ingest_api 2020-07-07 17:54:27 +00:00
bert-e aa314c5ed9 Merge branch 'w/7.8/feature/S3C-3008_Add_cloudserver_client' into tmp/octopus/w/8.1/feature/S3C-3008_Add_cloudserver_client 2020-07-01 18:58:57 +00:00
bert-e 51858fe41a Merge branch 'w/7.8/feature/S3C-3004_Add_http_server' into tmp/octopus/w/8.1/feature/S3C-3004_Add_http_server 2020-06-29 19:45:46 +00:00
Taylor McKinnon 70a79537fe Merge remote-tracking branch 'origin/w/7.8/feature/S3C-3004_Add_http_server' into w/8.1/feature/S3C-3004_Add_http_server 2020-06-28 21:10:12 -07:00
bert-e b335675a36 Merge branch 'w/7.8/feature/S3C-3004_Add_process_absraction' into tmp/octopus/w/8.1/feature/S3C-3004_Add_process_absraction 2020-06-19 19:36:52 +00:00
bert-e 707620acf7 Merge branch 'w/7.8/feature/S3C-3004_Add_config_loading' into tmp/octopus/w/8.1/feature/S3C-3004_Add_config_loading 2020-06-18 23:47:50 +00:00
bert-e 30306f3dce Merge branch 'w/7.8/feature/S3C-3004_Add_stub_openapi' into tmp/octopus/w/8.1/feature/S3C-3004_Add_stub_openapi 2020-06-18 22:26:29 +00:00
bert-e d82623014d Merge branch 'w/7.8/feature/S3C-3000_Add_warp10_client' into tmp/octopus/w/8.1/feature/S3C-3000_Add_warp10_client 2020-06-18 20:31:03 +00:00
bert-e 1c5c011699 Merge branch 'w/7.8/feature/S3C-2999_add_redis_cache_client' into tmp/octopus/w/8.1/feature/S3C-2999_add_redis_cache_client 2020-06-18 20:26:15 +00:00
bert-e 282a55c724 Merge branch 'w/7.8/feature/S3C-2960-object-lock-metrics' into tmp/octopus/w/8.1/feature/S3C-2960-object-lock-metrics 2020-06-16 17:33:22 +00:00
Taylor McKinnon 90c8f49222 Merge remote-tracking branch 'origin/w/7.8/feature/S3C-3041_Add_v2_toggle' into w/8.1/feature/S3C-3041_Add_v2_toggle 2020-06-10 17:40:37 -07:00
Taylor McKinnon 2d0c104cc2 Merge remote-tracking branch 'origin/w/7.8/bugfix/S3C-3043_bump_scality_guidelines' into w/8.1/bugfix/S3C-3043_bump_scality_guidelines 2020-06-10 15:10:04 -07:00
bert-e 72bda734bf Merge branch 'w/7.8/bugfix/S3C-3023_bump_warp10_version' into tmp/octopus/w/8.1/bugfix/S3C-3023_bump_warp10_version 2020-06-02 23:09:36 +00:00
bert-e a2e8fe51b4 Merge branch 'feature/S3C-2878_Add_warp10_Dockerfile' into tmp/octopus/w/8.1/feature/S3C-2878_Add_warp10_Dockerfile 2020-05-26 19:49:42 +00:00
bert-e b494f1e85c Merge branch 'w/7.7/bugfix/S3C-2408/mpu-overwrite' into tmp/octopus/w/8.1/bugfix/S3C-2408/mpu-overwrite 2020-04-22 02:20:17 +00:00
bert-e af1a01b692 Merge branch 'w/8.0/improvement/S3C-2808-clean-upstream' into tmp/octopus/w/8.1/improvement/S3C-2808-clean-upstream 2020-04-21 23:59:47 +00:00
Rahul Padigela 1f0f7d91ff Merge remote-tracking branch 'origin/w/7.7/improvement/S3C-2808-clean-upstream' into w/8.0/improvement/S3C-2808-clean-upstream 2020-04-21 16:59:04 -07:00
Taylor McKinnon 5c6386e33d Merge remote-tracking branch 'origin/w/8.0/bugfix/S3C-2603_Update_utapi_reindex' into w/8.1/bugfix/S3C-2603_Update_utapi_reindex 2020-04-06 12:34:17 -07:00
Taylor McKinnon 0bf2a533f5 Merge remote-tracking branch 'origin/w/7.7/bugfix/S3C-2603_Update_utapi_reindex' into w/8.0/bugfix/S3C-2603_Update_utapi_reindex 2020-04-06 12:33:13 -07:00
bert-e c59323952d Merge branch 'w/8.0/bugfix/S3C-2604-listMultipleBucketMetrics' into tmp/octopus/w/8.1/bugfix/S3C-2604-listMultipleBucketMetrics 2020-02-26 09:30:18 +00:00
bert-e b05d8c5528 Merge branch 'w/7.7/bugfix/S3C-2604-listMultipleBucketMetrics' into tmp/octopus/w/8.0/bugfix/S3C-2604-listMultipleBucketMetrics 2020-02-26 09:30:17 +00:00
bert-e a5430ba8a8 Merge branch 'w/8.0/bugfix/S3C-2604-list-multiple-bucket-metrics' into tmp/octopus/w/8.1/bugfix/S3C-2604-list-multiple-bucket-metrics 2020-02-25 19:24:23 +00:00
bert-e cc0087c3ba Merge branch 'w/7.7/bugfix/S3C-2604-list-multiple-bucket-metrics' into tmp/octopus/w/8.0/bugfix/S3C-2604-list-multiple-bucket-metrics 2020-02-25 19:24:23 +00:00
bert-e 6a45a13ab4 Merge branch 'w/8.0/bugfix/S3C-2475/utapi_response_correction' into tmp/octopus/w/8.1/bugfix/S3C-2475/utapi_response_correction 2020-02-05 19:34:07 +00:00
bert-e 3dd760835f Merge branch 'w/7.7/bugfix/S3C-2475/utapi_response_correction' into tmp/octopus/w/8.0/bugfix/S3C-2475/utapi_response_correction 2020-02-05 19:34:07 +00:00
Flavien Lebarbé 2720bdb096 Merge branch 'development/8.0' into development/8.1 2019-11-11 19:15:36 +01:00
Flavien Lebarbé 54390f82ba Merge branch 'development/7.6' into development/8.0 2019-11-11 19:15:09 +01:00
Katherine Laue 5ccb8d03be Update yarn.lock 2019-09-11 15:41:50 -07:00
Katherine Laue 9fdad30ca0 improvement/S3C-2365 update vaultclient dep 2019-09-11 15:41:27 -07:00
Katherine Laue 3180aa2d02 update yarn.lock 2019-09-11 15:40:50 -07:00
Katherine Laue 60e4ed7880 remove yarn.lock 2019-09-11 15:40:50 -07:00
Katherine Laue d77d15c7dd update yarn.lock 2019-09-11 15:40:50 -07:00
Katherine Laue dc34912298 improvement/S3C-2364 install yarn frozen lockfile 2019-09-11 15:40:50 -07:00
Katherine Laue 4a845e80cd improvement/S3C-2364 migrate package manager to yarn 2019-09-11 15:40:50 -07:00
bbuchanan9 b56405f031 improvement S3C-234 Operation counters config 2019-09-11 15:40:50 -07:00
bbuchanan9 4d6fd39693 bugfix: S3C-2342 BucketD listing functional tests 2019-09-11 15:38:11 -07:00
bbuchanan9 b3a3383289 bugfix: S3C-2317 Add uuid module as a dependency 2019-09-11 15:38:11 -07:00
bbuchanan9 196acf9fc8 bugfix: S3C-2342 Add bucket listing pagination 2019-09-11 15:38:11 -07:00
bbuchanan9 347ac8faf1 bugfix: S3C-2315 Support versioning with reindex 2019-09-11 15:38:11 -07:00
bbuchanan9 a62c22f06d improvement: S3C-2337 Parallelize tests 2019-09-11 15:38:11 -07:00
bbuchanan9 d65b9a65ee bugfix: S3C-2317 Append UUID to sorted set members 2019-09-11 15:38:11 -07:00
bert-e 9533009100 Merge branch 'w/7.5/improvement/S3C-2337-parallelize-tests' into tmp/octopus/w/8.0/improvement/S3C-2337-parallelize-tests 2019-07-19 17:12:55 +00:00
bert-e d336997813 Merge branch 'w/7.5/bugfix/S3C-2317/use-uuid' into tmp/octopus/w/8.0/bugfix/S3C-2317/use-uuid 2019-07-19 01:22:33 +00:00
Katherine Laue 166d2c06cf Merge remote-tracking branch 'origin/w/7.5/improvement/S3C-2332-update-vaultclient' into w/8.0/improvement/S3C-2332-update-vaultclient 2019-07-16 13:52:39 -07:00
bbuchanan9 9042956610 improvement: S3C-2314 Update Scality dependencies 2019-07-15 13:54:34 -07:00
bert-e 4f754e26f9 Merge branch 'improvement/S3C-2314/update-scality-dependencies' into tmp/octopus/w/8.0/improvement/S3C-2314/update-scality-dependencies 2019-07-15 20:29:07 +00:00
bbuchanan9 dfb7a83b2a Merge remote-tracking branch 'origin/w/7.5/bugfix/S3C-2322/incorrect-expire-TTL-config-field' into w/8.0/bugfix/S3C-2322/incorrect-expire-TTL-config-field 2019-07-12 17:22:14 -07:00
Katherine Laue e8ac66ff09 Merge remote-tracking branch 'origin/w/7.5/improvement/S3C-2290-upgrade-nodejs' into w/8.0/improvement/S3C-2290-upgrade-nodejs 2019-07-08 14:39:56 -07:00
bert-e 1919808c09 Merge branch 'w/7.5/feature/S3C-2273/maintenance-testing-for-utapi-reindexer' into tmp/octopus/w/8.0/feature/S3C-2273/maintenance-testing-for-utapi-reindexer 2019-06-25 20:24:37 +00:00
bert-e 46f62388cd Merge branch 'w/7.5/feature/S3C-2260-maintenance-testing-for-utapi-reindexer' into tmp/octopus/w/8.0/feature/S3C-2260-maintenance-testing-for-utapi-reindexer 2019-06-19 17:58:13 +00:00
bert-e 894f37750f Merge branch 'w/7.5/bugfix/S3C-2019-reindex-script-redis-authentication' into tmp/octopus/w/8.0/bugfix/S3C-2019-reindex-script-redis-authentication 2019-06-07 04:28:53 +00:00
bert-e a990c743af Merge branch 'w/7.5/bugfix/S3C-2019-redis-sentinel-password' into tmp/octopus/w/8.0/bugfix/S3C-2019-redis-sentinel-password 2019-06-06 05:34:54 +00:00
bert-e 3a3083c379 Merge branch 'w/7.5/bugfix/S3C-2076/update-default-reindex-schedule' into tmp/octopus/w/8.0/bugfix/S3C-2076/update-default-reindex-schedule 2019-06-05 18:48:28 +00:00
bert-e 39b4b8b623 Merge branch 'w/7.5/bugfix/S3C-2076/add-utapi-reindex' into tmp/octopus/w/8.0/bugfix/S3C-2076/add-utapi-reindex 2019-06-05 04:45:30 +00:00
bert-e c5165a0338 Merge branches 'w/8.0/improvement/S3C-2034-bump-ioredis-version' and 'q/249/7.5/improvement/S3C-2034-bump-ioredis-version' into tmp/octopus/q/8.0 2019-05-21 17:38:37 +00:00
bert-e ef56d39193 Merge branch 'w/7.5/improvement/S3C-2034-bump-ioredis-version' into tmp/octopus/w/8.0/improvement/S3C-2034-bump-ioredis-version 2019-05-20 21:49:40 +00:00
bert-e da7144389d Merge branch 'w/7.5/bugfix/S3C-2195/upload-copy-part-metrics' into tmp/octopus/w/8.0/bugfix/S3C-2195/upload-copy-part-metrics 2019-05-20 20:44:58 +00:00
bert-e d2020f8190 Merge branches 'w/8.0/bugfix/S3C-2155/allow-range-into-the-future' and 'q/242/7.5/bugfix/S3C-2155/allow-range-into-the-future' into tmp/octopus/q/8.0 2019-05-10 00:03:41 +00:00
bert-e 27ef9dfa33 Merge branch 'w/7.5/bugfix/S3C-2155/allow-range-into-the-future' into tmp/octopus/w/8.0/bugfix/S3C-2155/allow-range-into-the-future 2019-05-09 23:17:31 +00:00
bert-e fae26f0933 Merge branches 'w/8.0/bugfix/S3C-2105/push-backbeat-metrics' and 'q/236/7.5/bugfix/S3C-2105/push-backbeat-metrics' into tmp/octopus/q/8.0 2019-05-09 23:09:10 +00:00
bert-e 270591bf23 Merge branch 'w/7.5/bugfix/S3C-1506/start-end-reducer-values' into tmp/octopus/w/8.0/bugfix/S3C-1506/start-end-reducer-values 2019-05-09 17:01:16 +00:00
bert-e 12fa8b567c Merge branch 'w/7.5/bugfix/S3C-2105/push-backbeat-metrics' into tmp/octopus/w/8.0/bugfix/S3C-2105/push-backbeat-metrics 2019-05-08 23:04:06 +00:00
bbuchanan9 fac88a209f Merge remote-tracking branch 'origin/w/7.5/bugfix/S3C-1506/add-long-range-request-ft-tests' into w/8.0/bugfix/S3C-1506/add-long-range-request-ft-tests 2019-05-02 15:34:43 -07:00
bert-e ef2c350724 Merge branch 'w/7.5/bugfix/S3C-2155/time-range-validation' into tmp/octopus/w/8.0/bugfix/S3C-2155/time-range-validation 2019-05-01 23:15:42 +00:00
bert-e 46bb81e9f8 Merge branch 'w/7.5/bugfix/S3C-2155/time-range-validation' into tmp/octopus/w/8.0/bugfix/S3C-2155/time-range-validation 2019-05-01 23:08:25 +00:00
bert-e 829369d37b Merge branch 'w/7.5/bugfix/S3C-1506/prevent-heap-memory-issue' into tmp/octopus/w/8.0/bugfix/S3C-1506/prevent-heap-memory-issue 2019-04-30 20:07:06 +00:00
bert-e b5def9cb54 Merge branch 'w/7.5/improvement/S3C-2140/do-not-track-dump.rbd' into tmp/octopus/w/8.0/improvement/S3C-2140/do-not-track-dump.rbd 2019-04-26 20:13:05 +00:00
bert-e 2b514a618e Merge branch 'w/7.5/feature/S3C-2133/add-eve-support' into tmp/octopus/w/8.0/feature/S3C-2133/add-eve-support 2019-04-26 17:25:50 +00:00
bbuchanan9 4f119ea917 documentation: S3C-2070 Update README
* Remove outdated CI badge
* Update links
* Update component name
* Fix typos
* Redefine CLI input fields
2019-04-04 14:58:35 -07:00
anurag4dsb 608fddb4bd
Merge remote-tracking branch 'origin/feature/S3C-1561-getStorageUsedForAccountQuotas' into w/8.0/feature/S3C-1561-getStorageUsedForAccountQuotas 2019-01-24 11:25:17 -08:00
Rahul Padigela f2f1d0c742 improvement: reply arsenal errors to the client
Without replying Arsenal style errors, the lib breaks the contract and causes an
exception on the cloudserver
2018-08-31 16:27:33 -07:00
Dora Korpar 6d0c8dd1c0 bf: ZENKO 676 - only location metrics 2018-07-06 13:17:05 -07:00
bert-e cd3324df87 Merge branch 'bugfix/dependencies' into tmp/octopus/w/8.0/bugfix/dependencies 2018-06-29 14:07:22 +00:00
David Pineau 4664ee3cca Merge remote-tracking branch 'origin/development/7.4' into development/8.0 2018-06-28 19:45:42 +02:00
David Pineau a00aa6f05f Merge remote-tracking branch 'origin/development/7.4' into development/8.0 2018-06-28 14:58:45 +02:00
bert-e 4b646285d2 Merge branch 'feature/ZENKO-142-location-quota-metric' into q/8.0 2018-06-27 17:27:55 +00:00
bert-e e77bcc8e72 Merge branch 'feature/S3C-1212-expire-metrics' into tmp/octopus/w/8.0/feature/S3C-1212-expire-metrics 2018-06-26 22:10:37 +00:00
Rahul Padigela e3511ee7ef Merge remote-tracking branch 'origin/development/7.4' into improvement/port-7.4 2018-06-26 14:55:42 -07:00
Dora Korpar fc634ee028 ft: ZENKO 142 Location quota metrics 2018-06-26 14:44:35 -07:00
Rahul Padigela 4c776b3eb5
Merge pull request #177 from scality/ft/ZENKO-465-utapi-docker-image
ft: ZENKO 465 Utapi docker image
2018-06-07 14:10:00 -07:00
Dora Korpar 33024215e3 ft: ZENKO 465 Utapi docker image 2018-06-07 10:37:20 -07:00
Dora Korpar 4965d96f5c
Merge pull request #175 from scality/ft/ZENKO-386-utapi-service-accounts
ft: ZENKO 386 zenko utapi integration
2018-06-04 14:10:32 -07:00
Dora Korpar 0bfd8a66fb ft: ZENKO 386 zenko utapi integration 2018-05-31 11:59:40 -07:00
Rahul Padigela a8a8ad42ff chore: update version and dependencies 2018-05-31 11:23:56 -07:00
Rahul Padigela 8e11d15893
Merge pull request #174 from scality/fwdport/7.4-beta-master
Fwdport/7.4 beta master
2018-04-23 00:15:16 -07:00
Rahul Padigela bf1cbe4bf4 Merge remote-tracking branch 'origin/rel/7.4-beta' into fwdport/7.4-beta-master 2018-04-23 00:12:38 -07:00
Rahul Padigela a4ab00ad92
Merge pull request #173 from scality/fwdport/7.4-7.4-beta
Fwdport/7.4 7.4 beta
2018-04-19 11:04:48 -07:00
Rahul Padigela 6c4e7aedce Merge remote-tracking branch 'origin/rel/7.4' into fwdport/7.4-7.4-beta 2018-04-19 11:01:53 -07:00
Stefano Maffulli b27c57bcfc
Merge pull request #172 from scality/FT/addIssueTemplate
FT: ZNC-26: add issue template
2018-04-12 15:45:21 -07:00
LaureVergeron 1fda068967 FT: ZNC-26: add issue template 2018-04-11 11:11:17 +02:00
Rahul Padigela 18bf5bb00e
Merge pull request #170 from scality/fwdport/7.4-beta-master
Fwdport/7.4 beta master
2018-03-27 15:33:52 -07:00
Alexander Chan 6de529b8b4 fix dependencies 2018-03-20 08:15:38 -07:00
Alexander Chan ec3efcb9af Merge remote-tracking branch 'origin/rel/7.4-beta' into fwdport/7.4-beta-master 2018-03-19 16:05:52 -07:00
Rahul Padigela d77f8cc46c ft: update version 2018-03-14 13:30:18 -07:00
Rahul Padigela 7487555957
Merge pull request #141 from scality/ft/add-example-python-request-script
FT: Add python request example
2018-03-05 11:13:03 -08:00
Bennett Buchanan 7fbddc071b FT: Add python request example 2018-03-05 11:10:56 -08:00
ironman-machine 6d708d54d0 merge #160 2018-02-09 14:14:25 +00:00
Rayene Ben Rayana 6ab610b27f ft: add eve ci support 2018-02-01 16:48:06 -08:00
37 changed files with 1717 additions and 1146 deletions

87
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,87 @@
# General support information
GitHub Issues are **reserved** for actionable bug reports (including
documentation inaccuracies), and feature requests.
**All questions** (regarding configuration, usecases, performance, community,
events, setup and usage recommendations, among other things) should be asked on
the **[Zenko Forum](http://forum.zenko.io/)**.
> Questions opened as GitHub issues will systematically be closed, and moved to
> the [Zenko Forum](http://forum.zenko.io/).
--------------------------------------------------------------------------------
## Avoiding duplicates
When reporting a new issue/requesting a feature, make sure that we do not have
any duplicates already open:
- search the issue list for this repository (use the search bar, select
"Issues" on the left pane after searching);
- if there is a duplicate, please do not open your issue, and add a comment
to the existing issue instead.
--------------------------------------------------------------------------------
## Bug report information
(delete this section (everything between the lines) if you're not reporting a
bug but requesting a feature)
### Description
Briefly describe the problem you are having in a few paragraphs.
### Steps to reproduce the issue
Please provide steps to reproduce, including full log output
### Actual result
Describe the results you received
### Expected result
Describe the results you expected
### Additional information
- Node.js version,
- Docker version,
- npm version,
- distribution/OS,
- optional: anything else you deem helpful to us.
--------------------------------------------------------------------------------
## Feature Request
(delete this section (everything between the lines) if you're not requesting
a feature but reporting a bug)
### Proposal
Describe the feature
### Current behavior
What currently happens
### Desired behavior
What you would like to happen
### Usecase
Please provide usecases for changing the current behavior
### Additional information
- Is this request for your company? Y/N
- If Y: Company name:
- Are you using any Scality Enterprise Edition products (RING, Zenko EE)? Y/N
- Are you willing to contribute this feature yourself?
- Position/Title:
- How did you hear about us?
--------------------------------------------------------------------------------

21
Dockerfile Normal file
View File

@ -0,0 +1,21 @@
FROM node:6-slim
WORKDIR /usr/src/app
COPY package.json /usr/src/app
RUN apt-get update \
&& apt-get install -y jq --no-install-recommends \
&& npm install --production \
&& rm -rf /var/lib/apt/lists/* \
&& npm cache clear --force \
&& rm -rf ~/.node-gyp \
&& rm -rf /tmp/npm-*
# Keep the .git directory in order to properly report version
COPY . /usr/src/app
ENTRYPOINT ["/usr/src/app/docker-entrypoint.sh"]
CMD [ "npm", "start" ]
EXPOSE 8100

View File

@ -3,9 +3,8 @@
![Utapi logo](res/utapi-logo.png)
[![Circle CI][badgepub]](https://circleci.com/gh/scality/utapi)
[![Scality CI][badgepriv]](http://ci.ironmann.io/gh/scality/utapi)
Service Utilization API for tracking resource usage and metrics reporting
Service Utilization API for tracking resource usage and metrics reporting.
## Design
@ -88,13 +87,13 @@ Server is running.
1. Create an IAM user
```
aws iam --endpoint-url <endpoint> create-user --user-name utapiuser
aws iam --endpoint-url <endpoint> create-user --user-name <user-name>
```
2. Create access key for the user
```
aws iam --endpoint-url <endpoint> create-access-key --user-name utapiuser
aws iam --endpoint-url <endpoint> create-access-key --user-name <user-name>
```
3. Define a managed IAM policy
@ -203,12 +202,11 @@ Server is running.
5. Attach user to the managed policy
```
aws --endpoint-url <endpoint> iam attach-user-policy --user-name utapiuser
--policy-arn <policy arn>
aws --endpoint-url <endpoint> iam attach-user-policy --user-name
<user-name> --policy-arn <policy arn>
```
Now the user `utapiuser` has access to ListMetrics request in Utapi on all
buckets.
Now the user has access to ListMetrics request in Utapi on all buckets.
### Signing request with Auth V4
@ -224,16 +222,18 @@ following urls for reference.
You may also view examples making a request with Auth V4 using various languages
and AWS SDKs [here](/examples).
Alternatively, you can use a nifty command line tool available in Scality's S3.
Alternatively, you can use a nifty command line tool available in Scality's
CloudServer.
You can git clone S3 repo from here https://github.com/scality/S3.git and follow
the instructions in README to install the dependencies.
You can git clone the CloudServer repo from here
https://github.com/scality/cloudserver and follow the instructions in the README
to install the dependencies.
If you have S3 running inside a docker container you can docker exec into the S3
container as
If you have CloudServer running inside a docker container you can docker exec
into the CloudServer container as
```
docker exec -it <container id> bash
docker exec -it <container-id> bash
```
and then run the command
@ -271,7 +271,7 @@ Usage: list_metrics [options]
-v, --verbose
```
A typical call to list metrics for a bucket `demo` to Utapi in a https enabled
An example call to list metrics for a bucket `demo` to Utapi in a https enabled
deployment would be
```
@ -283,7 +283,7 @@ Both start and end times are time expressed as UNIX epoch timestamps **expressed
in milliseconds**.
Keep in mind, since Utapi metrics are normalized to the nearest 15 min.
interval, so start time and end time need to be in specific format as follows.
interval, start time and end time need to be in the specific format as follows.
#### Start time
@ -297,7 +297,7 @@ Date: Tue Oct 11 2016 17:35:25 GMT-0700 (PDT)
Unix timestamp (milliseconds): 1476232525320
Here's a typical JS method to get start timestamp
Here's an example JS method to get a start timestamp
```javascript
function getStartTimestamp(t) {
@ -317,7 +317,7 @@ seconds and milliseconds set to 59 and 999 respectively. So valid end timestamps
would look something like `09:14:59:999`, `09:29:59:999`, `09:44:59:999` and
`09:59:59:999`.
Here's a typical JS method to get end timestamp
Here's an example JS method to get an end timestamp
```javascript
function getEndTimestamp(t) {
@ -342,4 +342,3 @@ In order to contribute, please follow the
https://github.com/scality/Guidelines/blob/master/CONTRIBUTING.md).
[badgepub]: http://circleci.com/gh/scality/utapi.svg?style=svg
[badgepriv]: http://ci.ironmann.io/gh/scality/utapi.svg?style=svg

47
docker-entrypoint.sh Executable file
View File

@ -0,0 +1,47 @@
#!/bin/bash
# set -e stops the execution of a script if a command or pipeline has an error
set -e
# modifying config.json
JQ_FILTERS_CONFIG="."
if [[ "$LOG_LEVEL" ]]; then
if [[ "$LOG_LEVEL" == "info" || "$LOG_LEVEL" == "debug" || "$LOG_LEVEL" == "trace" ]]; then
JQ_FILTERS_CONFIG="$JQ_FILTERS_CONFIG | .log.logLevel=\"$LOG_LEVEL\""
echo "Log level has been modified to $LOG_LEVEL"
else
echo "The log level you provided is incorrect (info/debug/trace)"
fi
fi
if [[ "$WORKERS" ]]; then
JQ_FILTERS_CONFIG="$JQ_FILTERS_CONFIG | .workers=\"$WORKERS\""
fi
if [[ "$REDIS_HOST" ]]; then
JQ_FILTERS_CONFIG="$JQ_FILTERS_CONFIG | .redis.host=\"$REDIS_HOST\""
fi
if [[ "$REDIS_PORT" ]]; then
JQ_FILTERS_CONFIG="$JQ_FILTERS_CONFIG | .redis.port=\"$REDIS_PORT\""
fi
if [[ "$VAULTD_HOST" ]]; then
JQ_FILTERS_CONFIG="$JQ_FILTERS_CONFIG | .vaultd.host=\"$VAULTD_HOST\""
fi
if [[ "$VAULTD_PORT" ]]; then
JQ_FILTERS_CONFIG="$JQ_FILTERS_CONFIG | .vaultd.port=\"$VAULTD_PORT\""
fi
if [[ "$HEALTHCHECKS_ALLOWFROM" ]]; then
JQ_FILTERS_CONFIG="$JQ_FILTERS_CONFIG | .healthChecks.allowFrom=[\"$HEALTHCHECKS_ALLOWFROM\"]"
fi
if [[ $JQ_FILTERS_CONFIG != "." ]]; then
jq "$JQ_FILTERS_CONFIG" config.json > config.json.tmp
mv config.json.tmp config.json
fi
exec "$@"

View File

@ -0,0 +1,90 @@
import sys, os, base64, datetime, hashlib, hmac, datetime, calendar, json
import requests # pip install requests
access_key = '9EQTVVVCLSSG6QBMNKO5'
secret_key = 'T5mK/skkkwJ/mTjXZnHyZ5UzgGIN=k9nl4dyTmDH'
method = 'POST'
service = 's3'
host = 'localhost:8100'
region = 'us-east-1'
canonical_uri = '/buckets'
canonical_querystring = 'Action=ListMetrics&Version=20160815'
content_type = 'application/x-amz-json-1.0'
algorithm = 'AWS4-HMAC-SHA256'
t = datetime.datetime.utcnow()
amz_date = t.strftime('%Y%m%dT%H%M%SZ')
date_stamp = t.strftime('%Y%m%d')
# Key derivation functions. See:
# http://docs.aws.amazon.com/general/latest/gr/signature-v4-examples.html#signature-v4-examples-python
def sign(key, msg):
return hmac.new(key, msg.encode("utf-8"), hashlib.sha256).digest()
def getSignatureKey(key, date_stamp, regionName, serviceName):
kDate = sign(('AWS4' + key).encode('utf-8'), date_stamp)
kRegion = sign(kDate, regionName)
kService = sign(kRegion, serviceName)
kSigning = sign(kService, 'aws4_request')
return kSigning
def get_start_time(t):
start = t.replace(minute=t.minute - t.minute % 15, second=0, microsecond=0)
return calendar.timegm(start.utctimetuple()) * 1000;
def get_end_time(t):
end = t.replace(minute=t.minute - t.minute % 15, second=0, microsecond=0)
return calendar.timegm(end.utctimetuple()) * 1000 - 1;
start_time = get_start_time(datetime.datetime(2016, 1, 1, 0, 0, 0, 0))
end_time = get_end_time(datetime.datetime(2016, 2, 1, 0, 0, 0, 0))
# Request parameters for listing Utapi bucket metrics--passed in a JSON block.
bucketListing = {
'buckets': [ 'utapi-test' ],
'timeRange': [ start_time, end_time ],
}
request_parameters = json.dumps(bucketListing)
payload_hash = hashlib.sha256(request_parameters).hexdigest()
canonical_headers = \
'content-type:{0}\nhost:{1}\nx-amz-content-sha256:{2}\nx-amz-date:{3}\n' \
.format(content_type, host, payload_hash, amz_date)
signed_headers = 'content-type;host;x-amz-content-sha256;x-amz-date'
canonical_request = '{0}\n{1}\n{2}\n{3}\n{4}\n{5}' \
.format(method, canonical_uri, canonical_querystring, canonical_headers,
signed_headers, payload_hash)
credential_scope = '{0}/{1}/{2}/aws4_request' \
.format(date_stamp, region, service)
string_to_sign = '{0}\n{1}\n{2}\n{3}' \
.format(algorithm, amz_date, credential_scope,
hashlib.sha256(canonical_request).hexdigest())
signing_key = getSignatureKey(secret_key, date_stamp, region, service)
signature = hmac.new(signing_key, (string_to_sign).encode('utf-8'),
hashlib.sha256).hexdigest()
authorization_header = \
'{0} Credential={1}/{2}, SignedHeaders={3}, Signature={4}' \
.format(algorithm, access_key, credential_scope, signed_headers, signature)
# The 'host' header is added automatically by the Python 'requests' library.
headers = {
'Content-Type': content_type,
'X-Amz-Content-Sha256': payload_hash,
'X-Amz-Date': amz_date,
'Authorization': authorization_header
}
endpoint = 'http://' + host + canonical_uri + '?' + canonical_querystring;
r = requests.post(endpoint, data=request_parameters, headers=headers)
print (r.text)

View File

@ -3,10 +3,13 @@ FROM warp10io/warp10:2.6.0
ENV S6_VERSION 2.0.0.1
ENV WARP10_CONF_TEMPLATES ${WARP10_HOME}/conf.templates/standalone
ENV SENSISION_DATA_DIR /data/sensision
# Modify Warp 10 default config
ENV standalone.host 0.0.0.0
ENV standalone.port 4802
ENV warpscript.repository.directory /usr/local/share/warpscript
ENV warp.token.file /static.tokens
ENV warpscript.extension.protobuf io.warp10.ext.protobuf.ProtobufWarpScriptExtension
ENV warpscript.extension.macrovalueencoder 'io.warp10.continuum.ingress.MacroValueEncoder$Extension'
# ENV warpscript.extension.debug io.warp10.script.ext.debug.DebugWarpScriptExtension
@ -20,5 +23,5 @@ ADD https://dl.bintray.com/senx/maven/io/warp10/warp10-ext-protobuf/1.1.0-uberja
ADD ./images/warp10/s6 /etc
ADD ./warpscript /usr/local/share/warpscript
ADD ./images/warp10/static.tokens /
CMD /init

View File

@ -15,3 +15,8 @@ ensureDir "$WARP10_DATA_DIR/conf"
ensureDir "$WARP10_DATA_DIR/data/leveldb"
ensureDir "$WARP10_DATA_DIR/data/datalog"
ensureDir "$WARP10_DATA_DIR/data/datalog_done"
ensureDir "$SENSISION_DATA_DIR"
ensureDir "$SENSISION_DATA_DIR/logs"
ensureDir "$SENSISION_DATA_DIR/conf"
ensureDir "/var/run/sensision"

View File

@ -1,5 +1,6 @@
#!/usr/bin/with-contenv sh
echo "Installing warp 10 config"
for path in $WARP10_CONF_TEMPLATES/*; do
name="$(basename $path .template)"
if [ ! -f "$WARP10_DATA_DIR/conf/$name" ]; then
@ -7,3 +8,7 @@ for path in $WARP10_CONF_TEMPLATES/*; do
echo "Copied $name to $WARP10_DATA_DIR/conf/$name"
fi
done
echo "Installing sensision config"
cp ${SENSISION_HOME}/templates/sensision.template ${SENSISION_DATA_DIR}/conf/sensision.conf
cp ${SENSISION_HOME}/templates/log4j.properties.template ${SENSISION_DATA_DIR}/conf/log4j.properties

View File

@ -15,3 +15,9 @@ ensure_link "$WARP10_HOME/etc/conf.d" "$WARP10_DATA_DIR/conf"
ensure_link "$WARP10_HOME/leveldb" "$WARP10_DATA_DIR/data/leveldb"
ensure_link "$WARP10_HOME/datalog" "$WARP10_DATA_DIR/data/datalog"
ensure_link "$WARP10_HOME/datalog_done" "$WARP10_DATA_DIR/data/datalog_done"
ensure_link "$SENSISION_HOME/etc" "${SENSISION_DATA_DIR}/conf"
ensure_link "$SENSISION_HOME/logs" "${SENSISION_DATA_DIR}/logs"
ensure_link /var/run/sensision/metrics ${SENSISION_HOME}/metrics
ensure_link /var/run/sensision/targets ${SENSISION_HOME}/targets
ensure_link /var/run/sensision/queued ${SENSISION_HOME}/queued

View File

@ -0,0 +1,9 @@
#!/usr/bin/with-contenv sh
chmod 1733 "$SENSISION_HOME/metrics"
chmod 1733 "$SENSISION_HOME/targets"
chmod 700 "$SENSISION_HOME/queued"
sed -i 's/@warp:WriteToken@/'"writeTokenStatic"'/' $SENSISION_DATA_DIR/conf/sensision.conf
sed -i -e "s_^sensision\.home.*_sensision\.home = ${SENSISION_HOME}_" $SENSISION_DATA_DIR/conf/sensision.conf
sed -i -e 's_^sensision\.qf\.url\.default.*_sensision\.qf\.url\.default=http://127.0.0.1:4802/api/v0/update_' $SENSISION_DATA_DIR/conf/sensision.conf

View File

@ -0,0 +1,26 @@
#!/usr/bin/with-contenv sh
JAVA="/usr/bin/java"
JAVA_OPTS=""
VERSION=1.0.21
SENSISION_CONFIG=${SENSISION_DATA_DIR}/conf/sensision.conf
SENSISION_JAR=${SENSISION_HOME}/bin/sensision-${VERSION}.jar
SENSISION_CP=${SENSISION_HOME}/etc:${SENSISION_JAR}
SENSISION_CLASS=io.warp10.sensision.Main
export MALLOC_ARENA_MAX=1
if [ -z "$SENSISION_HEAP" ]; then
SENSISION_HEAP=64m
fi
SENSISION_CMD="${JAVA} ${JAVA_OPTS} -Xmx${SENSISION_HEAP} -Dsensision.server.port=0 ${SENSISION_OPTS} -Dsensision.config=${SENSISION_CONFIG} -cp ${SENSISION_CP} ${SENSISION_CLASS}"
if [ -n "$ENABLE_SENSISION" ]; then
echo "Starting Sensision with $SENSISION_CMD ..."
exec $SENSISION_CMD | tee -a ${SENSISION_HOME}/logs/sensision.log
else
echo "Sensision is disabled"
# wait indefinitely
exec tail -f /dev/null
fi

View File

@ -1,13 +1,37 @@
#!/usr/bin/with-contenv sh
export SENSISIONID=warp10
export MALLOC_ARENA_MAX=1
JAVA="/usr/bin/java"
WARP10_JAR=${WARP10_HOME}/bin/warp10-${WARP10_VERSION}.jar
WARP10_CLASS=io.warp10.standalone.Warp
WARP10_CP="${WARP10_HOME}/etc:${WARP10_JAR}:${WARP10_HOME}/lib/*"
WARP10_CONFIG_DIR="$WARP10_DATA_DIR/conf"
CONFIG_FILES="$(find ${WARP10_CONFIG_DIR} -not -path "*/\.*" -name "*.conf" | sort | tr '\n' ' ' 2> /dev/null)"
LOG4J_CONF=${WARP10_HOME}/etc/log4j.properties
WARP10_CMD="${JAVA} ${JAVA_OPTS} -cp ${WARP10_CP} ${WARP10_CLASS} ${CONFIG_FILES}"
if [ -z "$WARP10_HEAP" ]; then
WARP10_HEAP=1g
fi
if [ -z "$WARP10_HEAP_MAX" ]; then
WARP10_HEAP_MAX=4g
fi
JAVA_OPTS="-Djava.awt.headless=true -Xms${WARP10_HEAP} -Xmx${WARP10_HEAP_MAX} -XX:+UseG1GC ${JAVA_OPTS}"
SENSISION_OPTS=
if [ -n "$ENABLE_SENSISION" ]; then
_SENSISION_LABELS=
# Expects a comma seperated list of key=value ex key=value,foo=bar
if [ -n "$SENSISION_LABELS" ]; then
_SENSISION_LABELS="-Dsensision.default.labels=$SENSISION_LABELS"
fi
SENSISION_OPTS="-Dsensision.server.port=0 ${_SENSISION_LABELS} -Dsensision.events.dir=/var/run/sensision/metrics -Dfile.encoding=UTF-8"
fi
WARP10_CMD="${JAVA} -Dlog4j.configuration=file:${LOG4J_CONF} ${JAVA_OPTS} ${SENSISION_OPTS} -cp ${WARP10_CP} ${WARP10_CLASS} ${CONFIG_FILES}"
echo "Starting Warp 10 with $WARP10_CMD ..."
exec $WARP10_CMD | tee -a ${WARP10_HOME}/logs/warp10.log

View File

@ -0,0 +1,9 @@
token.write.0.name=writeTokenStatic
token.write.0.producer=42424242-4242-4242-4242-424242424242
token.write.0.owner=42424242-4242-4242-4242-424242424242
token.write.0.app=utapi
token.read.0.name=readTokenStatic
token.read.0.owner=42424242-4242-4242-4242-424242424242
token.read.0.app=utapi

View File

@ -1,5 +1,4 @@
/* eslint-disable global-require */
// eslint-disable-line strict
let toExport;

View File

@ -81,6 +81,17 @@ class Datastore {
return this._client.call((backend, done) => backend.incr(key, done), cb);
}
/**
* increment value of a key by the provided value
* @param {string} key - key holding the value
* @param {string} value - value containing the data
* @param {callback} cb - callback
* @return {undefined}
*/
incrby(key, value, cb) {
return this._client.incrby(key, value, cb);
}
/**
* decrement value of a key by 1
* @param {string} key - key holding the value

View File

@ -97,6 +97,7 @@ const metricObj = {
buckets: 'bucket',
accounts: 'accountId',
users: 'userId',
location: 'location',
};
class UtapiClient {
@ -120,13 +121,17 @@ class UtapiClient {
const api = (config || {}).logApi || werelogs;
this.log = new api.Logger('UtapiClient');
// By default, we push all resource types
this.metrics = ['buckets', 'accounts', 'users', 'service'];
this.metrics = ['buckets', 'accounts', 'users', 'service', 'location'];
this.service = 's3';
this.disableOperationCounters = false;
this.enabledOperationCounters = [];
this.disableClient = true;
if (config) {
this.disableClient = false;
this.expireMetrics = config.expireMetrics;
this.expireMetricsTTL = config.expireMetricsTTL || 0;
if (config.metrics) {
const message = 'invalid property in UtapiClient configuration';
assert(Array.isArray(config.metrics), `${message}: metrics `
@ -154,9 +159,6 @@ class UtapiClient {
if (config.enabledOperationCounters) {
this.enabledOperationCounters = config.enabledOperationCounters;
}
this.disableClient = false;
this.expireMetrics = config.expireMetrics;
this.expireMetricsTTL = config.expireMetricsTTL || 0;
}
}
@ -1114,6 +1116,69 @@ class UtapiClient {
});
}
/**
*
* @param {string} location - name of data location
* @param {number} updateSize - size in bytes to update location metric by,
* could be negative, indicating deleted object
* @param {string} reqUid - Request Unique Identifier
* @param {function} callback - callback to call
* @return {undefined}
*/
pushLocationMetric(location, updateSize, reqUid, callback) {
const log = this.log.newRequestLoggerFromSerializedUids(reqUid);
const params = {
level: 'location',
service: 's3',
location,
};
this._checkMetricTypes(params);
const action = (updateSize < 0) ? 'decrby' : 'incrby';
const size = (updateSize < 0) ? -updateSize : updateSize;
return this.ds[action](generateKey(params, 'locationStorage'), size,
err => {
if (err) {
log.error('error pushing metric', {
method: 'UtapiClient.pushLocationMetric',
error: err,
});
return callback(errors.InternalError);
}
return callback();
});
}
/**
*
* @param {string} location - name of data backend to get metric for
* @param {string} reqUid - Request Unique Identifier
* @param {function} callback - callback to call
* @return {undefined}
*/
getLocationMetric(location, reqUid, callback) {
const log = this.log.newRequestLoggerFromSerializedUids(reqUid);
const params = {
level: 'location',
service: 's3',
location,
};
const redisKey = generateKey(params, 'locationStorage');
return this.ds.get(redisKey, (err, bytesStored) => {
if (err) {
log.error('error getting metric', {
method: 'UtapiClient: getLocationMetric',
error: err,
});
return callback(errors.InternalError);
}
// if err and bytesStored are null, key does not exist yet
if (bytesStored === null) {
return callback(null, 0);
}
return callback(null, bytesStored);
});
}
/**
* Get storage used by bucket/account/user/service
* @param {object} params - params for the metrics

View File

@ -32,7 +32,7 @@ def get_options():
parser.add_argument("-n", "--sentinel-cluster-name", default='scality-s3', help="Redis cluster name")
parser.add_argument("-s", "--bucketd-addr", default='http://127.0.0.1:9000', help="URL of the bucketd server")
parser.add_argument("-w", "--worker", default=10, help="Number of workers")
parser.add_argument("-b", "--bucket", default=False, help="Bucket to be processed")
parser.add_argument("-b", "--bucket", default=None, help="Bucket to be processed")
return parser.parse_args()
def chunks(iterable, size):
@ -119,7 +119,7 @@ class BucketDClient:
else:
is_truncated = len(payload) > 0
def list_buckets(self):
def list_buckets(self, name = None):
def get_next_marker(p):
if p is None:
@ -135,8 +135,14 @@ class BucketDClient:
buckets = []
for result in payload['Contents']:
match = re.match("(\w+)..\|..(\w+.*)", result['key'])
buckets.append(Bucket(*match.groups()))
bucket = Bucket(*match.groups())
if name is None or bucket.name == name:
buckets.append(bucket)
if buckets:
yield buckets
if name is not None:
# Break on the first matching bucket if a name is given
break
def list_mpus(self, bucket):
@ -328,12 +334,15 @@ def log_report(resource, name, obj_count, total_size):
if __name__ == '__main__':
options = get_options()
if options.bucket is not None and not options.bucket.strip():
print('You must provide a bucket name with the --bucket flag')
sys.exit(1)
bucket_client = BucketDClient(options.bucketd_addr)
redis_client = get_redis_client(options)
account_reports = {}
observed_buckets = set()
with ThreadPoolExecutor(max_workers=options.worker) as executor:
for batch in bucket_client.list_buckets():
for batch in bucket_client.list_buckets(options.bucket):
bucket_reports = {}
jobs = [executor.submit(index_bucket, bucket_client, b) for b in batch]
for job in futures.as_completed(jobs):
@ -349,6 +358,25 @@ if __name__ == '__main__':
log_report('buckets', bucket, report['obj_count'], report['total_size'])
pipeline.execute()
recorded_buckets = set(get_resources_from_redis(redis_client, 'buckets'))
if options.bucket is None:
stale_buckets = recorded_buckets.difference(observed_buckets)
elif observed_buckets and options.bucket in recorded_buckets:
# The provided bucket does not exist, so clean up any metrics
stale_buckets = { options.bucket }
else:
stale_buckets = set()
_log.info('Found %s stale buckets' % len(stale_buckets))
for chunk in chunks(stale_buckets, ACCOUNT_UPDATE_CHUNKSIZE):
pipeline = redis_client.pipeline(transaction=False) # No transaction to reduce redis load
for bucket in chunk:
update_redis(pipeline, 'buckets', bucket, 0, 0)
log_report('buckets', bucket, 0, 0)
pipeline.execute()
# Account metrics are not updated if a bucket is specified
if options.bucket is None:
# Update total account reports in chunks
for chunk in chunks(account_reports.items(), ACCOUNT_UPDATE_CHUNKSIZE):
pipeline = redis_client.pipeline(transaction=False) # No transaction to reduce redis load
@ -359,7 +387,6 @@ if __name__ == '__main__':
observed_accounts = set(account_reports.keys())
recorded_accounts = set(get_resources_from_redis(redis_client, 'accounts'))
recorded_buckets = set(get_resources_from_redis(redis_client, 'buckets'))
# Stale accounts and buckets are ones that do not appear in the listing, but have recorded values
stale_accounts = recorded_accounts.difference(observed_accounts)
@ -370,12 +397,3 @@ if __name__ == '__main__':
update_redis(pipeline, 'accounts', account, 0, 0)
log_report('accounts', account, 0, 0)
pipeline.execute()
stale_buckets = recorded_buckets.difference(observed_buckets)
_log.info('Found %s stale buckets' % len(stale_buckets))
for chunk in chunks(stale_buckets, ACCOUNT_UPDATE_CHUNKSIZE):
pipeline = redis_client.pipeline(transaction=False) # No transaction to reduce redis load
for bucket in chunk:
update_redis(pipeline, 'buckets', bucket, 0, 0)
log_report('buckets', bucket, 0, 0)
pipeline.execute()

View File

@ -65,10 +65,10 @@ const keys = {
*/
function getSchemaPrefix(params, timestamp) {
const {
bucket, accountId, userId, level, service,
bucket, accountId, userId, level, service, location,
} = params;
// `service` property must remain last because other objects also include it
const id = bucket || accountId || userId || service;
const id = bucket || accountId || userId || location || service;
const prefix = timestamp ? `${service}:${level}:${timestamp}:${id}:`
: `${service}:${level}:${id}:`;
return prefix;
@ -83,9 +83,13 @@ function getSchemaPrefix(params, timestamp) {
*/
function generateKey(params, metric, timestamp) {
const prefix = getSchemaPrefix(params, timestamp);
if (params.location) {
return `${prefix}locationStorage`;
}
return keys[metric](prefix);
}
/**
* Returns a list of the counters for a metric type
* @param {object} params - object with metric type and id as a property

View File

@ -51,7 +51,10 @@ class RedisClient extends EventEmitter {
Object.values(this._inFlightTimeouts)
.forEach(clearTimeout);
}
if (this._redis !== null) {
await this._redis.quit();
this._redis = null;
}
}, callback);
}
@ -103,29 +106,26 @@ class RedisClient extends EventEmitter {
this.emit('error', error);
}
_createCommandTimeout() {
let timer;
let onTimeout;
const cancelTimeout = jsutil.once(() => {
clearTimeout(timer);
this.off('timeout', onTimeout);
this._inFlightTimeouts.delete(timer);
});
const timeout = new Promise((_, reject) => {
timer = setTimeout(
() => {
this.emit('timeout');
this._initClient();
},
COMMAND_TIMEOUT,
);
timer = setTimeout(this.emit.bind(this, 'timeout'), COMMAND_TIMEOUT);
this._inFlightTimeouts.add(timer);
this.once('timeout', () => {
onTimeout = () => {
moduleLogger.warn('redis command timed out');
cancelTimeout();
this._initClient();
reject(errors.OperationTimedOut);
});
};
this.once('timeout', onTimeout);
});
return { timeout, cancelTimeout };

View File

@ -26,8 +26,8 @@ async function listMetric(ctx, params) {
// A separate request will be made to warp 10 per requested resource
const results = await Promise.all(
resources.map(async resource => {
const labels = { [labelName]: resource };
resources.map(async ({ resource, id }) => {
const labels = { [labelName]: id };
const options = {
params: {
start,

View File

@ -5,7 +5,7 @@ const { ipCheck } = require('arsenal');
const config = require('../config');
const { logger, buildRequestLogger } = require('../utils');
const errors = require('../errors');
const { authenticateRequest, vault } = require('../vault');
const { translateAndAuthorize } = require('../vault');
const oasOptions = {
controllers: path.join(__dirname, './API/'),
@ -44,6 +44,17 @@ function loggerMiddleware(req, res, next) {
return next();
}
function responseLoggerMiddleware(req, res, next) {
const info = {
httpCode: res.statusCode,
httpMessage: res.statusMessage,
};
req.logger.end('finished handling request', info);
if (next !== undefined) {
next();
}
}
// next is purposely not called as all error responses are handled here
// eslint-disable-next-line no-unused-vars
function errorMiddleware(err, req, res, next) {
@ -70,15 +81,7 @@ function errorMiddleware(err, req, res, next) {
message,
},
});
}
function responseLoggerMiddleware(req, res, next) {
const info = {
httpCode: res.statusCode,
httpMessage: res.statusMessage,
};
req.logger.end('finished handling request', info);
return next();
responseLoggerMiddleware(req, res);
}
// eslint-disable-next-line no-unused-vars
@ -111,7 +114,7 @@ async function authV4Middleware(request, response, params) {
let authorizedResources;
try {
[passed, authorizedResources] = await authenticateRequest(request, action, params.level, requestedResources);
[passed, authorizedResources] = await translateAndAuthorize(request, action, params.level, requestedResources);
} catch (error) {
request.logger.error('error during authentication', { error });
throw errors.InternalError;
@ -122,17 +125,14 @@ async function authV4Middleware(request, response, params) {
throw errors.AccessDenied;
}
if (params.level === 'accounts') {
request.logger.debug('converting account ids to canonical ids');
authorizedResources = await vault.getCanonicalIds(
authorizedResources,
request.logger.logger,
);
}
// authorizedResources is only defined on non-account credentials
if (request.ctx.operationId === 'listMetrics' && authorizedResources !== undefined) {
switch (request.ctx.operationId) {
case 'listMetrics':
params.body[params.level] = authorizedResources;
break;
default:
[params.resource] = authorizedResources;
break;
}
}

View File

@ -1,22 +1,28 @@
const assert = require('assert');
const async = require('async');
const BaseTask = require('./BaseTask');
const { UtapiMetric } = require('../models');
const config = require('../config');
const {
LoggerContext, shardFromTimestamp, convertTimestamp, InterpolatedClock,
} = require('../utils');
const { checkpointLagSecs } = require('../constants');
const {
LoggerContext, shardFromTimestamp, convertTimestamp, InterpolatedClock, now,
} = require('../utils');
const logger = new LoggerContext({
module: 'IngestShard',
});
const now = () => convertTimestamp(new Date().getTime());
const checkpointLagMicroseconds = convertTimestamp(checkpointLagSecs);
class IngestShardTask extends BaseTask {
constructor(...options) {
super(...options);
super({
warp10: {
requestTimeout: 30000,
connectTimeout: 30000,
},
...options,
});
this._defaultSchedule = config.ingestionSchedule;
this._defaultLag = config.ingestionLagSeconds;
}
@ -35,7 +41,7 @@ class IngestShardTask extends BaseTask {
return;
}
await Promise.all(toIngest.map(
await async.eachLimit(toIngest, 10,
async shard => {
if (await this._cache.shardExists(shard)) {
const metrics = await this._cache.getMetricsForShard(shard);
@ -68,8 +74,7 @@ class IngestShardTask extends BaseTask {
} else {
logger.warn('shard does not exist', { shard });
}
},
));
});
}
}

View File

@ -141,7 +141,20 @@ class MigrateTask extends BaseTask {
timestamp,
timestamp,
));
const numberOfObjects = MigrateTask._parseMetricValue(numberOfObjectsResp[0]);
let numberOfObjects;
if (numberOfObjectsResp.length === 1) {
numberOfObjects = MigrateTask._parseMetricValue(numberOfObjectsResp[0]);
} else {
numberOfObjects = numberOfObjectsOffset;
logger.warn('Could not retrieve value for numberOfObjects, falling back to last seen value',
{
metricLevel: level,
resource,
metricTimestamp: timestamp,
lastSeen: numberOfObjectsOffset,
});
}
let incomingBytes = 0;
let outgoingBytes = 0;
@ -183,7 +196,7 @@ class MigrateTask extends BaseTask {
stop: -1,
});
if (resp.result && (resp.result.length === 0 || resp.result[0] === '')) {
if (resp.result && (resp.result.length === 0 || resp.result[0] === '' || resp.result[0] === '[]')) {
return null;
}

View File

@ -20,7 +20,7 @@ class InterpolatedClock {
}
getTs() {
const ts = new Date().now();
const ts = Date.now();
if (ts === this._now) {
// If this is the same millisecond as the last call
this._step += 1;

View File

@ -2,6 +2,7 @@ const assert = require('assert');
const { auth, policies } = require('arsenal');
const vaultclient = require('vaultclient');
const config = require('./config');
const errors = require('./errors');
/**
@class Vault
@ -83,7 +84,14 @@ class Vault {
reject(err);
return;
}
resolve(res);
if (!res.message || !res.message.body) {
reject(errors.InternalError);
return;
}
resolve(res.message.body.map(acc => ({
resource: acc.accountId,
id: acc.canonicalId,
})));
}));
}
}
@ -91,6 +99,14 @@ class Vault {
const vault = new Vault(config);
auth.setHandler(vault);
async function translateResourceIds(level, resources, log) {
if (level === 'accounts') {
return vault.getCanonicalIds(resources, log);
}
return resources.map(resource => ({ resource, id: resource }));
}
async function authenticateRequest(request, action, level, resources) {
const policyContext = new policies.RequestContext(
request.headers,
@ -114,10 +130,11 @@ async function authenticateRequest(request, action, level, resources) {
return;
}
// Will only have res if request is from a user rather than an account
let authorizedResources = resources;
if (res) {
try {
const authorizedResources = (res || [])
.reduce((authed, result) => {
authorizedResources = res.reduce(
(authed, result) => {
if (result.isAllowed) {
// result.arn should be of format:
// arn:scality:utapi:::resourcetype/resource
@ -128,24 +145,32 @@ async function authenticateRequest(request, action, level, resources) {
request.logger.trace('access granted for resource', { resource });
}
return authed;
}, []);
resolve([
authorizedResources.length !== 0,
authorizedResources,
]);
}, [],
);
} catch (err) {
reject(err);
}
} else {
request.logger.trace('granted access to all resources');
resolve([true]);
}
resolve([
authorizedResources.length !== 0,
authorizedResources,
]);
}, 's3', [policyContext]);
});
}
async function translateAndAuthorize(request, action, level, resources) {
const [authed, authorizedResources] = await authenticateRequest(request, action, level, resources);
const translated = await translateResourceIds(level, authorizedResources, request.logger.logger);
return [authed, translated];
}
module.exports = {
authenticateRequest,
translateAndAuthorize,
Vault,
vault,
};

View File

@ -3,7 +3,7 @@
"engines": {
"node": ">=10.19.0"
},
"version": "7.8.0",
"version": "8.1.0",
"description": "API for tracking resource utilization and reporting metrics",
"main": "index.js",
"repository": {
@ -34,7 +34,7 @@
"node-schedule": "^1.3.2",
"oas-tools": "^2.1.8",
"uuid": "^3.3.2",
"vaultclient": "scality/vaultclient#21d03b1",
"vaultclient": "scality/vaultclient#ff9e92f",
"werelogs": "scality/werelogs#0a4c576"
},
"devDependencies": {

View File

@ -266,6 +266,10 @@ class Router {
*/
_processSecurityChecks(utapiRequest, route, cb) {
const log = utapiRequest.getLog();
if (process.env.UTAPI_AUTH === 'false') {
// Zenko route request does not need to go through Vault
return this._startRequest(utapiRequest, route, cb);
}
return this._authSquared(utapiRequest, err => {
if (err) {
log.trace('error from vault', { errors: err });

View File

@ -21,6 +21,9 @@ const config = {
localCache: redisLocal,
component: 's3',
};
const location = 'foo-backend';
const incrby = 100;
const decrby = -30;
function isSortedSetKey(key) {
return key.endsWith('storageUtilized') || key.endsWith('numberOfObjects');
@ -76,6 +79,29 @@ function setMockData(data, timestamp, cb) {
return cb();
}
function getLocationObject(bytesValue) {
const obj = {};
obj[`s3:location:${location}:locationStorage`] = `${bytesValue}`;
return obj;
}
function testLocationMetric(c, params, expected, cb) {
const { location, updateSize } = params;
if (updateSize) {
c.pushLocationMetric(location, updateSize, REQUID, err => {
assert.equal(err, null);
assert.deepStrictEqual(memoryBackend.data, expected);
return cb();
});
} else {
c.getLocationMetric(location, REQUID, (err, bytesStored) => {
assert.equal(err, null);
assert.strictEqual(bytesStored, expected);
return cb();
});
}
}
describe('UtapiClient:: enable/disable client', () => {
it('should disable client when no redis config is provided', () => {
const c = new UtapiClient();
@ -747,3 +773,27 @@ tests.forEach(test => {
});
});
});
describe('UtapiClient:: location quota metrics', () => {
beforeEach(function beFn() {
this.currentTest.c = new UtapiClient(config);
this.currentTest.c.setDataStore(ds);
});
afterEach(() => memoryBackend.flushDb());
it('should increment location metric', function itFn(done) {
const expected = getLocationObject(incrby);
testLocationMetric(this.test.c, { location, updateSize: incrby },
expected, done);
});
it('should decrement location metric', function itFn(done) {
const expected = getLocationObject(decrby);
testLocationMetric(this.test.c, { location, updateSize: decrby },
expected, done);
});
it('should list location metric', function itFn(done) {
const expected = 0;
testLocationMetric(this.test.c, { location }, expected, done);
});
});

View File

@ -38,14 +38,16 @@ describe('Test middleware', () => {
});
describe('test errorMiddleware', () => {
let req;
let resp;
beforeEach(() => {
req = templateRequest();
resp = new ExpressResponseStub();
});
it('should set a default code and message', () => {
middleware.errorMiddleware({}, null, resp);
middleware.errorMiddleware({}, req, resp);
assert.strictEqual(resp._status, 500);
assert.deepStrictEqual(resp._body, {
error: {
@ -56,7 +58,7 @@ describe('Test middleware', () => {
});
it('should set the correct info from an error', () => {
middleware.errorMiddleware({ code: 123, message: 'Hello World!', utapiError: true }, null, resp);
middleware.errorMiddleware({ code: 123, message: 'Hello World!', utapiError: true }, req, resp);
assert.deepStrictEqual(resp._body, {
error: {
code: '123',
@ -66,7 +68,7 @@ describe('Test middleware', () => {
});
it("should replace an error's message if it's internal and not in development mode", () => {
middleware.errorMiddleware({ code: 123, message: 'Hello World!' }, null, resp);
middleware.errorMiddleware({ code: 123, message: 'Hello World!' }, req, resp);
assert.deepStrictEqual(resp._body, {
error: {
code: '123',
@ -74,5 +76,16 @@ describe('Test middleware', () => {
},
});
});
it('should call responseLoggerMiddleware after response', () => {
const spy = sinon.spy();
req.logger.end = spy;
resp.statusMessage = 'Hello World!';
middleware.errorMiddleware({ code: 123 }, req, resp);
assert(spy.calledOnceWith('finished handling request', {
httpCode: 123,
httpMessage: 'Hello World!',
}));
});
});
});

View File

@ -0,0 +1,38 @@
const assert = require('assert');
const sinon = require('sinon');
const { InterpolatedClock } = require('../../../../libV2/utils');
describe('Test InterpolatedClock', () => {
let fakeClock;
let iClock;
beforeEach(() => {
fakeClock = sinon.useFakeTimers();
iClock = new InterpolatedClock();
});
afterEach(() => {
fakeClock.restore();
});
it('should get the current timestamp', () => {
const ts = iClock.getTs();
assert(Number.isInteger(ts));
assert.strictEqual(ts, 0);
});
it('should interpolate microseconds if called too fast', () => {
const initial = iClock.getTs();
const second = iClock.getTs();
assert.strictEqual(second - initial, 1);
});
it('should not interpolate if last call >= 1ms ago', () => {
const initial = iClock.getTs();
fakeClock.tick(1);
const second = iClock.getTs();
assert.strictEqual(second - initial, 1000);
});
});

View File

@ -8,7 +8,7 @@ function decode(type, data, includeDefaults = true) {
if (!Type) {
throw new Error(`Unknown type ${type}`);
}
const msg = Type.decode(Buffer.from(data, 'hex'));
const msg = Type.decode(Buffer.from(data));
return Type.toObject(msg, {
longs: Number,
defaults: includeDefaults,

View File

@ -7,6 +7,10 @@ class ExpressResponseStub {
this._redirect = null;
}
get statusCode() {
return this._status;
}
status(code) {
this._status = code;
return this;

View File

@ -17,18 +17,22 @@ message Event {
'>
PROTOC 'proto' STORE
<%
HEX-> !$proto 'Event' PB->
'iso8859-1' ->BYTES
!$proto 'Event' PB->
%>
'macro' STORE
'0a0b6d794f7065726174696f6e32096d796163636f756e74480150ffffffffffffffffff01' @macro
'0a0b6d794f7065726174696f6e32096d796163636f756e74480150ffffffffffffffffff01'
HEX-> 'iso8859-1' BYTES-> @macro
DUP 'op' GET 'myOperation' == ASSERT
DUP 'acc' GET 'myaccount' == ASSERT
DUP 'objD' GET 1 == ASSERT
'sizeD' GET -1 == ASSERT
'0a0568656c6c6f120568656c6c6f1a0568656c6c6f220568656c6c6f2a0568656c6c6f320568656c6c6f3a0568656c6c6f420568656c6c6f4801500158016000' @macro
'0a0568656c6c6f120568656c6c6f1a0568656c6c6f220568656c6c6f2a0568656c6c6f320568656c6c6f3a0568656c6c6f420568656c6c6f4801500158016000'
HEX-> 'iso8859-1' BYTES-> @macro
DUP "op" GET "hello" == ASSERT
DUP "id" GET "hello" == ASSERT
DUP "bck" GET "hello" == ASSERT

View File

@ -33,7 +33,8 @@ PROTOC 'proto' STORE
!$info INFO
SAVE 'context' STORE
<%
HEX-> !$proto 'Record' PB->
'iso8859-1' ->BYTES
!$proto 'Record' PB->
%>
<% // catch any exception
RETHROW
@ -45,7 +46,7 @@ PROTOC 'proto' STORE
'macro' STORE
// Unit tests
'081e101e181e20002a0d0a097075744f626a656374101e'
'081e101e181e20002a0d0a097075744f626a656374101e' HEX-> 'iso8859-1' BYTES->
@macro
{ 'outB' 0 'ops' { 'putObject' 30 } 'sizeD' 30 'inB' 30 'objD' 30 } == ASSERT

View File

@ -17,7 +17,7 @@ message Event {
'>
PROTOC 'proto' STORE
<%
!$proto 'Event' ->PB ->HEX
!$proto 'Event' ->PB
%>
'macro' STORE
@ -28,6 +28,7 @@ PROTOC 'proto' STORE
'sizeD' -1
} @macro
->HEX
'0a0b6d794f7065726174696f6e32096d796163636f756e74480150ffffffffffffffffff01' == ASSERT
{
@ -45,6 +46,7 @@ PROTOC 'proto' STORE
"outB" 0
} @macro
->HEX
'0a0568656c6c6f120568656c6c6f1a0568656c6c6f220568656c6c6f2a0568656c6c6f320568656c6c6f3a0568656c6c6f420568656c6c6f4801500158016000' == ASSERT
$macro

View File

@ -34,7 +34,7 @@ PROTOC 'proto' STORE
!$info INFO
SAVE 'context' STORE
<%
!$proto 'Record' ->PB ->HEX
!$proto 'Record' ->PB
%>
<% // catch any exception
RETHROW
@ -49,6 +49,7 @@ PROTOC 'proto' STORE
{ 'outB' 0 'ops' { 'putObject' 30 } 'sizeD' 30 'inB' 30 'objD' 30 }
@macro
->HEX
'081e101e181e20002a0d0a097075744f626a656374101e' == ASSERT
$macro

2023
yarn.lock

File diff suppressed because it is too large Load Diff