[ https://issues.apache.org/jira/browse/CASSANDRA-20389?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Ruslan Fomkin updated CASSANDRA-20389: -------------------------------------- Test and Documentation Plan: Added unit test for long table names. Documentation patches will be created after patches to specific version branches. Status: Patch Available (was: In Progress) Patches different version branches will be created after the initial review feedback > Create table fails on long table names > -------------------------------------- > > Key: CASSANDRA-20389 > URL: https://issues.apache.org/jira/browse/CASSANDRA-20389 > Project: Apache Cassandra > Issue Type: Bug > Components: CQL/Semantics > Reporter: Ruslan Fomkin > Assignee: Ruslan Fomkin > Priority: Normal > Fix For: 4.0.x, 4.1.x, 5.0.x, 5.x > > Time Spent: 10m > Remaining Estimate: 0h > > If CREATE TABLE is called with a long table name, the statement fails due to > file name too long error. > E.g, such test: > {code:java} > @Test > public void testCreatingTableWithLongName() throws Throwable > { > String keyspace = "\"38373639353166362d3566313\""; > String table = > "test_create_k8yq1r75bpzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaaaaaaaaaaaaaaaa"; > execute(String.format("CREATE KEYSPACE %s with replication = " + > "{ 'class' : 'SimpleStrategy', 'replication_factor' > : 1 }", > keyspace)); > createTableMayThrow(String.format("CREATE TABLE %s.%s (" + > "key int PRIMARY KEY," + > "val int)", keyspace, table)); > } {code} > results in: > {code:java} > java.lang.RuntimeException: Failed to list files in > build/test/cassandra/data/38373639353166362d3566313/test_create_k8yq1r75bpzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaaaaaaaaaaaaaaaa-1b255f4def2540a60000000000000007 > at > org.apache.cassandra.db.lifecycle.LogAwareFileLister.list(LogAwareFileLister.java:77) > at > org.apache.cassandra.db.lifecycle.LifecycleTransaction.getFiles(LifecycleTransaction.java:636) > at > org.apache.cassandra.db.Directories$SSTableLister.filter(Directories.java:1139) > at > org.apache.cassandra.db.Directories$SSTableLister.list(Directories.java:1086) > at > org.apache.cassandra.db.Directories$SSTableLister.list(Directories.java:1072) > at > org.apache.cassandra.db.Directories.lambda$getUIDGenerator$5(Directories.java:1297) > at > java.base/java.util.stream.AbstractPipeline.sourceSpliterator(AbstractPipeline.java:405) > at > java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) > at java.base/java.util.stream.IntPipeline.reduce(IntPipeline.java:496) > at java.base/java.util.stream.IntPipeline.max(IntPipeline.java:459) > at > org.apache.cassandra.io.sstable.SequenceBasedSSTableId$Builder.generator(SequenceBasedSSTableId.java:102) > at > org.apache.cassandra.db.Directories.getUIDGenerator(Directories.java:1302) > at > org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:768) > at > org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:756) > at > org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:747) > at org.apache.cassandra.db.Keyspace.initCf(Keyspace.java:379) > at > org.apache.cassandra.schema.DistributedSchema.createTable(DistributedSchema.java:341) > at > org.apache.cassandra.schema.DistributedSchema.lambda$initializeKeyspaceInstances$6(DistributedSchema.java:213) > at java.base/java.lang.Iterable.forEach(Iterable.java:75) > at > org.apache.cassandra.schema.DistributedSchema.lambda$initializeKeyspaceInstances$10(DistributedSchema.java:213) > at com.google.common.collect.ImmutableList.forEach(ImmutableList.java:422) > at > org.apache.cassandra.schema.DistributedSchema.initializeKeyspaceInstances(DistributedSchema.java:199) > at > org.apache.cassandra.tcm.listeners.SchemaListener.notifyInternal(SchemaListener.java:50) > at > org.apache.cassandra.tcm.listeners.SchemaListener.notifyPreCommit(SchemaListener.java:43) > at > org.apache.cassandra.tcm.log.LocalLog.notifyPreCommit(LocalLog.java:626) > at > org.apache.cassandra.tcm.log.LocalLog.processPendingInternal(LocalLog.java:527) > at > org.apache.cassandra.tcm.log.LocalLog$Async$AsyncRunnable.run(LocalLog.java:819) > at > org.apache.cassandra.concurrent.InfiniteLoopExecutor.loop(InfiniteLoopExecutor.java:121) > at > io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) > at java.base/java.lang.Thread.run(Thread.java:829) > Caused by: java.nio.file.FileSystemException: > build/test/cassandra/data/38373639353166362d3566313/test_create_k8yq1r75bpzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaaaaaaaaaaaaaaaa-1b255f4def2540a60000000000000007: > File name too long > at > java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:100) > at > java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111) > at > java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116) > at > java.base/sun.nio.fs.UnixFileSystemProvider.newDirectoryStream(UnixFileSystemProvider.java:412) > at java.base/java.nio.file.Files.newDirectoryStream(Files.java:472) > at > org.apache.cassandra.db.lifecycle.LogAwareFileLister.innerList(LogAwareFileLister.java:83) > at > org.apache.cassandra.db.lifecycle.LogAwareFileLister.list(LogAwareFileLister.java:73) > {code} > There is a bug in > [TableMetadata|https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/schema/TableMetadata.java#L552] > which calls a name validation function with expectation of checking the > length. However, the correct function to use is > [isValidName|https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/schema/SchemaConstants.java#L83], > which validates also length, instead of > [isNameValid|https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/schema/TableMetadata.java#L552], > which, I guess, shouldn't be present. > Fixing this table name validation bug depends if the validation is called > only for new tables, or also for existing tables, when the schema is shared > with another node or replica. > -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org