Hello,
I'm trying to setup whole reportportal stack with Kubernetes and the whole app is working, but I have strange issues when I was to delete users/projects. Bellow I'm sending error log:
2026-01-16T13:40:56.310Z ERROR 1 --- [api] [io-8585-exec-10] c.e.t.r.c.a.a.c.IndexerServiceClient : Error deleting index '3'
2026-01-16T13:40:56.339Z ERROR 1 --- [api] [io-8585-exec-10] c.e.t.r.e.rest.DefaultErrorResolver : Validation on '[java.lang.String arg0, java.lang.Iterable<java.lang.String> arg1]' didn't pass:
Reason: Object '3' doesn't match S3 bucket bucket naming convention. Reason: Can't be less than 3 characters. For more info, please refer to https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html.
java.lang.IllegalArgumentException: Validation on '[java.lang.String arg0, java.lang.Iterable<java.lang.String> arg1]' didn't pass:
Reason: Object '3' doesn't match S3 bucket bucket naming convention. Reason: Can't be less than 3 characters. For more info, please refer to https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html.
at org.jclouds.rest.InputParamValidator.validateMethodParametersOrThrow(InputParamValidator.java:72)
at org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:193)
at org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:137)
at org.jclouds.rest.internal.InvokeHttpMethod.toCommand(InvokeHttpMethod.java:189)
at org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:85)
at org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:74)
at org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:45)
at org.jclouds.rest.internal.DelegatesToInvocationFunction.handle(DelegatesToInvocationFunction.java:156)
at org.jclouds.rest.internal.DelegatesToInvocationFunction.invoke(DelegatesToInvocationFunction.java:123)
at jdk.proxy2/jdk.proxy2.$Proxy304.deleteObjects(Unknown Source)
at org.jclouds.s3.blobstore.S3BlobStore.removeBlobs(S3BlobStore.java:341)
at com.epam.ta.reportportal.filesystem.distributed.s3.S3DataStore.deleteAll(S3DataStore.java:155)
at com.epam.ta.reportportal.binary.impl.CommonDataStoreService.deleteAll(CommonDataStoreService.java:58)
at com.epam.ta.reportportal.binary.impl.AttachmentBinaryDataServiceImpl.deleteAllByProjectId(AttachmentBinaryDataServiceImpl.java:202)
at com.epam.ta.reportportal.core.project.impl.DeleteProjectHandlerImpl.deleteProject(DeleteProjectHandlerImpl.java:214)
at com.epam.ta.reportportal.core.project.impl.DeleteProjectHandlerImpl.lambda$bulkDeleteProjects$1(DeleteProjectHandlerImpl.java:149)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
at com.epam.ta.reportportal.core.project.impl.DeleteProjectHandlerImpl.bulkDeleteProjects(DeleteProjectHandlerImpl.java:146)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:360)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:380)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:728)
at com.epam.ta.reportportal.core.project.impl.DeleteProjectHandlerImpl$$SpringCGLIB$$0.bulkDeleteProjects(<generated>)
at com.epam.ta.reportportal.ws.controller.ProjectController.deleteProject(ProjectController.java:176)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:360)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.security.authorization.method.AuthorizationManagerBeforeMethodInterceptor.proceed(AuthorizationManagerBeforeMethodInterceptor.java:268)
at org.springframework.security.authorization.method.AuthorizationManagerBeforeMethodInterceptor.attemptAuthorization(AuthorizationManagerBeforeMethodInterceptor.java:263)
at org.springframework.security.authorization.method.AuthorizationManagerBeforeMethodInterceptor.invoke(AuthorizationManagerBeforeMethodInterceptor.java:196)
at org.springframework.security.config.annotation.method.configuration.DeferringMethodInterceptor.invoke(DeferringMethodInterceptor.java:44)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:728)
at com.epam.ta.reportportal.ws.controller.ProjectController$$SpringCGLIB$$0.deleteProject(<generated>)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:991)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:896)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
at org.springframework.web.servlet.FrameworkServlet.doDelete(FrameworkServlet.java:936)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:659)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:128)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at org.springframework.web.servlet.resource.ResourceUrlEncodingFilter.doFilter(ResourceUrlEncodingFilter.java:66)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108)
at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231)
at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:490)
at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:351)
at org.springframework.security.web.ObservationFilterChainDecorator.lambda$wrapSecured$0(ObservationFilterChainDecorator.java:83)
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:129)
at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:101)
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:241)
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:228)
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:138)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120)
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:241)
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:228)
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:138)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100)
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:241)
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:228)
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:138)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179)
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:241)
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:228)
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:138)
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:241)
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:228)
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:138)
at org.springframework.security.oauth2.server.resource.web.authentication.BearerTokenAuthenticationFilter.doFilterInternal(BearerTokenAuthenticationFilter.java:145)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:241)
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:228)
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:138)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93)
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:241)
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:228)
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:138)
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:241)
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:228)
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:138)
at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82)
at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69)
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:241)
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:228)
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:138)
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:241)
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:228)
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:138)
at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:241)
at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$0(ObservationFilterChainDecorator.java:334)
at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:225)
at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:138)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191)
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$4(HandlerMappingIntrospector.java:267)
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74)
at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:238)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:110)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at org.springframework.web.filter.ForwardedHeaderFilter.doFilterInternal(ForwardedHeaderFilter.java:173)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:165)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:77)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:113)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:83)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:72)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:397)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1778)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:946)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:480)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:57)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.lang.IllegalArgumentException: Object '3' doesn't match S3 bucket bucket naming convention. Reason: Can't be less than 3 characters. For more info, please refer to https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html
at org.jclouds.s3.predicates.validators.BucketNameValidator.exception(BucketNameValidator.java:59)
at org.jclouds.s3.predicates.validators.BucketNameValidator.validate(BucketNameValidator.java:50)
at org.jclouds.s3.predicates.validators.BucketNameValidator.validate(BucketNameValidator.java:33)
at org.jclouds.predicates.Validator.apply(Validator.java:37)
at org.jclouds.rest.InputParamValidator.runPredicatesAgainstArg(InputParamValidator.java:128)
at org.jclouds.rest.InputParamValidator.performParameterValidation(InputParamValidator.java:112)
at org.jclouds.rest.InputParamValidator.validateMethodParametersOrThrow(InputParamValidator.java:70)
... 160 common frames omitted
Regarding my configuration:
Helm chart version: 25.12.19
Service API image tag: 5.15.0
S3 backend: S3 compatible service - we are using minio as DATASTORE_TYPE
Also I can see files in project-data/3 path in the bucket.
This is my final api manifest. Can you tell me what (if anything) is wrong here? Did you have such issue with singleBucket deployment?
apiVersion: v1
kind: Pod
metadata:
spec:
containers:
- env:
- name: SERVER_SERVLET_CONTEXT_PATH
value: /api
- name: COM_TA_REPORTPORTAL_JOB_LOAD_PLUGINS_CRON
value: PT10S
- name: RP_JOBS_BASEURL
value: >-
http://reportportal-reportportal-source-chart-jobs.reportportal.svc.cluster.local:8686/jobs
- name: COM_TA_REPORTPORTAL_JOB_INTERRUPT_BROKEN_LAUNCHES_CRON
value: PT1H
- name: RP_ENVIRONMENT_VARIABLE_PATTERN-ANALYSIS_BATCH-SIZE
value: '100'
- name: RP_ENVIRONMENT_VARIABLE_PATTERN-ANALYSIS_PREFETCH-COUNT
value: '1'
- name: RP_ENVIRONMENT_VARIABLE_PATTERN-ANALYSIS_CONSUMERS-COUNT
value: '1'
- name: RP_ENVIRONMENT_VARIABLE_ALLOW_DELETE_ACCOUNT
value: 'true'
- name: LOGGING_LEVEL_ORG_HIBERNATE_SQL
value: info
- name: RP_REQUESTLOGGING
value: 'false'
- name: JAVA_OPTS
value: >-
-Djava.security.egd=file:/dev/./urandom -XX:+UseG1GC
-XX:MinRAMPercentage=60.0 -XX:InitiatingHeapOccupancyPercent=70
-XX:MaxRAMPercentage=90.0 -XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/tmp
- name: REPORTING_QUEUES_COUNT
value: '10'
- name: REPORTING_PARKINGLOT_TTL_DAYS
value: '7'
- name: REPORTING_CONSUMER_PREFETCHCOUNT
value: '10'
- name: RP_AMQP_ANALYZER-VHOST
value: analyzer
- name: RP_AMQP_PASS
value: rabbitmqpassword
- name: RP_AMQP_API_ADDRESS
value: >-
http://rabbitmq:$(RP_AMQP_PASS)@reportportal-rabbitmq.reportportal.svc.cluster.local:15672/api
- name: RP_AMQP_ADDRESSES
value: >-
amqp://rabbitmq:$(RP_AMQP_PASS)@reportportal-rabbitmq.reportportal.svc.cluster.local:5672
- name: RP_DB_HOST
value: X.X.X.X
- name: RP_DB_PORT
value: '5000'
- name: RP_DB_NAME
value: reportportal
- name: RP_DB_USER
value: reportportal
- name: RP_DB_PASS
valueFrom:
secretKeyRef:
key: db_password
name: reportportal-credentials
- name: DATASTORE_TYPE
value: minio
- name: DATASTORE_ENDPOINT
value: https://s3_endpoint:443
- name: DATASTORE_ACCESSKEY
valueFrom:
secretKeyRef:
key: s3_access_key
name: reportportal-credentials
- name: DATASTORE_SECRETKEY
valueFrom:
secretKeyRef:
key: s3_access_secret
name: reportportal-credentials
- name: RP_FEATURE_FLAGS
value: singleBucket
- name: DATASTORE_DEFAULTBUCKETNAME
value: report-portal-artifacts
- name: MANAGEMENT_HEALTH_ELASTICSEARCH_ENABLED
value: 'false'
image: reportportal/service-api:5.15.0
imagePullPolicy: Always
livenessProbe:
failureThreshold: 10
initialDelaySeconds: 40
periodSeconds: 20
successThreshold: 1
tcpSocket:
port: 8585
timeoutSeconds: 5
name: api
ports:
- containerPort: 8585
protocol: TCP
readinessProbe:
failureThreshold: 20
httpGet:
path: /api/health
port: 8585
scheme: HTTP
initialDelaySeconds: 40
periodSeconds: 20
successThreshold: 1
timeoutSeconds: 5
resources:
limits:
cpu: '1'
memory: 2Gi
requests:
cpu: 500m
memory: 1Gi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: kube-api-access-v8hsr
readOnly: true
dnsPolicy: ClusterFirst
enableServiceLinks: true
initContainers:
- args:
- job-wr
- reportportal-reportportal-source-chart-migrations
image: reportportal/k8s-wait-for:latest
imagePullPolicy: IfNotPresent
name: migrations-waiting-init
resources:
limits:
cpu: 50m
memory: 100Mi
requests:
cpu: 50m
memory: 100Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: kube-api-access-v8hsr
readOnly: true
nodeName: tools-k8s-cluster-worker-b7a7c33
preemptionPolicy: PreemptLowerPriority
priority: 0
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: reportportal
serviceAccountName: reportportal
terminationGracePeriodSeconds: 30
tolerations:
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds: 300
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
volumes:
- name: kube-api-access-v8hsr
projected:
defaultMode: 420
sources:
- serviceAccountToken:
expirationSeconds: 3607
path: token
- configMap:
items:
- key: ca.crt
path: ca.crt
name: kube-root-ca.crt
- downwardAPI:
items:
- fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
path: namespace
status:
conditions:
- lastProbeTime: null
lastTransitionTime: '2026-01-15T10:54:39Z'
status: 'True'
type: PodReadyToStartContainers
- lastProbeTime: null
lastTransitionTime: '2026-01-15T14:15:17Z'
status: 'True'
type: Initialized
- lastProbeTime: null
lastTransitionTime: '2026-01-16T12:20:58Z'
status: 'True'
type: Ready
- lastProbeTime: null
lastTransitionTime: '2026-01-16T12:20:58Z'
status: 'True'
type: ContainersReady
- lastProbeTime: null
lastTransitionTime: '2026-01-15T10:54:38Z'
status: 'True'
type: PodScheduled
containerStatuses:
- containerID: >-
containerd://71836d3d89c3414547aaf069468c3a7b879c386d1351b1bf3d5c5795376019cc
image: docker.io/reportportal/service-api:5.15.0
imageID: >-
docker.io/reportportal/service-api@sha256:51708388d180c2837464b2d624048c57034c4079f31657934b739eb8f3a04fe6
lastState: {}
name: api
ready: true
restartCount: 0
started: true
state:
running:
startedAt: '2026-01-15T14:15:18Z'
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: kube-api-access-v8hsr
readOnly: true
recursiveReadOnly: Disabled
hostIP: 10.110.0.20
hostIPs:
- ip: 10.110.0.20
initContainerStatuses:
- containerID: >-
containerd://ad623d9ce5a4c71c83c7369f91ab5913e79a930bb8e259689de006b766802cbd
image: docker.io/reportportal/k8s-wait-for:latest
imageID: >-
docker.io/reportportal/k8s-wait-for@sha256:bc0e3c3539a237d0c39dfb3be2f76ca7cf39fadbfc03c401dc6144da36b5c9f1
lastState: {}
name: migrations-waiting-init
ready: true
restartCount: 2
started: false
state:
terminated:
containerID: >-
containerd://ad623d9ce5a4c71c83c7369f91ab5913e79a930bb8e259689de006b766802cbd
exitCode: 0
finishedAt: '2026-01-15T14:15:16Z'
reason: Completed
startedAt: '2026-01-15T14:15:15Z'
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: kube-api-access-v8hsr
readOnly: true
recursiveReadOnly: Disabled
phase: Running
podIP: 10.110.21.154
podIPs:
- ip: 10.110.21.154
qosClass: Burstable
startTime: '2026-01-15T10:54:38Z'
I'm also providing Minio related Helm chart config:
storage:
type: minio
secretName: "reportportal-credentials"
accesskeyName: "s3_access_key"
secretkeyName: "s3_access_secret"
endpoint: "provider_endpoint"
ssl: true
port: 443
bucket:
type: single
bucketDefaultName: "report-portal-artifacts"
Hello,
I'm trying to setup whole reportportal stack with Kubernetes and the whole app is working, but I have strange issues when I was to delete users/projects. Bellow I'm sending error log:
Regarding my configuration:
Helm chart version: 25.12.19
Service API image tag: 5.15.0
S3 backend: S3 compatible service - we are using
minioasDATASTORE_TYPEAlso I can see files in
project-data/3path in the bucket.This is my final api manifest. Can you tell me what (if anything) is wrong here? Did you have such issue with singleBucket deployment?
I'm also providing Minio related Helm chart config: