You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by am...@apache.org on 2022/08/31 10:53:26 UTC
[ignite-3] branch ignite-17431 updated (296e205ce2 -> c8ee579f7e)
This is an automated email from the ASF dual-hosted git repository.
amashenkov pushed a change to branch ignite-17431
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
from 296e205ce2 Minor.
add 35eda6eee8 IGNITE-17359 Sql. Implement session auto expiration (#1004)
add 757d70edf2 IGNITE-17434 Fix partially correct previous implementation of sql implicit transactions (#990)
add 0dc1b58525 IGNITE-17583 Extract BinaryTuple core parts into a separate module (#1040)
add 53896eb702 IGNITE-16969 Added developer documentation to REST modules. Fixes #1028
add 1f5d7a2b2d IGNITE-17577 Timestamp replaced with HybridTimestamp in MvPartitionStorage. (#1038)
add 467f36afb1 IGNITE-17196 In-memory raft group reconfiguration on node failure (#1016)
add c6761344e6 IGNITE-17535 Implemented a hash index B+Tree (#1021)
add 55be29fd9b IGNITE-17580: Move SchemaBuilder API to test package (#1043)
add 754e40f648 Merge branch 'main' into ignite-17431
add c8ee579f7e Fix conflicts
No new revisions were added by this update.
Summary of changes:
modules/README.md | 3 +-
.../ignite/internal/affinity/AffinityUtils.java | 57 +++-
.../affinity/RendezvousAffinityFunction.java | 52 ++-
.../apache/ignite/internal/sql/ResultSetImpl.java | 9 +-
.../org/apache/ignite/network/ClusterNode.java | 5 +-
.../org/apache/ignite/network/NetworkAddress.java | 5 +-
.../ignite/schema/definition/TableDefinition.java | 8 -
.../schema/modification/AlterColumnBuilder.java | 77 -----
.../modification/TableModificationBuilder.java | 83 -----
.../main/java/org/apache/ignite/sql/Session.java | 42 ++-
modules/binary-tuple/README.md | 3 +
modules/{schema => binary-tuple}/pom.xml | 86 +----
.../internal/binarytuple}/BinaryTupleBuilder.java | 148 ++-------
.../internal/binarytuple/BinaryTupleCommon.java | 113 +++++++
.../binarytuple}/BinaryTupleFormatException.java | 13 +-
.../internal/binarytuple}/BinaryTupleParser.java | 67 ++--
.../internal/binarytuple}/BinaryTupleReader.java | 2 +-
.../internal/binarytuple}/BinaryTupleTest.java | 6 +-
modules/cli/pom.xml | 7 +
.../org/apache/ignite/cli/IntegrationTestBase.java | 4 +-
.../requests/sql/ClientSqlCursorCloseRequest.java | 5 +-
.../sql/ClientSqlCursorNextPageRequest.java | 7 +-
.../requests/sql/ClientSqlExecuteRequest.java | 29 +-
...orCloseRequest.java => ClientSqlResultSet.java} | 47 ++-
.../ignite/internal/client/sql/ClientSession.java | 30 +-
.../internal/client/sql/ClientSessionBuilder.java | 33 +-
.../ignite/internal/client/sql/ClientSql.java | 2 +-
.../org/apache/ignite/client/ClientSqlTest.java | 4 +-
.../ignite/client/fakes/FakeAsyncResultSet.java | 5 +-
.../client/fakes/FakeIgniteQueryProcessor.java | 2 +-
.../apache/ignite/client/fakes/FakeSession.java | 23 +-
.../ignite/client/fakes/FakeSessionBuilder.java | 30 +-
.../internal/compute/ComputeMessageTypes.java | 2 +-
.../java/org/apache/ignite/hlc/HybridClock.java | 57 +++-
.../org/apache/ignite/hlc/HybridTimestamp.java | 12 +-
.../ignite/internal/thread/NamedThreadFactory.java | 12 +
.../org/apache/ignite/internal/util/ByteUtils.java | 4 +-
.../java/org/apache/ignite/lang/ErrorGroups.java | 3 +
.../apache/ignite/internal/index/IndexManager.java | 2 +-
.../client/ItMetaStorageRaftGroupTest.java | 2 +-
.../ItMetaStorageServicePersistenceTest.java | 2 +-
.../client/ItMetaStorageServiceTest.java | 4 +-
.../metastorage/client/MetaStorageServiceImpl.java | 10 +-
.../metastorage/client/SimpleCondition.java | 12 +
.../internal/metastorage/MetaStorageManager.java | 2 +-
.../metastorage/MetaStorageRangeCursorTest.java | 2 +-
.../processor/messages/MessageImplGenerator.java | 13 +
.../ignite/internal/network/netty/NettyUtils.java | 6 +-
.../pagememory/datastructure/DataStructure.java | 4 +-
.../pagememory/freelist/AbstractFreeList.java | 2 +-
.../internal/pagememory/freelist/PagesList.java | 10 +-
.../internal/pagememory/io/AbstractDataPageIo.java | 114 ++-----
.../pagememory/persistence/PageStoreWriter.java | 1 -
.../replacement/DelayedDirtyPageWrite.java | 1 -
.../persistence/store/AbstractFilePageStoreIo.java | 2 +-
.../internal/pagememory/util/PageIdUtils.java | 70 ++--
.../pagememory/util}/PartitionlessLinks.java | 17 +-
.../pagememory/freelist/TestDataPageIo.java | 6 +-
.../internal/pagememory/util/PageIdUtilsTest.java | 4 +-
.../dotnet/Apache.Ignite.Tests/FakeServer.cs | 1 +
.../dotnet/Apache.Ignite.Tests/Sql/SqlTests.cs | 2 +-
.../Table/RecordViewBinaryTests.cs | 1 -
.../Table/RecordViewPocoTests.cs | 1 -
.../dotnet/Apache.Ignite/Internal/Sql/Sql.cs | 1 +
.../java/org/apache/ignite/internal/raft/Loza.java | 20 ++
.../raft/jraft/rpc/impl/RaftGroupServiceImpl.java | 53 ++-
.../rpc/impl/cli/IgniteCliRpcRequestClosure.java | 6 +-
modules/rest-api/README.md | 31 ++
modules/rest/README.md | 52 +++
modules/runner/pom.xml | 7 +
.../ignite/internal/ItNoSyncMetadataTest.java | 2 +-
.../storage/ItRebalanceDistributedTest.java | 9 +-
.../inmemory/ItRaftStorageVolatilityTest.java | 2 +-
.../runner/app/AbstractSchemaChangeTest.java | 2 +-
.../internal/runner/app/ItDataSchemaSyncTest.java | 2 +-
.../runner/app/ItDynamicTableCreationTest.java | 2 +-
.../app/ItIgniteInMemoryNodeRestartTest.java | 354 +++++++++++++++++++++
.../runner/app/ItIgniteNodeRestartTest.java | 5 +-
.../internal/runner/app/ItNoThreadsLeftTest.java | 2 +-
.../runner/app/ItSchemaChangeKvViewTest.java | 2 +-
.../runner/app/ItSchemaChangeTableViewTest.java | 2 +-
.../runner/app/ItTableApiContractTest.java | 2 +-
.../internal/runner/app/ItTablesApiTest.java | 2 +-
.../runner/app/PlatformTestNodeRunner.java | 2 +-
.../app/client/ItAbstractThinClientTest.java | 2 +-
.../runner/app/jdbc/ItJdbcBatchSelfTest.java | 2 +-
.../runner/app/jdbc/ItJdbcMetadataSelfTest.java | 2 +-
.../runner/app/jdbc/ItJdbcResultSetSelfTest.java | 2 +-
.../ignite/internal/sql/api/ItCommonApiTest.java | 97 ++++++
.../internal/sql/api/ItSqlAsynchronousApiTest.java | 17 +-
.../internal/sql/api/ItSqlSynchronousApiTest.java | 14 +-
.../sql/engine/AbstractBasicIntegrationTest.java | 27 +-
.../ignite/internal/sql/engine/ItDmlTest.java | 61 +++-
.../internal/sql/engine/ItFunctionsTest.java | 2 +-
.../internal/sql/engine/ItIndexSpoolTest.java | 2 +-
.../ignite/internal/sql/engine/ItJoinTest.java | 2 +-
.../ignite/internal/sql/engine/ItMetadataTest.java | 2 +-
.../internal/sql/engine/ItMixedQueriesTest.java | 2 +-
.../internal/sql/engine/ItOrToUnionRuleTest.java | 2 +-
.../sql/engine/ItProjectScanMergeRuleTest.java | 2 +-
.../internal/sql/engine/ItSecondaryIndexTest.java | 2 +-
.../ignite/internal/sql/engine/ItSetOpTest.java | 2 +-
.../internal/sql/engine/ItSortAggregateTest.java | 2 +-
.../internal/table/ItPublicApiColocationTest.java | 2 +
.../org/apache/ignite/internal/app/IgniteImpl.java | 9 +
modules/schema/pom.xml | 5 +
.../ignite/internal/schema/BinaryConverter.java | 6 +-
.../apache/ignite/internal/schema/BinaryTuple.java | 1 +
.../ignite/internal/schema/BinaryTupleSchema.java | 117 ++-----
.../apache/ignite/internal/schema/SchemaUtils.java | 9 +
.../schema/configuration/TableValidatorImpl.java | 4 +-
.../schema/definition/SchemaValidationUtils.java | 77 +++++
.../schema/definition/TableDefinitionImpl.java | 21 +-
.../modification/AlterColumnBuilderImpl.java | 75 -----
.../modification/TableModificationBuilderImpl.java | 106 ------
.../internal/schema/SchemaConfigurationTest.java | 51 +--
.../builder/ColumnDefinitionBuilderTest.java | 4 +-
.../builder/HashIndexDefinitionBuilderTest.java | 4 +-
.../PrimaryKeyDefinitionDefinitionBuilderTest.java | 4 +-
.../builder/SortedIndexDefinitionBuilderTest.java | 4 +-
.../schema/builder/TableDefinitionBuilderTest.java | 4 +-
.../SchemaConfigurationConverterTest.java | 8 +-
.../SchemaDescriptorConverterTest.java | 6 +-
.../testutils}/builder/AbstractIndexBuilder.java | 3 +-
.../builder/ColumnDefinitionBuilder.java | 2 +-
.../builder/ColumnDefinitionBuilderImpl.java | 5 +-
.../builder/HashIndexDefinitionBuilder.java | 2 +-
.../builder/HashIndexDefinitionBuilderImpl.java | 5 +-
.../builder/PrimaryKeyDefinitionBuilder.java | 2 +-
.../builder/PrimaryKeyDefinitionBuilderImpl.java | 6 +-
.../schema/testutils/builder}/SchemaBuilders.java | 12 +-
.../testutils}/builder/SchemaObjectBuilder.java | 2 +-
.../builder/SortedIndexDefinitionBuilder.java | 2 +-
.../builder/SortedIndexDefinitionBuilderImpl.java | 16 +-
.../testutils}/builder/TableDefinitionBuilder.java | 2 +-
.../builder/TableDefinitionBuilderImpl.java | 62 +---
.../internal/sql/api/SessionBuilderImpl.java | 36 ++-
.../ignite/internal/sql/api/SessionImpl.java | 15 +-
.../internal/sql/engine/AsyncSqlCursorImpl.java | 14 +
.../ignite/internal/sql/engine/QueryProcessor.java | 3 +-
.../internal/sql/engine/SqlQueryProcessor.java | 35 +-
.../sql/engine/exec/ExecutionServiceImpl.java | 10 +-
.../sql/engine/exec/ddl/DdlCommandHandler.java | 51 +--
.../internal/sql/engine/exec/rel/AbstractNode.java | 2 +-
.../internal/sql/engine/exec/rel/ModifyNode.java | 21 +-
.../sql/engine/property/PropertiesHolder.java | 2 +-
.../internal/sql/engine/session/Session.java | 5 +
.../sql/engine/session/SessionManager.java | 73 ++++-
.../internal/sql/engine/util/BaseQueryContext.java | 19 +-
.../internal/sql/engine/IgniteSqlApiTest.java | 4 +-
.../internal/sql/engine/StopCalciteModuleTest.java | 5 +
.../sql/engine/exec/MockedStructuresTest.java | 7 +-
.../sql/engine/session/SessionManagerTest.java | 148 +++++++++
.../internal/storage/MvPartitionStorage.java | 55 +++-
.../storage/AbstractMvPartitionStorageTest.java | 127 ++++----
.../storage/AbstractMvTableStorageTest.java | 6 +-
.../storage/TestMvPartitionStorageTest.java | 2 +-
.../TestConcurrentHashMapMvPartitionStorage.java | 16 +-
.../index/AbstractHashIndexStorageTest.java | 6 +-
.../index/AbstractSortedIndexStorageTest.java | 10 +-
.../index/impl/BinaryTupleRowSerializer.java | 75 ++++-
.../pagememory/index/IndexPageIoModule.java | 12 +-
.../storage/pagememory/index/IndexPageTypes.java} | 34 +-
.../pagememory/index/freelist/IndexColumns.java | 120 +++++++
.../index/freelist/IndexColumnsFreeList.java | 77 +++++
.../index/freelist/ReadIndexColumnsValue.java} | 26 +-
.../index/freelist/io/IndexColumnsDataIo.java | 83 +++++
.../pagememory/index/hash/HashIndexRow.java | 61 ++++
.../pagememory/index/hash/HashIndexRowKey.java} | 48 +--
.../IndexMetaTree.java => hash/HashIndexTree.java} | 66 ++--
.../hash/InsertHashIndexRowInvokeClosure.java | 83 +++++
.../hash/RemoveHashIndexRowInvokeClosure.java | 99 ++++++
.../index/hash/io/HashIndexTreeInnerIo.java | 61 ++++
.../pagememory/index/hash/io/HashIndexTreeIo.java | 188 +++++++++++
.../index/hash/io/HashIndexTreeLeafIo.java | 61 ++++
.../io/HashIndexTreeMetaIo.java} | 18 +-
.../pagememory/index/meta/IndexMetaTree.java | 16 +-
.../pagememory/index/meta/io/IndexMetaInnerIo.java | 6 +-
.../pagememory/index/meta/io/IndexMetaIo.java | 3 +-
.../pagememory/index/meta/io/IndexMetaLeafIo.java | 6 +-
.../index/meta/io/IndexMetaTreeMetaIo.java | 6 +-
.../mv/AbstractPageMemoryMvPartitionStorage.java | 34 +-
.../storage/pagememory/mv/HybridTimestamps.java | 98 ++++++
.../storage/pagememory/mv/ReadRowVersion.java | 14 +-
.../internal/storage/pagememory/mv/RowVersion.java | 41 +--
.../storage/pagememory/mv/RowVersionFreeList.java | 11 +-
.../pagememory/mv/ScanVersionChainByTimestamp.java | 17 +-
.../internal/storage/pagememory/mv/Timestamps.java | 78 -----
.../storage/pagememory/mv/VersionChain.java | 4 +-
.../storage/pagememory/mv/io/RowVersionDataIo.java | 45 +--
.../storage/pagememory/mv/io/VersionChainIo.java | 6 +-
.../AbstractPageMemoryMvPartitionStorageTest.java | 7 +-
.../storage/rocksdb/RocksDbMvPartitionStorage.java | 77 ++---
.../storage/rocksdb/RocksDbTableStorage.java | 1 -
.../rocksdb/RocksDbMvPartitionStorageTest.java | 4 +-
modules/table/pom.xml | 10 +
.../internal/table/distributed/TableManager.java | 265 ++++++++++++---
.../raft/RebalanceRaftGroupEventsListener.java | 297 ++++++++++++-----
.../internal/table/message/HasDataRequest.java} | 28 +-
.../internal/table/message/HasDataResponse.java} | 14 +-
.../internal/table/message/TableMessageGroup.java} | 14 +-
.../ignite/internal/utils/RebalanceUtil.java | 278 +++++++++++++++-
.../table/distributed/TableManagerTest.java | 12 +-
.../raft/RebalanceRaftGroupEventsListenerTest.java | 2 +-
parent/pom.xml | 12 +-
pom.xml | 1 +
206 files changed, 4173 insertions(+), 1848 deletions(-)
delete mode 100644 modules/api/src/main/java/org/apache/ignite/schema/modification/AlterColumnBuilder.java
delete mode 100644 modules/api/src/main/java/org/apache/ignite/schema/modification/TableModificationBuilder.java
create mode 100644 modules/binary-tuple/README.md
copy modules/{schema => binary-tuple}/pom.xml (53%)
rename modules/{schema/src/main/java/org/apache/ignite/internal/schema => binary-tuple/src/main/java/org/apache/ignite/internal/binarytuple}/BinaryTupleBuilder.java (82%)
create mode 100644 modules/binary-tuple/src/main/java/org/apache/ignite/internal/binarytuple/BinaryTupleCommon.java
copy modules/{schema/src/main/java/org/apache/ignite/internal/schema => binary-tuple/src/main/java/org/apache/ignite/internal/binarytuple}/BinaryTupleFormatException.java (82%)
rename modules/{schema/src/main/java/org/apache/ignite/internal/schema => binary-tuple/src/main/java/org/apache/ignite/internal/binarytuple}/BinaryTupleParser.java (88%)
rename modules/{schema/src/main/java/org/apache/ignite/internal/schema => binary-tuple/src/main/java/org/apache/ignite/internal/binarytuple}/BinaryTupleReader.java (99%)
rename modules/{schema/src/test/java/org/apache/ignite/internal/schema => binary-tuple/src/test/java/org/apache/ignite/internal/binarytuple}/BinaryTupleTest.java (99%)
copy modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/sql/{ClientSqlCursorCloseRequest.java => ClientSqlResultSet.java} (50%)
rename modules/{storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv => page-memory/src/main/java/org/apache/ignite/internal/pagememory/util}/PartitionlessLinks.java (86%)
create mode 100644 modules/rest-api/README.md
create mode 100644 modules/rest/README.md
create mode 100644 modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItIgniteInMemoryNodeRestartTest.java
create mode 100644 modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItCommonApiTest.java
create mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/definition/SchemaValidationUtils.java
delete mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/modification/AlterColumnBuilderImpl.java
delete mode 100644 modules/schema/src/main/java/org/apache/ignite/internal/schema/modification/TableModificationBuilderImpl.java
rename modules/schema/src/{main/java/org/apache/ignite/internal/schema/definition => test/java/org/apache/ignite/internal/schema/testutils}/builder/AbstractIndexBuilder.java (94%)
rename modules/{api/src/main/java/org/apache/ignite/schema/definition => schema/src/test/java/org/apache/ignite/internal/schema/testutils}/builder/ColumnDefinitionBuilder.java (96%)
rename modules/schema/src/{main/java/org/apache/ignite/internal/schema/definition => test/java/org/apache/ignite/internal/schema/testutils}/builder/ColumnDefinitionBuilderImpl.java (92%)
copy modules/{api/src/main/java/org/apache/ignite/schema/definition => schema/src/test/java/org/apache/ignite/internal/schema/testutils}/builder/HashIndexDefinitionBuilder.java (96%)
rename modules/schema/src/{main/java/org/apache/ignite/internal/schema/definition => test/java/org/apache/ignite/internal/schema/testutils}/builder/HashIndexDefinitionBuilderImpl.java (89%)
rename modules/{api/src/main/java/org/apache/ignite/schema/definition => schema/src/test/java/org/apache/ignite/internal/schema/testutils}/builder/PrimaryKeyDefinitionBuilder.java (97%)
rename modules/schema/src/{main/java/org/apache/ignite/internal/schema/definition => test/java/org/apache/ignite/internal/schema/testutils}/builder/PrimaryKeyDefinitionBuilderImpl.java (91%)
rename modules/schema/src/{main/java/org/apache/ignite/schema => test/java/org/apache/ignite/internal/schema/testutils/builder}/SchemaBuilders.java (76%)
copy modules/{api/src/main/java/org/apache/ignite/schema/definition => schema/src/test/java/org/apache/ignite/internal/schema/testutils}/builder/SchemaObjectBuilder.java (95%)
rename modules/{api/src/main/java/org/apache/ignite/schema/definition => schema/src/test/java/org/apache/ignite/internal/schema/testutils}/builder/SortedIndexDefinitionBuilder.java (97%)
rename modules/schema/src/{main/java/org/apache/ignite/internal/schema/definition => test/java/org/apache/ignite/internal/schema/testutils}/builder/SortedIndexDefinitionBuilderImpl.java (88%)
rename modules/{api/src/main/java/org/apache/ignite/schema/definition => schema/src/test/java/org/apache/ignite/internal/schema/testutils}/builder/TableDefinitionBuilder.java (97%)
rename modules/schema/src/{main/java/org/apache/ignite/internal/schema/definition => test/java/org/apache/ignite/internal/schema/testutils}/builder/TableDefinitionBuilderImpl.java (62%)
create mode 100644 modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/session/SessionManagerTest.java
copy modules/{storage-api/src/test/java/org/apache/ignite/internal/storage/TestMvPartitionStorageTest.java => storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/IndexPageTypes.java} (53%)
create mode 100644 modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/freelist/IndexColumns.java
create mode 100644 modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/freelist/IndexColumnsFreeList.java
rename modules/{schema/src/main/java/org/apache/ignite/internal/schema/BinaryTupleFormatException.java => storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/freelist/ReadIndexColumnsValue.java} (57%)
create mode 100644 modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/freelist/io/IndexColumnsDataIo.java
create mode 100644 modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/hash/HashIndexRow.java
rename modules/{api/src/main/java/org/apache/ignite/schema/definition/builder/HashIndexDefinitionBuilder.java => storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/hash/HashIndexRowKey.java} (50%)
copy modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/{meta/IndexMetaTree.java => hash/HashIndexTree.java} (51%)
create mode 100644 modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/hash/InsertHashIndexRowInvokeClosure.java
create mode 100644 modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/hash/RemoveHashIndexRowInvokeClosure.java
create mode 100644 modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/hash/io/HashIndexTreeInnerIo.java
create mode 100644 modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/hash/io/HashIndexTreeIo.java
create mode 100644 modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/hash/io/HashIndexTreeLeafIo.java
copy modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/index/{meta/io/IndexMetaTreeMetaIo.java => hash/io/HashIndexTreeMetaIo.java} (66%)
create mode 100644 modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/HybridTimestamps.java
delete mode 100644 modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/Timestamps.java
rename modules/{api/src/main/java/org/apache/ignite/schema/definition/builder/SchemaObjectBuilder.java => table/src/main/java/org/apache/ignite/internal/table/message/HasDataRequest.java} (63%)
rename modules/{api/src/main/java/org/apache/ignite/schema/modification/package-info.java => table/src/main/java/org/apache/ignite/internal/table/message/HasDataResponse.java} (65%)
rename modules/{schema/src/main/java/org/apache/ignite/schema/package-info.java => table/src/main/java/org/apache/ignite/internal/table/message/TableMessageGroup.java} (67%)