Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Potential race condition in Raft cluster join process #5292

Closed
deepthidevaki opened this issue Sep 4, 2020 · 11 comments · Fixed by #6149
Closed

Potential race condition in Raft cluster join process #5292

deepthidevaki opened this issue Sep 4, 2020 · 11 comments · Fixed by #6149
Assignees
Labels
kind/bug Categorizes an issue or PR as a bug scope/broker Marks an issue or PR to appear in the broker section of the changelog severity/mid Marks a bug as having a noticeable impact but with a known workaround

Comments

@deepthidevaki
Copy link
Contributor

Describe the bug
In one cluster two nodes zeebe-0 and zeebe-1 was caught in a loop Attempt to join via 2, Failed to join 2, probably leader but currently not able to accept the join request. Retry later. The leader at this time is zeebe-0. This went for more than an hour. After zeebe-1 was restarted, there was a new election. Then zeebe-1 becomes the leader. The join was completed and both servers started successfully.

D 2020-09-04T06:50:14.288717Z RaftServer{raft-partition-partition-2} - Attempting to join via 2 
D 2020-09-04T06:50:14.288827Z RaftServer{raft-partition-partition-2} - Failed to join 2, probably leader but currently not able to accept the join request. Retry later. 
D 2020-09-04T06:50:14.288899Z RaftServer{raft-partition-partition-2} - Attempting to join via 2 
D 2020-09-04T06:50:14.301364Z RaftServer{raft-partition-partition-2} - Failed to join 2, probably leader but currently not able to accept the join request. Retry later. 
D 2020-09-04T06:50:14.301453Z RaftServer{raft-partition-partition-2} - Failed to join 2, probably leader but currently not able to accept the join request. Retry later. 
2020-09-04 09:00:19.949 CEST
RaftServer{raft-partition-partition-2} - Successfully joined via 2
2020-09-04 09:00:41.926 CEST
RaftServer{raft-partition-partition-2} - Server started successfully!
2020-09-04 09:00:41.926 CEST
Successfully started server for partition PartitionId{id=2, group=raft-partition}

Environment:

  • Zeebe Version: stable/0.23
@deepthidevaki deepthidevaki added kind/bug Categorizes an issue or PR as a bug scope/broker Marks an issue or PR to appear in the broker section of the changelog Impact: Availability labels Sep 4, 2020
@deepthidevaki deepthidevaki added this to the Fast restart milestone Sep 4, 2020
@menski menski added severity/mid Marks a bug as having a noticeable impact but with a known workaround Priority: Mid and removed Status: Needs Priority labels Sep 4, 2020
@npepinpe npepinpe removed this from the Fast restart milestone Sep 15, 2020
@Zelldon
Copy link
Member

Zelldon commented Oct 16, 2020

I have seen this again in a failing IT tests, which caused bors to fail.

Related build https://ci.zeebe.camunda.cloud/job/zeebe-io/job/zeebe/job/staging/2336/

Output:
output.zip

@Zelldon
Copy link
Member

Zelldon commented Oct 19, 2020

This causes from time to time failing IT tests and it is not really visible in jenkins, since surefire can't open so big xml files.
If you open the normal .txt output files you can see it.

Failed to read test report file /home/jenkins/agent/workspace/_zeebe_5575-remove-documentation/qa/integration-tests/target/surefire-reports/TEST-io.zeebe.broker.it.clustering.RestoreTest-it-testrun.xml
org.dom4j.DocumentException: Error on line 147 of document  : XML document structures must start and end within the same entity.
	at org.dom4j.io.SAXReader.read(SAXReader.java:462)
	at org.dom4j.io.SAXReader.read(SAXReader.java:325)
	at hudson.tasks.junit.SuiteResult.parse(SuiteResult.java:178)
	at hudson.tasks.junit.TestResult.parse(TestResult.java:348)
	at hudson.tasks.junit.TestResult.parsePossiblyEmpty(TestResult.java:281)
	at hudson.tasks.junit.TestResult.parse(TestResult.java:206)
	at hudson.tasks.junit.TestResult.parse(TestResult.java:178)
	at hudson.tasks.junit.TestResult.<init>(TestResult.java:143)
	at hudson.tasks.junit.JUnitParser$ParseResultCallable.invoke(JUnitParser.java:146)
	at hudson.tasks.junit.JUnitParser$ParseResultCallable.invoke(JUnitParser.java:118)
	at hudson.FilePath$FileCallableWrapper.call(FilePath.java:3073)
	at hudson.remoting.UserRequest.perform(UserRequest.java:211)
	at hudson.remoting.UserRequest.perform(UserRequest.java:54)
	at hudson.remoting.Request$2.run(Request.java:369)
	at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at hudson.remoting.Engine$1.lambda$newThread$0(Engine.java:117)
	at java.lang.Thread.run(Thread.java:748)
Caused by: org.xml.sax.SAXParseException; lineNumber: 147; columnNumber: 28; XML document structures must start and end within the same entity.
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203)
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1472)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.endEntity(XMLDocumentFragmentScannerImpl.java:899)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.endEntity(XMLDocumentScannerImpl.java:559)
	at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.endEntity(XMLEntityManager.java:1398)
	at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1916)
	at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.scanData(XMLEntityScanner.java:1375)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanCDATASection(XMLDocumentFragmentScannerImpl.java:1654)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3014)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:602)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:505)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:842)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:771)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:643)
	at org.dom4j.io.SAXReader.read(SAXReader.java:445)
	... 19 more

We should fix this.

@Zelldon
Copy link
Member

Zelldon commented Oct 20, 2020

D 2020-10-20T12:59:17.522369Z RaftServer{raft-partition-partition-2} - Failed to join cluster, retrying... 
D 2020-10-20T12:59:17.522886Z RaftServer{raft-partition-partition-2} - Attempting to join via 1 
D 2020-10-20T12:59:17.754511Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:17.755286Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:18.004630Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:18.005589Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:18.254486Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:18.255326Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:18.504561Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:18.505293Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:18.754414Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:18.755339Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:19.005042Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:19.005966Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:19.254334Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:19.255067Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:19.504508Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:19.505387Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:19.754361Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:19.755154Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:20.004673Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:20.005360Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:20.254508Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:20.255371Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:20.504850Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:20.505704Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:20.754494Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:20.755377Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:21.004453Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:21.005609Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:21.254478Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:21.255446Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:21.504950Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:21.505848Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:21.756241Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:21.756995Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:22.004604Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:22.005557Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:22.254171Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:22.254969Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:22.504782Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:22.505545Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:22.523054Z RaftServer{raft-partition-partition-2} - Attempting to join via 0 
D 2020-10-20T12:59:22.754917Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:22.755655Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:23.004868Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:23.005645Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:23.254429Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:23.255253Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:23.504704Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:23.505440Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:23.754335Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:23.755050Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:24.004377Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:24.005098Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:24.254483Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:24.255196Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:24.504667Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:24.505308Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:24.754425Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:24.755266Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:25.004615Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:25.005372Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:25.254618Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:25.255466Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:25.504591Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:25.505305Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:25.754564Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:25.755362Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:26.004747Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:26.005570Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:26.254476Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:26.255367Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:26.504765Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:26.505447Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:26.754641Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:26.755402Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:27.004548Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:27.005742Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:27.254434Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:27.255208Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:27.504432Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:27.505036Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:27.523247Z RaftServer{raft-partition-partition-2} - Failed to join cluster, retrying... 
D 2020-10-20T12:59:27.523687Z RaftServer{raft-partition-partition-2} - Attempting to join via 1 
D 2020-10-20T12:59:27.754556Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:27.755210Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:28.004448Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:28.005078Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:28.254390Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:28.254975Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:28.504611Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:28.505194Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:28.754701Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:28.755304Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:29.004474Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:29.005147Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:29.254649Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:29.255321Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:29.504739Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:29.505461Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:29.754662Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:29.755360Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:30.004609Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:30.005267Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:30.254426Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:30.255065Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:30.504583Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:30.505200Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:30.754403Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:30.754977Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:31.004490Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:31.005394Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:31.254574Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:31.255272Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:31.504437Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:31.505007Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:31.754263Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:31.754916Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:32.004625Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:32.005467Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:32.254458Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:32.255244Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:32.504458Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Received AppendRequest{term=31, leader=1, prevLogIndex=487850673, prevLogTerm=31, entries=0, commitIndex=487850673} 
D 2020-10-20T12:59:32.505194Z RaftServer{raft-partition-partition-2}{role=FOLLOWER} - Sending AppendResponse{status=OK, term=31, succeeded=true, lastLogIndex=487850673, lastSnapshotIndex=486726399} 
D 2020-10-20T12:59:32.523847Z RaftServer{raft-partition-partition-2} - Attempting to join via 0 

See in our latest benchmarks it seems that we are not able to join on the leader correctly.

@Zelldon
Copy link
Member

Zelldon commented Oct 21, 2020

I would like to revise the priority. I think this is more problematic then we think. It also causes our builds to fail.

@npepinpe
Copy link
Member

npepinpe commented Dec 7, 2020

As discussed with Deepthi, let's timebox this to reproduce it. If we still can't reproduce it, please do not pick up - however if this happens again and we have a chance to observe it with the additional logs Deepthi added, then let's immediately investigate.

ghost pushed a commit that referenced this issue Dec 8, 2020
5973: chore(atomix): add more logs in the join process r=MiguelPires a=deepthidevaki

## Description

Add more logs to help debug #5292 

## Related issues

## Definition of Done

_Not all items need to be done depending on the issue and the pull request._

Code changes:
* [x] The changes are backwards compatibility with previous versions
* [ ] If it fixes a bug then PRs are created to [backport](https://github.com/zeebe-io/zeebe/compare/stable/0.24...develop?expand=1&template=backport_template.md&title=[Backport%200.24]) the fix to the last two minor versions. You can trigger a backport by assigning labels (e.g. `backport stable/0.25`) to the PR, in case that fails you need to create backports manually.

Testing:
* [ ] There are unit/integration tests that verify all acceptance criterias of the issue
* [ ] New tests are written to ensure backwards compatibility with further versions
* [ ] The behavior is tested manually
* [ ] The impact of the changes is verified by a benchmark 

Documentation: 
* [ ] The documentation is updated (e.g. BPMN reference, configuration, examples, get-started guides, etc.)
* [ ] New content is added to the [release announcement](https://drive.google.com/drive/u/0/folders/1DTIeswnEEq-NggJ25rm2BsDjcCQpDape)


Co-authored-by: Deepthi Devaki Akkoorath <deepthidevaki@gmail.com>
@Zelldon Zelldon self-assigned this Jan 18, 2021
@Zelldon
Copy link
Member

Zelldon commented Jan 18, 2021

I was able to extract the join code into a helper class, such that I can write some unit tests against it.

I was wondering whether this current behavior is really expected. First test:

  @Test
  public void shouldJoin() throws Exception {
    // given
    final var raftMembers = List
        .of(createRaftMemberContext("1"), createRaftMemberContext("2"),
            createRaftMemberContext("3"));
    final CountDownLatch latch = new CountDownLatch(1);
    final var joinResponse = createSuccessfulJoinResponse();
    final var raftJoinHelper = new RaftJoinHelper(singleThreadContext,
        ((memberId, joinRequest) -> CompletableFuture.completedFuture(joinResponse)),
        singleThreadContext::schedule,
        Duration.ofMillis(10), (response) -> latch.countDown());

    // when
    singleThreadContext.execute(() -> {
      raftJoinHelper
          .join(raftMembers.iterator(), () -> createRaftMember("4"), () -> raftMembers.iterator());
    });

    // then
    latch.await(15, TimeUnit.SECONDS);

  }

In the test we pretend that we (local) are node 4 and we want to join 1, 2 and 3. It uses the same code as before it is just has more dependency injection for test ability.

The output is the following:

13:15:26.528 [] DEBUG io.atomix.raft.cluster.impl.RaftJoinHelper - Attempting to join via 1
13:15:26.535 [] TRACE io.atomix.raft.cluster.impl.RaftJoinHelper - Cancelling join timeout
13:15:26.535 [] DEBUG io.atomix.raft.cluster.impl.RaftJoinHelper - Attempting to join via 2
13:15:26.535 [] TRACE io.atomix.raft.cluster.impl.RaftJoinHelper - Cancelling join timeout
13:15:26.536 [] DEBUG io.atomix.raft.cluster.impl.RaftJoinHelper - Successfully joined via 1
13:15:26.536 [] DEBUG io.atomix.raft.cluster.impl.RaftJoinHelper - Successfully joined via 2

It looks like we immediately try to join two nodes. Is this expected? @npepinpe @deepthidevaki ?

I added another test, where I returned only on one node the successful response.

  @Test
  public void shouldJoinOnlyOneNode() throws Exception {
    // given
    final var raftMembers = List
        .of(createRaftMemberContext("1"), createRaftMemberContext("2"),
            createRaftMemberContext("3"));
    final CountDownLatch latch = new CountDownLatch(1);
    final var joinResponse = createSuccessfulJoinResponse();
    final var noLeaderJoinResponse = createNoLeaderJoinResponse();
    final var raftJoinHelper = new RaftJoinHelper(singleThreadContext,
        ((memberId, joinRequest) -> {
          if (memberId.id().equals("2")) {
            return CompletableFuture.completedFuture(joinResponse);
          }

          return CompletableFuture.completedFuture(noLeaderJoinResponse);
        }),
        singleThreadContext::schedule,
        Duration.ofMillis(10), (response) -> latch.countDown());

    // when
    singleThreadContext.execute(() -> {
      raftJoinHelper
          .join(raftMembers.iterator(), () -> createRaftMember("4"), () -> raftMembers.iterator());
    });

    // then
    latch.await(15, TimeUnit.SECONDS);

  }

And we can see that it tries all until it joined twice?

13:16:46.510 [] DEBUG io.atomix.raft.cluster.impl.RaftJoinHelper - Attempting to join via 1
13:16:46.518 [] TRACE io.atomix.raft.cluster.impl.RaftJoinHelper - Cancelling join timeout
13:16:46.518 [] DEBUG io.atomix.raft.cluster.impl.RaftJoinHelper - Attempting to join via 2
13:16:46.519 [] TRACE io.atomix.raft.cluster.impl.RaftJoinHelper - Cancelling join timeout
13:16:46.521 [] DEBUG io.atomix.raft.cluster.impl.RaftJoinHelper - Failed to join 1. Received error RaftError{type=NO_LEADER, message=null}
13:16:46.521 [] DEBUG io.atomix.raft.cluster.impl.RaftJoinHelper - Attempting to join via 3
13:16:46.521 [] TRACE io.atomix.raft.cluster.impl.RaftJoinHelper - Cancelling join timeout
13:16:46.522 [] DEBUG io.atomix.raft.cluster.impl.RaftJoinHelper - Successfully joined via 2
13:16:46.522 [] DEBUG io.atomix.raft.cluster.impl.RaftJoinHelper - Failed to join 3. Received error RaftError{type=NO_LEADER, message=null}
13:16:46.522 [] DEBUG io.atomix.raft.cluster.impl.RaftJoinHelper - Failed to join cluster, retrying...
13:16:46.523 [] DEBUG io.atomix.raft.cluster.impl.RaftJoinHelper - Attempting to join via 1
13:16:46.524 [] TRACE io.atomix.raft.cluster.impl.RaftJoinHelper - Cancelling join timeout
13:16:46.524 [] DEBUG io.atomix.raft.cluster.impl.RaftJoinHelper - Failed to join 1. Received error RaftError{type=NO_LEADER, message=null}
13:16:46.524 [] DEBUG io.atomix.raft.cluster.impl.RaftJoinHelper - Attempting to join via 2
13:16:46.524 [] TRACE io.atomix.raft.cluster.impl.RaftJoinHelper - Cancelling join timeout
13:16:46.524 [] DEBUG io.atomix.raft.cluster.impl.RaftJoinHelper - Successfully joined via 2

Process finished with exit code 0

Any thoughts on this? Would like to discuss this before I continue, such that I know what should be the expected behavior.

@npepinpe
Copy link
Member

I'm not very familiar with the current implementation, such that it may be "expected" when you read it - but I don't think it's expected behaviour. Been a while since I read the configuration changes section of the paper, but I don't see why it needs to join via 2 nodes. I vaguely remember a section about arbitrary configuration changes which I skimmed - this might be what's implemented in Atomix? There you could add/remove X servers, and not just one at a time, and it might be a bit more complex and require multiple nodes to accept the new config. I'd have to re-read it.

@npepinpe
Copy link
Member

Reading more into it, it sounds like we may implement arbitrary configuration changes (which makes sense as we want to restart from a stopped cluster, or start from nothing). Let me read our implementation a bit more and I'll comment again tomorrow morning 👍

How nice it would be to have technical docs ;)

@deepthidevaki
Copy link
Contributor Author

It does not have to join via all nodes. Only leader can accept a join request. Leader should accept it after the configuration is committed (replicated to quorum). So once the leader sent a successful join response there is no need for it to try to join via other nodes.

@Zelldon
Copy link
Member

Zelldon commented Jan 20, 2021

@deepthidevaki this would be also my thinking. Furthermore I would also expect that it stops the join process, when it becomes leader right?

@Zelldon
Copy link
Member

Zelldon commented Jan 20, 2021

Discussed this topic together with @npepinpe and @deepthidevaki we decided to completely remove the join and leave functionality, since we currently have no benefit out of it.

The join makes sense for dynamic clusters, where we can add nodes later etc. Currently our cluster configurations are static and are known from start on, we don't need to get the knowledge from the leader so there is no need of a join. If we remove the join we should consequently also remove the leave, which is currently also not used by us. If we need that later we can bring it back or implement it in a better way, which is then hopefully more maintainable and less confusing then the current solution.

Furthermore, we checked whether this has consequences on becoming ready if we restart a follower and as far as we saw in the code it should still work as before.

I will create an PR to remove both.

This was referenced Jan 21, 2021
ghost pushed a commit that referenced this issue Jan 25, 2021
6142: chore(atomix): remove Raft#leave r=Zelldon a=Zelldon

## Description

As discussed yesterday we will remove leave and join.

> Discussed this topic together with @npepinpe and @deepthidevaki we decided to completely remove the join and leave 
> functionality, since we currently have no benefit out of it.
> 
> The join makes sense for dynamic clusters, where we can add nodes later etc. Currently our cluster configurations are static and are known from start on, we don't need to get the knowledge from the leader so there is no need of a join. If we remove the join we should consequently also remove the leave, which is currently also not used by us. If we need that later we can bring it back or implement it in a better way, which is then hopefully more maintainable and less confusing then the current solution.
> 
> Furthermore, we checked whether this has consequences on becoming ready if we restart a follower and as far as we saw in the code it should still work as before.
> 
> I will create an PR to remove both.
>
> #5292 (comment)

As first iteration I want to remove leave, since it is not used anywhere and this makes it easier to review the changes. After I removed join I will run benchmarks and QA.
<!-- Please explain the changes you made here. -->

## Related issues

<!-- Which issues are closed by this PR or are related -->

related #5292 

## Definition of Done

_Not all items need to be done depending on the issue and the pull request._

Code changes:
* [ ] The changes are backwards compatibility with previous versions
* [ ] If it fixes a bug then PRs are created to [backport](https://github.com/zeebe-io/zeebe/compare/stable/0.24...develop?expand=1&template=backport_template.md&title=[Backport%200.24]) the fix to the last two minor versions. You can trigger a backport by assigning labels (e.g. `backport stable/0.25`) to the PR, in case that fails you need to create backports manually.

Testing:
* [ ] There are unit/integration tests that verify all acceptance criterias of the issue
* [ ] New tests are written to ensure backwards compatibility with further versions
* [ ] The behavior is tested manually
* [ ] The change has been verified by a QA run
* [ ] The impact of the changes is verified by a benchmark 

Documentation: 
* [ ] The documentation is updated (e.g. BPMN reference, configuration, examples, get-started guides, etc.)
* [ ] New content is added to the [release announcement](https://drive.google.com/drive/u/0/folders/1DTIeswnEEq-NggJ25rm2BsDjcCQpDape)


Co-authored-by: Christopher Zell <zelldon91@googlemail.com>
@ghost ghost closed this as completed in 294691f Jan 28, 2021
github-merge-queue bot pushed a commit that referenced this issue Mar 14, 2024
* feat: add tenant filter to decisions page

* style: change option All to All versions for version filter
github-merge-queue bot pushed a commit that referenced this issue Mar 14, 2024
* feat(backend): introduce conditions for Opensearch/ELasticsearch

* feat(backend): remove profiles for Opensearch/Elasticsearch

* feat(backend): add OpensearchConnector

* feat(backend): add OpensearchSchemaManager and RetryOpensearchClient

* feat(backend): add OpenDecisionStore

* feat(backend): add OpenDecisionStore

* feat(backend): add OpensearchUtil

Related with #5135

* feat(backend): Add OpensearchProperties and further setups

Related with #5135

* feat(backend): Add schema files for Opensearch

Related with #5135

* feat(backend): Add implementation stubs for Opensearch

Related with #5135

* feat(backend): Add implementation for webapp writer
Related with #5135

* feat(backend): introduce RecordsReader interface

Related with #4887

* feat(backend): renamed IncidentPostImportAction

Related with #4887

* feat(backend): move ELS related methods from FlowNodeInstanceZeebeRecordProcessor to FlowNodeStore

Related with #4887

* fix(backend-test): fix import error

Related with #4887

* feat(backend): remove ELS from ListViewZeebeRecordProcessor (importer-8.3)

Related with #4887

* feat(backend): remove ELS from ProcessZeebeRecordProcessor (importer-8.3)

Related with #4887

* feat(backend): remove ELS from ListView and ProcessZeebeRecordProcessor

- remove ElasticsearchQueries
- rename ElasticsearchBulkProcessor to ImportBulkProcessor

Related with #4887

* fix(backend): use Zeebe Record not java...Record

Related with #4887

* fix(backend-test): use OperateZeebeIntegrationTest in ReindexIT

Related with #4887

* feat(backend): Add implementation stubs for web reader Opensearch

Related with #5135

* feat(backend): add database property

Related with #5135

* feat(backend): implement OpensearchUserStore

Related with #5135

* feat(backend): implement OpensearchZeebeStore

Related with #5135

* feat(backend): implement OpensearchZeebeStore

- add stubs for Opensearch Dao's

Related with #5135

* feat(backend): add conditions and stub implementations

Related with #5135

* feat(backend): use port 9200 also for Opensearch

* feat(backend): add OpensearchRecordsReader implementation

Related with #5135

* feat(backend): start OpensearchImportStore implementation

Related with #5135

* docs(opensearch): add opensearch implementation notes

Related with #5135

* docs(opensearch): add toc for opensearch implementation notes

Related with #5135

* docs(opensearch): add Zeebe client link

Related with #5135

* docs(opensearch): disable operationExecutor in opensearch docs

Related with #5135

* docs(opensearch): check for empty results in OpensearchImportStore

Related with #5135

* Be opensearch implementation 1.1 (#5206)

* feat(backend): Fix ElasticsearchChecks

* feat(backend): Fix TestElasticsearchSchemaManager

* feat(backend): Add TestOpensearchSchemaManager

* feat(backend): Add OpensearchArchiver

* feat(backend): Split OperateZeebeRule into ES/OS

* feat(backend): Add OpensearchChecks

* feat(backend): Add OpensearchUtil

* feat(backend): Fix ZeebeConnectorIT

* feat(backend): Split SearchTestRule into ES/OS

* feat(backend): Introduce DatabaseInfo

* feat(backend): Fix OpenSearchProcessStore

* feat(backend): Implement OpensearchImportStore.updateImportPositions

* feat(backend): Move getAllFlowNodeInstances to FlowNodeInstanceReader

* feat(backend): Add TestUtil.removeAllIndices for opensearch

* feat(backend): Implement finished, refreshOperateSearchIndices, refreshZeebeIndices, areIndicesAreCreated in OpensearchTestRuleProvider

* feat(backend): Implement OpensearchRecordsReader.readNextBatchByPositionAndPartition

* feat(backend): Minor fixes

* feat(backend): Implement OpensearchFlowNodeStore (#5208)

* feat(backend): Implement OpensearchFlowNodeStore

* feat(backend): Minor fixes

* Implement OpensearchIncidentStore (#5225)

* feat(backend): Implement OpensearchIncidentStore

* feat(backend): OpensearchIncidentStore fix

* Be opensearch implementation 1 opensearch metrics store (#5240)

* feat(backend): Introduce RichOpenSearchClient

* feat(backend): Implement OpensearchMetricsStore

* feat(backend): Implement OpensearchMetricsStore

* feat(backend): Implement OpensearchOperationStore (#5251)

* feat(backend): Implement OpensearchOperationStore

* feat(backend): Implement OpensearchOperationStore

* chore(backend): merge master commits (#5272)

* feat(backend): API endpoint for decision definition deletion (#5137)

feat(backend): API endpoint for decision definition deletion

- added REST endpoint and test
- added batch operation for decision definition deletion

Closes #4075

* test: add process instances filters e2e tests (#5142)

* test: add process instance variables e2e tests (#5144)

* test: add process instances table e2e tests (#5145)

* feat(backend): Permissions for decision definition deletion endpoint (#5148)

feat(backend): Permissions for decision definition deletion endpoint

- added DELETE permission check

Closes #5054

* feat(api): Add parentFlowNodeInstanceKey to process instance endpoint. #4971 (#5149)

* feat(backend): Add parentFlowNodeInstanceKey to process instance

feat(backend): Add parentFlowNodeInstanceKey to process instance

- Added field parentFlowNodeInstanceKey

Closes #4971

---------

Co-authored-by: Mihail <122792941+mihail-ca@users.noreply.github.com>

* ci: Fix Browserlist GHA (#5170)

* ci: Fix Browserlist GHA

* chore: Revert to Node 18

* test: fix flaky playwright e2e tests (#5171)

* chore: Update Browserlist DB

* feat(backend): Add handler for DELETE_DECISION_DEFINITION operation (#5157)

* feat(backend): Add handler for DELETE_DECISION_DEFINITION operation

feat(backend): Add handler for DELETE_DECISION_DEFINITION operation

- Added handler

Closes #5036

Co-authored-by: Hüsna Uygur <husna.uygur@camunda.com>

* feat: display success notification on definition deletion (#5152)

* feat: display success notification on definition deletion

* chore: set delete definition feature flags to false

* chore: remove ThemeProvider from tests (#5058)

* chore: copy tests

* tests: update test selectors, remove theme provider

* chore: remove ThemeProvider from tests

* chore: remove most of the remaining ThemeProvider from Carbon tests

---------

Co-authored-by: Hüsna Uygur <husna.uygur@camunda.com>

* chore(gha): dont trigger deploy-preview on closed PRs (#5179)

* fix: fix carbon migration issues (#5161)

* chore: remove legacy e2e tests (#5164)

* chore: remove legacy e2e tests

* chore: remove obsolete line from README

* chore(deps): update dependency @testing-library/jest-dom to v6.1.1 (#5182)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* feat(backend): return `tenantId` in Public API (#5096)

* assign `<default>` tenant to all `tenantId` fields for now
* return `tenantId` in all relevant Public API endpoints

closes #4930

* test: add process instance history e2e tests (#5150)

* test: add process instance history e2e tests

* test: remove unnecessary polls and fix expect

* chore: increase setup time for process instance history

* refactor: use getByRole selector for tree items

* chore: remove legacy components and routes (#5166)

* chore: remove legacy components and routes

* chore: remove unused constants and functions

* chore: remove common-ui (#5167)

* chore: remove old theme (#5168)

* chore: remove unused global styles (#5169)

* chore: remove carbon folders (#5175)

* fix(backend): Duplicate endpoints in Swagger public API (#5185)

fix(backend): Duplicate endpoints in Swagger public API

- updated Swagger documentation

Closes #5095

* fix(deps): update dependency styled-components to v6 (master) (#4933)

* fix(deps): update dependency styled-components to v6

* chore: fix rebase issues

* fix: fix theme switcher

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Hüsna Uygur <husna.uygur@camunda.com>

* fix(deps): update dependency @carbon/elements to v11.28.0 (#5162)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* fix(deps): update dependency @carbon/react to v1.36.0 (#5165)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* fix(deps): update dependency sass to v1.66.1 (#5107)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* fix(deps): update dependency @camunda/camunda-composite-components to v0.1.3 (master) (#5062)

* fix(deps): update dependency @camunda/camunda-composite-components to v0.1.3

* style: strict style override for p

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Hüsna Uygur <husna.uygur@camunda.com>

* fix(deps): update all non-major dependencies (master) (#5141)

* fix(deps): update all non-major dependencies

* chore: fix lint issue

* chore: update playwright version

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Hüsna Uygur <husna.uygur@camunda.com>

* chore(deps): update stefanzweifel/git-auto-commit-action digest to 47a8ad5 (#5172)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore: Update Browserlist DB

* chore: add release github actions (#5105)

* chore: add release github actions

* chore: use password-stdin for docker login

* chore: create release using github token and upload artifacts to operate repo

* chore: remove unused commented plugins

* chore: remove javaVersion parameter

* fix(backend): Timeout when taking the backup (#5181)

fix(backend): Timeout when taking the backup

- Added additional check for failure, to keep waiting for backup on timeout exception

Closes #3982

* docs(swagger): Enum values added to object schemas (#5180)

Swagger annotations added for:
Process Instance
- state
Incident
-state
-type
Flownode Instance
-type
-state

Related to https://github.com/camunda/camunda-platform-docs/issues/1486

* Create codeql.yml

* feat(backend): decouple importer/importer-8.3 from Elasticsearch (#5094)

* feat(backend): introduce RecordsReader interface

Related with #4887

* feat(backend): renamed IncidentPostImportAction

Related with #4887

* feat(backend): move ELS related methods from FlowNodeInstanceZeebeRecordProcessor to FlowNodeStore

Related with #4887

* fix(backend-test): fix import error

Related with #4887

* feat(backend): remove ELS from ListViewZeebeRecordProcessor (importer-8.3)

Related with #4887

* feat(backend): remove ELS from ProcessZeebeRecordProcessor (importer-8.3)

Related with #4887

* feat(backend): remove ELS from ListView and ProcessZeebeRecordProcessor

- remove ElasticsearchQueries
- rename ElasticsearchBulkProcessor to ImportBulkProcessor

Related with #4887

* fix(backend): use Zeebe Record not java...Record

Related with #4887

* fix(backend-test): use OperateZeebeIntegrationTest in ReindexIT

Related with #4887

* refactor: get rid of node-fetch dependency (#5186)

* fix: add request mocks to modification test (#5190)

* chore: split tests

* test: mock requests before applying modifications

* chore: fix act warnings for ProcessInstance/modifications.test.tsx

* test: fix act warning

---------

Co-authored-by: Hüsna Uygur <husna.uygur@camunda.com>

* feat(backend): API endpoint for process definition deletion (#5197)

feat(backend): API endpoint for process definition deletion

- added REST endpoint and test
- added batch operation for process definition deletion

Closes #4076

* feat(backend): add `tenantId` to `POST /api/process-instances` (#5202)

* return `tenantId` for each process instance
* allow filtering by `tenantId`

closes #5099

* feat: configuration flag to enable/disable multi tenancy (#5210)

* chore(preview-env): Add a new workflow to clean up preview environments (#5153)

* feat: add weekly docker image workflow (#5215)

* ci: add weekly-internal-docker-images.yaml

* fix: use correct cron notation

* ci: use quotes for cron job

* ci: update workflow

Use correct docker image. Set the docker tag correctly.

* Update workload-identity-provider and service_account

* ci: add permissions

Add missing permissions to workflow
https://stackoverflow.com/questions/73626841/google-github-actions-auth-failed-with-did-not-inject-actions-id-token-request/73626864#73626864

* ci: checkout first and add more parameters



* Checkout the repo before login (google auth complained here)
* Add caches for gcr.io

---------

Co-authored-by: Ralf Puchert <49151958+ralfpuchert@users.noreply.github.com>

* chore(deps): bump org.yaml:snakeyaml from 2.0 to 2.2 (#5195)

Bumps [org.yaml:snakeyaml](https://bitbucket.org/snakeyaml/snakeyaml) from 2.0 to 2.2.
- [Commits](https://bitbucket.org/snakeyaml/snakeyaml/branches/compare/snakeyaml-2.2..snakeyaml-2.0)

---
updated-dependencies:
- dependency-name: org.yaml:snakeyaml
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump org.springdoc:springdoc-openapi-starter-webmvc-ui (#5139)

Bumps [org.springdoc:springdoc-openapi-starter-webmvc-ui](https://github.com/springdoc/springdoc-openapi) from 2.1.0 to 2.2.0.
- [Release notes](https://github.com/springdoc/springdoc-openapi/releases)
- [Changelog](https://github.com/springdoc/springdoc-openapi/blob/main/CHANGELOG.md)
- [Commits](https://github.com/springdoc/springdoc-openapi/compare/v2.1.0...v2.2.0)

---
updated-dependencies:
- dependency-name: org.springdoc:springdoc-openapi-starter-webmvc-ui
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump com.auth0:jwks-rsa from 0.22.0 to 0.22.1 (#5023)

Bumps [com.auth0:jwks-rsa](https://github.com/auth0/jwks-rsa-java) from 0.22.0 to 0.22.1.
- [Release notes](https://github.com/auth0/jwks-rsa-java/releases)
- [Changelog](https://github.com/auth0/jwks-rsa-java/blob/master/CHANGELOG.md)
- [Commits](https://github.com/auth0/jwks-rsa-java/compare/0.22.0...0.22.1)

---
updated-dependencies:
- dependency-name: com.auth0:jwks-rsa
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* feat: store user's tenants in session (#5214)

* feat(backend): add tenantId to `GET /api/decisions/grouped` (#5238)

* change GET to POST to allow request body
* return `tenantId` for each decision group
* allow filtering by `tenantId`

closes #5102

* feat(backend): return tenants in GET `/api/authentications/user` (#5230)

closes #5098

* feat(backend): add `tenantId` to `POST /api/decision-instances` (#5211)

* return `tenantId` for each decision instance
* allow filtering by `tenantId`

closes #5101

* chore(test): mark Elasticsearch changes... (#5241)

not to lose when implementing Opensearch

* chore(deps): bump org.testcontainers:elasticsearch from 1.18.3 to 1.19.0 (#5221)

Bumps [org.testcontainers:elasticsearch](https://github.com/testcontainers/testcontainers-java) from 1.18.3 to 1.19.0.
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.18.3...1.19.0)

---
updated-dependencies:
- dependency-name: org.testcontainers:elasticsearch
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump version.micrometer from 1.11.2 to 1.11.3 (#5218)

Bumps `version.micrometer` from 1.11.2 to 1.11.3.

Updates `io.micrometer:micrometer-registry-prometheus` from 1.11.2 to 1.11.3
- [Release notes](https://github.com/micrometer-metrics/micrometer/releases)
- [Commits](https://github.com/micrometer-metrics/micrometer/compare/v1.11.2...v1.11.3)

Updates `io.micrometer:micrometer-core` from 1.11.2 to 1.11.3
- [Release notes](https://github.com/micrometer-metrics/micrometer/releases)
- [Commits](https://github.com/micrometer-metrics/micrometer/compare/v1.11.2...v1.11.3)

---
updated-dependencies:
- dependency-name: io.micrometer:micrometer-registry-prometheus
  dependency-type: direct:development
  update-type: version-update:semver-patch
- dependency-name: io.micrometer:micrometer-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump license-maven-plugin from 4.1 to 4.2 (#4289)

Bumps license-maven-plugin from 4.1 to 4.2.

---
updated-dependencies:
- dependency-name: com.mycila:license-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump com.auth0:mvc-auth-commons from 1.9.5 to 1.10.0 (#4973)

Bumps [com.auth0:mvc-auth-commons](https://github.com/auth0/auth0-java-mvc-common) from 1.9.5 to 1.10.0.
- [Release notes](https://github.com/auth0/auth0-java-mvc-common/releases)
- [Changelog](https://github.com/auth0/auth0-java-mvc-common/blob/master/CHANGELOG.md)
- [Commits](https://github.com/auth0/auth0-java-mvc-common/compare/1.9.5...1.10.0)

---
updated-dependencies:
- dependency-name: com.auth0:mvc-auth-commons
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump semver dependency (#5248)

* test: add visual regression tests for dashboard page (#5194)

* test: add visual regression tests for dashboard page

* refactor: simplify function type

* test: add visual regression tests for decision detail page (#5196)

* test: add visual regression tests for processes page (#5198)

* test: add visual regression tests for processes page

* refactor: simplify function type

* test: add visual regression tests for decisions page (#5204)

* test: add visual regression tests for decisions page

* refactor: simplify function type

* chore: update camunda composite components (#5257)

* feat(backend): expose `multiTenancyEnabled` in `client-config.json` (#5224)

* feat(backend): expose `multiTenancyEnabled` in `client-config.json`

closes #5223

* chore(test): fix tests

* feat(backend): allow configuring where to read parent data from (#5203)

* feat(backend): allow configuring where to read parent data from

* chore(test): mark Elasticsearch changes...

not to lose when implementing Opensearch

* feat: get tenants for given M2M token from identity (#5242)

* chore: delete unnecessary warning (#5261)

* chore: Update Browserlist DB

* feat(backend): add `tenantId` to `GET /api/processes/grouped` (#5222)

* feat(backend): add `tenantId` to `GET /api/processes/grouped`

* change GET to POST to allow request body
* return `tenantId` for each process group
* allow filtering by `tenantId`

closes #5100

* chore(backend): extend test case

* fix(test): fix test to use POST method instead of GET

* chore(test): fix tests

* chore(deps): bump version.spring.boot from 3.1.2 to 3.1.3 (#5246)

Bumps `version.spring.boot` from 3.1.2 to 3.1.3.

Updates `org.springframework.boot:spring-boot-dependencies` from 3.1.2 to 3.1.3
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.1.2...v3.1.3)

Updates `org.springframework.boot:spring-boot-maven-plugin` from 3.1.2 to 3.1.3
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.1.2...v3.1.3)

---
updated-dependencies:
- dependency-name: org.springframework.boot:spring-boot-dependencies
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework.boot:spring-boot-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(ci): remove PVCs from stage env config (#5264)

* fix(backend-sec): use decisionDefinitionId as Long (#5247)

* fix(backend-sec): use decisionDefinitionId as Long

* feat(backend): use ValidLong for validating decisionDefinitionId

- Use the old way to for error message in permission check

* fix(backend): use SearchTestRule in tests

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: mihail-ca <122792941+mihail-ca@users.noreply.github.com>
Co-authored-by: Hüsna Uygur <45518829+huygur@users.noreply.github.com>
Co-authored-by: johanwelgemoed <112612181+johanwelgemoed@users.noreply.github.com>
Co-authored-by: Vinícius Goulart <vinicius.goulart@camunda.com>
Co-authored-by: vsgoulart <vsgoulart@users.noreply.github.com>
Co-authored-by: Hüsna Uygur <husna.uygur@camunda.com>
Co-authored-by: Patrick Dehn <pedesen@users.noreply.github.com>
Co-authored-by: Lars Lange <9141483+Langleu@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Svetlana Dorokhova <svetlana.dorokhova@camunda.com>
Co-authored-by: Roman Smirnov <roman.smirnov@camunda.com>
Co-authored-by: Clément Nero <clement.nero@camunda.com>
Co-authored-by: Christopher Kujawa (Zell) <zelldon91@googlemail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Oleksandr Kriuchenko <okriuchenko@lohika.com>

* feat(backend): Implement OpenSearchProcessStore (#5271)

* feat(backend): Implement OpenSearchProcessStore

* feat(backend): Implement OpensearchBatchRequest

* feat(backend): remove ELS deps from MigrationProperties (#5279)

* fix(backend-tests) fix backend integration tests (#5281)

* fix(backend-tests):Use annotation Conditional

* fix(backend-tests):include ZeebeImporter for ModulesTestApplication

* feat(backend): Implement OpensearchBatchRequest (#5278)

Co-authored-by: Oleksandr Kriuchenko <okriuchenko@lohika.com>

* fix(backend): remove duplicated @Conditional annotation

* fix(backend): RichOpenSearchClient (#5284)

Co-authored-by: Oleksandr Kriuchenko <okriuchenko@lohika.com>

* feat(backend): Implement OpensearchFlowNodeStore (#5290)

Co-authored-by: Oleksandr Kriuchenko <okriuchenko@lohika.com>

* feat(backend): Implement OpensearchListViewStore (#5291)

Co-authored-by: Oleksandr Kriuchenko <okriuchenko@lohika.com>

* feat(backend): Implement OpensearchDecisionStore (#5288)

* feat(backend): Implement OpensearchDecisionStore

* feat(backend): Implement OpensearchDecisionStore

---------

Co-authored-by: Oleksandr Kriuchenko <okriuchenko@lohika.com>

* test(backend): add OpensearchBatchRequest tests (#5295)

* fix(backend): remove duplicated @Conditional annotation

* test(backend): add OpensearchBatchRequestIT

* fix(backend): Fix opensearch ndjson serialization (#5293)

Co-authored-by: Oleksandr Kriuchenko <okriuchenko@lohika.com>

* feat(backend): distinguish opensearch and elasticsearch index prefixes

* feat(backend): add search index method for DSL

* feat(backend): refactoring

* test(backend): add update and add tests

* feat(backend): add fix and test for upsert

* feat(backend): add fix upsert with routing

* feat(backend): rename DSL searchRequestBuilder method

---------

Co-authored-by: Oleksandr Kriuchenko <105281107+oleksandr-kriuchenko-lohika@users.noreply.github.com>
Co-authored-by: Oleksandr Kriuchenko <okriuchenko@lohika.com>

* Implement OpensearchSequenceFlowStore (#5308)

* feat(backend): Implement OpensearchSequenceFlowStore

* feat(backend): Reorganize OpensearchDSL

---------

Co-authored-by: Oleksandr Kriuchenko <okriuchenko@lohika.com>

* feat(backend): implement Opensearch importer (#5333)

* feat(backend): add OpensearchDSL methods

* feat(backend): read Opensearch record as JSON string

* fix(backend): disable post importer

* fix(backend): fix bug in creating List with null items with `List.of`

* fix(backend): fix bug in updating import-position index

* feat(backend): Implement OpenSearchProcessStore (#5294)

Co-authored-by: Oleksandr Kriuchenko <okriuchenko@lohika.com>

* fix(backend): Fix aggregation in OpenSearchProcessStore.getCoreStatistics (#5352)

Co-authored-by: Oleksandr Kriuchenko <okriuchenko@lohika.com>

* feat(backend): Combine RichOpenSearchClient, RetryOpenSearchClient, OpenSearchTask and OpensearchUtil (#5340)

* feat(backend): Implement OpensearchTaskStore

* feat(backend): Implement OpensearchTaskStore

* feat(backend): Implement OpensearchIncidentStatisticsReader

* feat(backend): Implement OpensearchTaskStore

* feat(backend): Implement OpensearchIncidentStatisticsReader

---------

Co-authored-by: Oleksandr Kriuchenko <okriuchenko@lohika.com>

* feat(backend): Implement OpensearchIncidentStatisticsReader (#5386)

Co-authored-by: Oleksandr Kriuchenko <okriuchenko@lohika.com>

* feat(backend): Implement OpensearchBatchOperationReader (#5387)

Co-authored-by: Oleksandr Kriuchenko <okriuchenko@lohika.com>

* feat(backend): Implement OpensearchListViewReader (#5394)

* feat(backend): Implement OpensearchListViewReader

* feat(backend): Implement OpensearchListViewReader

---------

Co-authored-by: Oleksandr Kriuchenko <okriuchenko@lohika.com>

* feat(backend): Implement OpensearchOperationReader (#5408)

Co-authored-by: Oleksandr Kriuchenko <okriuchenko@lohika.com>

* fix(backend): Fix OpensearchBatchRequest (#5409)

Co-authored-by: Oleksandr Kriuchenko <okriuchenko@lohika.com>

* fix(backend): Fix JacksonConfig: allow constructors (#5412)

Co-authored-by: Oleksandr Kriuchenko <okriuchenko@lohika.com>

* feat(backend): Opensearch implementation for PostImportAction (#5413)

* chore(project): use Opensearch 2.5

* clean(backend): remove unused import

* feat(backend): add OpensearchIncidentPostImportAction

* feat(backend): enable post importer

* fix(backend): fix null position in query

* feat(backend): Implement OpensearchBatchOperationWriter (#5414)

Co-authored-by: Oleksandr Kriuchenko <okriuchenko@lohika.com>

* fix(backend): Fix OpensearchIncidentStatisticsReader.getIncidentsByErrorMsgStatistic (#5416)

Co-authored-by: Oleksandr Kriuchenko <okriuchenko@lohika.com>

* chore(project): merge master  (#5422)

* feat(backend): API endpoint for decision definition deletion (#5137)

feat(backend): API endpoint for decision definition deletion

- added REST endpoint and test
- added batch operation for decision definition deletion

Closes #4075

* test: add process instances filters e2e tests (#5142)

* test: add process instance variables e2e tests (#5144)

* test: add process instances table e2e tests (#5145)

* feat(backend): Permissions for decision definition deletion endpoint (#5148)

feat(backend): Permissions for decision definition deletion endpoint

- added DELETE permission check

Closes #5054

* feat(api): Add parentFlowNodeInstanceKey to process instance endpoint. #4971 (#5149)

* feat(backend): Add parentFlowNodeInstanceKey to process instance

feat(backend): Add parentFlowNodeInstanceKey to process instance

- Added field parentFlowNodeInstanceKey

Closes #4971

---------

Co-authored-by: Mihail <122792941+mihail-ca@users.noreply.github.com>

* ci: Fix Browserlist GHA (#5170)

* ci: Fix Browserlist GHA

* chore: Revert to Node 18

* test: fix flaky playwright e2e tests (#5171)

* chore: Update Browserlist DB

* feat(backend): Add handler for DELETE_DECISION_DEFINITION operation (#5157)

* feat(backend): Add handler for DELETE_DECISION_DEFINITION operation

feat(backend): Add handler for DELETE_DECISION_DEFINITION operation

- Added handler

Closes #5036

Co-authored-by: Hüsna Uygur <husna.uygur@camunda.com>

* feat: display success notification on definition deletion (#5152)

* feat: display success notification on definition deletion

* chore: set delete definition feature flags to false

* chore: remove ThemeProvider from tests (#5058)

* chore: copy tests

* tests: update test selectors, remove theme provider

* chore: remove ThemeProvider from tests

* chore: remove most of the remaining ThemeProvider from Carbon tests

---------

Co-authored-by: Hüsna Uygur <husna.uygur@camunda.com>

* chore(gha): dont trigger deploy-preview on closed PRs (#5179)

* fix: fix carbon migration issues (#5161)

* chore: remove legacy e2e tests (#5164)

* chore: remove legacy e2e tests

* chore: remove obsolete line from README

* chore(deps): update dependency @testing-library/jest-dom to v6.1.1 (#5182)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* feat(backend): return `tenantId` in Public API (#5096)

* assign `<default>` tenant to all `tenantId` fields for now
* return `tenantId` in all relevant Public API endpoints

closes #4930

* test: add process instance history e2e tests (#5150)

* test: add process instance history e2e tests

* test: remove unnecessary polls and fix expect

* chore: increase setup time for process instance history

* refactor: use getByRole selector for tree items

* chore: remove legacy components and routes (#5166)

* chore: remove legacy components and routes

* chore: remove unused constants and functions

* chore: remove common-ui (#5167)

* chore: remove old theme (#5168)

* chore: remove unused global styles (#5169)

* chore: remove carbon folders (#5175)

* fix(backend): Duplicate endpoints in Swagger public API (#5185)

fix(backend): Duplicate endpoints in Swagger public API

- updated Swagger documentation

Closes #5095

* fix(deps): update dependency styled-components to v6 (master) (#4933)

* fix(deps): update dependency styled-components to v6

* chore: fix rebase issues

* fix: fix theme switcher

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Hüsna Uygur <husna.uygur@camunda.com>

* fix(deps): update dependency @carbon/elements to v11.28.0 (#5162)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* fix(deps): update dependency @carbon/react to v1.36.0 (#5165)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* fix(deps): update dependency sass to v1.66.1 (#5107)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* fix(deps): update dependency @camunda/camunda-composite-components to v0.1.3 (master) (#5062)

* fix(deps): update dependency @camunda/camunda-composite-components to v0.1.3

* style: strict style override for p

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Hüsna Uygur <husna.uygur@camunda.com>

* fix(deps): update all non-major dependencies (master) (#5141)

* fix(deps): update all non-major dependencies

* chore: fix lint issue

* chore: update playwright version

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Hüsna Uygur <husna.uygur@camunda.com>

* chore(deps): update stefanzweifel/git-auto-commit-action digest to 47a8ad5 (#5172)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* chore: Update Browserlist DB

* chore: add release github actions (#5105)

* chore: add release github actions

* chore: use password-stdin for docker login

* chore: create release using github token and upload artifacts to operate repo

* chore: remove unused commented plugins

* chore: remove javaVersion parameter

* fix(backend): Timeout when taking the backup (#5181)

fix(backend): Timeout when taking the backup

- Added additional check for failure, to keep waiting for backup on timeout exception

Closes #3982

* docs(swagger): Enum values added to object schemas (#5180)

Swagger annotations added for:
Process Instance
- state
Incident
-state
-type
Flownode Instance
-type
-state

Related to https://github.com/camunda/camunda-platform-docs/issues/1486

* Create codeql.yml

* feat(backend): decouple importer/importer-8.3 from Elasticsearch (#5094)

* feat(backend): introduce RecordsReader interface

Related with #4887

* feat(backend): renamed IncidentPostImportAction

Related with #4887

* feat(backend): move ELS related methods from FlowNodeInstanceZeebeRecordProcessor to FlowNodeStore

Related with #4887

* fix(backend-test): fix import error

Related with #4887

* feat(backend): remove ELS from ListViewZeebeRecordProcessor (importer-8.3)

Related with #4887

* feat(backend): remove ELS from ProcessZeebeRecordProcessor (importer-8.3)

Related with #4887

* feat(backend): remove ELS from ListView and ProcessZeebeRecordProcessor

- remove ElasticsearchQueries
- rename ElasticsearchBulkProcessor to ImportBulkProcessor

Related with #4887

* fix(backend): use Zeebe Record not java...Record

Related with #4887

* fix(backend-test): use OperateZeebeIntegrationTest in ReindexIT

Related with #4887

* refactor: get rid of node-fetch dependency (#5186)

* fix: add request mocks to modification test (#5190)

* chore: split tests

* test: mock requests before applying modifications

* chore: fix act warnings for ProcessInstance/modifications.test.tsx

* test: fix act warning

---------

Co-authored-by: Hüsna Uygur <husna.uygur@camunda.com>

* feat(backend): API endpoint for process definition deletion (#5197)

feat(backend): API endpoint for process definition deletion

- added REST endpoint and test
- added batch operation for process definition deletion

Closes #4076

* feat(backend): add `tenantId` to `POST /api/process-instances` (#5202)

* return `tenantId` for each process instance
* allow filtering by `tenantId`

closes #5099

* feat: configuration flag to enable/disable multi tenancy (#5210)

* chore(preview-env): Add a new workflow to clean up preview environments (#5153)

* feat: add weekly docker image workflow (#5215)

* ci: add weekly-internal-docker-images.yaml

* fix: use correct cron notation

* ci: use quotes for cron job

* ci: update workflow

Use correct docker image. Set the docker tag correctly.

* Update workload-identity-provider and service_account

* ci: add permissions

Add missing permissions to workflow
https://stackoverflow.com/questions/73626841/google-github-actions-auth-failed-with-did-not-inject-actions-id-token-request/73626864#73626864

* ci: checkout first and add more parameters



* Checkout the repo before login (google auth complained here)
* Add caches for gcr.io

---------

Co-authored-by: Ralf Puchert <49151958+ralfpuchert@users.noreply.github.com>

* chore(deps): bump org.yaml:snakeyaml from 2.0 to 2.2 (#5195)

Bumps [org.yaml:snakeyaml](https://bitbucket.org/snakeyaml/snakeyaml) from 2.0 to 2.2.
- [Commits](https://bitbucket.org/snakeyaml/snakeyaml/branches/compare/snakeyaml-2.2..snakeyaml-2.0)

---
updated-dependencies:
- dependency-name: org.yaml:snakeyaml
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump org.springdoc:springdoc-openapi-starter-webmvc-ui (#5139)

Bumps [org.springdoc:springdoc-openapi-starter-webmvc-ui](https://github.com/springdoc/springdoc-openapi) from 2.1.0 to 2.2.0.
- [Release notes](https://github.com/springdoc/springdoc-openapi/releases)
- [Changelog](https://github.com/springdoc/springdoc-openapi/blob/main/CHANGELOG.md)
- [Commits](https://github.com/springdoc/springdoc-openapi/compare/v2.1.0...v2.2.0)

---
updated-dependencies:
- dependency-name: org.springdoc:springdoc-openapi-starter-webmvc-ui
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump com.auth0:jwks-rsa from 0.22.0 to 0.22.1 (#5023)

Bumps [com.auth0:jwks-rsa](https://github.com/auth0/jwks-rsa-java) from 0.22.0 to 0.22.1.
- [Release notes](https://github.com/auth0/jwks-rsa-java/releases)
- [Changelog](https://github.com/auth0/jwks-rsa-java/blob/master/CHANGELOG.md)
- [Commits](https://github.com/auth0/jwks-rsa-java/compare/0.22.0...0.22.1)

---
updated-dependencies:
- dependency-name: com.auth0:jwks-rsa
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* feat: store user's tenants in session (#5214)

* feat(backend): add tenantId to `GET /api/decisions/grouped` (#5238)

* change GET to POST to allow request body
* return `tenantId` for each decision group
* allow filtering by `tenantId`

closes #5102

* feat(backend): return tenants in GET `/api/authentications/user` (#5230)

closes #5098

* feat(backend): add `tenantId` to `POST /api/decision-instances` (#5211)

* return `tenantId` for each decision instance
* allow filtering by `tenantId`

closes #5101

* chore(test): mark Elasticsearch changes... (#5241)

not to lose when implementing Opensearch

* chore(deps): bump org.testcontainers:elasticsearch from 1.18.3 to 1.19.0 (#5221)

Bumps [org.testcontainers:elasticsearch](https://github.com/testcontainers/testcontainers-java) from 1.18.3 to 1.19.0.
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.18.3...1.19.0)

---
updated-dependencies:
- dependency-name: org.testcontainers:elasticsearch
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump version.micrometer from 1.11.2 to 1.11.3 (#5218)

Bumps `version.micrometer` from 1.11.2 to 1.11.3.

Updates `io.micrometer:micrometer-registry-prometheus` from 1.11.2 to 1.11.3
- [Release notes](https://github.com/micrometer-metrics/micrometer/releases)
- [Commits](https://github.com/micrometer-metrics/micrometer/compare/v1.11.2...v1.11.3)

Updates `io.micrometer:micrometer-core` from 1.11.2 to 1.11.3
- [Release notes](https://github.com/micrometer-metrics/micrometer/releases)
- [Commits](https://github.com/micrometer-metrics/micrometer/compare/v1.11.2...v1.11.3)

---
updated-dependencies:
- dependency-name: io.micrometer:micrometer-registry-prometheus
  dependency-type: direct:development
  update-type: version-update:semver-patch
- dependency-name: io.micrometer:micrometer-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump license-maven-plugin from 4.1 to 4.2 (#4289)

Bumps license-maven-plugin from 4.1 to 4.2.

---
updated-dependencies:
- dependency-name: com.mycila:license-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump com.auth0:mvc-auth-commons from 1.9.5 to 1.10.0 (#4973)

Bumps [com.auth0:mvc-auth-commons](https://github.com/auth0/auth0-java-mvc-common) from 1.9.5 to 1.10.0.
- [Release notes](https://github.com/auth0/auth0-java-mvc-common/releases)
- [Changelog](https://github.com/auth0/auth0-java-mvc-common/blob/master/CHANGELOG.md)
- [Commits](https://github.com/auth0/auth0-java-mvc-common/compare/1.9.5...1.10.0)

---
updated-dependencies:
- dependency-name: com.auth0:mvc-auth-commons
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump semver dependency (#5248)

* test: add visual regression tests for dashboard page (#5194)

* test: add visual regression tests for dashboard page

* refactor: simplify function type

* test: add visual regression tests for decision detail page (#5196)

* test: add visual regression tests for processes page (#5198)

* test: add visual regression tests for processes page

* refactor: simplify function type

* test: add visual regression tests for decisions page (#5204)

* test: add visual regression tests for decisions page

* refactor: simplify function type

* chore: update camunda composite components (#5257)

* feat(backend): expose `multiTenancyEnabled` in `client-config.json` (#5224)

* feat(backend): expose `multiTenancyEnabled` in `client-config.json`

closes #5223

* chore(test): fix tests

* feat(backend): allow configuring where to read parent data from (#5203)

* feat(backend): allow configuring where to read parent data from

* chore(test): mark Elasticsearch changes...

not to lose when implementing Opensearch

* feat: get tenants for given M2M token from identity (#5242)

* chore: delete unnecessary warning (#5261)

* chore: Update Browserlist DB

* feat(backend): add `tenantId` to `GET /api/processes/grouped` (#5222)

* feat(backend): add `tenantId` to `GET /api/processes/grouped`

* change GET to POST to allow request body
* return `tenantId` for each process group
* allow filtering by `tenantId`

closes #5100

* chore(backend): extend test case

* fix(test): fix test to use POST method instead of GET

* chore(test): fix tests

* chore(deps): bump version.spring.boot from 3.1.2 to 3.1.3 (#5246)

Bumps `version.spring.boot` from 3.1.2 to 3.1.3.

Updates `org.springframework.boot:spring-boot-dependencies` from 3.1.2 to 3.1.3
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.1.2...v3.1.3)

Updates `org.springframework.boot:spring-boot-maven-plugin` from 3.1.2 to 3.1.3
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.1.2...v3.1.3)

---
updated-dependencies:
- dependency-name: org.springframework.boot:spring-boot-dependencies
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.springframework.boot:spring-boot-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(ci): remove PVCs from stage env config (#5264)

* fix(backend-sec): use decisionDefinitionId as Long (#5247)

* fix(backend-sec): use decisionDefinitionId as Long

* feat(backend): use ValidLong for validating decisionDefinitionId

- Use the old way to for error message in permission check

* chore(project): use Sunday as first day in week (#5270)

* test: add visual regression tests for process instance page (#5207)

* test: add visual regression tests for process instance page

* refactor: simplify function type

* refactor: reuse mockResponses in error cases

* test: add visual regression tests for modifications (#5209)

* test: check visible items after scrolling within child nodes (#5266)

* chore(ci): remove PVCs from stage env config (#5282)

* feat: enable decision definition deletion in UI (#5229)

* chore: remove mock handlers for decision definition deletion

* chore: remove feature flag

* fix(preview-env): Run the cleanup job in preview-env-deploy workflow only on 'pull_request' events (#5289)

* chore: update Zeebe and Identity to 8.3.0-alpha5 (#5302)

* chore: update Zeebe and Identity to 8.3.0-alpha5

* chore: update docker images in identity docker compose file

* chore: update CHANGELOG.md

* [maven-release-plugin] prepare release 8.3.0-alpha5

* [maven-release-plugin] prepare for next development iteration

* Update CHANGELOG.md

moved *deps from bugfixes section to chore

* chore: update Zeebe and Identity to 8.3.0-alpha6 (#5312)

* chore: update CHANGELOG.md

* [maven-release-plugin] prepare release 8.3.0-alpha6

* [maven-release-plugin] prepare for next development iteration

* chore: update snapshots for visual regression tests (#5320)

* chore: change variable value field to text area (#5239)

* chore(deps): bump version.elasticsearch from 7.17.12 to 7.17.13 (#5304)

Bumps `version.elasticsearch` from 7.17.12 to 7.17.13.

Updates `org.elasticsearch.client:elasticsearch-rest-high-level-client` from 7.17.12 to 7.17.13
- [Release notes](https://github.com/elastic/elasticsearch/releases)
- [Changelog](https://github.com/elastic/elasticsearch/blob/main/CHANGELOG.md)
- [Commits](https://github.com/elastic/elasticsearch/compare/v7.17.12...v7.17.13)

Updates `org.elasticsearch.client:elasticsearch-rest-client` from 7.17.12 to 7.17.13
- [Release notes](https://github.com/elastic/elasticsearch/releases)
- [Changelog](https://github.com/elastic/elasticsearch/blob/main/CHANGELOG.md)
- [Commits](https://github.com/elastic/elasticsearch/compare/v7.17.12...v7.17.13)

Updates `org.elasticsearch:elasticsearch-x-content` from 7.17.12 to 7.17.13
- [Release notes](https://github.com/elastic/elasticsearch/releases)
- [Changelog](https://github.com/elastic/elasticsearch/blob/main/CHANGELOG.md)
- [Commits](https://github.com/elastic/elasticsearch/compare/v7.17.12...v7.17.13)

---
updated-dependencies:
- dependency-name: org.elasticsearch.client:elasticsearch-rest-high-level-client
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.elasticsearch.client:elasticsearch-rest-client
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.elasticsearch:elasticsearch-x-content
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump org.mockito:mockito-core from 5.4.0 to 5.5.0 (#5220)

Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.4.0 to 5.5.0.
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.4.0...v5.5.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: Update Browserlist DB

* feat: filter by current tenants when using internal api (#5243)

* task: provide a tenant aware ES client

* feat: apply tenant check when using internal api

* fix: rethrow runtime exceptions

* test: fix DecisionIT test by authenticate for all tenants

* feat: apply tenant check when using public api (#5244)

* chore: set IS_VARIABLE_VALUE_IN_FILTER_ENABLED to false (#5336)

* fix(auth): even in `sso-auth` profile we need to create Identity (#5337)

closes #5269

* feat(api): add `tenantId` parameter to Public API endpoints (#5303)

* feat(api): add `tenantId` parameter to Public API endpoints

closes #4859

* test(api): add `tenantId` parameter to Public API endpoints

* feat: display process definition id on top of diagram (#5321)

* feat: display process definition id on top of diagram

* fix: display correct id

* style: update tooltip text

* feat: display decision definition id on top of diagram (#5322)

* feat: display decision definition id on top of diagram

* fix: display correct id

* style: update tooltip text

* feat: add tenant filter to processes page (#5277)

* feat: add tenant filter to processes page

* refactor: rename accumulator

* refactor: remove unnecessary wrapper

* refactor: remove default value for c8links

* style: change option All to All versions for version filter

* refactor: fix type for userdto

* chore: remove user api mock

* feat: add tenant filter to decisions page (#5292)

* feat: add tenant filter to decisions page

* style: change option All to All versions for version filter

* chore(deps): update all non-major dependencies (#4983)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* feat: display tenant column in processes list (#5323)

* feat: display tenant column in processes list

* refactor: rename boolean value for displaying tenant column

* chore: remove user api mock

* feat: display tenant column in decisions list (#5324)

* feat: display tenant column in decisions list

* refactor: rename boolean value for displaying tenant column

* chore: use POST instead of GET for grouped processes endpoint (#5328)

* feat: display tenant column in decisions list

* refactor: rename boolean value for displaying tenant column

* chore: use POST instead of GET for grouped processes endpoint

* chore(backend): update base image version (#5363)

* chore(backend): update base image version

* chore(Dockerfile): update base image digest

* style: update process definition deletion warning text (#5268)

* style: update process definition deletion warning text

* chore: set IS_PROCESS_DEFINITION_DELETION_ENABLED to true

* chore: set IS_PROCESS_DEFINITION_DELETION_ENABLED to false

* fix(backend): check security context for tenant check (#5373)

One and the same code may be reused in Internal API calls (withing security context) and in importer (no security context). We need to check that in order for tenant check works for both cases.

* Update Public Sync (#5372)

* fix(deps): update dependency bpmn-js to v14 (master) (#5228)

* fix(deps): update dependency bpmn-js to v14

* chore: set deferUpdate to true

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Patrick Dehn <patrick.dehn@camunda.com>

* chore: add mixpanel events for definition deletion (#5259)

* fix(backend): decrease refresh period for resource authorizations (#5341)

closes #5339

* feat(backend): check tenant when scheduling single operations (#5331)

* feat(backend): check tenant when scheduling single operations

closes #5285

* fix(test): fix test

* feat(backend): add `tenantId` parameter to usage metrics index (#5332)

* feat(backend): add `tenantId` parameter to usage metrics index

closes #5260

* fix(test): fix migration packages

* fix(migration): assign default tenant to old metrics

* style: add tenant column in pid page and update version link (#5371)

* style: add tenant column in pid page and update version link

* refactor: reuse title for aria-label

* test: add assertion for version link

* refactor: get columns from within header component

* chore: remove mocks

* fix: fix double refetch in decisions page on header click or refresh (#5365)

* fix: fix double refetch in decisions page on header click or refresh

* refactor: improve fetch decisions logic

* style: disable delete definition button if process has running instances (#5338)

* style: disable delete definition button if process has running instances

* refactor: use async function in useEffect

* chore: set IS_PROCESS_DEFINITION_DELETION_ENABLED to false

* feat(importer): read tenant from zeebe records (#5330)

* feat(backend): read `tenantId` from Zeebe records

closes #4778

* fix(backend): fix VariableEntity class and add tenant when generating data

closes #4778

* fix(test): fix tests

* fix(tests): ignore tests temporary

These tests are failing because multi-tenancy is not yet ready on Zeebe side

* fix(backend): add more tenant support in Internal API (#5382)

* fix(backend): add more tenant support in Internal API

* fix response from `GET /api/incidents/byError to include tenantId`
* fix response from `GET /api/incidents/byProcess to include tenantId`
* implement sorting by tenantId in `POST /api/process-instances endpoint`
* return tenantId in `GET /api/decision-instances/{id}`

closes #5370

* fix(backend): fix typo

* fix(backend): sort by tenantId

+ tests

* fix(backend): fix "incidents by error" endpoint

* fix(backend): filter vairables by user tenants (#5391)

closes #4860

* feat(backend): filter variables by IN values (#5399)

closes #5392

* chore(migration): use more safe map key (#5405)

This is a pure technical change as it does not affect any logic or APIs. The purpose is to avoid collisions in map key.

* chore: Update Browserlist DB

* feat(feature-flagged): add multiple variable values textarea (#5307)

* feat(feature-flagged): add multiple variable values textarea

* chore: add tests

* chore: remove unnecessary test

* chore: add feature flag to test

* chore: remove unnecessary feature flag check

* chore: rename getVariableValues -> getValidVariableValues

* chore: set IS_VARIABLE_VALUE_IN_FILTER_ENABLED to false

* feat(feature-flagged): add multiple variable values modal (#5316)

* feat(feature-flagged): add multiple variable values modal

* test: improve tests

* chore: reuse error message

* chore: remove unnecessary isInvisible check

* chore: update tracking variants

* style: remove textarea rows

* chore: add cdn.jsdelivr.net to connect-src directive

* style: update placeholder text and error message

* chore: don't clear input field on multiple toggle

* chore: trigger validation after changing multiple mode

* test: skip test

* fix(backend): add TaskStore to Opensearch branch

* fix(backend): implement new signatur in MetricsStore

* fix(backend): fix StatisticsReader

* fix(backend): fix usage of QueryHelper

* fix(backend): use conditional annotation

* feat(backend): add TenantAwareOpensearchClient (not implemented)

* feat(backend): add tenantId in opensearch index

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: mihail-ca <122792941+mihail-ca@users.noreply.github.com>
Co-authored-by: Hüsna Uygur <45518829+huygur@users.noreply.github.com>
Co-authored-by: johanwelgemoed <112612181+johanwelgemoed@users.noreply.github.com>
Co-authored-by: Vinícius Goulart <vinicius.goulart@camunda.com>
Co-authored-by: vsgoulart <vsgoulart@users.noreply.github.com>
Co-authored-by: Hüsna Uygur <husna.uygur@camunda.com>
Co-authored-by: Patrick Dehn <pedesen@users.noreply.github.com>
Co-authored-by: Lars Lange <9141483+Langleu@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Svetlana Dorokhova <svetlana.dorokhova@camunda.com>
Co-authored-by: Roman Smirnov <roman.smirnov@camunda.com>
Co-authored-by: Clément Nero <clement.nero@camunda.com>
Co-authored-by: Christopher Kujawa (Zell) <zelldon91@googlemail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: camundait <camundait@users.noreply.github.com>
Co-authored-by: github-operate-app <ci@operate.camunda.cloud>
Co-authored-by: Quentin <quentin.leroy@camunda.com>
Co-authored-by: Patrick Dehn <patrick.dehn@camunda.com>

* fix(backend): moved current ELS ListViewReader methods to QueryHelper (#5428)

* fix(backend): moved current ELS ListViewReader methods to QueryHelper

* fix(backend): fix typo

* feat(backend): change ProcessReader interface to class due to ProcessStore usage (#5430)

* feat(backend): add OpensearchVariableReader implementation (#5431)

* feat(backend): add sourceExclude to QueryDSL

* feat(backend): add OpensearchVariableReader implementation

* feat(backend): Implement OpensearchFlowNodeInstanceReader (#5432)

Co-authored-by: Oleksandr Kriuchenko <okriuchenko@lohika.com>

* feat(backend): add Opensearch implementation for DecisionReader and DecisionInstanceReader  (#5436)

* feat(backend): add OpensearchDecisionInstanceReader implementation

* feat(backend): add OpensearchReader implementation

* feat(backend): fix constructing SortOrder by String

* fix(backend): use searchUnique and get dateFormat from OpensearchProperties

* fix(backend): remove unused OpensearchUtil

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Oleksandr Kriuchenko <105281107+oleksandr-kriuchenko-lohika@users.noreply.github.com>
Co-authored-by: mihail-ca <122792941+mihail-ca@users.noreply.github.com>
Co-authored-by: Hüsna Uygur <45518829+huygur@users.noreply.github.com>
Co-authored-by: johanwelgemoed <112612181+johanwelgemoed@users.noreply.github.com>
Co-authored-by: Vinícius Goulart <vinicius.goulart@camunda.com>
Co-authored-by: vsgoulart <vsgoulart@users.noreply.github.com>
Co-authored-by: Hüsna Uygur <husna.uygur@camunda.com>
Co-authored-by: Patrick Dehn <pedesen@users.noreply.github.com>
Co-authored-by: Lars Lange <9141483+Langleu@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Svetlana Dorokhova <svetlana.dorokhova@camunda.com>
Co-authored-by: Roman Smirnov <roman.smirnov@camunda.com>
Co-authored-by: Clément Nero <clement.nero@camunda.com>
Co-authored-by: Christopher Kujawa (Zell) <zelldon91@googlemail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Oleksandr Kriuchenko <okriuchenko@lohika.com>
Co-authored-by: camundait <camundait@users.noreply.github.com>
Co-authored-by: github-operate-app <ci@operate.camunda.cloud>
Co-authored-by: Quentin <quentin.leroy@camunda.com>
Co-authored-by: Patrick Dehn <patrick.dehn@camunda.com>
This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/bug Categorizes an issue or PR as a bug scope/broker Marks an issue or PR to appear in the broker section of the changelog severity/mid Marks a bug as having a noticeable impact but with a known workaround
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants