av9ash/GitBugs huggingface dataset:
Bug: Allow column_index_size_in_kb to be configurable through nodetool
Status: Resolved
Priority: Normal
Resolution: Fixed
Created: 04/Nov/21 22:13
Resolved: 14/Dec/21 19:29

Configuring the column_index_size_in_kb setting requires a cassandra.yaml change and bouncing the instance.

Allowing column_index_size_in_kb to be configurable through nodetool can help in the operational landscape.
Bug: Relax schema synchronization when opening a keyspace
Status: Resolved
Priority: Normal
Resolution: Fixed
Created: 28/Oct/21 09:19
Resolved: 03/Dec/21 11:50

Extracted this as a separate ticket per discussion on CASSANDRA-17044

In short, there are two purposes of this change:

# Move the code around to the more appropriate places (for example, CFS specific code for dropping table was moved from SM class to CFS class)
# Relax the synchronization when adding/removing keyspace instances in SM - instead of synchronizing the whole collection of keyspace instances, we only synchronize the related item (the original idea authored by [~blambov]). 

The current implementation works because a certain order of opening keyspaces is assumed. If a keyspace is already initialized, it is just returned without sync and sync is done only to initialize the keyspace. When synchronization is extended to the whole method, the system finds itself in a deadlock. This means that some keyspace is tried to be opened during initiazation. Currently it works fine because the keyspace which is not initialized yet is never tried to be opened asynchronously while initializing some other keyspace in a different thread. Hence the conclusion about fragility of the current solution.
Bug: Fix failing test: SSTableReaderTest.testPersistentStatistics
Status: Resolved
Priority: Normal
Resolution: Fixed
Created: 28/Oct/21 17:43
Resolved: 07/Feb/22 17:58

JDK8 unit test failure

See it on CircleCI but not on Jenkins ASF infra right now.
{code:java}
java.lang.RuntimeException: Failed importing sstables
	at org.apache.cassandra.db.SSTableImporter.importNewSSTables(SSTableImporter.java:164)
	at org.apache.cassandra.db.ColumnFamilyStore.loadNewSSTables(ColumnFamilyStore.java:734)
	at org.apache.cassandra.io.sstable.SSTableReaderTest.clearAndLoad(SSTableReaderTest.java:222)
	at org.apache.cassandra.io.sstable.SSTableReaderTest.testPersistentStatistics(SSTableReaderTest.java:215)
Caused by: java.lang.RuntimeException: Failed to rename /tmp/cassandra/build/test/cassandra/data/SSTableReaderTest/Standard1-da581e50380611ecaad41173773221f9/nb-9-big-Digest.crc32 to /tmp/cassandra/build/test/cassandra/data/SSTableReaderTest/Standard1-da581e50380611ecaad41173773221f9/nb-13-big-Digest.crc32
	at org.apache.cassandra.io.util.PathUtils.rename(PathUtils.java:385)
	at org.apache.cassandra.io.util.File.move(File.java:227)
	at org.apache.cassandra.io.util.FileUtils.renameWithConfirm(FileUtils.java:704)
	at org.apache.cassandra.io.util.FileUtils.renameWithConfirm(FileUtils.java:698)
	at org.apache.cassandra.io.sstable.format.SSTableWriter.rename(SSTableWriter.java:337)
	at org.apache.cassandra.io.sstable.format.SSTableReader.moveAndOpenSSTable(SSTableReader.java:2339)
	at org.apache.cassandra.db.SSTableImporter.importNewSSTables(SSTableImporter.java:139)
Caused by: java.nio.file.NoSuchFileException: /tmp/cassandra/build/test/cassandra/data/SSTableReaderTest/Standard1-da581e50380611ecaad41173773221f9/nb-9-big-Digest.crc32 -> /tmp/cassandra/build/test/cassandra/data/SSTableReaderTest/Standard1-da581e50380611ecaad41173773221f9/nb-13-big-Digest.crc32
	at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
	at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
	at sun.nio.fs.UnixCopyFile.move(UnixCopyFile.java:396)
	at sun.nio.fs.UnixFileSystemProvider.move(UnixFileSystemProvider.java:262)
	at java.nio.file.Files.move(Files.java:1395)
	at org.apache.cassandra.io.util.PathUtils.atomicMoveWithFallback(PathUtils.java:396)
	at org.apache.cassandra.io.util.PathUtils.rename(PathUtils.java:377)
{code}
Bug: Increase the buckets count for timer histogram
Status: Resolved
Priority: Normal
Resolution: Fixed
Created: 15/Nov/21 23:42
Resolved: 19/Nov/21 17:40

EstimatedHistograms used in timers are allocated with 90 buckets, as part of CASSANDRA-16760. It can represent the highest value of 25 seconds. The setting is not free from hitting overflow error when calculating the mean value from the histogram. We can increase the buckets count to 127 to increase the upper limit to 21,356 seconds, which just covers the range of 164 buckets prior CASSANDRA-16760.
Bug: UnableToParseClientMessageFromBlockedSubnetTest.badMessageCausesProtocolExceptionFromExcludeList failing on extra log entries
Status: Resolved
Priority: Normal
Resolution: Fixed
Created: 07/Oct/21 21:18
Resolved: 09/Oct/21 06:02

This test, while parameterized and run more than once, expects a single log entry describing the reporting exclusion for the single query made with each parameter combination.

However, we’re seeing this:

{noformat}
junit.framework.AssertionFailedError: 
Expected size:<1>  but was:<2>  in:
<["DEBUG [nioEventLoopGroup-5-2] {instance:id} 2021-10-07T09:49:42,974 Excluding client exception for /127.0.0.1:56628; address contained in client_error_reporting_exclusions",
    "DEBUG [nioEventLoopGroup-5-3] {instance:id} 2021-10-07T09:49:42,984 Excluding client exception for /127.0.0.1:56634; address contained in client_error_reporting_exclusions"]>
	at org.apache.cassandra.distributed.test.UnableToParseClientMessageFromBlockedSubnetTest.badMessageCausesProtocolExceptionFromExcludeList(UnableToParseClientMessageFromBlockedSubnetTest.java:114)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
{noformat}

Looking at the logs more deeply, the V3 and V4 protocol cases are actually logging twice, once on initially processing the message, and again on channel closure. There should be a way to eliminate the double logging...
Bug: internode_send_buff_size_in_bytes and internode_recv_buff_size_in_bytes from cassandra.yaml 
Status: Resolved
Priority: Normal
Resolution: Fixed
Created: 12/Nov/21 00:35
Resolved: 16/Nov/21 20:11

While working on CASSANDRA-17132 I found that in 4.0 _internode_send_buff_size_in_bytes_ and _internode_recv_buff_size_in_bytes_ were renamed to 

_internode_socket_send_buffer_size_in_bytes_ and _internode_socket_receive_buffer_size_in_bytes_

but only internally, not in cassandra.yaml. In cassandra.yaml we still have the old names. 

Options I see:
 - we decide that there is difference to be acknowledged so we just rename and announce the new parameters in NEWS.txt

 - it is confirmed that just a rename was needed. Then do we want to add backward compatibility so that anyone who is still looking to start upgrade from 3 or 3.11 can directly go smoothly to 4.0.2 without breaking change? 

CC [~benedict] , [~ifesdjeen] and [~aleksey] for your opinion what will be the right way to handle this issue.
Bug: utests_system_keyspace_directory - more than 500 tests failing on trunk
Status: Resolved
Priority: Normal
Resolution: Fixed
Created: 11/Nov/21 03:21
Resolved: 19/Nov/21 10:45

I have more than 500 tests failing on trunk [with the new|https://app.circleci.com/pipelines/github/ekaterinadimitrova2/cassandra/1194/workflows/5fb2b193-d99a-4168-b10d-f7a3a05a3abf/jobs/7136] and [with the old image|https://app.circleci.com/pipelines/github/ekaterinadimitrova2/cassandra/1189/workflows/416dcd5e-720e-4eca-b3d5-61767906457b/jobs/6984/tests#failed-test-1] - please check under {_}utests_system_keyspace_directory{_}.
Bug: BLOG - Update intro paragraph of interview with Marcel Birkner at Instana
Status: Resolved
Priority: Normal
Resolution: Fixed
Created: 17/Nov/21 11:57
Resolved: 17/Nov/21 18:13

[~Calico] advised that [the intro paragraph of the Instana blog post was missed|https://the-asf.slack.com/archives/C01RY1LUPD5/p1637144903062900]:

{quote}Welcome to Inside Cassandra, a new series on the Apache Cassandra blog, where we interview engineers and devs in the community either about their use of Apache Cassandra to power their businesses or how they contribute to the project.

In our first interview, ...{quote}

See [Google Doc draft|https://docs.google.com/document/d/1eutwlZePuf1-J6W5L1Duo7Yiy4l2TGLjfsFdW7LaF6s/edit?usp=sharing] for reference.
Bug: Let IntelliJ run each test class in a separate JVM
Status: Resolved
Priority: Normal
Resolution: Fixed
Created: 21/Oct/21 08:12
Resolved: 21/Oct/21 12:41

When we run multiple unit test with ANT command, each test class is run in its own JVM instance - we have to do that because many tests set up some static stuff - I don't want to discuss that in this ticket though - it works and must work this way for now. 

However, when we run tests in IntelliJ, especially when we want to run all test classes from the whole package, or selected subset of tests, IntelliJ tries to run all of them in a single JVM which obviously leads to problems. 

Frankly, IntelliJ introduced (I don't know exactly when) a new feature so that each test class can be run in a separate JVM, just like we do when we run with ANT. I this ticket I want to modify the default test configuration for IntelliJ so that it works in the way described above.
Bug: Fix test org.apache.cassandra.net.MessagingServiceTest
Status: Resolved
Priority: Normal
Resolution: Fixed
Created: 29/Oct/21 19:10
Resolved: 29/Oct/21 19:15

https://app.circleci.com/pipelines/github/dcapwell/cassandra/1062/workflows/3642831f-81d0-4c4f-8bb7-9444e11b58b4/jobs/7084

{code}
junit.framework.AssertionFailedError
	at org.apache.cassandra.net.MessagingServiceTest.listen(MessagingServiceTest.java:343)
	at org.apache.cassandra.net.MessagingServiceTest.listenRequiredSecureConnection(MessagingServiceTest.java:277)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
{code}

And

{code}
junit.framework.AssertionFailedError
	at org.apache.cassandra.net.MessagingServiceTest.listen(MessagingServiceTest.java:343)
	at org.apache.cassandra.net.MessagingServiceTest.listenOptionalSecureConnection(MessagingServiceTest.java:315)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
{code}
Bug: Blog post: "Harry: A Fuzz Testing Tool for Apache Cassandra"
Status: Resolved
Priority: Normal
Resolution: Fixed
Created: 26/Oct/21 05:05
Resolved: 18/Nov/21 06:34

This ticket is to capture the work associated with publishing the November 2021 blog post titled "Harry, an Open Source Fuzz Testing and Verification Tool for Apache Cassandra."

If this blog cannot be published by the November 9 publish date, please be sure to *correct the date* before going live.

This ticket can be closed once the blog post has gone live on the website.
Bug: Flaky test - org.apache.cassandra.serializers.TimestampSerializerTest
Status: Resolved
Priority: Normal
Resolution: Fixed
Created: 04/Nov/21 15:09
Resolved: 08/Nov/21 17:12

As seen here: https://app.circleci.com/pipelines/github/blerer/cassandra/239/workflows/32b4bc10-685a-4719-ac6c-950e76cd9533/jobs/2144

{noformat}
junit.framework.AssertionFailedError: 'now' timestamp not within expected tolerance.
	at org.apache.cassandra.serializers.TimestampSerializerTest.testNow(TimestampSerializerTest.java:227)
{noformat}
Bug: Broken test_speculative_data_request
Status: Resolved
Priority: Normal
Resolution: Fixed
Created: 04/Nov/21 09:26
Resolved: 15/Nov/21 08:46

This has been failing consistently lately


{noformat}
Error Message

KeyError: '127.0.0.3'

Stacktrace

self = <read_repair_test.TestSpeculativeReadRepair object at 0x7f979a965850>

    @since('4.0')
    def test_speculative_data_request(self):
        """ If one node doesn't respond to a full data request, it should query the other """
        node1, node2, node3 = self.cluster.nodelist()
        assert isinstance(node1, Node)
        assert isinstance(node2, Node)
        assert isinstance(node3, Node)
        session = self.get_cql_connection(node1, timeout=2)
    
        session.execute(quorum("INSERT INTO ks.tbl (k, c, v) VALUES (1, 0, 1)"))
    
        node2.byteman_submit(['./byteman/read_repair/stop_writes.btm'])
        node3.byteman_submit(['./byteman/read_repair/stop_writes.btm'])
    
        session.execute("INSERT INTO ks.tbl (k, c, v) VALUES (1, 1, 2)")
    
        # re-enable writes
        node2.byteman_submit(['-u', './byteman/read_repair/stop_writes.btm'])
    
        node1.byteman_submit(['./byteman/read_repair/sorted_live_endpoints.btm'])
        node1.byteman_submit(['./byteman/request_verb_timing.btm'])
    
        with StorageProxy(node1) as storage_proxy:
            assert storage_proxy.blocking_read_repair == 0
            assert storage_proxy.speculated_rr_read == 0
            assert storage_proxy.speculated_rr_write == 0
    
            session = self.get_cql_connection(node1)
            node2.byteman_submit(['./byteman/read_repair/stop_data_reads.btm'])
            results = session.execute(quorum("SELECT * FROM ks.tbl WHERE k=1"))
    
            timing = request_verb_timing(node1)
>           repair_req_node3 = timing[node3.ip_addr].get('READ_REPAIR_REQ')
E           KeyError: '127.0.0.3'

read_repair_test.py:621: KeyError
{noformat}
Bug: Add a virtual table for exposing prepared statements metrics
Status: Resolved
Priority: Normal
Resolution: Fixed
Created: 21/Dec/21 09:06
Resolved: 01/Feb/22 20:47

There are some existing metrics within {{CQLMetrics}} that provide metrics about prepared statements. We should expose those through a virtual table.

+Additional information for newcomers:+

A new class should be created for representing the new Virtual Table in {{org.apache.cassandra.db.virtual}}. You can look at {{ThreadPoolsTable}} for an example.
The new table will need to be registered in {{SystemViewsKeyspace}}.
Some unit tests will need to be added. For some example of virtual table tests you can look at {{SystemPropertiesTableTest}} and for some example of test around prepared statement metrics you can look into {{CQLMetricsTest}}.
Bug: commit log was switched from non-daemon to daemon threads, which causes the JVM to exit in some case as no non-daemon threads are active
Status: Resolved
Priority: Normal
Resolution: Fixed
Created: 29/Oct/21 19:08
Resolved: 03/Nov/21 20:08

Right now bootstrap tests are failing every time we run, this work is to debug and fix the underling issue.

Examples:

https://app.circleci.com/pipelines/github/dcapwell/cassandra/1062/workflows/ba3e6395-ef22-4724-8424-0549e65d8cff/jobs/7089

{code}
>       node3.nodetool('bootstrap resume')

bootstrap_test.py:1014: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../env3.6/lib/python3.6/site-packages/ccmlib/node.py:1005: in nodetool
    return handle_external_tool_process(p, ['nodetool', '-h', 'localhost', '-p', str(self.jmx_port)] + shlex.split(cmd))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

process = <subprocess.Popen object at 0x7fb071a03940>
cmd_args = ['nodetool', '-h', 'localhost', '-p', '7300', 'bootstrap', ...]

    def handle_external_tool_process(process, cmd_args):
        out, err = process.communicate()
        if (out is not None) and isinstance(out, bytes):
            out = out.decode()
        if (err is not None) and isinstance(err, bytes):
            err = err.decode()
        rc = process.returncode
    
        if rc != 0:
>           raise ToolError(cmd_args, rc, out, err)
E           ccmlib.node.ToolError: Subprocess ['nodetool', '-h', 'localhost', '-p', '7300', 'bootstrap', 'resume'] exited with non-zero status; exit status: 1; 
E           stderr: nodetool: Failed to connect to 'localhost:7300' - EOFException: 'null'.

../env3.6/lib/python3.6/site-packages/ccmlib/node.py:2305: ToolError
{code}

https://app.circleci.com/pipelines/github/dcapwell/cassandra/1062/workflows/ba3e6395-ef22-4724-8424-0549e65d8cff/jobs/7087

{code}
>       node1.start()

bootstrap_test.py:483: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../env3.6/lib/python3.6/site-packages/ccmlib/node.py:895: in start
    node.watch_log_for_alive(self, from_mark=mark)
../env3.6/lib/python3.6/site-packages/ccmlib/node.py:664: in watch_log_for_alive
    self.watch_log_for(tofind, from_mark=from_mark, timeout=timeout, filename=filename)
../env3.6/lib/python3.6/site-packages/ccmlib/node.py:592: in watch_log_for
    head=reads[:50], tail="..."+reads[len(reads)-150:]))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

start = 1635453190.3118386, timeout = 120
msg = "Missing: ['127.0.0.1:7000.* is now UP'] not found in system.log:\n Head: \n Tail: ..."
node = 'node3'

    @staticmethod
    def raise_if_passed(start, timeout, msg, node=None):
        if start + timeout < time.time():
>           raise TimeoutError.create(start, timeout, msg, node)
E           ccmlib.node.TimeoutError: 28 Oct 2021 20:35:10 [node3] after 120.12/120 seconds Missing: ['127.0.0.1:7000.* is now UP'] not found in system.log:
E            Head: 
E            Tail: ...
{code}
Bug: Add utilities for materialized views to CQLTester
Status: Resolved
Priority: Normal
Resolution: Fixed
Created: 08/Nov/21 12:16
Resolved: 10/Nov/21 12:43

CASSANDRA-17070 added automatic generation of MV names to all {{ViewComplex*Test}} based on an incremented {{AtomicInteger}} to prevent conflicts when the cleanup methods leave a dirty environment. However, we still have ten MV tests that could benefit from this kind of name generation to avoid potential name conflicts.

Also, the tests for materialized views have multiple code duplications. There are three identical implementations of the {{createView(String, String)}} method, eight lists of created views and six almost identical parameterizations of {{{}ProtocolVersion{}}}.

I think we should add methods to create and drop MVs to {{{}CQLTester{}}}, analogous to the methods that it already has for keyspaces, tables, indexes, functions and aggregates. That way we would prevent potential conflicts with MV names and reduce code duplication. These methods would also be useful for any new tests using MVs that we add in the future, such as for example the ones that we would probably need for any future guardrail on MVs.
Bug: Replace sequential sstable generation identifier with UUID v1
Status: Resolved
Priority: Normal
Resolution: Fixed
Created: 19/Oct/21 08:39
Resolved: 23/Mar/22 11:57

Replace the current sequential sstable generation identifier with ULID based.

ULID is better because we do not need to scan the existing files to pick the starting number as well as we can generate globally unique identifiers.
Bug: Guardrails for consistency levels
Status: Resolved
Priority: Normal
Resolution: Fixed
Created: 06/Dec/21 13:05
Resolved: 11/Mar/22 15:40

Add guardrails for read/write consistency levels, for example:
{code:java}
# Guardrail to warn about or reject read consistency levels.
# By default all consistency levels are allowed.
    read_consistency_levels:
        warned: []
        disallowed: []

# Guardrail to warn about or reject write consistency levels.
# By default all consistency levels are allowed.
    write_consistency_levels:
        warned: []
        disallowed: []
{code}
Bug: Cqlshlib failure
Status: Resolved
Priority: Normal
Resolution: Fixed
Created: 01/Oct/21 13:55
Resolved: 05/Oct/21 14:48

Failing for 4.0 and trunk - [https://app.circleci.com/pipelines/github/ekaterinadimitrova2/cassandra/1135/workflows/3e76993a-8ff0-442b-ae19-e3c6abf09ee6/jobs/6670] 

Also 3.11 here - https://jenkins-cm4.apache.org/job/Cassandra-devbranch/1152/#showFailuresLink
 

/CC [~brandon.williams]
Bug: Classpath can be broken when multiple artifacts are present in build dir
Status: Resolved
Priority: Normal
Resolution: Fixed
Created: 09/Nov/21 07:41
Resolved: 21/Nov/21 19:59

{noformat}
$ ant artifacts

$ ls -1 build/apache-cassandra-*.jar
build/apache-cassandra-4.1-SNAPSHOT-javadoc.jar
build/apache-cassandra-4.1-SNAPSHOT-sources.jar
build/apache-cassandra-4.1-SNAPSHOT.jar

$ bin/cassandra -f
...
Error: Could not find or load main class org.apache.cassandra.service.CassandraDaemon
{noformat}

Classpath is something like:
{noformat}
...bin/../conf:bin/../build/apache-cassandra-4.1-SNAPSHOT-javadoc.jar bin/../build/apache-cassandra-4.1-SNAPSHOT-sources.jar bin/../build/apache-cassandra-4.1-SNAPSHOT.jar:bin/../lib/HdrHistogram-2.1.9.jar:bin/../lib/ST4-4.0.8.jar:bin/../lib/airline-0.8.jar:bin/../lib/antlr-runtime-3.5.2.jar:bin/../lib/asm-7.1.jar:bin/../lib/caffeine-2.9.2.jar:bin...
{noformat}

notice that:
- javadoc and sources jars are on the classpath
- classpath is broken because javadoc, sources and main jar are separated by blankspaces instead of colons

The problem is in {{cassandra.in.sh}} where the main jar gets added to the classpath:

{noformat}
cassandra_bin=`ls -1 $CASSANDRA_HOME/build/apache-cassandra*.jar`
{noformat}
Bug: Contribulyze: Generate contributors reports based on git history
Status: Resolved
Priority: Normal
Resolution: Fixed
Created: 05/Dec/21 16:47
Resolved: 05/Dec/21 21:53

Create metrics providing top lists of contributors for different time
periods. Listing patches, reviews, and who has worked with who.

Intention is to give insight into the people who are
contributing code to the project.

https://nightlies.apache.org/cassandra/devbranch/misc/contribulyze/html/

It's generated from the contribulyze.py script (copied and evolved from the
Subversion project) running against our repositories, taking advantage of
our community's commit message style.


dev@ ML: https://lists.apache.org/thread/48wgvo5mstoy3ozyqj45s293ddpf86pr 
PR: https://github.com/apache/cassandra-builds/pull/54
Bug: RepairJobTest.testNoTreesRetainedAfterDifference fails consistently on Java 11
Status: Resolved
Priority: Normal
Resolution: Fixed
Created: 13/Oct/21 19:53
Resolved: 13/Nov/21 00:01

Sometimes fails an assertion:

{noformat}
Expecting:
 <10000L>
to be less than:
 <10000L> 
{noformat}

https://app.circleci.com/pipelines/github/driftx/cassandra/269/workflows/f2b0a738-0785-4011-9ac1-071837dc9170/jobs/2049/tests#failed-test-1