This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a change to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/doris.git
from 68c75df299a [fix](regression) fix unstable case initial_join_order
(#55828)
add 5a8a1972c50 [Chore](function) add limitation for function hist (#55854)
add 2e15ca5a160 [bugfix](compaction) Fix the issue where input rowsets are
prematurely evicted after compaction, causing query failures (#55382)
add 8a1ac334e4d [fix](nereids) change default agg strategy to
multi_distinct when not have statistics (#55855)
add 790801973f9 [fix](compaction) use rowset meta FS in segcompaction and
add RPC client ready check (#55951)
add 3e3be32af0a [fix](cloud) fix failover bug and add some cases (#52450)
add cebcda4787e [feat](iceberg) Add OPTIMIZE TABLE syntax and framework
with Iceberg action implementations (#55679)
add bf74dbb0416 [fix](load)fix ingestion load error case cause be core.
(#55906)
add 7ed888db511 [fix](thrift) ensure forward compatibility of the thrift
protocol (#55621)
add 0c6eb5f7112 [fix](github) fix stale action (#55994)
add 670410087c2 [fix](case) fix cast bug (#55989)
add 313b8c054b1 [fix](test) Fix some recycler cases (#55965)
add fe1e0355617 [feat](checker) Add table/partition version key
consistency checking for checker (#54527)
add 310b92d3b91 [Bug](function) process when_column is const (#55963)
add 2040505d37e [Chore](Segment) avoid print stack trace when
column_unique_id not found (#56021)
add 565fb98aad2 [fix](functions) Fix sleep return value problem (#55926)
add 49411092ef6 [Enhancement](date) Enhance the sec_to_time function to
support return microseconds (#55964)
add 66577bb9cfb [fix](filecache) fix BytesScannedFromCache/Local always
zero (#55929)
add 1bee89a67dc [fix](tde) fix issues related to TDE (#55692) (#55950)
add ac01e67c533 [fix](inverted index) Add CompositeReader to support
multi-field boolean queries (#55960)
add 8dc52848adb [fix](case) test_manager_interface_5 (#55983)
add 205ecbeac19 [fix](case) fix workload group case (#55982)
add 68be08547ec [chore](function) Add a range limit to the second
parameter of format_round. (#55953)
add 8a6e3be8b74 [fix](function)Precision loss in RADIANS function (#55959)
add 7f5a600614f [fix](cases) fix some failure cases (#56019)
add d85224442d9 [fix](largeint) Return error if largeint literal overflow
(#56030)
add 3fccf206179 [fix](es) Fix array not supporting json subtype (#55738)
add dac5efec7d0 [fix](test) fix unstable hive test (#56018)
add 5843f968b46 Fix(Variant) Fix null value handling when serializing to
JSON string (#55876)
add 4288238a436 [feat](checker) Add rowset key consistency checking for
checker (#54623)
add 58a3b1db0a7 [Fix](date) Fix the ambiguous usage of TimeInterval
(#55853)
add 5f409bdf11e [chore](regression-test) optimize test time on variant_p2
(#56047)
add 32877fef54f [fix](test) Buffer stdout/stderr to avoid blocking the
curl command (#55469)
add b0ae6e76358 [fix](cloud) Fix recycle index and partitions (#55915)
add b35607ccbc1 [fix](test) fix result of
mtmv_p0/test_create_with_json_object (#56033)
No new revisions were added by this update.
Summary of changes:
.github/workflows/stale.yml | 8 +-
be/src/agent/heartbeat_server.cpp | 7 +
.../cloud_cluster_info.h} | 19 +-
be/src/cloud/cloud_tablet.cpp | 3 +
be/src/cloud/cloud_tablet_mgr.cpp | 8 +
be/src/cloud/config.cpp | 4 +
be/src/cloud/config.h | 4 +
be/src/common/config.cpp | 2 +
be/src/common/config.h | 2 +
be/src/exec/es/es_scroll_parser.cpp | 21 +
be/src/http/action/check_encryption_action.cpp | 174 +++++++
.../action/check_encryption_action.h} | 27 +-
be/src/io/cache/cached_remote_file_reader.cpp | 3 +-
be/src/io/fs/encrypted_fs_factory.h | 2 -
be/src/io/fs/file_writer.h | 1 -
be/src/olap/base_tablet.cpp | 2 +
be/src/olap/rowset/beta_rowset_writer.cpp | 3 +-
be/src/olap/rowset/rowset_meta.cpp | 28 +-
be/src/olap/rowset/rowset_meta.h | 14 +
.../olap/rowset/segment_v2/column_reader_cache.cpp | 6 +-
.../query_v2/boolean_query/boolean_weight.h | 8 +-
.../inverted_index/query_v2/composite_reader.h | 64 +++
.../query_v2/term_query/term_weight.h | 3 +-
.../segment_v2/inverted_index/query_v2/weight.h | 8 +-
be/src/olap/rowset/segment_v2/segment.cpp | 29 +-
.../variant/hierarchical_data_iterator.cpp | 27 +-
be/src/olap/tablet.cpp | 12 +
be/src/olap/version_graph.cpp | 7 +-
be/src/olap/wal/wal_writer.cpp | 5 +
be/src/runtime/exec_env_init.cpp | 8 +-
be/src/service/http_service.cpp | 9 +
be/src/util/thrift_rpc_helper.cpp | 2 +-
be/src/util/thrift_rpc_helper.h | 2 +
.../aggregate_function_histogram.h | 9 +-
.../aggregate_function_window_funnel.cpp | 3 +-
.../aggregate_function_window_funnel.h | 32 +-
be/src/vec/columns/column_variant.cpp | 39 +-
be/src/vec/data_types/data_type_number_base.cpp | 4 +-
.../vec/exec/format/parquet/parquet_thrift_util.h | 7 +-
be/src/vec/exec/scan/olap_scanner.cpp | 2 +
be/src/vec/exprs/vcase_expr.h | 18 +-
.../function_date_or_datetime_computation.h | 14 +-
.../vec/functions/function_datetime_floor_ceil.cpp | 2 +-
be/src/vec/functions/function_string.h | 31 +-
be/src/vec/functions/function_utility.cpp | 5 +-
be/src/vec/functions/math.cpp | 4 +-
be/src/vec/runtime/time_value.h | 6 +-
be/src/vec/runtime/vdatetime_value.cpp | 22 +-
be/src/vec/runtime/vdatetime_value.h | 18 +-
be/test/cloud/cloud_compaction_test.cpp | 5 +
be/test/io/fs/hdfs_file_system_test.cpp | 1 +
.../inverted_index/query_v2/boolean_query_test.cpp | 131 ++++-
.../query_v2/composite_reader_test.cpp | 80 +++
be/test/olap/stale_at_test.cpp | 101 ++++
.../aggregate_functions/vec_window_funnel_test.cpp | 8 +-
be/test/vec/runtime/vdatetime_value_test.cpp | 434 ++++++++++++++++
build.sh | 7 +
cloud/src/common/config.h | 6 +-
cloud/src/meta-store/keys.cpp | 30 ++
cloud/src/meta-store/keys.h | 1 +
cloud/src/meta-store/meta_reader.cpp | 134 +++++
cloud/src/meta-store/meta_reader.h | 25 +
cloud/src/recycler/checker.cpp | 217 +++++++-
cloud/src/recycler/checker.h | 23 +
cloud/src/recycler/meta_checker.cpp | 383 ++++++++++-----
cloud/src/recycler/meta_checker.h | 83 ++--
cloud/src/recycler/recycler.cpp | 173 ++++++-
cloud/src/recycler/recycler.h | 3 +
cloud/test/keys_test.cpp | 8 +
cloud/test/meta_reader_test.cpp | 258 +++++++++-
cloud/test/recycle_versioned_keys_test.cpp | 514 ++++++++++++++++++-
cloud/test/recycler_test.cpp | 547 +++++++++++----------
docker/runtime/doris-compose/cluster.py | 16 +-
docker/runtime/doris-compose/command.py | 14 +-
docker/runtime/doris-compose/resource/init_fe.sh | 2 +
.../scripts/data/composite_type_array_bulk.json | 20 +-
.../index/array_meta_composite_type_array.json | 3 +-
.../scripts/index/es6_composite_type_array.json | 10 +-
.../scripts/index/es7_composite_type_array.json | 10 +-
.../antlr4/org/apache/doris/nereids/DorisLexer.g4 | 1 +
.../antlr4/org/apache/doris/nereids/DorisParser.g4 | 9 +
.../java/org/apache/doris/analysis/StmtType.java | 1 +
.../doris/cloud/system/CloudSystemInfoService.java | 43 +-
.../StmtType.java => common/ArgumentParser.java} | 63 +--
.../org/apache/doris/common/ArgumentParsers.java | 308 ++++++++++++
.../org/apache/doris/common/NamedArguments.java | 326 ++++++++++++
.../apache/doris/common/util/PropertyAnalyzer.java | 17 +-
.../apache/doris/datasource/InternalCatalog.java | 17 +-
.../iceberg/action/BaseIcebergAction.java | 84 ++++
.../action/IcebergCherrypickSnapshotAction.java | 75 +++
.../action/IcebergExpireSnapshotsAction.java | 127 +++++
.../iceberg/action/IcebergFastForwardAction.java | 75 +++
.../action/IcebergOptimizeActionFactory.java | 105 ++++
.../action/IcebergRewriteDataFilesAction.java | 149 ++++++
.../action/IcebergRollbackToSnapshotAction.java | 72 +++
.../action/IcebergRollbackToTimestampAction.java | 97 ++++
.../action/IcebergSetCurrentSnapshotAction.java | 91 ++++
.../org/apache/doris/encryption/EncryptionKey.java | 62 +++
.../apache/doris/encryption/KeyManagerStore.java | 61 ++-
.../doris/nereids/parser/LogicalPlanBuilder.java | 23 +
.../rules/rewrite/DistinctAggStrategySelector.java | 5 +-
.../rules/rewrite/DistinctAggregateRewriter.java | 6 +-
.../trees/expressions/functions/agg/Histogram.java | 16 +-
.../executable/DateTimeExtractAndTransform.java | 17 +
.../expressions/functions/scalar/SecToTime.java | 5 +-
.../trees/expressions/literal/TimeV2Literal.java | 24 +-
.../apache/doris/nereids/trees/plans/PlanType.java | 1 +
.../nereids/trees/plans/algebra/Aggregate.java | 13 +
.../trees/plans/commands/OptimizeTableCommand.java | 144 ++++++
.../commands/optimize/BaseOptimizeAction.java | 211 ++++++++
.../plans/commands/optimize/OptimizeAction.java | 98 ++++
.../commands/optimize/OptimizeActionFactory.java | 83 ++++
.../trees/plans/visitor/CommandVisitor.java | 5 +
.../java/org/apache/doris/qe/ConnectContext.java | 4 +
.../apache/doris/service/FrontendServiceImpl.java | 46 +-
.../main/java/org/apache/doris/system/Backend.java | 5 +
.../java/org/apache/doris/system/HeartbeatMgr.java | 4 +
.../cloud/system/CloudSystemInfoServiceTest.java | 33 ++
.../apache/doris/common/ArgumentParsersTest.java | 422 ++++++++++++++++
.../apache/doris/common/NamedArgumentsTest.java | 394 +++++++++++++++
.../doris/nereids/parser/NereidsParserTest.java | 37 ++
.../rewrite/DistinctAggregateRewriterTest.java | 38 ++
.../rules/rewrite/SplitMultiDistinctTest.java | 15 +
gensrc/thrift/HeartbeatService.thrift | 5 +
gensrc/thrift/PlanNodes.thrift | 6 +-
gensrc/thrift/Types.thrift | 5 +
...ead_write.out => default_vcg_auto_failover.out} | Bin
.../failover_standby_disable_compaction.out} | Bin 129 -> 171 bytes
.../standby_disable_compaction.out} | Bin 129 -> 171 bytes
...ad_write.out => use_default_vcg_read_write.out} | Bin
.../use_vcg_read_write_routine_load.out | Bin 0 -> 3581 bytes
...ut => use_vcg_read_write_unhealthy_node_50.out} | Bin
...se_vcg_read_write.out => vcg_auto_failover.out} | Bin
.../vcg_auto_failover_manual_failback.out | Bin 0 -> 367 bytes
.../data/correctness/test_time_function.out | Bin 502 -> 860 bytes
.../data/external_table_p0/es/test_es_query.out | Bin 154465 -> 162279 bytes
.../hive/test_hive_basic_type.out | Bin 4557927 -> 4557909
bytes
.../action/test_iceberg_optimize_actions.out} | Bin 129 -> 143 bytes
...out => test_ingestion_load_alter_partition.out} | Bin
.../data/mtmv_p0/test_create_with_json_object.out | Bin 236 -> 239 bytes
.../data/nereids_function_p0/scalar_function/S.out | Bin 53833 -> 53858 bytes
.../fold_constant/fold_constant_by_be.out | Bin 222 -> 223 bytes
.../adjust_nullable/test_adjust_nullable.out | Bin 1121 -> 489 bytes
.../agg_skew_rewrite/agg_skew_rewrite.out | Bin 8320 -> 8202 bytes
.../nereids_rules_p0/agg_strategy/agg_strategy.out | Bin 21517 -> 21077 bytes
.../distinct_agg_strategy_selector.out | Bin 4760 -> 4377 bytes
.../agg_strategy/test_variables.out | Bin 6275 -> 6211 bytes
.../distinct_split/disitinct_split.out | Bin 13518 -> 13158 bytes
.../merge_aggregate/merge_aggregate.out | Bin 7977 -> 7803 bytes
.../test_inject_send_filter_size_fail.out | Bin 197 -> 200 bytes
.../join/test_slow_close/test_slow_close.out | Bin 133 -> 135 bytes
.../test_conditional_function.out | Bin 3456 -> 4260 bytes
.../datetime_functions/test_date_floor_ceil.out | Bin 886 -> 5624 bytes
.../data/shape_check/clickbench/query10.out | Bin 467 -> 415 bytes
.../data/shape_check/clickbench/query11.out | Bin 508 -> 472 bytes
.../data/shape_check/clickbench/query12.out | Bin 508 -> 472 bytes
.../data/shape_check/clickbench/query14.out | Bin 504 -> 468 bytes
.../data/shape_check/clickbench/query23.out | Bin 567 -> 531 bytes
.../data/shape_check/clickbench/query9.out | Bin 448 -> 414 bytes
.../tpch_sf1000/nostats_rf_prune/q16.out | Bin 1200 -> 1148 bytes
.../shape_check/tpch_sf1000/shape_no_stats/q16.out | Bin 1200 -> 1148 bytes
.../data/variant_p0/variant_hirachinal.out | Bin 697 -> 889 bytes
regression-test/framework/pom.xml | 13 +
.../org/apache/doris/regression/Config.groovy | 48 +-
.../apache/doris/regression/ConfigOptions.groovy | 49 ++
.../org/apache/doris/regression/suite/Suite.groovy | 94 ++--
.../doris/regression/suite/SuiteCluster.groovy | 13 +
.../plugins/plugin_curl_requester.groovy | 13 +-
.../test_master_slave_consistency_auth.groovy | 6 +-
.../suites/auth_p0/test_select_column_auth.groovy | 2 +-
.../cloud/multi_cluster/vcluster/vcluster.groovy | 173 -------
.../virtual_compute_group}/ddl/nation.sql | 0
.../virtual_compute_group}/ddl/nation_delete.sql | 0
.../virtual_compute_group}/ddl/nation_load.sql | 0
.../default_vcg_auto_failover.groovy | 111 +++--
.../failover_standby_disable_compaction.groovy | 313 ++++++++++++
.../load_trigger_failover.groovy | 164 ++++++
.../standby_disable_compaction.groovy | 275 +++++++++++
.../use_default_vcg_read_write.groovy | 159 +++---
.../use_vcg_read_write.groovy | 136 +++--
...oovy => use_vcg_read_write_routine_load.groovy} | 348 ++++++-------
...te.groovy => use_vcg_read_write_s3_load.groovy} | 320 +++++-------
...=> use_vcg_read_write_unhealthy_node_50.groovy} | 155 +++---
.../virtual_compute_group/vcg_auto_failover.groovy | 88 ++--
...vy => vcg_auto_failover_manual_failback.groovy} | 286 ++++++-----
.../recycler/test_recycler_with_drop_column.groovy | 2 +-
.../recycler/test_recycler_with_drop_index.groovy | 2 +-
.../recycler/test_recycler_with_drop_mv.groovy | 4 +-
.../recycler/test_recycler_with_drop_rollup.groovy | 2 +-
.../test_compaction_fail_release_lock.groovy | 14 +-
.../test_config_prune_delete_sign.groovy | 8 +-
.../suites/correctness/test_time_function.groovy | 28 ++
.../hive/test_hive_basic_type.groovy | 22 +-
.../action/test_iceberg_optimize_actions.groovy | 341 +++++++++++++
.../ingestion_load/test_ingestion_load.groovy | 10 +-
.../test_ingestion_load_alter_column.groovy | 12 +-
.../test_ingestion_load_alter_partition.groovy | 11 +-
.../test_ingestion_load_drop_table.groovy | 3 +-
.../test_ingestion_load_multi_table.groovy | 2 +-
.../test_ingestion_load_with_inverted_index.groovy | 2 +-
.../test_ingestion_load_with_partition.groovy | 13 +-
.../suites/manager/test_manager_interface_5.groovy | 6 +-
.../fold_constant_numeric_arithmatic.groovy | 1 +
.../test_aggregate_histogram.groovy | 215 --------
.../test_aggregate_window_functions.groovy | 4 +
.../distinct_agg_strategy_selector.groovy | 2 +-
.../mv/agg_variety/agg_variety.groovy | 1 +
.../test_aggregate_histogram.groovy | 5 +
.../test_conditional_function.groovy | 68 +++
.../datetime_functions/test_date_floor_ceil.groovy | 154 ++++++
.../math_functions/test_format_round.groovy | 7 +-
.../suites/variant_p0/variant_hirachinal.groovy | 13 +
regression-test/suites/variant_p2/load.groovy | 26 +-
.../sql/monotonicEvaluationSegfault.sql | 2 +-
.../sql/nereids_monotonicEvaluationSegfault.sql | 2 +-
run-be-ut.sh | 2 +
216 files changed, 9032 insertions(+), 2151 deletions(-)
copy be/src/{io/fs/encrypted_fs_factory.h => cloud/cloud_cluster_info.h} (73%)
create mode 100644 be/src/http/action/check_encryption_action.cpp
copy be/src/{olap/rowset/segment_v2/inverted_index/query_v2/weight.h =>
http/action/check_encryption_action.h} (62%)
create mode 100644
be/src/olap/rowset/segment_v2/inverted_index/query_v2/composite_reader.h
create mode 100644
be/test/olap/rowset/segment_v2/inverted_index/query_v2/composite_reader_test.cpp
create mode 100644 be/test/olap/stale_at_test.cpp
copy fe/fe-core/src/main/java/org/apache/doris/{analysis/StmtType.java =>
common/ArgumentParser.java} (53%)
create mode 100644
fe/fe-core/src/main/java/org/apache/doris/common/ArgumentParsers.java
create mode 100644
fe/fe-core/src/main/java/org/apache/doris/common/NamedArguments.java
create mode 100644
fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/action/BaseIcebergAction.java
create mode 100644
fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/action/IcebergCherrypickSnapshotAction.java
create mode 100644
fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/action/IcebergExpireSnapshotsAction.java
create mode 100644
fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/action/IcebergFastForwardAction.java
create mode 100644
fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/action/IcebergOptimizeActionFactory.java
create mode 100644
fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/action/IcebergRewriteDataFilesAction.java
create mode 100644
fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/action/IcebergRollbackToSnapshotAction.java
create mode 100644
fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/action/IcebergRollbackToTimestampAction.java
create mode 100644
fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/action/IcebergSetCurrentSnapshotAction.java
create mode 100644
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/OptimizeTableCommand.java
create mode 100644
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/optimize/BaseOptimizeAction.java
create mode 100644
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/optimize/OptimizeAction.java
create mode 100644
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/optimize/OptimizeActionFactory.java
create mode 100644
fe/fe-core/src/test/java/org/apache/doris/common/ArgumentParsersTest.java
create mode 100644
fe/fe-core/src/test/java/org/apache/doris/common/NamedArgumentsTest.java
copy
regression-test/data/cloud_p0/multi_cluster/virtual_compute_group/{use_vcg_read_write.out
=> default_vcg_auto_failover.out} (100%)
copy regression-test/data/{cloud/multi_cluster/vcluster/vcluster.out =>
cloud_p0/multi_cluster/virtual_compute_group/failover_standby_disable_compaction.out}
(71%)
copy regression-test/data/{cloud/multi_cluster/vcluster/vcluster.out =>
cloud_p0/multi_cluster/virtual_compute_group/standby_disable_compaction.out}
(71%)
copy
regression-test/data/cloud_p0/multi_cluster/virtual_compute_group/{use_vcg_read_write.out
=> use_default_vcg_read_write.out} (100%)
create mode 100644
regression-test/data/cloud_p0/multi_cluster/virtual_compute_group/use_vcg_read_write_routine_load.out
copy
regression-test/data/cloud_p0/multi_cluster/virtual_compute_group/{use_vcg_read_write.out
=> use_vcg_read_write_unhealthy_node_50.out} (100%)
copy
regression-test/data/cloud_p0/multi_cluster/virtual_compute_group/{use_vcg_read_write.out
=> vcg_auto_failover.out} (100%)
create mode 100644
regression-test/data/cloud_p0/multi_cluster/virtual_compute_group/vcg_auto_failover_manual_failback.out
rename regression-test/data/{cloud/multi_cluster/vcluster/vcluster.out =>
external_table_p0/iceberg/action/test_iceberg_optimize_actions.out} (67%)
copy
regression-test/data/load_p0/ingestion_load/{test_ingestion_load_with_partition.out
=> test_ingestion_load_alter_partition.out} (100%)
delete mode 100644
regression-test/suites/cloud/multi_cluster/vcluster/vcluster.groovy
copy regression-test/suites/{tpch_sf100_p2 =>
cloud_p0/multi_cluster/virtual_compute_group}/ddl/nation.sql (100%)
copy regression-test/suites/{nereids_rules_p0/mv/tpch =>
cloud_p0/multi_cluster/virtual_compute_group}/ddl/nation_delete.sql (100%)
copy regression-test/suites/{tpch_sf100_p2 =>
cloud_p0/multi_cluster/virtual_compute_group}/ddl/nation_load.sql (100%)
create mode 100644
regression-test/suites/cloud_p0/multi_cluster/virtual_compute_group/failover_standby_disable_compaction.groovy
create mode 100644
regression-test/suites/cloud_p0/multi_cluster/virtual_compute_group/load_trigger_failover.groovy
create mode 100644
regression-test/suites/cloud_p0/multi_cluster/virtual_compute_group/standby_disable_compaction.groovy
copy
regression-test/suites/cloud_p0/multi_cluster/virtual_compute_group/{use_default_vcg_read_write.groovy
=> use_vcg_read_write_routine_load.groovy} (57%)
copy
regression-test/suites/cloud_p0/multi_cluster/virtual_compute_group/{use_default_vcg_read_write.groovy
=> use_vcg_read_write_s3_load.groovy} (57%)
copy
regression-test/suites/cloud_p0/multi_cluster/virtual_compute_group/{use_vcg_read_write.groovy
=> use_vcg_read_write_unhealthy_node_50.groovy} (76%)
copy
regression-test/suites/cloud_p0/multi_cluster/virtual_compute_group/{use_vcg_read_write.groovy
=> vcg_auto_failover_manual_failback.groovy} (67%)
create mode 100644
regression-test/suites/external_table_p0/iceberg/action/test_iceberg_optimize_actions.groovy
delete mode 100644
regression-test/suites/nereids_p0/sql_functions/aggregate_functions/test_aggregate_histogram.groovy
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]